Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. moehre

    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

    M
    • Profile
    • Following 0
    • Followers 0
    • Topics 2
    • Posts 8
    • Best 2
    • Groups 1

    moehre

    @moehre

    Starter

    2
    Reputation
    78
    Profile views
    8
    Posts
    0
    Followers
    0
    Following
    Joined Last Online

    moehre Follow
    Starter

    Best posts made by moehre

    • [Gelöst] Helios KWL - Zugriff auf xml

      Moin zusammen,

      ich habe kürzlich hier schon mein Problem geschildert. Jetzt geht es um einen anderen Ansatz: Ich möchte die Daten der Helios aus den xmls, befindliche auf dem lokalen Webserver des Gerätes, auslesen.

      Dazu nutze ich:

      var request = require('request');
       
      function doWork() {
      
      request('http://192.168.178.22/data/werte8.xml', function (error, response, body) {
      
      	if (error) {
      		log("Fehler beim Herunterladen: " + error);
      		return;
      	} 
      
      	const regex = /v00104<\/ID>\n<VA>(\d+.\d+)/gm;
      
      	try {
      		const atemp = regex.exec(body);
       
      		createState("HeliosKWL.Aussentemperatur", atemp, true, {
      			type: "number",
      			unit: "°C",
          		role: "value.temperature"
      		});
      
      	} catch (e) {
      		log("Fehler beim Auswerten: " + error);
      	}
      
      });
      
      };
      
       schedule('*/5 * * * * *', doWork);
      

      Dank an AlCalzone, dessen Code ich hier nutze 👍
      Angeblich sei es mit xml2js einfacher, aber das bekomme ich nicht hin. Wer sich damit auseinandersetzen mag, gerne 🙂

      2 Probleme:

      1. Der lokale Zugriff auf die Helios ist passwortgeschützt. Kein Nutzername. Wie kann ich das Script so erweitern, dass es sich vorab auf einer anderen Seite einloggt und danach die o.g. xml verarbeitet?

      2. Mir ist aufgefallen, dass ich die genannte Datei "werte8.xml" nicht im Browser aufrufen kann. Auch keine andere "werteX.xml". Die sind für mich nur per Debugger (Fiddler oder Mozilla) sichtbar und lesbar. Sonstige xmls aus derselben Quelle kann ich aber aufrufen. Kann das sein? Könnte das zu einem Problem werden? Wie kann ich damit umgehen?

      Danke und Grüße!

      =================================================
      Edit: Titel angepasst

      =================================================
      Edit 2: Um dem Suchenden weiteres Leid zu ersparen: Die Lösung verbirgt sich im Script von @KLVN und findet sich hier: https://github.com/KLVN/ioBroker_Helios-KWL

      =================================================
      Edit 3: Aus dem o.g. Script hat @tombox einen Adapter gebaut, weitere Details hier: https://forum.iobroker.net/topic/47762/test-helios-kwl-v0-0-x

      posted in JavaScript
      M
      moehre
    • RE: [Gelöst] Helios KWL - Zugriff auf xml

      @klvn

      Ich hatte das Projekt jetzt laaange liegen lassen, hauptsächlich, da meine Helios den Geist aufgegeben hat. Jetzt schaue ich mal wieder rein und bin beeindruckt, wie du das umgesetzt hast! Vielen Dank, auch, dass du so umfangreich dokumentierst und Hilfestellung lieferst!

      posted in JavaScript
      M
      moehre

    Latest posts made by moehre

    • RE: Test Helios KWL v0.0.x

      @tombox

      Ich hab da mal was vorbereitet.

      werte1.xml
      <LANG>de</LANG>
      <ID>v01306</ID>
      <ID>v00000</ID>
      <ID>v00001</ID>
      <ID>v00002</ID>
      <ID>v00003</ID>
      <ID>v00004</ID>
      <ID>v00005</ID>
      <ID>v00006</ID>
      <ID>v00007</ID>
      <ID>v00008</ID>
      <ID>v00012</ID>
      <ID>v00013</ID>
      <ID>v00014</ID>
      <ID>v00015</ID>
      <ID>v00016</ID>
      <ID>v00017</ID>
      <ID>v00018</ID>
      <ID>v00019</ID>
      <ID>v00020</ID>
      <ID>v00021</ID>
      <ID>v00022</ID>
      <ID>v00023</ID>
      <ID>v00024</ID>
      <ID>v00025</ID>
      <ID>v00026</ID>
      <ID>v00027</ID>
      <ID>v00028</ID>
      <ID>v00029</ID>
      <ID>v00030</ID>
      <ID>v00031</ID>
      <ID>v00032</ID>
      <ID>v00033</ID>
      <ID>v00034</ID>
      <ID>v00035</ID>
      <ID>v00036</ID>
      <ID>v00037</ID>
      <ID>v00038</ID>
      <ID>v00039</ID>
      <ID>v00040</ID>
      <ID>v00041</ID>
      <ID>v00042</ID>
      <ID>v00043</ID>
      <ID>v00051</ID>
      <ID>v00052</ID>
      <ID>v00053</ID>
      <ID>v01017</ID>
      <ID>v02103</ID>
      <ID>v01071</ID>
      <ID>v01072</ID>
      <ID>v01073</ID>
      <ID>v01074</ID>
      <ID>v01075</ID>
      <ID>v01076</ID>
      <ID>v01077</ID>
      <ID>v01078</ID>
      <ID>v02020</ID>
      <ID>v02021</ID>
      <ID>v02022</ID>
      <ID>v02023</ID>
      <ID>v02024</ID>
      <ID>v02025</ID>
      <ID>v02026</ID>
      <ID>v02027</ID>
      <ID>v02116</ID>
      <ID>v02134</ID>
      <ID>v02137</ID>
      <ID>v02142</ID>
      <ID>v02143</ID>
      <ID>v02144</ID>
      <ID>v02145</ID>
      <ID>v02146</ID>
      <ID>v02147</ID>
      <ID>v02148</ID>
      <ID>v02149</ID>
      <ID>v02150</ID>
      <ID>v02151</ID>
      <ID>v02152</ID>
      
      werte3.xml
      <LANG>de</LANG>
      <ID>v01306</ID>
      <ID>v00091</ID>
      <ID>v00092</ID>
      <ID>v00093</ID>
      <ID>v00094</ID>
      <ID>v00096</ID>
      <ID>v00097</ID>
      <ID>v00098</ID>
      <ID>v00099</ID>
      
      werte4.xml
      <LANG>de</LANG>
      <ID>v01306</ID>
      <ID>v00000</ID>
      <ID>v00001</ID>
      <ID>v00002</ID>
      <ID>v00093</ID>
      <ID>v00094</ID>
      <ID>v00098</ID>
      <ID>v00099</ID>
      <ID>v00101</ID>
      <ID>v00102</ID>
      <ID>v00103</ID>
      <ID>v00601</ID>
      <ID>v00604</ID>
      <ID>v01020</ID>
      
      werte5.xml
      <LANG>de</LANG>
      <ID>v01306</ID>
      <ID>v00000</ID>
      <ID>v00001</ID>
      <ID>v00002</ID>
      <ID>v00201</ID>
      <ID>v00220</ID>
      <ID>v00221</ID>
      <ID>v00222</ID>
      <ID>v00223</ID>
      <ID>v00224</ID>
      <ID>v00225</ID>
      <ID>v00226</ID>
      <ID>v00227</ID>
      <ID>v00228</ID>
      <ID>v00229</ID>
      <ID>v02122</ID>
      <ID>v02123</ID>
      <ID>v02130</ID>
      <ID>v02131</ID>
      
      werte6.xml
      <LANG>de</LANG>
      <ID>v01306</ID>
      <ID>v00601</ID>
      <ID>v00602</ID>
      <ID>v00603</ID>
      <ID>v00604</ID>
      <ID>v00605</ID>
      <ID>v00606</ID>
      <ID>v01050</ID>
      <ID>v01051</ID>
      
      werte7.xml
      <LANG>de</LANG>
      <ID>v01306</ID>
      <ID>v00000</ID>
      <ID>v00001</ID>
      <ID>v00002</ID>
      <ID>v00303</ID>
      <ID>v00304</ID>
      <ID>v00343</ID>
      
      werte8.xml
      <LANG>de</LANG>
      <ID>v01306</ID>
      <ID>v00024</ID>
      <ID>v00033</ID>
      <ID>v00037</ID>
      <ID>v00040</ID>
      <ID>v00092</ID>
      <ID>v00094</ID>
      <ID>v00097</ID>
      <ID>v00099</ID>
      <ID>v00101</ID>
      <ID>v00102</ID>
      <ID>v00103</ID>
      <ID>v00104</ID>
      <ID>v00105</ID>
      <ID>v00106</ID>
      <ID>v00107</ID>
      <ID>v00108</ID>
      <ID>v00109</ID>
      <ID>v00110</ID>
      <ID>v00111</ID>
      <ID>v00112</ID>
      <ID>v00113</ID>
      <ID>v00114</ID>
      <ID>v00115</ID>
      <ID>v00116</ID>
      <ID>v00117</ID>
      <ID>v00118</ID>
      <ID>v00119</ID>
      <ID>v00120</ID>
      <ID>v00121</ID>
      <ID>v00122</ID>
      <ID>v00123</ID>
      <ID>v00124</ID>
      <ID>v00125</ID>
      <ID>v00126</ID>
      <ID>v00128</ID>
      <ID>v00129</ID>
      <ID>v00130</ID>
      <ID>v00131</ID>
      <ID>v00132</ID>
      <ID>v00133</ID>
      <ID>v00134</ID>
      <ID>v00135</ID>
      <ID>v00136</ID>
      <ID>v00137</ID>
      <ID>v00138</ID>
      <ID>v00139</ID>
      <ID>v00140</ID>
      <ID>v00141</ID>
      <ID>v00142</ID>
      <ID>v00143</ID>
      <ID>v00144</ID>
      <ID>v00146</ID>
      <ID>v00201</ID>
      <ID>v00348</ID>
      <ID>v00349</ID>
      <ID>v00601</ID>
      <ID>v00602</ID>
      <ID>v01020</ID>
      <ID>v01050</ID>
      <ID>v01051</ID>
      <ID>v01300</ID>
      <ID>v01301</ID>
      <ID>v01302</ID>
      <ID>v01071</ID>
      <ID>v01072</ID>
      <ID>v01073</ID>
      <ID>v01074</ID>
      <ID>v01075</ID>
      <ID>v01076</ID>
      <ID>v01077</ID>
      <ID>v01078</ID>
      <ID>v01081</ID>
      <ID>v01082</ID>
      <ID>v01083</ID>
      <ID>v01084</ID>
      <ID>v01085</ID>
      <ID>v01086</ID>
      <ID>v01087</ID>
      <ID>v01088</ID>
      <ID>v01091</ID>
      <ID>v01092</ID>
      <ID>v01093</ID>
      <ID>v01094</ID>
      <ID>v01095</ID>
      <ID>v01096</ID>
      <ID>v01097</ID>
      <ID>v01098</ID>
      <ID>v02020</ID>
      <ID>v02021</ID>
      <ID>v02022</ID>
      <ID>v02023</ID>
      <ID>v02024</ID>
      <ID>v02025</ID>
      <ID>v02026</ID>
      <ID>v02027</ID>
      <ID>v02117</ID>
      <ID>v02118</ID>
      <ID>v02119</ID>
      <ID>v02136</ID>
      <ID>v02137</ID>
      <ID>v02142</ID>
      <ID>v02152</ID>
      
      werte9.xml
      <LANG>de</LANG>
      <ID>v01306</ID>
      <ID>v00000</ID>
      <ID>v00001</ID>
      <ID>v00002</ID>
      <ID>v00901</ID>
      <ID>v00920</ID>
      <ID>v00921</ID>
      <ID>v00922</ID>
      <ID>v00923</ID>
      <ID>v00924</ID>
      <ID>v00925</ID>
      <ID>v00926</ID>
      <ID>v00927</ID>
      <ID>v00928</ID>
      <ID>v00929</ID>
      
      werte931.xml
      <LANG>de</LANG>
      <ID>v01306</ID>
      <ID>v00000</ID>
      <ID>v00001</ID>
      <ID>v00002</ID>
      <ID>v00901</ID>
      <ID>v00907</ID>
      <ID>v00920</ID>
      <ID>v00921</ID>
      <ID>v00922</ID>
      <ID>v00923</ID>
      <ID>v00924</ID>
      <ID>v00925</ID>
      <ID>v00926</ID>
      <ID>v00927</ID>
      <ID>v00928</ID>
      <ID>v00929</ID>
      <ID>v00930</ID>
      <ID>v00931</ID>
      <ID>v00932</ID>
      <ID>v00933</ID>
      <ID>v00934</ID>
      <ID>v00935</ID>
      <ID>v00936</ID>
      <ID>v00937</ID>
      <ID>v00938</ID>
      <ID>v00939</ID>
      <ID>v00940</ID>
      <ID>v00941</ID>
      <ID>v00942</ID>
      <ID>v00943</ID>
      <ID>v00944</ID>
      <ID>v00945</ID>
      <ID>v00946</ID>
      <ID>v00947</ID>
      <ID>v00948</ID>
      <ID>v00949</ID>
      <ID>v00950</ID>
      <ID>v00951</ID>
      <ID>v00952</ID>
      <ID>v00953</ID>
      <ID>v00954</ID>
      <ID>v00955</ID>
      <ID>v00956</ID>
      <ID>v00957</ID>
      <ID>v00958</ID>
      <ID>v00959</ID>
      
      werte10.xml
      <LANG>de</LANG>
      <ID>v01306</ID>
      <ID>v01001</ID>
      <ID>v01002</ID>
      <ID>v01003</ID>
      <ID>v01004</ID>
      <ID>v01005</ID>
      <ID>v01006</ID>
      <ID>v01007</ID>
      
      werte11.xml
      <LANG>de</LANG>
      <ID>v01306</ID>
      <ID>v00003</ID>
      <ID>v00004</ID>
      <ID>v00005</ID>
      <ID>v00006</ID>
      <ID>v00007</ID>
      <ID>v00008</ID>
      <ID>v00051</ID>
      <ID>v00052</ID>
      <ID>v00348</ID>
      <ID>v00349</ID>
      <ID>v01101</ID>
      <ID>v01102</ID>
      <ID>v01103</ID>
      <ID>v01104</ID>
      <ID>v01105</ID>
      <ID>v01106</ID>
      <ID>v01108</ID>
      <ID>v01109</ID>
      <ID>v02103</ID>
      <ID>v02116</ID>
      <ID>v02134</ID>
      
      werte12.xml
      <LANG>de</LANG>
      <ID>v01306</ID>
      <ID>v00021</ID>
      <ID>v00022</ID>
      <ID>v00023</ID>
      <ID>v01010</ID>
      <ID>v00024</ID>
      <ID>v00201</ID>
      <ID>v01017</ID>
      <ID>v01019</ID>
      <ID>v01020</ID>
      <ID>v01021</ID>
      <ID>v00053</ID>
      <ID>v01031</ID>
      <ID>v01032</ID>
      <ID>v01033</ID>
      <ID>v01035</ID>
      <ID>v01036</ID>
      <ID>v01037</ID>
      <ID>v01041</ID>
      <ID>v01042</ID>
      <ID>v01200</ID>
      <ID>v02115</ID>
      <ID>v02120</ID>
      <ID>v02121</ID>
      <ID>v02128</ID>
      <ID>v02129</ID>
      
      werte13.xml
      <LANG>de</LANG>
      <ID>v01306</ID>
      <ID>v00012</ID>
      <ID>v00013</ID>
      <ID>v00014</ID>
      <ID>v00015</ID>
      <ID>v00016</ID>
      <ID>v00017</ID>
      <ID>v00018</ID>
      <ID>v00019</ID>
      <ID>v00020</ID>
      <ID>v01050</ID>
      <ID>v01051</ID>
      <ID>v01061</ID>
      <ID>v01062</ID>
      <ID>v01063</ID>
      <ID>v01064</ID>
      <ID>v01065</ID>
      <ID>v01066</ID>
      <ID>v01068</ID>
      
      werte14.xml
      <LANG>de</LANG>
      <ID>v01306</ID>
      <ID>v00025</ID>
      <ID>v00026</ID>
      <ID>v00027</ID>
      <ID>v00028</ID>
      <ID>v00029</ID>
      <ID>v00030</ID>
      <ID>v00031</ID>
      <ID>v00032</ID>
      <ID>v00033</ID>
      <ID>v00034</ID>
      <ID>v00035</ID>
      <ID>v00036</ID>
      <ID>v00037</ID>
      <ID>v00038</ID>
      <ID>v00039</ID>
      <ID>v00040</ID>
      <ID>v00041</ID>
      <ID>v00042</ID>
      <ID>v01071</ID>
      <ID>v01072</ID>
      <ID>v01073</ID>
      <ID>v01074</ID>
      <ID>v01075</ID>
      <ID>v01076</ID>
      <ID>v01077</ID>
      <ID>v01078</ID>
      <ID>v01081</ID>
      <ID>v01082</ID>
      <ID>v01083</ID>
      <ID>v01084</ID>
      <ID>v01085</ID>
      <ID>v01086</ID>
      <ID>v01087</ID>
      <ID>v01088</ID>
      <ID>v01091</ID>
      <ID>v01092</ID>
      <ID>v01093</ID>
      <ID>v01094</ID>
      <ID>v01095</ID>
      <ID>v01096</ID>
      <ID>v01097</ID>
      <ID>v01098</ID>
      <ID>v02137</ID>
      <ID>v02142</ID>
      <ID>v02143</ID>
      <ID>v02144</ID>
      <ID>v02145</ID>
      <ID>v02146</ID>
      <ID>v02147</ID>
      <ID>v02148</ID>
      <ID>v02149</ID>
      <ID>v02150</ID>
      <ID>v02151</ID>
      <ID>v02152</ID>
      
      werte15.xml
      <LANG>de</LANG>
      <ID>v01306</ID>
      
      werte16.xml
      <LANG>de</LANG>
      <ID>v01306</ID>
      <ID>v02104</ID>
      <ID>v01300</ID>
      <ID>v01301</ID>
      <ID>v01302</ID>
      <ID>v01303</ID>
      <ID>v01304</ID>
      <ID>v01305</ID>
      
      werte17.xml
      <LANG>de</LANG>
      <ID>v01306</ID>
      

      Hoffe das hilft dir weiter?
      Die Daten stammen aus meiner KWL EC 300W R, ich gehe aber davon aus, dass die IDs geräteübergreifend identisch sind.
      Beachte, dass es mehr xmls gibt, als 1-15.

      Die Variablen selbst, deren Typen, Zugriffe, Bemerkungen, Gültigkeitsbereiche finden sich in einer Modbus-Doku von Helios. Das hier ist der Link dazu.

      ===============================
      Zum Adapter: Finde ich toll, dass du dir die Mühe machst, danke!

      Bei mir werden einige Datenpunkte noch ohne Beschreibung angezeigt. Es erscheint nur die ID als Info, keine weiteren Informationen, aber es werden Werte dazu gelesen.
      Außerdem kann ich einige Werte, die nur gelesen werden sollten (und auch so auf Seiten Helios definiert sind), auch schreiben. Beispielsweise die Drehzahl der Lüfter. Ich habs für die Drehzahl probiert, die Helios übernimmt die Änderungen nicht, da sollte am Ende kein Problem entstehen. Ausschließen würde ich es aber nicht, weswegen es gut wäre, wenn solche Werte im Adapter auch nicht ohne Weiteres geändert werden können.

      VG

      posted in Tester
      M
      moehre
    • RE: [Gelöst] Helios KWL - Zugriff auf xml

      @klvn sagte in [Gelöst] Helios KWL - Zugriff auf xml:

      Wo und wie hast du diese Verzögerung eingebaut? Wenn man xmlPages.forEach() langsamer laufen lässt, sollte es eigentlich gehen, habe es jetzt aber auch nicht getestet. Leider gibt es auch keine einzelne XML-Seite, auf der alle Werte auf einmal sind.

      Da ich mit dem async keinen Erfolg hatte, habe ich es auf die schmutzige Tour versucht:

      // Sleep function to delay requests
      function sleep(milliseconds) {
          const date = Date.now();
          let currentDate = null;
          do {
              currentDate = Date.now();
          }   while (currentDate - date < milliseconds);
      }
      

      sleep() dann an verschiedenen Stellen innerhalb des request eingefügt. Habs mit Zeiten zwischen 50ms und 1000ms probiert. Allerdings bricht auch hier ab Werten von 500ms die Verbindung zur Helios ab. Nicht mit dem ECONNRESET. Hab den Fehler gerade nicht parat...
      Ein sleep ist nicht besonders elegant, hätte aber den Zweck erfüllen müssen. Im Log sehe ich auch, dass die Anfragen mit der entsprechenden Verzögerung rausgehen - aber trotzdem die ersten 4 requests mit ECONNRESET abbrechen.

      posted in JavaScript
      M
      moehre
    • RE: [Gelöst] Helios KWL - Zugriff auf xml

      Ich bastele gerade daran, weitere xmls auszulesen. Sieht so aus. Es sind 2 console.logs mit reingekommen, damit ich folgendem Problem irgendwie auf die Schliche komme...

      // Refresh values
      setInterval(function () {
        // Load and refresh values from different XML-files (default: page 4 and page 8. Can be extended from 1 to 17 to obtain everything)
        const xmlPages = [1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17];
        xmlPages.forEach(function (page, index) {
          request(createHeader(helios_ip, "data/werte" + page + ".xml", "xml=/data/werte" + page + ".xml"), function (error, response, result) {
            console.log(createHeader(helios_ip, "data/werte" + page + ".xml", "xml=/data/werte" + page + ".xml"))
            refreshValues(result);
            console.log(result);
            });
        });
      }, refresh_interval * 1000);
      

      Das klappt bis zu 12 xmls auch super, alle weiteren werfen Fehler. Folglich bekomme ich diesen Fehler 4x:

      javascript.0	2021-04-13 01:01:57.423	error	(549) Request error: Error: connect ECONNRESET [hier steht die IP der Helios samt Port]
      javascript.0	2021-04-13 01:01:57.423	error	(549) Error in request callback: TypeError: Cannot read property 'matchAll' of undefined
      

      Laut log sieht der request gut aus, die URLs werden korrekt erstellt, die xmls existieren.
      Es ist egal, welche page rausgenommen wird, jede Änderung der pages wird die Fehleranzahl verändern.

      Verdacht: refreshValues wird ausgeführt, bevor eine Rückmeldung vom Webserver kommt.
      Ich habe daher versucht, den request asynchron auszuführen - ohne Erfolg. Auch eine Verzögerung um x ms hat nichts gebracht.

      Woran könnte der Fehler liegen?

      P.S. Lösungsansatz, ohne das Problem wirklich zu verstehen: Man könnte request und refreshValues trennen. Sodass der request die übertragenen Werte als JSON wegschreibt. Der refreshValues würde dann nur noch bereits vorhandene Variablen hübsch machen. Damit wären Rückmeldung und Verarbeitung unabhängig voneinander. Und Fehler in der Aktualisierung der Daten ließen sich vorzeitig erkennen.

      P.P.S. Über Sinn und Unsinn, wirklich ALLE Pages auszulesen, kann man sicher streiten 🙂

      VG

      posted in JavaScript
      M
      moehre
    • RE: [Gelöst] Helios KWL - Zugriff auf xml

      @klvn

      Ich hatte das Projekt jetzt laaange liegen lassen, hauptsächlich, da meine Helios den Geist aufgegeben hat. Jetzt schaue ich mal wieder rein und bin beeindruckt, wie du das umgesetzt hast! Vielen Dank, auch, dass du so umfangreich dokumentierst und Hilfestellung lieferst!

      posted in JavaScript
      M
      moehre
    • RE: [Gelöst] Helios KWL - Zugriff auf xml

      Nach viel herumexperimentieren und zusammenklauben von Code, auch hier aus dem Forum, habe ich eine Lösung gefunden:
      Der Login läuft über einen post-request, ebenso die Abfrage der Daten aus den xml. Dazu werden jeweils konkrete Header- und Body-daten angefragt.
      Ausgelesen werden die Werte mittels stumpfer Positionsbestimmung. Das klappt, weil Helios für jeden Wert eine einmalige Variable sowie feste Zeichenanzahl vorsieht.

      Zur besseren Übersicht ist unten nur die Aussentemperatur exemplarisch aufgeführt. Zur Erweiterung auf andere Werte müsste der request der Datenabfrage kopiert, die Summanden aus den Zeilen 48 + 50 angepasst und - falls Werte aus anderen xmls ausgelesen werden sollen - eine weitere Variable mit neuen Headerdaten angelegt und im neuen request ebenfalls angepasst werden.
      Die Variablen zur Zuordnung der Werte sowie die Zeichenanzahl gibts direkt bei Helios.

      Falls jemand Vorschläge/Kommentare/Anregungen hat, freue ich mich über Input aller Art. Auch über Hinweise zu Denkfehlern.
      Und wenn jemand dieses Gewurschtel in Form bringen möchte - nur zu 🙂

      var position_anfang, result, position_ende;
      var request= require('request');
      
      var Hlogin = {headers: {
                      'Host': '192.168.178.22',
                      'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0',
                      'Accept': '*/*',
                      'Accept-Language': 'de,en-US;q=0.7,en;q=0.3',
                      'Accept-Encoding': 'gzip, deflate',
                      'Referer': 'http://192.168.178.22/',
                      'Content-Type': 'text/plain;charset=UTF-8',
                      'Content-Length': '15',
                      'DNT': '1',
                      'Connection': 'keep-alive',
                      },
                  url: 'http://192.168.178.22/info.htm',
                  body: 'v00402=PASSWORT',
                  method: 'POST',};
      
      var Hwerte8 = {headers: {
                      'Host': '192.168.178.22',
                      'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0',
                      'Accept': '*/*',
                      'Accept-Language': 'de,en-US;q=0.7,en;q=0.3',
                      'Accept-Encoding': 'gzip, deflate',
                      'Referer': 'http://192.168.178.22/anzeig.htm',
                      'Content-Type': 'text/plain;charset=UTF-8',
                      'Content-Length': '20',
                      'DNT': '1',
                      'Connection': 'keep-alive'
                      },
                  url: 'http://192.168.178.22/data/werte8.xml',
                  body: 'xml=/data/werte8.xml',
                  method: 'POST'};
      
      //Datenpunkte erzeugen
      createState("HeliosKWL.Aussentemperatur");
      
      //Login alle 5 Min
      setInterval(function() {
          request(Hlogin);
       }, 300000);
      
      //Datenabfrage alle 5 Sek
      setInterval(function() {
          request(Hwerte8, function (error, response, result) {
              position_anfang = result.indexOf('v00104') + 1;
              position_anfang = (typeof position_anfang == 'number' ? position_anfang : 0) + 16;
              position_ende = position_anfang;
              position_ende = (typeof position_ende == 'number' ? position_ende : 0) + 3;
              setState('HeliosKWL.Aussentemperatur', (result.slice((position_anfang - 1), position_ende)), true, parseInt(0, 10), false);
          });
      }, 5000);
      

      Viele Grüße!
      Johannes

      posted in JavaScript
      M
      moehre
    • RE: [Gelöst] Helios KWL - Zugriff auf xml

      OK, ich bin einen Schritt zurück gegangen und habe ersteinmal nur den Zugriff auf die xml probiert: Klappt. Zumindest mit anderen xmls vom Webserver der Helios. Denn für die "werte8.xml" bekomme ich mittels "request" einen 404.

      Wenn ich nun per Debugger (hier Mozilla) statt einer GET-Anfraeg eine POST-Anfrage mit request-body "xml=/data/werte8.xml" stelle, dann bekomme ich meine xml auch im Browser angezeigt! Jetzt die Quizfrage: Irgendeine Chance, das in ein Script zu packen?

      posted in JavaScript
      M
      moehre
    • [Gelöst] Helios KWL - Zugriff auf xml

      Moin zusammen,

      ich habe kürzlich hier schon mein Problem geschildert. Jetzt geht es um einen anderen Ansatz: Ich möchte die Daten der Helios aus den xmls, befindliche auf dem lokalen Webserver des Gerätes, auslesen.

      Dazu nutze ich:

      var request = require('request');
       
      function doWork() {
      
      request('http://192.168.178.22/data/werte8.xml', function (error, response, body) {
      
      	if (error) {
      		log("Fehler beim Herunterladen: " + error);
      		return;
      	} 
      
      	const regex = /v00104<\/ID>\n<VA>(\d+.\d+)/gm;
      
      	try {
      		const atemp = regex.exec(body);
       
      		createState("HeliosKWL.Aussentemperatur", atemp, true, {
      			type: "number",
      			unit: "°C",
          		role: "value.temperature"
      		});
      
      	} catch (e) {
      		log("Fehler beim Auswerten: " + error);
      	}
      
      });
      
      };
      
       schedule('*/5 * * * * *', doWork);
      

      Dank an AlCalzone, dessen Code ich hier nutze 👍
      Angeblich sei es mit xml2js einfacher, aber das bekomme ich nicht hin. Wer sich damit auseinandersetzen mag, gerne 🙂

      2 Probleme:

      1. Der lokale Zugriff auf die Helios ist passwortgeschützt. Kein Nutzername. Wie kann ich das Script so erweitern, dass es sich vorab auf einer anderen Seite einloggt und danach die o.g. xml verarbeitet?

      2. Mir ist aufgefallen, dass ich die genannte Datei "werte8.xml" nicht im Browser aufrufen kann. Auch keine andere "werteX.xml". Die sind für mich nur per Debugger (Fiddler oder Mozilla) sichtbar und lesbar. Sonstige xmls aus derselben Quelle kann ich aber aufrufen. Kann das sein? Könnte das zu einem Problem werden? Wie kann ich damit umgehen?

      Danke und Grüße!

      =================================================
      Edit: Titel angepasst

      =================================================
      Edit 2: Um dem Suchenden weiteres Leid zu ersparen: Die Lösung verbirgt sich im Script von @KLVN und findet sich hier: https://github.com/KLVN/ioBroker_Helios-KWL

      =================================================
      Edit 3: Aus dem o.g. Script hat @tombox einen Adapter gebaut, weitere Details hier: https://forum.iobroker.net/topic/47762/test-helios-kwl-v0-0-x

      posted in JavaScript
      M
      moehre
    • [Problem] Helios KWL - Zugriff auf Modbus

      Hallo zusammen,

      ich bin seit ca 2 Wochen mit iobroker unterwegs und genieße noch meine Experimentierphase.
      Mit vielen Adaptern klappt es super. Allerdings habe ich jetzt ein Problem, das ich mit JS lösen muss. Da ich davon keine Ahnung habe, bitte ich euch um Hilfe:

      Ich möchte gerne die Werte meiner Helios KWL EC 300 W auslesen. (Ändern wäre der nächste Schritt...)
      Es gibt dazu 3 Ansätze: Via API auf die webbasierte Steuerung zugreifen; auf lokalem Webserver befindliche xml auslesen; lokal via Modbus TCP. Aktuell versuche ich mich an letzterem, zum xml-Thema schreibe ich noch einen anderen Thread - da habe ich genauso Probleme, allerdings aus anderen Gründen.

      Die, so weit ich verstanden habe, Besonderheit der Helios ist, dass ich erst Werte schreiben muss und im Anschluss wieder auslese. Es gibt also keine festen Adressen pro Wert. So weit ich verstehe, kann das der modbus-Adapter so nicht umsetzen. Sollte ich mich irren, bitte ich um einen Hinweis.

      Was ich probiert habe:
      Zusätzliches NPM-Modul "modbus-serial" in JS eintragen. Und mit den bei NPM und Github zu findenden Examples rumspielen. Für viel mehr reichts noch nicht, aber ich arbeite daran...

      var ModbusRTU = require("modbus-serial");
      var client = new ModbusRTU();
       
      // Verbindung herstellen
      client.connectTCP("192.168.178.22", { port: 502 });
      client.setID(180);
      
      function write() { 
          // Schreibe Werte in HoldingRegister ab Adresse 1
          client.writeRegisters(1, [0x7430, 0x3030, 0x3034, 0x0000])
              .then(read);
      }
       
      function read() {
          // Lese 10 HoldingRegister ab Adresse 1
          client.readHoldingRegisters(1, 10)
              .then(console.log);
      };
      
      
      schedule('*/5 * * * * *', read);
      

      Port ist der übliche 502.
      Die ID ist grundsätzlich 180.
      Es wird ausschließlich in den HoldingRegisters geschrieben und gelesen.
      Startadresse ist immer 1.
      Mehr Details in der Dokumentation von Helios dazu.

      Hier steckt noch keinerlei Zuweisung zu einem Datenpunkt drin, das klappt dann später auch noch. Erstmal wäre es schön, wenn ich Daten schreiben und lesen könnte.
      Wenn ich die Daten unter Windows mit einem Tool schreibe und lese, klappt alles wunderbar. Leider beweist die Gegenprobe: In o.g. Code funktioniert weder schreiben noch lesen.
      Und selbst, wenn ich umfangreiche Beispiele abstrahiere, wie dieses hier von github, kommt dabei nichts rum außer Fehlermeldungen.

      Wer kann mir hier auf die Sprünge helfen?

      Danke und Grüße!

      Edit: Titel angepasst

      posted in JavaScript
      M
      moehre
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo