Jak připojit chytrou zásuvku D-link DSP-W215 k openhabu
Tutorial o tom, jak udělat aby chytrá zásuvka d-link dsp-w215 byla ovládatelná od jinud než z oficiální aplikace dlink. V mém případě používám Openhab ,ale s menšími úpravami jej lze integrovat do jakékoliv jiné aplikace. Následující tutoriál je pro linux. Ale s malou modifikací by mělo být možné použít i na Windows (NODEJS je multiplatformní).
Big thanks to bikerp – github

What i did:
- Stáhněte kód z následující stránky bikerp github.
- Upravte kód app.js následovně, abyste jej mohli používat s bindingem exec1 v openhabu. (Pro Openhab2 povolte instalaci EXEC pro verzi 1. Zatím moc nevím jak pracovat s EXEC 2.) Musíte zadat PIN_CODE a IP DSP zásuvky.
var soapclient = require('./js/soapclient');
var fs = require('fs');
var OUTPUT_FILE = "result.txt";
var LOGIN_USER = "admin";
var LOGIN_PWD = "PIN_CODE";
var HNAP_URL = "http://IP_OF_DSP/HNAP1";
var POLLING_INTERVAL = 60000;
var args = process.argv.slice(2);
soapclient.login(LOGIN_USER, LOGIN_PWD, HNAP_URL).done(function (status) {
if (!status) {
throw "Login failed!";
}
if (status != "success") {
throw "Login failed!";
}
if (args == "on") {
soapclient.on();
}
if (args == "off"){
soapclient.off();
}
if (args == "power"){
soapclient.consumption().done(function (power) {console.log(power);});
}
if (args == "total"){
soapclient.totalConsumption().done(function (power) {console.log(power);});
}
if (args == "temp"){
soapclient.temperature().done(function (temperature) {console.log(temperature);});
}
if (args == "state"){
soapclient.state().done(function (state) {
if(state == "true"){
console.log("ON");
} else {
console.log("OFF");
}
});;
}
});
- Budete také muset nainstalovat NODEJS, aby mohl spustit javascript z terminálu.
curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash - sudo apt-get install -y nodejs
- Spusťte „npm install“ uvnitř adresáře s balíčky package.json a app.js. Tím se lokálně nainstalují všechny potřebné moduly.
- Nastavte items v openhabu. Zde můžete vidět nastavení pro Switch má 1 vstupní hodnotu a dva výstupy. Dva výstupy z openhabu jsou jednoduše ON a OFF. Vstup kontrolujte každých 10 sekund aktuální stav zásuvky v případě vypnutí zásuvky tlačítkem.
- V následujícím příkladu adresář /usr/share/openhab/dlink_dsp/ je cesta, kde jsem rozbalil obsah z bikerp github.
Group DSPW215_group "Dlink Plug" <poweroutlet>
Group DSPW215_stats
Switch DSPW215 "Plug switch" <poweroutlet> (DSPW215_group) { exec="<[/bin/sh@@-c@@cd /etc/openhab2/dlink_dsp/;node app.js state:30000:REGEX((.*?))] >[ON:/bin/sh@@-c@@cd /etc/openhab2/dlink_dsp/;node app.js on] >[OFF:/bin/sh@@-c@@cd /etc/openhab2/dlink_dsp/;node app.js off]" }
Number DSPW215_power "Plug current [%.2f W]" <chart> (DSPW215_group,DSPW215_stats) { exec="<[/bin/sh@@-c@@cd /etc/openhab2/dlink_dsp/;node app.js power:90000:REGEX((.*?))]" }
Number DSPW215_total "Plug total [%.2f KWh]" <chart> (DSPW215_group,DSPW215_stats) { exec="<[/bin/sh@@-c@@cd /etc/openhab2/dlink_dsp/;node app.js total:90000:REGEX((.*?))]" }
Number DSPW215_temperature "Plug Temperature: [%.2f C]" <temperature> (DSPW215_group) { exec="<[/bin/sh@@-c@@cd /etc/openhab2/dlink_dsp/;node app.js temp:60000:REGEX((.*?))]" }
- Zde je soubor the default.sitemap
sitemap default label="My Home" {
Frame label="Living room" {
Group item=DSPW215_group
}
}
- A výsledek na stránce (Můžete také vytvořit Charts a rules pro vytvoření časovače)

Zde je timer.rules
import org.joda.time.*
import org.openhab.model.script.actions.Timer
import org.openhab.core.library.types.*
var Timer masterAlarmTime = null
var Timer masterAlarmTimeOFF = null
rule "Initialize DSPW215 items"
when
System started
then
Alarm_DSPW215TimeMins.state
end
rule "DSPW215 alarm time"
when
Item Alarm_DSPW215TimeMins received update or
Item Alarm_DSPW215TimeMinsOFF received update
then
var int minutes = (Alarm_DSPW215TimeMins.state as DecimalType).intValue()
var int minutesOFF = (Alarm_DSPW215TimeMinsOFF.state as DecimalType).intValue()
if (masterAlarmTime != null)
masterAlarmTime.cancel()
if (masterAlarmTimeOFF != null)
masterAlarmTimeOFF.cancel()
// work out when the alarm is to fire - start from midnight
var DateTime alarmTime = new DateTime()
// add the number of minutes selected
alarmTime = alarmTime.plusMinutes(minutes)
// create a timer to execute the alarm at the specified time
masterAlarmTime = createTimer(alarmTime) [|
if (Alarm_DSPW215.state == ON)
Alarm_DSPW215Event.sendCommand(ON)
]
Alarm_DSPW215Time.sendCommand(String::format("%02d:%02d", alarmTime.getHourOfDay(), alarmTime.getMinuteOfHour()))
//To turn off
var DateTime alarmTimeOFF = alarmTime.plusMinutes(minutesOFF+5)
masterAlarmTimeOFF = createTimer(alarmTimeOFF) [|
if (Alarm_DSPW215.state == ON)
Alarm_DSPW215Event.sendCommand(OFF)
]
// update the alarm display time
Alarm_DSPW215TimeOFF.sendCommand(String::format("%02d:%02d", alarmTimeOFF.getHourOfDay(), alarmTimeOFF.getMinuteOfHour()))
end
rule "DSPW215 alarm"
when
Item Alarm_DSPW215Event received command ON
then
DSPW215.sendCommand(ON)
end
rule "DSPW215 alarm OFF"
when
Item Alarm_DSPW215Event received command OFF
then
DSPW215.sendCommand(OFF)
Alarm_DSPW215.sendCommand(OFF)
end