Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Helios KWL mit Easy Controls über HTTP auslesen

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Helios KWL mit Easy Controls über HTTP auslesen

    This topic has been deleted. Only users with topic management privileges can see it.
    • M
      mabas last edited by Jey Cee

      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

      1 Reply Last reply Reply Quote 0
      • Timmerx
        Timmerx last edited by

        Hallo mbas,

        das sieht ja schon mal super aus.

        Hast du das Skript schon weiterentwickelt? Bzg. Login und der Bypassfunktion?

        MfG TimmerX

        V 1 Reply Last reply Reply Quote 0
        • V
          Viper3500 @Timmerx last edited by

          Hallo,

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

          1 Reply Last reply Reply Quote 0
          • First post
            Last post

          Support us

          ioBroker
          Community Adapters
          Donate

          698
          Online

          31.8k
          Users

          79.9k
          Topics

          1.3m
          Posts

          javascript
          3
          3
          2500
          Loading More Posts
          • Oldest to Newest
          • Newest to Oldest
          • Most Votes
          Reply
          • Reply as topic
          Log in to reply
          Community
          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
          The ioBroker Community 2014-2023
          logo