NEWS
Helios KWL mit Easy Controls über HTTP auslesen
-
Hallo zusammen,
hat doch noch geklappt. Ich bekomme alle Infos aus der Anlage heraus. Alles ziemlich quick´n dirty. Verbesserungs- und Optimierungsvorschläge jederzeit und gerne.
Es müssen die NPM Module needle und xml2js bei dem Javascript-Adapter hinzugefügt werden.
createState('KWL.stufe', 0, {type : "number"}); createState('KWL.stufeProzent', 0, {type : "number"}); createState('KWL.bypass', false, {type : "boolean"}); createState('KWL.off', false, {type : "boolean"}); createState('KWL.bad.temperature', 0, {type : "number"}); createState('KWL.bad.humitity', 0, {type : "number"}); createState('KWL.arbeitszimmer.temperature', 0, {type : "number"}); createState('KWL.arbeitszimmer.humitity', 0, {type : "number"}); createState('KWL.studio.airQuality', 0, {type : "number"}); createState('KWL.temperatur.außenluft', 0, {type : "number"}); createState('KWL.temperatur.zuluft', 0, {type : "number"}); createState('KWL.temperatur.fortluft', 0, {type : "number"}); createState('KWL.temperatur.abluft', 0, {type : "number"}); var needle = require('needle'); function loginByNeedle() { var options = { headers: { "Host" : "[http://HeliosKWL](http://HeliosKWL)", "User-Agent": "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.89 Safari/537.36", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "Accept-Language": "de,en-US;q=0.7,en;q=0.3", "Accept-Encoding": "gzip, deflate", "Referer": "[http://HeliosKWL/](http://HeliosKWL/)", "Content-Length": "15", "Connection": "keep-alive"} }; needle.post('[http://HeliosKWL/info.htm](http://HeliosKWL/info.htm)', "v00402=****KENNWORT****", options, function(err, response) { if (err) { log('Shoot! Something is wrong: ' + err.message); } else { readWithNeedle(); } }); } function readWithNeedle() { var options = { headers: { "Host": "HeliosKWL", "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "Accept-Language": "de,en-US;q=0.7,en;q=0.3", "Accept-Encoding": "gzip, deflate", "Referer": "[http://HeliosKWL/anzeig.htm](http://HeliosKWL/anzeig.htm)", "Content-Length": "20", "Content-Type": "text/plain;charset=UTF-8", "Connection": "keep-alive"} }; needle.post('[http://HeliosKWL/data/werte8.xml](http://HeliosKWL/data/werte8.xml)', "xml=/data/werte8.xml", options, function(err, response, body) { if (err) { log('Shoot! Something is wrong: ' + err.message); } else { var idsAsString; var valuesAsString; idsAsString = JSON.stringify(body.PARAMETER.ID); valuesAsString = JSON.stringify(body.PARAMETER.VA); var keys = idsAsString.split(/,/); var values = valuesAsString.split(/,/); var temp = String(values[keys.indexOf("\"v00104\"")]); setState("javascript.1.KWL.temperatur.außenluft"/*KWL.außentemperatur*/, parseFloat(temp.slice(1, temp.length -1))); temp = String(values[keys.indexOf("\"v00105\"")]); setState("javascript.1.KWL.temperatur.zuluft"/*KWL.temperatur.zuluft*/, parseFloat(temp.slice(1, temp.length -1))); temp = String(values[keys.indexOf("\"v00106\"")]); setState("javascript.1.KWL.temperatur.fortluft"/*KWL.temperatur.fortluft*/, parseFloat(temp.slice(1, temp.length -1))); temp = String(values[keys.indexOf("\"v00107\"")]); setState("javascript.1.KWL.temperatur.abluft"/*KWL.temperatur.abluft*/, parseFloat(temp.slice(1, temp.length -1))); temp = String(values[keys.indexOf("\"v00111\"")]); setState("javascript.1.KWL.bad.humitity"/*KWL.bad.humitity*/, parseFloat(temp.slice(1, temp.length -1))); temp = String(values[keys.indexOf("\"v00112\"")]); setState("javascript.1.KWL.arbeitszimmer.humitity"/*KWL.arbeitszimmer.humitity*/, parseFloat(temp.slice(1, temp.length -1))); temp = String(values[keys.indexOf("\"v00119\"")]); setState("javascript.1.KWL.bad.temperature"/*KWL.bad.temperature*/, parseFloat(temp.slice(1, temp.length -1))); temp = String(values[keys.indexOf("\"v00120\"")]); setState("javascript.1.KWL.arbeitszimmer.temperature"/*KWL.arbeitszimmer.temperature*/, parseFloat(temp.slice(1, temp.length -1))); temp = String(values[keys.indexOf("\"v00136\"")]); setState("javascript.1.KWL.studio.airQuality"/*KWL.studio.airQuality*/, parseFloat(temp.slice(1, temp.length -1))); temp = String(values[keys.indexOf("\"v00102\"")]); setState("javascript.1.KWL.stufe"/*KWL.stufe*/, parseFloat(temp.slice(1, temp.length -1))); temp = String(values[keys.indexOf("\"v00103\"")]); setState("javascript.1.KWL.stufeProzent"/*KWL.stufeProzent*/, parseFloat(temp.slice(1, temp.length -1))); temp = String(values[95]); //die undokumentierte ID v02119 if (temp === 0) { setState("javascript.1.KWL.bypass"/*KWL.bypass*/, false); } else { setState("javascript.1.KWL.bypass"/*KWL.bypass*/, true); } } }); } loginByNeedle(); // bei Scriptstart schedule("* * * * *", loginByNeedle);
ToDo:
-
es erfolgt unnötigerweise aktuell jede Minute ein Login; das kann optimiert werden
-
SET-Funktionen gewünscht: Anlage ausschalten, Bypass-Automatik übersteuern und Bypass via Iobroker öffnen/schließen
-
-
Hallo mbas,
das sieht ja schon mal super aus.
Hast du das Skript schon weiterentwickelt? Bzg. Login und der Bypassfunktion?
MfG TimmerX
-
Hallo,
wo muß ich das Script einsetzen um die Werte bzw. die Variablen in Blocky weiter zu verarbeiten?