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. Entwicklung
  4. [Projekt] ETA Heizung

NEWS

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    9
    1
    80

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.4k

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.3k

[Projekt] ETA Heizung

Geplant Angeheftet Gesperrt Verschoben Entwicklung
88 Beiträge 30 Kommentatoren 19.7k Aufrufe 22 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 merlinfive

    Ich habe auch mal das Script genommen und bekomme zwar Werte aber habe auch reichlich Fehlermeldungen

    3e300e89-2c56-44ff-934f-04be49d2cad5-image.png

    auch stimmen einige Infos nicht z.B. Ein [heizen]
    4697c7b1-1527-4022-9863-962136ac9e98-image.png

    ich lese die Werte parallel mit dem parser aus dort sind sie richtig
    dc784e10-4079-4f06-a1ee-1cc0a272616c-image.png

    any hints ?

    C Offline
    C Offline
    CaneTLOTW
    schrieb am zuletzt editiert von
    #60

    @merlinfive

    Bist du weitergekommen?

    Ich schaue mir auch gerade die Integration an und wäre für eine verbesserte Lösung dankbar ;)
    Kannst du die Konfiguration des Parsers teilen?

    1 Antwort Letzte Antwort
    0
    • H Herry

      @catnipper
      ich habe mich an deinen Adapter versucht und nach ein paar Änderungen läuft er sehr gut. Trotzdem sind noch ein paar "undefinierbare" Fehler vorhanden, was aber komischerweise nicht am Ergebnis zur Erzeugung der Daten beiträgt.
      Ich denke auch, das hat mit dem jeweiligen System und dessen Software zu tun.
      Bei mir läuft das ganze auf einem Raspberry 4, 4 GB Ram problemlos und schnell.

      ETA_VIS.jpg

      Realisiert habe ich das über ioBroker und Vis. Die Darstellung ist sehr einfach gehalten, da der Monitor im Hausgang hängt und für jeden verständlich sein soll.
      Hier noch die Anpassungen am Script:

      Script.jpg

      Zur Visualisierung läuft auf dem Raspberry auch noch Magic Mirror 2 und das sieht dann so aus:

      MM-Display_cplt.jpg

      Vielen Dank für deine großartige Arbeit mit dem Adapter !

      C Offline
      C Offline
      CaneTLOTW
      schrieb am zuletzt editiert von
      #61

      @herry

      Ich schließe mich der Frage mal!
      Wäre ein super Startpunkt, bevor man kompltte von 0 anfangen muss :)

      1 Antwort Letzte Antwort
      0
      • K Kapsville

        @gmbh07 said in [Projekt] ETA Heizung:

        @rille06 Hallo, ich habe da mit dem Modus Adapter versucht komme aber nicht weiter, hast du vielleicht eine kleine Übersicht deiner Einstellungen? Es springt bei mir immer wie auf denn Fotos hin und her und ich habe keine Werte.
        Bildschirmfoto 2022-08-02 um 11.06.51.png Bildschirmfoto 2022-08-02 um 11.06.45.png

        Habe auch dieses Problem. @gmbh07 konntest du das Problem in der Zwischenzeit lösen?

        R Offline
        R Offline
        Rille06
        schrieb am zuletzt editiert von
        #62

        @kapsville
        sry das ich jetzt erst antworte.
        Du musst für ModBus TCP an der Heizung entsprechend werte "freigeben" und Adressieren.
        unten Links auf die Werkzeugkiste -> Berechtigung -> 135 "Enter"
        Danach über die Parameterliste einzeln alle werte die du willst via Zahnradsymbol -> MusdBus/TCP -> Register zuweisen
        Oben Links und in der Info (falls vorhanden) stehen allgemeine Infos dazu, ist relativ selbsterklärend.
        Idr sind alles Signed 32 bit (Big Endian) oder Unsigned 32 bit (Big Endian) als Datentyp.
        Dann eben alle Register im ModBus Adapter entsprechend eintragen.

        An der ETA hab ich das über VNC Viewer gemacht.
        Funktioniert bei mir schon lange problemlos.

        C K 2 Antworten Letzte Antwort
        0
        • R Rille06

          @kapsville
          sry das ich jetzt erst antworte.
          Du musst für ModBus TCP an der Heizung entsprechend werte "freigeben" und Adressieren.
          unten Links auf die Werkzeugkiste -> Berechtigung -> 135 "Enter"
          Danach über die Parameterliste einzeln alle werte die du willst via Zahnradsymbol -> MusdBus/TCP -> Register zuweisen
          Oben Links und in der Info (falls vorhanden) stehen allgemeine Infos dazu, ist relativ selbsterklärend.
          Idr sind alles Signed 32 bit (Big Endian) oder Unsigned 32 bit (Big Endian) als Datentyp.
          Dann eben alle Register im ModBus Adapter entsprechend eintragen.

          An der ETA hab ich das über VNC Viewer gemacht.
          Funktioniert bei mir schon lange problemlos.

          C Offline
          C Offline
          CaneTLOTW
          schrieb am zuletzt editiert von CaneTLOTW
          #63

          @rille06

          Ich komme mit modbus auch nicht weiter, kannst du dir das hier mal anschauen.
          Irgendwas musst du anders/besser gemacht haben:

          https://github.com/ioBroker/ioBroker.modbus/issues/388

          R 1 Antwort Letzte Antwort
          0
          • C CaneTLOTW

            @rille06

            Ich komme mit modbus auch nicht weiter, kannst du dir das hier mal anschauen.
            Irgendwas musst du anders/besser gemacht haben:

            https://github.com/ioBroker/ioBroker.modbus/issues/388

            R Offline
            R Offline
            Rille06
            schrieb am zuletzt editiert von
            #64

            @canetlotw
            Moin,
            ist der verlinkte Post von dir selbst?
            Das dabei beschriebene Problem liegt nicht an Iobroker sondern an der ETA Firmware.
            Wegen diesem Problem war ich vor ca einem Jahr schon mit ETA Selbst in Kontakt, Offiziell wurde der Fehler nicht behoben,
            bei einem Bekannten hat es dann aber mit einem Firmware update dennoch geklappt.
            Mit dem Haken bei "aliases" erwartet der Modbus-Adapter strickte Einhaltung der Adressbereiche, ETA liefert aber ab einem gewissen
            Bereich keine Sinnvollen daten mehr.
            Ich würde also mal auf eine Aktuelle Version Updaten, falls das nicht schon der fall ist.

            Bedeutet für dich, du musst den Hacken bei aliases raus machen.
            Bei deiner Heizung dann mit Adresse 1000 beginnend einfach alle werte nacheinander Aktivieren und eben im Modbus Adapter entsprechend eintragen.
            ETA-Modbus.png

            Ich meine auch, dass der Abfrage Intervall zu kurz ist, ich habe bei mir 5sec drin, ich meine ein zu kurzer Intervall hat ebenfalls zu Problemen geführt,
            dabei bin ich mir aber nicht mehr ganz sicher.

            1 Antwort Letzte Antwort
            0
            • T Offline
              T Offline
              tcfigge
              schrieb am zuletzt editiert von
              #65

              Hallo!

              In einem anderen Thread hat mir jemand geholfen, die Probleme mit dem Script zu beheben.

              Fehler war in der DOMParser Zeile 3 und einer in der log Zeile 117

              Hier jetzt die funktionierende Version:

              var http = require('http');
              var xpath = require('xpath');
              var dom = require('@xmldom/xmldom').DOMParser;
              var objectInstanz = '0_userdata.0.Heizung.';
              
              var etaIP = 'http://192.168.100.220:8080/user/var';
              
              	// 1. URI
              	// 2. iobroker Object
              	// 3. read
              	// 4. write
              	// 5. name
              	// 6. type
              	// 7. unit
              	// 8. role
              	// 9. CCU variable (optional)
              var etaVars = [
              	 ["/120/10251/0/0/12242",		"eta.puffer.oben",				true, false, "Puffer oben",						"number",	"°C",		"value.temperature",    ""]
              	,["/120/10251/0/0/12244",		"eta.puffer.unten",				true, false, "Puffer unten",					"number",	"°C",		"value.temperature",    ""]
              	,["/120/10251/0/0/12522",		"eta.puffer.mitte",	 		   	true, false, "Puffer mitte",					"number",	"°C",		"value.temperature",    ""]
              	,["/120/10251/0/0/12533",		"eta.puffer.leistung",			true, false, "Puffer Leistung",					"number",	"KW",		"state",                ""]
              	,["/120/10251/12130/0/1109",	"eta.puffer.zustand",			true, false, "Puffer Zustand",					"string",	"",			"state",                ""]
              	
              	,["/120/10101/0/0/12080",	    "eta.hk.1.zustand",				true, false, "Heizkreis Zustand",				"string",	"",			"state",                ""]
              	,["/120/10101/0/0/19391",	    "eta.hk.1.info",				true, false, "Heizkreis Info",		     		"string",	"",			"state",                ""]
                  ,["/120/10101/0/0/12241",		"eta.hk.1.vorlauf",				true, false, "Heizkreis Vorlauf",				"number",	"°C",		"value.temperature",    ""]
              	,["/120/10101/0/0/12111",		"eta.hk.1.heizkurve",			true, false, "Heizkreis Heizkurve",				"number",	"°C",		"value.temperature",    ""]
              	,["/120/10101/0/11124/0",		"eta.hk.1.pumpe",				true, false, "Heizkreis Pumpe",					"string",	"",			"state",                ""]
              	,["/120/10101/0/11124/2001",	"eta.hk.1.anforderung",			true, false, "Heizkreis Anforderung",			"string",	"",			"state",                ""]
              	
              	,["/40/10021/0/0/19402",		"eta.kessel.aktion",			true, false, "Kessel",      					"string",	"",			"state",                ""]
              	,["/40/10021/0/11123/2002",		"eta.kessel.pumpe",		     	true, false, "Kesselpumpe",      				"string",	"",			"state",                ""]
                  ,["/40/10021/0/0/12153",		"eta.kessel.vollast",			true, false, "Kessel Vollaststunden",			"string",	"",		    "state",                ""]
              	,["/40/10021/0/0/12016",		"eta.kessel.verbrauch",			true, false, "Kessel Gesamtverbrauch",			"number",	"kg",		"state",                ""]
              	,["/40/10021/0/0/12013",		"eta.kessel.aschebox",			true, false, "Kessel Verbrauch seit Aschebox",	"number",	"kg",		"state",                ""]
              	,["/40/10021/0/0/12180",		"eta.kessel.druck",				true, false, "Kessel Druck",					"number",	"bar",		"state",                ""]
              	,["/40/10021/0/0/12001",		"eta.kessel.soll",				true, false, "Kessel Soll",						"number",	"°C",		"state",                ""]
              	,["/40/10021/0/0/12161",		"eta.kessel.ist",				true, false, "Kessel Ist",						"number",	"°C",		"state",                ""]
              	,["/40/10021/0/0/12162",		"eta.kessel.abgasgtemp",		true, false, "Kessel Abgastemperatur",			"number",	"°C",	    "state",                ""]
              	,["/40/10021/0/0/12165",		"eta.kessel.abgasgeblaese",		true, false, "Kessel Abgasgebläse",				"number",	"U/min",	"state",                ""]
              	,["/40/10021/0/0/12164",		"eta.kessel.restsauerstoff",	true, false, "Kessel Restsauerstoff",			"number",	"%",		"state",                ""]
              	,["/40/10021/0/0/12080",		"eta.kessel.zustand",			true, false, "Kessel Zustand",					"string",	"",			"state",                ""]
              	
              	,["/40/10201/0/0/12015",		"eta.lager.silo",				true, false, "Pellets Silo",					"number",	"kg",		"state",                ""]
              	,["/40/10021/0/0/12011",		"eta.lager.tag",				true, false, "Pellets Tagesbehälter",			"number",	"kg",		"state",                ""]
              	,["/40/10241/0/0/12197",		"eta.system.aussentemperatur",	true, false, "Aussentemperatur",				"number",	"°C",		"state",                ""]
              ];
              
              etaVars.forEach(function(etaVar){
                  createState(objectInstanz + etaVar[1], 0, {
                      read:  etaVar[2],
                      write: etaVar[3],
                      name:  etaVar[4],
                      type:  etaVar[5],
                      unit:  etaVar[6],
                      role:  etaVar[7]
                  });
              });
              
              schedule("*/7 * * * *", function () {
                  pollETA();
              });
              
              pollETA();
              
              function pollETA() {
                  // console.log("** Polling ETA Variables");
              	etaVars.forEach(function(etaVar){
              		http.get(etaIP + etaVar[0], function (http_res) {
              
              			// initialize the container for our data
              			var data = "";
              
              			// this event fires many times, each time collecting another piece of the response
              			http_res.on("data", function (chunk) {
              				// append this chunk to our growing `data` var
              				data += chunk;
              				// console.log("** ETA chunk: " + chunk);
              			});
              
              			// this event fires *one* time, after all the `data` events/chunks have been gathered
              			http_res.on("end", function () {
              				// console.log("** ETA data: " + data);
              
              				try {
              					var doc = new dom().parseFromString(data);
              					var select = xpath.useNamespaces({"eta": "http://www.eta.co.at/rest/v1"});
              
              					var strValue    = (select('//eta:value/@strValue',    doc)[0].nodeValue);
              					var text        = (select('//eta:value/text()',       doc)[0].nodeValue);
              					var scaleFactor = (select('//eta:value/@scaleFactor', doc)[0].nodeValue);
              					var unit        = (select('//eta:value/@unit',        doc)[0].nodeValue);
                                  var value       = "";
                                  
              					if (etaVar[5]=="number") {
              						value = text * 1.0 / scaleFactor;
              					} else {
              						value = strValue;
              					}
              
              					/* console.log("**** ETA " + etaVar[0] + " @strValue:    " + strValue);
              					console.log("**** ETA " + etaVar[0] + " @unit:        " + unit);
              					console.log("**** ETA " + etaVar[0] + " text()  :     " + text);
              					console.log("**** ETA " + etaVar[0] + " @scaleFactor: " + scaleFactor);
              					console.log("** ETA [" + etaVar[4] + "]: " + value + " " + unit); */
              
              					setState(objectInstanz + etaVar[1], value, true);
              					
              
              				}
              				catch (e) {
              					log("ETA: Cannot set data "+ etaVar[2] +":" + e, 'error');
              				}
              			});
              		});
              	});
                  log(formatDate(new Date(), "DD. O YYYY hh:mm"), "info");
              }
              

              Vielleicht hilft es jemandem....

              C ronin_mnR 2 Antworten Letzte Antwort
              0
              • T tcfigge

                Hallo!

                In einem anderen Thread hat mir jemand geholfen, die Probleme mit dem Script zu beheben.

                Fehler war in der DOMParser Zeile 3 und einer in der log Zeile 117

                Hier jetzt die funktionierende Version:

                var http = require('http');
                var xpath = require('xpath');
                var dom = require('@xmldom/xmldom').DOMParser;
                var objectInstanz = '0_userdata.0.Heizung.';
                
                var etaIP = 'http://192.168.100.220:8080/user/var';
                
                	// 1. URI
                	// 2. iobroker Object
                	// 3. read
                	// 4. write
                	// 5. name
                	// 6. type
                	// 7. unit
                	// 8. role
                	// 9. CCU variable (optional)
                var etaVars = [
                	 ["/120/10251/0/0/12242",		"eta.puffer.oben",				true, false, "Puffer oben",						"number",	"°C",		"value.temperature",    ""]
                	,["/120/10251/0/0/12244",		"eta.puffer.unten",				true, false, "Puffer unten",					"number",	"°C",		"value.temperature",    ""]
                	,["/120/10251/0/0/12522",		"eta.puffer.mitte",	 		   	true, false, "Puffer mitte",					"number",	"°C",		"value.temperature",    ""]
                	,["/120/10251/0/0/12533",		"eta.puffer.leistung",			true, false, "Puffer Leistung",					"number",	"KW",		"state",                ""]
                	,["/120/10251/12130/0/1109",	"eta.puffer.zustand",			true, false, "Puffer Zustand",					"string",	"",			"state",                ""]
                	
                	,["/120/10101/0/0/12080",	    "eta.hk.1.zustand",				true, false, "Heizkreis Zustand",				"string",	"",			"state",                ""]
                	,["/120/10101/0/0/19391",	    "eta.hk.1.info",				true, false, "Heizkreis Info",		     		"string",	"",			"state",                ""]
                    ,["/120/10101/0/0/12241",		"eta.hk.1.vorlauf",				true, false, "Heizkreis Vorlauf",				"number",	"°C",		"value.temperature",    ""]
                	,["/120/10101/0/0/12111",		"eta.hk.1.heizkurve",			true, false, "Heizkreis Heizkurve",				"number",	"°C",		"value.temperature",    ""]
                	,["/120/10101/0/11124/0",		"eta.hk.1.pumpe",				true, false, "Heizkreis Pumpe",					"string",	"",			"state",                ""]
                	,["/120/10101/0/11124/2001",	"eta.hk.1.anforderung",			true, false, "Heizkreis Anforderung",			"string",	"",			"state",                ""]
                	
                	,["/40/10021/0/0/19402",		"eta.kessel.aktion",			true, false, "Kessel",      					"string",	"",			"state",                ""]
                	,["/40/10021/0/11123/2002",		"eta.kessel.pumpe",		     	true, false, "Kesselpumpe",      				"string",	"",			"state",                ""]
                    ,["/40/10021/0/0/12153",		"eta.kessel.vollast",			true, false, "Kessel Vollaststunden",			"string",	"",		    "state",                ""]
                	,["/40/10021/0/0/12016",		"eta.kessel.verbrauch",			true, false, "Kessel Gesamtverbrauch",			"number",	"kg",		"state",                ""]
                	,["/40/10021/0/0/12013",		"eta.kessel.aschebox",			true, false, "Kessel Verbrauch seit Aschebox",	"number",	"kg",		"state",                ""]
                	,["/40/10021/0/0/12180",		"eta.kessel.druck",				true, false, "Kessel Druck",					"number",	"bar",		"state",                ""]
                	,["/40/10021/0/0/12001",		"eta.kessel.soll",				true, false, "Kessel Soll",						"number",	"°C",		"state",                ""]
                	,["/40/10021/0/0/12161",		"eta.kessel.ist",				true, false, "Kessel Ist",						"number",	"°C",		"state",                ""]
                	,["/40/10021/0/0/12162",		"eta.kessel.abgasgtemp",		true, false, "Kessel Abgastemperatur",			"number",	"°C",	    "state",                ""]
                	,["/40/10021/0/0/12165",		"eta.kessel.abgasgeblaese",		true, false, "Kessel Abgasgebläse",				"number",	"U/min",	"state",                ""]
                	,["/40/10021/0/0/12164",		"eta.kessel.restsauerstoff",	true, false, "Kessel Restsauerstoff",			"number",	"%",		"state",                ""]
                	,["/40/10021/0/0/12080",		"eta.kessel.zustand",			true, false, "Kessel Zustand",					"string",	"",			"state",                ""]
                	
                	,["/40/10201/0/0/12015",		"eta.lager.silo",				true, false, "Pellets Silo",					"number",	"kg",		"state",                ""]
                	,["/40/10021/0/0/12011",		"eta.lager.tag",				true, false, "Pellets Tagesbehälter",			"number",	"kg",		"state",                ""]
                	,["/40/10241/0/0/12197",		"eta.system.aussentemperatur",	true, false, "Aussentemperatur",				"number",	"°C",		"state",                ""]
                ];
                
                etaVars.forEach(function(etaVar){
                    createState(objectInstanz + etaVar[1], 0, {
                        read:  etaVar[2],
                        write: etaVar[3],
                        name:  etaVar[4],
                        type:  etaVar[5],
                        unit:  etaVar[6],
                        role:  etaVar[7]
                    });
                });
                
                schedule("*/7 * * * *", function () {
                    pollETA();
                });
                
                pollETA();
                
                function pollETA() {
                    // console.log("** Polling ETA Variables");
                	etaVars.forEach(function(etaVar){
                		http.get(etaIP + etaVar[0], function (http_res) {
                
                			// initialize the container for our data
                			var data = "";
                
                			// this event fires many times, each time collecting another piece of the response
                			http_res.on("data", function (chunk) {
                				// append this chunk to our growing `data` var
                				data += chunk;
                				// console.log("** ETA chunk: " + chunk);
                			});
                
                			// this event fires *one* time, after all the `data` events/chunks have been gathered
                			http_res.on("end", function () {
                				// console.log("** ETA data: " + data);
                
                				try {
                					var doc = new dom().parseFromString(data);
                					var select = xpath.useNamespaces({"eta": "http://www.eta.co.at/rest/v1"});
                
                					var strValue    = (select('//eta:value/@strValue',    doc)[0].nodeValue);
                					var text        = (select('//eta:value/text()',       doc)[0].nodeValue);
                					var scaleFactor = (select('//eta:value/@scaleFactor', doc)[0].nodeValue);
                					var unit        = (select('//eta:value/@unit',        doc)[0].nodeValue);
                                    var value       = "";
                                    
                					if (etaVar[5]=="number") {
                						value = text * 1.0 / scaleFactor;
                					} else {
                						value = strValue;
                					}
                
                					/* console.log("**** ETA " + etaVar[0] + " @strValue:    " + strValue);
                					console.log("**** ETA " + etaVar[0] + " @unit:        " + unit);
                					console.log("**** ETA " + etaVar[0] + " text()  :     " + text);
                					console.log("**** ETA " + etaVar[0] + " @scaleFactor: " + scaleFactor);
                					console.log("** ETA [" + etaVar[4] + "]: " + value + " " + unit); */
                
                					setState(objectInstanz + etaVar[1], value, true);
                					
                
                				}
                				catch (e) {
                					log("ETA: Cannot set data "+ etaVar[2] +":" + e, 'error');
                				}
                			});
                		});
                	});
                    log(formatDate(new Date(), "DD. O YYYY hh:mm"), "info");
                }
                

                Vielleicht hilft es jemandem....

                C Offline
                C Offline
                catnipper
                schrieb am zuletzt editiert von
                #66

                @tcfigge Nicht zu vergessen... ggf. müssen die lokalen Adressen der Objekte bei Euch noch ausgelesen und angepasst werden falls auf Euren Heizungen andere Boards/zusätzlicher HK verwendet wurden.

                • Eure Adressen erhaltet Ihr über die lokal freigeschaltete ETA API: http://lokale-adresse:8080/user/menu
                • Welche Variablen Ihr auslesen und in welche Objektstrukturen schreiben wollt definiert Ihr dann in dem etaVars Array (inkl. Formatierung etc.)

                Ich hatte auch mal vor vielen Jahren einen Adapter dafür geschrieben, der hatte aber leider nie zuverlässig funktioniert...

                1 Antwort Letzte Antwort
                0
                • W Offline
                  W Offline
                  warp735
                  schrieb am zuletzt editiert von
                  #67

                  ModbusTCP läuft bei mir schon ewig absolut ohne Probleme. Intervall hab ich 15s. Kleiner wie Pollintervall (bei mir ~3000ms) führt natürlich unweigerlich zu Problemen.

                  C 1 Antwort Letzte Antwort
                  0
                  • W warp735

                    ModbusTCP läuft bei mir schon ewig absolut ohne Probleme. Intervall hab ich 15s. Kleiner wie Pollintervall (bei mir ~3000ms) führt natürlich unweigerlich zu Problemen.

                    C Offline
                    C Offline
                    catnipper
                    schrieb am zuletzt editiert von
                    #68

                    @warp735 Reine Neugier… Bleiben die Einstellungen für Modbus in der Heizung erhalten wenn diese neu gestartet bzw. mal ausgeschaltet wird (stromlos)?

                    W 1 Antwort Letzte Antwort
                    0
                    • C catnipper

                      @warp735 Reine Neugier… Bleiben die Einstellungen für Modbus in der Heizung erhalten wenn diese neu gestartet bzw. mal ausgeschaltet wird (stromlos)?

                      W Offline
                      W Offline
                      warp735
                      schrieb am zuletzt editiert von
                      #69

                      @catnipper
                      Selbstverständlich... An/Aus Update stromlos... alles kein Problem

                      C 1 Antwort Letzte Antwort
                      0
                      • W warp735

                        @catnipper
                        Selbstverständlich... An/Aus Update stromlos... alles kein Problem

                        C Offline
                        C Offline
                        catnipper
                        schrieb am zuletzt editiert von
                        #70

                        @warp735 super, dann schaue ich mir das auch mal an! Scheint besser als mein ursprünglicher Adapter oder auch die JS Lösung mit dem Gefummel mit den URI‘s und Konvertierung!

                        W 1 Antwort Letzte Antwort
                        0
                        • C catnipper

                          @warp735 super, dann schaue ich mir das auch mal an! Scheint besser als mein ursprünglicher Adapter oder auch die JS Lösung mit dem Gefummel mit den URI‘s und Konvertierung!

                          W Offline
                          W Offline
                          warp735
                          schrieb am zuletzt editiert von
                          #71

                          @catnipper
                          Ja, viel besser. Auch das steuern klappt so super zuverlässig und ist 100x einfacher

                          T 1 Antwort Letzte Antwort
                          0
                          • R Offline
                            R Offline
                            Roman
                            schrieb am zuletzt editiert von
                            #72

                            Hallo @catnipper,

                            vielen Dank für die super Arbeit.
                            Wann kommt den das erste Youtube Video wo du es auch den weniger programmierbegabten von Uns erklärst? ;-)
                            Denke dein Adapter würde dadurch auch eine größere Reichweite bekommen.

                            Grüße Demero

                            1 Antwort Letzte Antwort
                            0
                            • T tcfigge

                              Hallo!

                              In einem anderen Thread hat mir jemand geholfen, die Probleme mit dem Script zu beheben.

                              Fehler war in der DOMParser Zeile 3 und einer in der log Zeile 117

                              Hier jetzt die funktionierende Version:

                              var http = require('http');
                              var xpath = require('xpath');
                              var dom = require('@xmldom/xmldom').DOMParser;
                              var objectInstanz = '0_userdata.0.Heizung.';
                              
                              var etaIP = 'http://192.168.100.220:8080/user/var';
                              
                              	// 1. URI
                              	// 2. iobroker Object
                              	// 3. read
                              	// 4. write
                              	// 5. name
                              	// 6. type
                              	// 7. unit
                              	// 8. role
                              	// 9. CCU variable (optional)
                              var etaVars = [
                              	 ["/120/10251/0/0/12242",		"eta.puffer.oben",				true, false, "Puffer oben",						"number",	"°C",		"value.temperature",    ""]
                              	,["/120/10251/0/0/12244",		"eta.puffer.unten",				true, false, "Puffer unten",					"number",	"°C",		"value.temperature",    ""]
                              	,["/120/10251/0/0/12522",		"eta.puffer.mitte",	 		   	true, false, "Puffer mitte",					"number",	"°C",		"value.temperature",    ""]
                              	,["/120/10251/0/0/12533",		"eta.puffer.leistung",			true, false, "Puffer Leistung",					"number",	"KW",		"state",                ""]
                              	,["/120/10251/12130/0/1109",	"eta.puffer.zustand",			true, false, "Puffer Zustand",					"string",	"",			"state",                ""]
                              	
                              	,["/120/10101/0/0/12080",	    "eta.hk.1.zustand",				true, false, "Heizkreis Zustand",				"string",	"",			"state",                ""]
                              	,["/120/10101/0/0/19391",	    "eta.hk.1.info",				true, false, "Heizkreis Info",		     		"string",	"",			"state",                ""]
                                  ,["/120/10101/0/0/12241",		"eta.hk.1.vorlauf",				true, false, "Heizkreis Vorlauf",				"number",	"°C",		"value.temperature",    ""]
                              	,["/120/10101/0/0/12111",		"eta.hk.1.heizkurve",			true, false, "Heizkreis Heizkurve",				"number",	"°C",		"value.temperature",    ""]
                              	,["/120/10101/0/11124/0",		"eta.hk.1.pumpe",				true, false, "Heizkreis Pumpe",					"string",	"",			"state",                ""]
                              	,["/120/10101/0/11124/2001",	"eta.hk.1.anforderung",			true, false, "Heizkreis Anforderung",			"string",	"",			"state",                ""]
                              	
                              	,["/40/10021/0/0/19402",		"eta.kessel.aktion",			true, false, "Kessel",      					"string",	"",			"state",                ""]
                              	,["/40/10021/0/11123/2002",		"eta.kessel.pumpe",		     	true, false, "Kesselpumpe",      				"string",	"",			"state",                ""]
                                  ,["/40/10021/0/0/12153",		"eta.kessel.vollast",			true, false, "Kessel Vollaststunden",			"string",	"",		    "state",                ""]
                              	,["/40/10021/0/0/12016",		"eta.kessel.verbrauch",			true, false, "Kessel Gesamtverbrauch",			"number",	"kg",		"state",                ""]
                              	,["/40/10021/0/0/12013",		"eta.kessel.aschebox",			true, false, "Kessel Verbrauch seit Aschebox",	"number",	"kg",		"state",                ""]
                              	,["/40/10021/0/0/12180",		"eta.kessel.druck",				true, false, "Kessel Druck",					"number",	"bar",		"state",                ""]
                              	,["/40/10021/0/0/12001",		"eta.kessel.soll",				true, false, "Kessel Soll",						"number",	"°C",		"state",                ""]
                              	,["/40/10021/0/0/12161",		"eta.kessel.ist",				true, false, "Kessel Ist",						"number",	"°C",		"state",                ""]
                              	,["/40/10021/0/0/12162",		"eta.kessel.abgasgtemp",		true, false, "Kessel Abgastemperatur",			"number",	"°C",	    "state",                ""]
                              	,["/40/10021/0/0/12165",		"eta.kessel.abgasgeblaese",		true, false, "Kessel Abgasgebläse",				"number",	"U/min",	"state",                ""]
                              	,["/40/10021/0/0/12164",		"eta.kessel.restsauerstoff",	true, false, "Kessel Restsauerstoff",			"number",	"%",		"state",                ""]
                              	,["/40/10021/0/0/12080",		"eta.kessel.zustand",			true, false, "Kessel Zustand",					"string",	"",			"state",                ""]
                              	
                              	,["/40/10201/0/0/12015",		"eta.lager.silo",				true, false, "Pellets Silo",					"number",	"kg",		"state",                ""]
                              	,["/40/10021/0/0/12011",		"eta.lager.tag",				true, false, "Pellets Tagesbehälter",			"number",	"kg",		"state",                ""]
                              	,["/40/10241/0/0/12197",		"eta.system.aussentemperatur",	true, false, "Aussentemperatur",				"number",	"°C",		"state",                ""]
                              ];
                              
                              etaVars.forEach(function(etaVar){
                                  createState(objectInstanz + etaVar[1], 0, {
                                      read:  etaVar[2],
                                      write: etaVar[3],
                                      name:  etaVar[4],
                                      type:  etaVar[5],
                                      unit:  etaVar[6],
                                      role:  etaVar[7]
                                  });
                              });
                              
                              schedule("*/7 * * * *", function () {
                                  pollETA();
                              });
                              
                              pollETA();
                              
                              function pollETA() {
                                  // console.log("** Polling ETA Variables");
                              	etaVars.forEach(function(etaVar){
                              		http.get(etaIP + etaVar[0], function (http_res) {
                              
                              			// initialize the container for our data
                              			var data = "";
                              
                              			// this event fires many times, each time collecting another piece of the response
                              			http_res.on("data", function (chunk) {
                              				// append this chunk to our growing `data` var
                              				data += chunk;
                              				// console.log("** ETA chunk: " + chunk);
                              			});
                              
                              			// this event fires *one* time, after all the `data` events/chunks have been gathered
                              			http_res.on("end", function () {
                              				// console.log("** ETA data: " + data);
                              
                              				try {
                              					var doc = new dom().parseFromString(data);
                              					var select = xpath.useNamespaces({"eta": "http://www.eta.co.at/rest/v1"});
                              
                              					var strValue    = (select('//eta:value/@strValue',    doc)[0].nodeValue);
                              					var text        = (select('//eta:value/text()',       doc)[0].nodeValue);
                              					var scaleFactor = (select('//eta:value/@scaleFactor', doc)[0].nodeValue);
                              					var unit        = (select('//eta:value/@unit',        doc)[0].nodeValue);
                                                  var value       = "";
                                                  
                              					if (etaVar[5]=="number") {
                              						value = text * 1.0 / scaleFactor;
                              					} else {
                              						value = strValue;
                              					}
                              
                              					/* console.log("**** ETA " + etaVar[0] + " @strValue:    " + strValue);
                              					console.log("**** ETA " + etaVar[0] + " @unit:        " + unit);
                              					console.log("**** ETA " + etaVar[0] + " text()  :     " + text);
                              					console.log("**** ETA " + etaVar[0] + " @scaleFactor: " + scaleFactor);
                              					console.log("** ETA [" + etaVar[4] + "]: " + value + " " + unit); */
                              
                              					setState(objectInstanz + etaVar[1], value, true);
                              					
                              
                              				}
                              				catch (e) {
                              					log("ETA: Cannot set data "+ etaVar[2] +":" + e, 'error');
                              				}
                              			});
                              		});
                              	});
                                  log(formatDate(new Date(), "DD. O YYYY hh:mm"), "info");
                              }
                              

                              Vielleicht hilft es jemandem....

                              ronin_mnR Offline
                              ronin_mnR Offline
                              ronin_mn
                              schrieb am zuletzt editiert von
                              #73

                              @tcfigge
                              Ich habe das Script überarbeitet bzw. größtenteils neu geschrieben. Leider habe ich zurzeit keine Zeit mehr mich mit ioBroker zu beschäftigen. Hier mein fast fertiges Script, welches im Adapter "javascript" auf meinem Raspberry läuft und einigermaßen zuverlässig alle Werte ausliest, falls jemand Lust hat, um es weiter zu entwickeln :)
                              Den Ordner "0_userdata.0.etatouch" muss man zuvor manuell unter Objekte anlegen.

                              Screenshot userdata.JPG

                              var http = require('http');
                              var etaip = 'http://ETA-IP-ADRESSE:8080';
                              var TasksQueue = [];
                              const util = require('util');
                              
                              
                              MainLoop();
                              
                              function MainLoop() { 
                                  getETAerrors();
                              
                                  var request = require('request');
                                  var parseString = require('xml2js').parseString;
                                  var options = {url: etaip + '/user/menu', method: 'GET'};
                                  TasksQueue = [];
                                  
                                  request(options, function(error, response, body) {
                                      if (!error && response.statusCode == 200) {
                                          //DEBUG: console.log(body);
                                          //Example: <eta version="1.0"><menu><fub uri="/79/10531" name="FWM"><object uri="/79/10531/0/0/10990" name="Eingänge"><object uri="/79/10531/0/2310/0" name="Durchflusssensor"/><object uri="/79/10531/0/11148/0" name="Warmwasser">....
                                          try {
                                              parseString(body, {explicitArray: false, attrkey : 'attribs', charkey: 'val' }, function (err, EtaMenuTree) {
                                                  console.log("ETA: Query Menu tree complete.");
                                                  EtaMenuTree.eta.menu.fub.forEach((fub, index) => {  //"fub" level with forEach
                                                      walkThroughMenuTree(fub,0, "0_userdata.0.etatouch"); //other levels recursive
                                                  });
                                              });
                                              console.log("ETA: Found " + TasksQueue.length + " menu items. Start querying...");
                                              var nextFunct = TasksQueue.shift(); //nextFunct is filled by walkThroughMenuTree()
                                              nextFunct();
                                          } catch (e) {
                                              console.error("Unparsable XML-Data from ETAtouch Webservice (" + etaip + "): " + e)
                                          }
                                      } else {
                                          console.error("Connection error to ETAtouch Webservice (" + etaip + "): " + error);
                                      }
                                  });
                              }
                              
                              function walkThroughMenuTree(EtaMenuTree, recursivLevel, recursivName) {
                                  var statename = recursivName + "." + EtaMenuTree.attribs.name.replace("?","").replace(".","");
                                 
                                  if (recursivLevel == 0) {
                                      if (!existsState(statename)) {
                                          //for first level of menu tree ("FUBs") there are now values. just create an empty folder.
                                          createState(statename, "", {name: EtaMenuTree.attribs.uri, desc: "", type: 'string', unit: "", role: "text"});
                                      }
                                  } else {
                                      if (!existsState(statename)) {
                                          //Create only new state. at next MainLoop the state value will be queried
                                          //The following functions runs async. Eta has more the 600 states. Don't query all at the same time. will not work due to max current connections and so on. 
                                          TasksQueue.push(function() {InitialRequestVariable(EtaMenuTree.attribs.uri, statename)});     
                                      } else {
                                          TasksQueue.push(function() {RequestValue(EtaMenuTree.attribs.uri, statename, getObject(statename))});          
                                      }
                                  }
                              
                                  //"object" is the name of the array with sub-items 
                                  if (EtaMenuTree.object !== undefined) {
                                      if (! Array.isArray(EtaMenuTree.object)) {
                                          walkThroughMenuTree(EtaMenuTree.object, recursivLevel+1,statename);
                                      } else {
                                          EtaMenuTree.object.forEach((el, index) => {
                                              walkThroughMenuTree(el, recursivLevel+1, statename);
                                          });
                                      }
                                  }
                              }
                              
                              function RequestValue(uri, statename, thisstate) {
                                  var request = require('request');
                                  var options = {url: 'http://ETA-IP-ADRESSE:8080/user/var/'+uri , method: 'GET' };
                              
                                  request(options, function(error, response, body) {
                                      var tmpdec=0.0; var tmpint=0;
                                      var parseString = require('xml2js').parseString;
                              
                                      if (!error && response.statusCode == 200) {
                                          try {
                                              parseString(body, {explicitArray: false, attrkey : 'attribs', charkey: 'val'}, function (err, result) {
                                                  if (thisstate.common.unit != result.eta.value.attribs.unit) {
                                                      //sometimes the unit is not set in /usr/varinfo. 
                                                      extendObject(statename,{common: { unit: result.eta.value.attribs.unit }});
                                                  }
                              
                                                  if (thisstate.common.type == 'string') {
                                                      //Example: <value uri="/user/var/40/10021/0/0/19402" strValue="Bereit" unit="" decPlaces="0" scaleFactor="1" advTextOffset="4000">4001</value>
                                                      //unit "" means it is a string value. then the field value is empty. use strValue instead
                                                      if (Array.isArray(thisstate.common.states)) {
                                                          setState(statename, {val: result.eta.value.val, q: 0x00}, true);
                                                      } else {
                                                          //States which does not have a value list gets the attirb strValue to the state (e.g. ON instead of 4000)
                                                          setState(statename, {val: result.eta.value.attribs.strValue, q: 0x00}, true);
                                                      }
                                                  } else {
                                                      //Example1: <value uri="/user/var/40/10211/0/0/12015" strValue="2668" unit="kg" decPlaces="0" scaleFactor="10" advTextOffset="0">26675</value>
                                                      //    --> tmpdec = 2667.5
                                                      //Example2: <value uri="/user/var/40/10021/0/0/12299" strValue="7602h 3m" unit="s" decPlaces="0" scaleFactor="1" advTextOffset="0">2.73674e+07</value>
                                                      tmpint = parseInt(result.eta.value.attribs.scaleFactor);
                                                      tmpdec = parseFloat(result.eta.value.val) / tmpint;                  
                                                      setState(statename, {val: tmpdec, q: 0x00}, true);
                                                  }
                                              });
                                          } catch (e) {
                                              console.error("Query ETA-variable processing error (" + statename + "): " + e)
                                          }
                                      } else {
                                          setState(statename, {val: getState(statename).val, q: 0x02}, true);
                                          console.error("Query ETA-variable connection error (" + statename + "): " + error)
                                      }
                              
                                      if (TasksQueue.length % 50 == 0) {
                                          console.log("ETA: Remaining menu items: " + TasksQueue.length);
                                      }
                              
                                      //DEBUG: if (TasksQueue.length < 760) return;
                                      var nextFunct = TasksQueue.shift();
                                      nextFunct();
                                  });
                              }
                              
                              function InitialRequestVariable(uri, statename) {
                                  var request = require('request');
                                  var options = {url: 'http://ETA-IP-ADRESSE:8080/user/varinfo/'+uri , method: 'GET' };
                                  
                                  request(options, function(error, response, body) {
                                      var tmpdec=0.0; var tmpint=0;
                                      var parseString = require('xml2js').parseString;
                                      //DEBUG: console.log(body);
                                  
                                      if (!error && response.statusCode == 200) {
                                          try {
                                              parseString(body, {explicitArray: false, attrkey : 'attribs', charkey: 'val'}, function (err, result) {
                                                  //DEBUG: log(util.inspect(result, { showHidden: true, depth: null }));
                              
                                                  var isReadable=true;
                                                  var validValues = {"test": "test-val"}; //create array/object with two strings: Record<string,string>
                                                  delete validValues.test; //empty validValues
                                                  
                                                  var isWriteable=false;   
                                                  if (result.eta.varInfo.variable.attribs.isWritable == "1" ) {
                                                      isWriteable = true;
                                                  }
                              
                                                  if (result.eta.varInfo.variable.type == "TEXT") {
                                                      if (result.eta.varInfo.variable.validValues !== undefined) {                    
                                                          //Example: <validValues><value strValue="Aus">1802</value><value strValue="Ein">1803</value></validValues></variable>
                                                          //  -->    { val: '1802', attribs: { strValue: 'Aus' } }, { val: '1803', attribs: { strValue: 'Ein' }
                                                          if (Array.isArray(result.eta.varInfo.variable.validValues.value)) { 
                                                              result.eta.varInfo.variable.validValues.value.forEach((el, index) => {
                                                                  validValues[el.val] = el.attribs.strValue;
                                                              });
                                                          } else {
                                                              console.log(statename);
                                                              var el = result.eta.varInfo.variable.validValues.value;
                                                              validValues[el.val] = el.attribs.strValue;
                                                          }
                                                      }
                                                      createState(statename, "", {name: uri, desc: result.eta.varInfo.variable.attribs.fullName, type: 'string', unit: "", role: "text", read: isReadable, write: isWriteable , states: validValues});    
                                                  } else {
                                                      //Example: <variable uri="120/10601/0/0/13191" name="Puffer oben" fullName="Puffer > Erzeuger Kessel/Puffer > Puffer oben" unit="°C" decPlaces="0" scaleFactor="10" advTextOffset="0" isWritable="0">  <type>DEFAULT</type>   </variable>
                                                      if (result.eta.varInfo.variable.attribs.unit == "°C") {
                                                          createState(statename, 0.0, {name: uri, desc: result.eta.varInfo.variable.attribs.fullName, type: 'number', unit: result.eta.varInfo.variable.attribs.unit, role: "value.temperature", read: isReadable, write: isWriteable });
                                                      } else {
                                                          createState(statename, 0.0, {name: uri, desc: result.eta.varInfo.variable.attribs.fullName, type: 'number', unit: result.eta.varInfo.variable.attribs.unit, role: "value", read: isReadable, write: isWriteable });
                                                      }
                                                  }
                                              });
                              
                                          } catch (e) {
                                              console.error("Query ETA-variable-info processing error (" + statename + "): " + e)
                                          }
                                      } else {
                                          console.error("Query ETA-variable-info connection error (" + statename + "): " + error)
                                      }
                              
                                      if (TasksQueue.length % 50 == 0) {
                                          console.log("ETA: Remaining menu items: " + TasksQueue.length);
                                      }
                              
                                      //DEBUG: if (TasksQueue.length < 700) return;      
                                      var nextFunct = TasksQueue.shift();
                                      nextFunct();
                              
                                  //ToDo: Request error
                                  });
                              }
                              
                              function getETAerrors() {
                                  var request = require('request');
                                  var options = {url: 'http://ETA-IP-ADRESSE:8080/user/errors' , method: 'GET' };
                                  
                                  request(options, function(error, response, body) {
                                      var parseString = require('xml2js').parseString;
                                      var resultString = "";
                              
                                      if (!error && response.statusCode == 200) {
                                          parseString(body, {explicitArray: true, attrkey : 'attribs', charkey: 'val'}, function (err, result) {
                                              //DEBUG: log(util.inspect(result, { showHidden: true, depth: null }));
                                              resultString="";
                                              result.eta.errors[0].fub.forEach((el, index) => {
                                                  /*<fub uri="/40/10021" name="Kessel">
                                                      <error msg="Reinigung durch Kunde " priority="Nachricht" time="2023-02-17 08:47:46">
                                                          Die jährliche Reinigung muss durchgeführt werden. Die einzelnen Schritte sind in der Bedienungsanleitung des Kessels angeführt.
                                                      </error>*/
                                                  if (el.error !== undefined) {
                                                      el.error.forEach((el, index) => {
                                                          if (el.attribs.priority == "Error") { 
                                                              //Put error messages at the beginning
                                                              if (resultString != "") {
                                                                   resultString =  "\n" + resultString;
                                                              }
                                                              resultString = el.attribs.priority + ': ' + el.attribs.msg + ' - "' + el.val + '"' + resultString;
                                                          } else {
                                                              if (resultString != "") {
                                                                   resultString = resultString + "\n";
                                                              }
                                                              resultString = resultString + "\n" + el.attribs.priority + ': ' + el.attribs.msg + ' - "' + el.val + '"';
                                                          }
                                                      });
                                                  }
                                              });
                                          });
                                          if (!existsState("0_userdata.0.etatouch.Messages")){
                                              createState("0_userdata.0.etatouch.Messages", resultString, {name: "Error(s), Messages", desc: "Error(s) and other Messages", type: 'string', unit: "", role: "text", read: true, write: false});    
                                          } else {
                                              setState("0_userdata.0.etatouch.Messages", resultString, true);
                                          }
                                      }
                                  });
                              }
                              
                              
                              
                              /*
                                  ToDos:
                                  - () createChannel für erste Ebene
                                  - () Doku verbessern
                                  Nice to Have:
                                  - () States schreiben / ändern
                                  - () pollinterval oder so einbauen, damit wichtige States jede Minuten abgefragt werden
                              */ 
                              
                              
                              
                              
                              
                              
                              
                              1 Antwort Letzte Antwort
                              0
                              • R Rille06

                                @kapsville
                                sry das ich jetzt erst antworte.
                                Du musst für ModBus TCP an der Heizung entsprechend werte "freigeben" und Adressieren.
                                unten Links auf die Werkzeugkiste -> Berechtigung -> 135 "Enter"
                                Danach über die Parameterliste einzeln alle werte die du willst via Zahnradsymbol -> MusdBus/TCP -> Register zuweisen
                                Oben Links und in der Info (falls vorhanden) stehen allgemeine Infos dazu, ist relativ selbsterklärend.
                                Idr sind alles Signed 32 bit (Big Endian) oder Unsigned 32 bit (Big Endian) als Datentyp.
                                Dann eben alle Register im ModBus Adapter entsprechend eintragen.

                                An der ETA hab ich das über VNC Viewer gemacht.
                                Funktioniert bei mir schon lange problemlos.

                                K Offline
                                K Offline
                                Kapsville
                                schrieb am zuletzt editiert von
                                #74

                                @rille06
                                Wollte mich noch bedanken - so klappt es, ist mir aber zu umständlich :) Ich lese es nun via HomeAssistant aus, da gibts eine fertige Integration.

                                1 Antwort Letzte Antwort
                                0
                                • W warp735

                                  @catnipper
                                  Ja, viel besser. Auch das steuern klappt so super zuverlässig und ist 100x einfacher

                                  T Offline
                                  T Offline
                                  tcfigge
                                  schrieb am zuletzt editiert von
                                  #75

                                  @warp735
                                  Moin!
                                  Gibt es da irgenwo eine Step by Step Anleitung für DAUs? :wink:

                                  W 1 Antwort Letzte Antwort
                                  0
                                  • T tcfigge

                                    @warp735
                                    Moin!
                                    Gibt es da irgenwo eine Step by Step Anleitung für DAUs? :wink:

                                    W Offline
                                    W Offline
                                    warp735
                                    schrieb am zuletzt editiert von
                                    #76

                                    @tcfigge
                                    Kenne keine... aber ist eigentlich selbsterklärend. Modbus Variablen an der Heizung anlegen (die die benötigt werden) und die dann in ioBroker abfragen.

                                    1 Antwort Letzte Antwort
                                    0
                                    • ? Offline
                                      ? Offline
                                      Ein ehemaliger Benutzer
                                      schrieb am zuletzt editiert von
                                      #77

                                      Tag habe das script etwas umgeschrieben. Benötige nur die Abfrage der Parameter. Leider ein Fehlschlag! Hab auch nicht wirklich Ahnung davon. ist mehr probieren. Muß ich außer Modbus noch was laden? Würde mich über Hilfe freuen.

                                      var http = require('http');
                                      //var xpath = require('xpath');
                                      //var dom = require('@xmldom/xmldom').DOMParser;
                                      var objectInstanz = '0_userdata.0.Heizung.';

                                      var etaIP = 'http://192.168.48.23:8080/user/var';

                                      var etaVars = [
                                      ["/120/10601/0/11327/0", "eta.Puffer.oben", true, false, "Puffer oben", "string", "°C", "value.temperature", ""]
                                      ,["/120/10601/0/11328/0", "eta.Puffer.mitte", true, false, "Puffer mitte", "string", "°C", "value.temperature", ""]
                                      ,["/120/10601/0/11329/0", "eta.Puffer.unten", true, false, "Puffer unten", "string", "°C", "value.temperature", ""]
                                      ,["/120/10601/0/0/12528", "eta.Puffer.ladezustand", true, false, "Puffer Ladezustand", "number", "%", "state", ""]

                                      ,["/120/10101/0/11125/2120",	"eta.HK.vorlauf",		            true, false, "Heizkreis Vorlauf Soll Temp",		"number",	"°C",		"value.temperature",    ""] 
                                      ,["/120/10101/0/11125/2121",	"eta.HK.vorlaufIst",		        true, false, "Heizkreis Vorlauf Ist Temp",		"number",	"°C",		"value.temperature",    ""] 
                                      
                                      
                                      ,["/40/10021/0/0/12153",		"eta.kessel.vollast",			    true, false, "Kessel Vollaststunden",			"string",	"",		    "state",                ""]
                                      ,["/40/10021/0/0/12016",		"eta.kessel.verbrauch",			    true, false, "Kessel Gesmtverbrauch",			"number",	"kg",		"state",                ""]
                                      ,["/40/10021/0/0/12013",		"eta.kessel.aschebox",			    true, false, "Kessel Verbrauch seit Aschebox",	"number",	"kg",		"state",                ""]
                                      ,["/40/10021/0/0/12180",		"eta.kessel.druck",				    true, false, "Kessel Druck",					"number",	"bar",		"state",                ""]
                                      ,["/40/10021/0/0/12001",		"eta.kessel.soll",				    true, false, "Kessel Soll",						"number",	"°C",		"state",                ""]
                                      ,["/40/10021/0/0/12161",		"eta.kessel.ist",				    true, false, "Kessel Ist",						"number",	"°C",		"state",                ""]
                                      ,["/40/10021/0/0/12162",		"eta.kessel.abgasgtemp",		    true, false, "Kessel Abgastemperatur",			"number",	"°C",	    "state",                ""]
                                      ,["/40/10021/0/0/12165",		"eta.kessel.abgasgeblaese",		    true, false, "Kessel Abgasgebläse",				"number",	"U/min",	"state",                ""]
                                      ,["/40/10021/0/0/12164",		"eta.kessel.restsauerstoff",	    true, false, "Kessel Restsauerstoff",			"number",	"%",		"state",                ""]
                                      ,["/40/10021/0/0/12080",		"eta.kessel.zustand",			    true, false, "Kessel Zustand",					"string",	"",			"state",                ""]
                                      ,["/40/10021/0/0/12077",		"eta.kessel.angeforderteLeistung",	true, false, "Kessel angeforderte Leistung",	"number",	"kW",		"state",                ""]
                                      
                                      ,["/40/10201/0/0/12015",		"eta.lager.silo",				    true, false, "Pellets Silo",					"number",	"kg",		"state",                ""]
                                      ,["/40/10021/0/0/12011",		"eta.lager.tag",				    true, false, "Pellets Tagesbehälter",			"number",	"kg",		"state",                ""]
                                      ,["/120/10601/0/0/12197",		"eta.system.aussentemperatur",	    true, false, "Aussentemperatur",				"number",	"°C",		"state",                ""]
                                      
                                      ,["/79/10531/0/11137/2001",		"eta.FWM.Zirkulation",	            true, false, "Anforderung Zirkulation",			"string",	"",		    "state",                ""]
                                      
                                      ,["/120/10101/0/11125/2001",	"eta.FBH.HKmischerAnforderung",	    true, false, "Anforderung Heizkreismischer",	"string",	"",		    "state",                ""]
                                      ,["/120/10101/0/11125/2120",	"eta.FBH.HKmischerSoll",	        true, false, "Soll Temp Heizkreismischer",	    "number",	"°C",		"value.temperature",    ""]
                                      ,["/120/10101/0/11125/2121",	"eta.FBH.HKmischerIst",	            true, false, "Ist Temp Heizkreismischer",	    "number",	"°C",		"value.temperature",    ""]
                                      ,["/120/10101/0/11125/2002",	"eta.FBH.HKmischerZustand",	        true, false, "Zustand Heizkreismischer",	    "string",	"",		    "state",                ""]
                                      ,["/120/10101/0/11125/2127",	"eta.FBH.HKmischerPosition",	    true, false, "Position Heizkreismischer",	    "number",	"%",	    "value.percent",        ""]
                                      ,["/120/10101/0/11125/2124",	"eta.FBH.Laufzeit",	                true, false, "Laufzeit Heizkreismischer",	    "number",	"s",		"",           ""]
                                      ,["/120/10101/0/11125/0",	    "eta.FBH.HKpumpeAusgang",	        true, false, "Heizkreispumpe Ausgang",	        "number",	"°C",		"value.temperature",    ""]
                                      ,["/120/10101/0/11125/2001",	"eta.FBH.HKpumpeAnforderung",       true, false, "Heizkreispumpe Anforderung",      "string",	"",		    "state",                ""]
                                      

                                      ];

                                      1 Antwort Letzte Antwort
                                      0
                                      • M Offline
                                        M Offline
                                        Maik
                                        schrieb am zuletzt editiert von
                                        #78

                                        Re: [Projekt] ETA Heizung hab ein Problem: ich möchte im iObroker im Adapter" energiefluß-erweitert" die Einstellung der Raumtemperaturen regeln über das auslesen des Modbuses. Hat dies jemand schon gelöst?

                                        arteckA 1 Antwort Letzte Antwort
                                        0
                                        • M Maik

                                          Re: [Projekt] ETA Heizung hab ein Problem: ich möchte im iObroker im Adapter" energiefluß-erweitert" die Einstellung der Raumtemperaturen regeln über das auslesen des Modbuses. Hat dies jemand schon gelöst?

                                          arteckA Offline
                                          arteckA Offline
                                          arteck
                                          Developer Most Active
                                          schrieb am zuletzt editiert von
                                          #79

                                          @maik

                                          die Einstellung der Raumtemperaturen regeln

                                          Regeln oder anzeigen.. ?? der Adapter ist prmär zum anzeigen gedacht

                                          zigbee hab ich, zwave auch, nuc's genauso und HA auch

                                          M 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

                                          682

                                          Online

                                          32.5k

                                          Benutzer

                                          81.7k

                                          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