Wahnsinn, wie die Zeit vergeht. Es ist fast ein Jahr her, dass ich die letzte Version hier abgelegt hab.
Ich habe das ioBroker-Skript erweitert. Prinzipiell gilt, was ich am 27.10.21 schrieb. Einige Änderungen gibt es aber. Hier der überarbeitete Info-Text:
Grundlage ist das Skript von Markus (Danke dafür, ich habe viel gelernt). Als Fingerübung habe ich es für meine Zwecke angepasst. Eigentlich muss es nur eingespielt und gestartet werden. Es sei denn, die MQTT-Daten vom Thermo finden sich nicht unter mqtt.0 oder die ausgelesenen Werte sollen nicht unter javascript.0.WlanThermo abgelegt werden.
Der mqtt-Adapter muss natürlich eingespielt und die Anmeldedaten dort und im Thermo hinterlegt worden sein.
Wenn das Skript gestartet wird, durchläuft es alle, unter mqtt angemeldeten, Thermos und hinterlegt sie in einem Array. Für jedes Thermo werden die data- und settings-Objekte gelesen, geparsed und unter javascript.0.WLANThermo.[Thermoname] abgelegt. Ich habe ein Mini V2, es sollte aber auch mit den anderen Thermos klappen. Falls nicht, bitte eine Rückmeldung geben, ich schaue dann mal, ob ich das anpassen kann.
Beim ersten Start sollte es jetzt keine Warnungen mehr geben. Falls doch, bitte Bescheid geben. Am besten auch die Fehlermeldung aus dem Log mitgeben.
Unter javascript.0.WLANThermo wird ein State 'UpdateThermoListe' angelegt. Wird er auf true gesetzt, wird die Thermoliste neu aufgebaut. Das gilt natürlich auch für einen Neustart des Skripts. Veraltete Einträge von z.B. nicht mehr vorhandenen Thermos müssen händisch gelöscht werden, das macht das Skript nicht. Der Trigger kann z.B. über eine Oberfläche (Node-Red-Dashboard, ...) gesetzt werden, um das Neueinlesen zu starten.
Bei Änderungen an den mqtt-Objekten (das, was das Thermo regelmäßig schickt), werden die Objekte neu geparsed und die Werte wieder abgelegt. Das passiert alle X Sekunden, auch wenn sich die Werte vorher ändern. Im Thermo kann eingestellt werden, wie groß X sein soll, also in welchem Intervall die Werte aktualisiert werden sollen.
Unter javascript.0.WLANThermo.[Thermoname] wird ein State 'change' angelegt. Wird dieser auf true gesetzt, werden die Daten aus javascript.0.WLANThermo.[Thermoname] gelesen und in den mqtt-Bereich in ioBroker geschrieben. Dadurch werden Änderungen ans jeweilige Thermo geschickt.
Was ich noch bauen möchte ist, über das Node-Red-Dashboard Werte zu ändern und die ans Thermo zu schicken. Allerdings liest das Skript Änderungen vom Thermo ja, sobald das Thermo neue Daten schickt. Das würde die Werte im javascript.0.WLANThermo.[Thermoname]-Bereich überschreiben. Und zwar wohl relativ häufig, bei einem Intervall von 30 Sekunden. Da muss man wissen, wann ein Update kommt und hat dann wenig Zeit, die Anpassungen auch vorzunehmen. Aktuelle Idee: Ich setze einen Wert über Node-Red, der dafür sorgt, dass vorübergehend keine Werte vom Thermo ausgelesen werden. Wenn die Änderungen vorgenommen wurden, werden sie per Knopfdruck ans Thermo geschickt (javascript.0.WLANThermo.[Thermoname].change auf true setzen) und danach das Auslesen der Daten vom Thermo wieder aktiviert.
Falls jemand eine bessere Idee hat, immer her damit.
Falls euch Fehler auffallen oder irgendwas nicht gut umgesetzt ist, freue ich mich über jegliche Hinweise.