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
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden