Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Helios KWL mit Easy Controls über HTTP auslesen

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    16
    1
    1.6k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    848

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.1k

Helios KWL mit Easy Controls über HTTP auslesen

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
javascript
3 Beiträge 3 Kommentatoren 2.6k Aufrufe 1 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • M Offline
    M Offline
    mabas
    schrieb am zuletzt editiert von Jey Cee
    #1

    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

    Produktiv mit ioBroker/vis auf ASRock Beebox

    >40 Homematic-Geräte, Sonos, 3xFernseher, Lightify, Hue, Yahka, Weinor Markise, Sonnenbatterie, Feinstaubsensor, bisher erst ein 9" Display mit vis

    1 Antwort Letzte Antwort
    0
    • TimmerxT Offline
      TimmerxT Offline
      Timmerx
      schrieb am zuletzt editiert von
      #2

      Hallo mbas,

      das sieht ja schon mal super aus.

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

      MfG TimmerX

      V 1 Antwort Letzte Antwort
      0
      • TimmerxT Timmerx

        Hallo mbas,

        das sieht ja schon mal super aus.

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

        MfG TimmerX

        V Offline
        V Offline
        Viper3500
        schrieb am zuletzt editiert von
        #3

        Hallo,

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

        1 Antwort Letzte Antwort
        0
        Antworten
        • In einem neuen Thema antworten
        Anmelden zum Antworten
        • Älteste zuerst
        • Neuste zuerst
        • Meiste Stimmen


        Support us

        ioBroker
        Community Adapters
        Donate

        791

        Online

        32.6k

        Benutzer

        82.1k

        Themen

        1.3m

        Beiträge
        Community
        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
        ioBroker Community 2014-2025
        logo
        • Anmelden

        • Du hast noch kein Konto? Registrieren

        • Anmelden oder registrieren, um zu suchen
        • Erster Beitrag
          Letzter Beitrag
        0
        • Home
        • Aktuell
        • Tags
        • Ungelesen 0
        • Kategorien
        • Unreplied
        • Beliebt
        • GitHub
        • Docu
        • Hilfe