NEWS
[Projekt] ETA Heizung
-
@amandus99 Falls noch aktuell - hier mein Script zur Einpflegen in eine InfluxDB:
https://gitlab.com/txlab/eta-mate -
@tennox Danke, habs dann doch irgendwann als Script umgesetzt und dann mit den DP in die InfluxDB geschickt
-
@catnipper Hallo, ich habe dein Skript versucht zu verstehen IP ist klar aber wo soll man den den Datenpunkt setzten damit er in den iobroker geschrieben wird ? In diesem Fall die ersten Zeilen hm-rega.0.1810 und hm-rega.0.1811 sind das die Datenpunkte dann ?
var etaVars = [ ["/120/10251/0/0/12242", "eta.puffer.oben", true, false, "Puffer oben", "number", "°C", "value.temperature", "hm-rega.0.1810"] ,["/120/10251/0/0/12244", "eta.puffer.unten", true, false, "Puffer unten", "number", "°C", "value.temperature", "hm-rega.0.1811"]
Oder anders ich würde gerne die Werte im ioBroker unter 0_userdata.0.ETA_SH20 schreiben. Für ein kleines Beispiel wäre ich sehr dankbar.
Danke schon mal.
-
@kmuenke Die Variablen der Heizung werden immer im Javascript erzeugt. Die Hierarchie ergibt sich dann automatisch aus der Struktur des XML vom Touch UI…
-
Erstmal Danke für den Adapter!
Kann man auch Variablen setzten?
Also Hintergrund ist der: Ich habe ein FWM (Frischwassermodul) und möchte gerne bei Bedarf die Zirkulation starten? Gibts da Möglichkeiten?Danke und Gruß
-
Würde mich auch intressieren. Kann jemand vielleicht seinen Code-Lösungsschnipsel posten, mit dem man in der Heizung Variablen ändern kann. Also Beispielweise den Heizkreis ein/aus.
In der Dokumentation von ETA gibt es ja folgendes Beispiel:
Example 1 Set the deash key to On:
POST /user/var/112/10021/0/0/12112 HTTP/1.1 Content-Type: application/x-www-form-urlencoded value=1803
Allerdings fehlen mir hier leider (noch) die Kenntnisse, wie man soetwas zum laufen bringt
-
@m4 in meinen eta-mate services gibt's ein Code-Schnipsel wo ich via JS (mit axios) die pellet automatik an/aus schalte:
https://gitlab.com/txlab/eta-bot/-/blob/486c2bbc2507aa86a38694e22347f351cae08904/src/modules/eta-api.ts#L63 -
Da ich im Moment überlege, ob meine ganze Peripherie einen Umzug zu ioBroker verträgt, hänge ich auch am ETA Adapter.
Gibt es den schon komplett fertig? Auf der ioBroker Seite ist er nicht direkt zu finden.
Ich würde auch gern primär Variablen auslesen, aber auch mal aus der Ferne den Kessel ausschalten, etc.
Danke -
@smarttux
Mach es über ein Skript. Das funktioniert wunderbar über den iobroker. Kannst damit auch steuernd eingreifen wenn du unbedingt magst -
Moin,
ich bin zufällig hierrüber gestolpert.
Hat nichts direkt mit dem Adapter zutun, aber die ETA kann auch ModBus TCP.
Mit dem ModBus Adapter ist dann lesen/schreiben problemlos möglich. -
@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.
-
@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.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:Zur Visualisierung läuft auf dem Raspberry auch noch Magic Mirror 2 und das sieht dann so aus:
Vielen Dank für deine großartige Arbeit mit dem Adapter !
-
Hallo,
ich benutze schon einige Zeit das Script...
Läuft sehr gut!
Seit ich gestern den Javascript Adapter upgedatet habe, bekomme ich folgende Fehlermeldung:5.10.2022, 18:55:43.852 [info ]: javascript.1 (22832) Stop script script.js.common.Blockly.Diverse.ETA 5.10.2022, 18:55:43.864 [info ]: javascript.0 (14977) Stop script script.js.common.Blockly.Diverse.ETA 5.10.2022, 18:55:43.920 [info ]: javascript.0 (14977) Start javascript script.js.common.Blockly.Diverse.ETA 5.10.2022, 18:55:44.060 [error]: javascript.0 (14977) script.js.common.Blockly.Diverse.ETA: Error: Cannot find module 'xpath' 5.10.2022, 18:55:44.061 [error]: javascript.0 (14977) at script.js.common.Blockly.Diverse.ETA:2:13 5.10.2022, 18:55:44.062 [error]: javascript.0 (14977) at script.js.common.Blockly.Diverse.ETA:124:3 5.10.2022, 18:55:44.089 [error]: javascript.0 (14977) script.js.common.Blockly.Diverse.ETA: Error: Cannot find module 'xmldom' 5.10.2022, 18:55:44.090 [error]: javascript.0 (14977) at script.js.common.Blockly.Diverse.ETA:3:11 5.10.2022, 18:55:44.091 [error]: javascript.0 (14977) at script.js.common.Blockly.Diverse.ETA:124:3 5.10.2022, 18:55:44.119 [info ]: javascript.0 (14977) script.js.common.Blockly.Diverse.ETA: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions 5.10.2022, 18:55:44.122 [error]: javascript.0 (14977) script.js.common.Blockly.Diverse.ETA: TypeError: Cannot read properties of undefined (reading 'DOMParser') 5.10.2022, 18:55:44.122 [error]: javascript.0 (14977) at script.js.common.Blockly.Diverse.ETA:3:28 5.10.2022, 18:55:44.122 [error]: javascript.0 (14977) at script.js.common.Blockly.Diverse.ETA:124:3
Hat jemand eine Idee und kann mir helfen?
-
@tcfigge Nach Downgrade auf Javascriptadapter 6.0 läuft es erstmal wieder... ?!?!?
-
@herry
Hi!
Super Vis!!!!
Würdest Du die zur Verfügung stellen?
Danke! -
Hallo, ich habe das gleiche Problem. Hab am Wochenende mal wieder ein paar Aktualisierungen durchgeführt.
Seit dem funktioniert das ETA Script bei mir auch nicht mehr. Scheinbar wurde das Module XMLDOM aus node.js entfernt.
Kennt jemand eine alternative?
Leider hat das Downgrade auf Javascript Version 6.0 bei mir nicht geholfen
Danke -
@herry HI! Geniale VIS könnte man die bekommen? LG Friedrich
-
@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.
Habe auch dieses Problem. @gmbh07 konntest du das Problem in der Zwischenzeit lösen?
-
@amandus99 said in [Projekt] ETA Heizung:
@smarttux
Mach es über ein Skript. Das funktioniert wunderbar über den iobroker. Kannst damit auch steuernd eingreifen wenn du unbedingt magstKönntest du bitte dein funktionierendes Skript teilen?
Ich bin leider auf noch einen grünen Zweig gekommen, wie ich die Anlage über den ioBroker schalten kann.
Also beispielsweise Pumpe/Kessel aus oder VL-Temperatur-Erhöhung. -
klar schau es dir an, habe zB einen Datenpunkt mit dem ich die Zirkulation vom FWM an und ausschalten kann
var http = require('http'); var xpath = require('xpath'); var dom = require('xmldom').DOMParser; var etaIP = 'http://192.168.10.82: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/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", ""] ///79/10531/12175/0/1109 Alternative ]; etaVars.forEach(function(etaVar){ createState(etaVar[1], 0, { read: etaVar[2], write: etaVar[3], name: etaVar[4], type: etaVar[5], unit: etaVar[6], role: etaVar[7] }); }); schedule("*/5 * * * *", function () { pollETA(); }); schedule("0 0 * * *", function () { checkLager(); }); pollETA(); //var lagerAlt = getState('javascript.0.eta.lager.silo').val; //deleteState("javascript.0.eta.lager.verbrauch"); //createState("javascript.0.eta.lager.verbrauch",0,{name:'Lager Tagesverbrauch', type: 'number', unit: 'kg', role:'state'}); //createState("javascript.0.eta.lager.alt",LagerAlt,{name:'Lager TempAlt', type: 'number', unit: 'kg', role:'state'}); //createState("javascript.0.eta.lager.Resttage",-1,{name:'Lager Anzahl Tage', type: 'number', unit: 'days', role:'state'}); //createState("javascript.0.eta.lager.letzterTag",-1,{name:'Lager Letzter Tag mit Pellets', type: 'string', unit: '', role:'state'}); //setState("javascript.0.eta.lager.alt", LagerAlt, true/*ack*/); //var LagerNeu = checkLager(LagerAlt); //checkLager(); function debugOutput(){ var akt = getState('javascript.0.eta.lager.silo').val; var verbrauch = getState("javascript.0.eta.lager.verbrauch").val; var restTage = 0; restTage = Math.round(akt/verbrauch) log("## Aktuelle Verbrauswerte ##"); log("----------------------------"); log("Lager akt: " + akt); log("Lager verbrauch: " + verbrauch); var ungerundet = akt/verbrauch; log("ungerundet: " +ungerundet); log("restTage " + restTage); var someDate = new Date(); var numberOfDaysToAdd = restTage; someDate.setDate(someDate.getDate() + numberOfDaysToAdd); var endOfPellets = formatDate(someDate, "DD.MM.YYYY"); log("endofPellets: " + endOfPellets); setState("javascript.0.eta.lager.letzterTag", endOfPellets, true); setState("javascript.0.eta.lager.Resttage", restTage, true); } //debugOutput(); function checkLager(){ var lagerAlt = getState('javascript.0.eta.lager.alt').val; //var LagerAlt = getState('javascript.0.eta.lager.silo').val; var akt = getState('javascript.0.eta.lager.silo').val; log("** Aktuelle Verbrauswerte **"); log("----------------------------"); log("Lager alt: " + lagerAlt); log("Lager aktuell: " + akt); var verbrauch = lagerAlt - akt; //var verbrauch = getState("javascript.0.eta.lager.verbrauch").val; // edit back after debug setState("javascript.0.eta.lager.verbrauch", verbrauch, true/*ack*/); setState("javascript.0.eta.lager.alt", akt, true/*ack*/); log("Verbrauch: " + verbrauch); var restTage = 0; restTage = Math.round(akt/verbrauch); var ungerundet = akt/verbrauch; var someDate = new Date(); var numberOfDaysToAdd = restTage; someDate.setDate(someDate.getDate() + numberOfDaysToAdd); var endOfPellets = formatDate(someDate, "DD.MM.YYYY"); setState("javascript.0.eta.lager.letzterTag", endOfPellets, true); setState("javascript.0.eta.lager.Resttage", restTage, true); log("end of pellets" + endOfPellets); lagerAlt = akt; } //checkLager(); function pollETA() { // 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; // log("** ETA chunk: " + chunk); }); // this event fires *one* time, after all the `data` events/chunks have been gathered http_res.on("end", function () { // 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 = ""; //change Aus to false, An to true for Zirkulation if (etaVar[0] == "/79/10531/0/11137/2001"){ if (strValue == "Aus"){ strValue = "false"; } else strValue = "true"; } if (etaVar[5]=="number") { value = text * 1.0 / scaleFactor; } else { value = strValue; } setState(etaVar[1], value, true); } catch (e) { log("ETA: Cannot set data "+ etaVar[2] +":" + e, 'error'); } }); }); }); }