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

  • Starter

    Hallo,

    wo muß ich das Script einsetzen um die Werte bzw. die Variablen in Blocky weiter zu verarbeiten?

Suggested Topics

2.3k
Online

35.3k
Users

41.2k
Topics

567.0k
Posts