NEWS
[Javascript] Midas (Aquatemp) Poolheizung
-
Hallo zusammen,
erst einmal vielen Dank für das Skript!
Ich habe das WLAN-Modul nun nachgerüstet und wollte mit Eurem Skript die Einbindung in iobroker realisieren.Funktioniert das Skript bei Euch noch?
Ich habe das Problem, dass unter der Funktion updateDeviceID das Ergbnis von body.object_result immer leer ist.Dadurch ist egal welchen DP ich ändere, ich bekomme immer Zustandsänderung fehlgeschlagen!
Alle lesenden DP werden nicht befüllt. -
@fuxx-0 Komisch. Also bei mir klappt alles super.
Gibt es denn Fehlermeldungen im Log?
Funktioniert die App? -
@oxident
Vielen Dank für die Antwort. Ja das App funktioniert.
Ich habe einmal das PW geändert weil ich vermutet hatte, dass es zu Problemen mit Sonderzeichen kommt. Das war es leider nicht.Derzeit läuft noch kein Wasser durch die Wärmepumpe, da der Pool noch eingewintert ist. Aus dem Grund zeigt die App eine Fehlermeldung an.
Die Meldung kam aber erst gerade auf, weil ich die Pumpe zu lange ohne den Wassefluss angelassen hatte.Im App sehe ich trotzdem ein und augehende temperartur. Den Modus kann ich in der App auch schalten. (Off - Heat - Off habe ich erfolgreich in der App getestet. )
Beim initialen Start des Scriptes bekam ich folgende Fehlermeldung:
21:18:49.472 error javascript.0 (430) script.js.Regeln_Komfort.Pool_Wärmepumpe_steuern: TypeError: Cannot read properties of null (reading 'toString') 21:18:49.472 error javascript.0 (430) at updateDeviceSetTemp (script.js.Regeln_Komfort.Pool_Wärmepumpe_steuern:436:36) 21:18:49.473 error javascript.0 (430) at Object.<anonymous> (script.js.Regeln_Komfort.Pool_Wärmepumpe_steuern:523:5)
Dieser Fehler scheint sich aber nur auf die Erstellung der DP zu beziehen. Hier die passenden ausgaben aus dem Log:
javascript.0 2023-05-08 21:18:51.106 error Error in request callback: TypeError: Cannot read properties of undefined (reading 'device_code') javascript.0 2023-05-08 21:18:50.445 error Error in request callback: TypeError: Cannot read properties of undefined (reading 'device_code') javascript.0 2023-05-08 21:18:49.529 warn at processImmediate (node:internal/timers:468:21) javascript.0 2023-05-08 21:18:49.529 warn at Immediate._onImmediate (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:2411:33) javascript.0 2023-05-08 21:18:49.528 warn You are assigning a string to the state "0_userdata.0.Poolheizung.state" which expects a boolean. Please fix your code to use a boolean or change the state type to string. This warning might become an error in future versions. javascript.0 2023-05-08 21:18:49.522 warn at processImmediate (node:internal/timers:468:21) javascript.0 2023-05-08 21:18:49.522 warn at Immediate._onImmediate (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:2411:33) javascript.0 2023-05-08 21:18:49.521 warn You are assigning a string to the state "0_userdata.0.Poolheizung.silent" which expects a boolean. Please fix your code to use a boolean or change the state type to string. This warning might become an error in future versions. javascript.0 2023-05-08 21:18:49.497 warn at processImmediate (node:internal/timers:468:21) javascript.0 2023-05-08 21:18:49.497 warn at Immediate._onImmediate (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:2411:33) javascript.0 2023-05-08 21:18:49.496 warn You are assigning a string to the state "0_userdata.0.Poolheizung.error" which expects a boolean. Please fix your code to use a boolean or change the state type to string. This warning might become an error in future versions. javascript.0 2023-05-08 21:18:49.473 error at processImmediate (node:internal/timers:466:21) javascript.0 2023-05-08 21:18:49.473 error at Immediate.<anonymous> (/opt/iobroker/node_modules/@iobroker/js-controller-adapter/src/lib/adapter/adapter.js:5916:56) javascript.0 2023-05-08 21:18:49.473 error at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/main.js:593:29) javascript.0 2023-05-08 21:18:49.473 error at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1244:38) javascript.0 2023-05-08 21:18:49.473 error at Object.<anonymous> (script.js.Regeln_Komfort.Pool_Wärmepumpe_steuern:523:5) javascript.0 2023-05-08 21:18:49.472 error at updateDeviceSetTemp (script.js.Regeln_Komfort.Pool_Wärmepumpe_steuern:436:36) javascript.0 2023-05-08 21:18:49.472 error script.js.Regeln_Komfort.Pool_Wärmepumpe_steuern: TypeError: Cannot read properties of null (reading 'toString') javascript.0 2023-05-08 21:18:49.466 warn at processImmediate (node:internal/timers:468:21) javascript.0 2023-05-08 21:18:49.466 warn at Immediate._onImmediate (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:2411:33) javascript.0 2023-05-08 21:18:49.465 warn You are assigning a string to the state "0_userdata.0.Poolheizung.connection" which expects a boolean. Please fix your code to use a boolean or change the state type to string. This warning might become an error in future versions. javascript.0 2023-05-08 21:18:49.454 warn Read-only state "0_userdata.0.Poolheizung.tempOut" has been written without ack-flag with value "null" javascript.0 2023-05-08 21:18:49.413 warn Read-only state "0_userdata.0.Poolheizung.tempIn" has been written without ack-flag with value "null" javascript.0 2023-05-08 21:18:49.412 warn Read-only state "0_userdata.0.Poolheizung.errorLevel" has been written without ack-flag with value "null" javascript.0 2023-05-08 21:18:49.411 warn Read-only state "0_userdata.0.Poolheizung.ambient" has been written without ack-flag with value "null" javascript.0 2023-05-08 21:18:49.281 warn This object will not be created in future versions. Please report this to the developer. javascript.0 2023-05-08 21:18:49.281 warn Object 0_userdata.0.Poolheizung.state is invalid: Default value has to be type "boolean" but received type "string" javascript.0 2023-05-08 21:18:49.281 warn This object will not be created in future versions. Please report this to the developer. javascript.0 2023-05-08 21:18:49.281 warn Object 0_userdata.0.Poolheizung.silent is invalid: Default value has to be type "boolean" but received type "string" javascript.0 2023-05-08 21:18:49.281 warn This object will not be created in future versions. Please report this to the developer. javascript.0 2023-05-08 21:18:49.281 warn Object 0_userdata.0.Poolheizung.mode is invalid: obj.common.states has an invalid type! Expected "object", received "string" javascript.0 2023-05-08 21:18:49.280 warn This object will not be created in future versions. Please report this to the developer. javascript.0 2023-05-08 21:18:49.280 warn Object 0_userdata.0.Poolheizung.error is invalid: Default value has to be type "boolean" but received type "string" javascript.0 2023-05-08 21:18:49.280 warn This object will not be created in future versions. Please report this to the developer. javascript.0 2023-05-08 21:18:49.280 warn Object 0_userdata.0.Poolheizung.connection is invalid: Default value has to be type "boolean" but received type "string"
Bei jedem Start danach kommt die Meldung nicht mehr.
Wenn ich z.B. mode ändere und das Skript starte sieht die Ausgabe wie folgt aus:21:22:32.070 info javascript.0 (430) Stop script script.js.Regeln_Komfort.Pool_Wärmepumpe_steuern 21:23:12.289 info javascript.0 (430) Start javascript script.js.Regeln_Komfort.Pool_Wärmepumpe_steuern 21:23:12.293 info javascript.0 (430) script.js.Regeln_Komfort.Pool_Wärmepumpe_steuern: erstelle Objekte 21:23:12.294 info javascript.0 (430) script.js.Regeln_Komfort.Pool_Wärmepumpe_steuern: Token Neuanforderung 21:23:12.295 info javascript.0 (430) script.js.Regeln_Komfort.Pool_Wärmepumpe_steuern: schedule(cron=*/30 * * * * *) 21:23:12.295 info javascript.0 (430) script.js.Regeln_Komfort.Pool_Wärmepumpe_steuern: setInterval(ms=3600000) 21:23:12.297 info javascript.0 (430) script.js.Regeln_Komfort.Pool_Wärmepumpe_steuern: subscribe: {"pattern":{"id":"0_userdata.0.Poolheizung.mode","change":"ne","ack":false,"q":0},"name":"script.js.Regeln_Komfort.Pool_Wärmepumpe_steuern"} 21:23:12.297 info javascript.0 (430) script.js.Regeln_Komfort.Pool_Wärmepumpe_steuern: subscribe: {"pattern":{"id":"0_userdata.0.Poolheizung.silent","change":"ne","ack":false,"q":0},"name":"script.js.Regeln_Komfort.Pool_Wärmepumpe_steuern"} 21:23:12.297 info javascript.0 (430) script.js.Regeln_Komfort.Pool_Wärmepumpe_steuern: subscribe: {"pattern":{"id":"0_userdata.0.Poolheizung.tempSet","change":"ne","ack":false,"q":0},"name":"script.js.Regeln_Komfort.Pool_Wärmepumpe_steuern"} 21:23:12.297 info javascript.0 (430) script.js.Regeln_Komfort.Pool_Wärmepumpe_steuern: registered 3 subscriptions, 1 schedule, 0 messages, 0 logs and 0 file subscriptions 21:23:30.004 info javascript.0 (430) script.js.Regeln_Komfort.Pool_Wärmepumpe_steuern: getState(id=0_userdata.0.Poolheizung.mode, timerId=undefined) => {"val":"1","ack":false,"ts":1683573784694,"q":0,"from":"system.adapter.admin.0","user":"system.user.admin","lc":1683573784694} 21:23:30.005 info javascript.0 (430) script.js.Regeln_Komfort.Pool_Wärmepumpe_steuern: getState(id=0_userdata.0.Poolheizung.mode, timerId=undefined) => {"val":"1","ack":false,"ts":1683573784694,"q":0,"from":"system.adapter.admin.0","user":"system.user.admin","lc":1683573784694} 21:23:30.006 info javascript.0 (430) script.js.Regeln_Komfort.Pool_Wärmepumpe_steuern: getState(id=0_userdata.0.Poolheizung.silent, timerId=undefined) => {"val":"false","ack":true,"ts":1683573529522,"q":0,"c":"script.js.Regeln_Komfort.Pool_Wärmepumpe_steuern","from":"system.adapter.javascript.0","user":"system.user.admin","lc":1683573529457} 21:23:30.130 info javascript.0 (430) script.js.Regeln_Komfort.Pool_Wärmepumpe_steuern: Zustandsänderung fehlgeschlagen!
Im Log gibt es passend die folgende Meldung dazu:
javascript.0 2023-05-08 21:23:31.773 error Error in request callback: TypeError: Cannot read properties of undefined (reading 'device_code') javascript.0 2023-05-08 21:23:13.092 error Error in request callback: TypeError: Cannot read properties of undefined (reading 'device_code')
Hast du eine Idee woran es liegen kann? Ich schaue parallel weiter, sehe aber bisher keinen Fehler im Skript
-
Hmm, Du könntest auch mal testweise diese beiden Zeilen in der UpdateDeviceID() wieder "wegkommentieren":
//log(JSON.stringify(response)); //log(JSON.stringify(body.object_result));
Dann bekommst Du mehr Details über die Rückgabe des Servers ... und warum dort keine DeviceID kommt.
-
Das ist das was ich nicht verstehe. Anmeldung und Token erstellen klappt alles.
Der Response gibt auch 200 zurück und damit sollte doch eigentlich alles schön sein. Aber object_result ist leer.
Daher hatte ich befürchtet, dass die API geändert wurde. Wenn das Skript bei Euch aber noch läuft kann das ja auch nicht der Fall sein.08:50:53.746 info javascript.0 (430) script.js.Regeln_Komfort.Pool_Wärmepumpe_steuern: {"statusCode":200,"body":{"error_code":"0","error_msg":"Success","error_msg_code":"","object_result":[],"is_reuslt_suc":true},"headers":{"date":"Tue, 09 May 2023 06:50:53 GMT","content-type":"application/json;charset=UTF-8","transfer-encoding":"chunked","connection":"close"},"request":{"uri":{"protocol":"https:","slashes":true,"auth":null,"host":"cloud.linked-go.com","port":443,"hostname":"cloud.linked-go.com","hash":null,"search":null,"query":null,"pathname":"/cloudservice/api/app/device/deviceList.json","path":"/cloudservice/api/app/device/deviceList.json","href":"https://cloud.linked-go.com/cloudservice/api/app/device/deviceList.json"},"method":"POST","headers":{"x-token":"2F9BE34BC92372C50CE6E84DB074140B","accept":"application/json","content-length":0}}} 08:50:53.747 info javascript.0 (430) script.js.Regeln_Komfort.Pool_Wärmepumpe_steuern: []
-
Das ist wirklich spooky. Aber vielleicht bin ich ja auch der einzige, bei dem es noch funktioniert?
-
Also ich habe es nochmal mit meiner Rückgabe verglichen und es ist in der Tat so, dass der Server mit bei "object_result" ein gut gefülltes Array zurückgibt. Bei Dir ist das leer.
Der Rest ist identisch!
{ "statusCode": 200, "body": { "error_code": "0", "error_msg": "Success", "error_msg_code": "", "object_result": [ { "device_status": "ONLINE", "device_name": null, "is_fault": false, "device_id": "xxx", "device_code": "xxxx", "product_id": "xxx", "device_type": "", "device_nick_name": "Poolheizung" } ], "is_reuslt_suc": true }, "headers": { "date": "Wed, 10 May 2023 04:55:48 GMT", "content-type": "application/json;charset=UTF-8", "transfer-encoding": "chunked", "connection": "close" }, "request": { "uri": { "protocol": "https:", "slashes": true, "auth": null, "host": "cloud.linked-go.com", "port": 443, "hostname": "cloud.linked-go.com", "hash": null, "search": null, "query": null, "pathname": "/cloudservice/api/app/device/deviceList.json", "path": "/cloudservice/api/app/device/deviceList.json", "href": "https://cloud.linked-go.com/cloudservice/api/app/device/deviceList.json" }, "method": "POST", "headers": { "x-token": "xxx", "accept": "application/json", "content-length": 0 } } }
Ich tippe jetzt mal in's Blaue:
Könntest Du versuchen, Deine Anlage einfach per App neu zu registrieren?Alternativ kann es vielleicht auch an Sonderzeichen im Kennwort liegen. Dann würde aber wohl kaum ein "success" zurückkommen.
-
@oxident Lieben Dank für die ausführliche Prüfung und Unterstützung! ich habe einen zweiten Fall gefunden mit dem leeren Array. Da war das Gerät nicht sauber in der App hinterlegt.
Ein erneutes einbinden habe ich schon gemacht das brachte keinen Erfolg. Also habe ich mich einmal komplett von der App abgemeldet. Beim Anmelden kamen diverse Fehlermeldungen irgendwas mit x-token und Fehler in device-Liste.
Leider gingen die zu schnell von alleine weg. Aber das was ich so schnell lesen konnte passt zu dem Fehlerbild mit dem leeren Array.Derzeit kann ich mich nicht mehr anmelden. Ich probiere es morgen noch einmal. Sollte es dann immer noch nicht gehen lege ich einen neuen Account an.
Derzeit sieht es also nach einem Fehler des Accounts aus. Ich werde berichten, sobald ich Neuigkeiten habe.
Vielen Dank noch einmal bis hier her für die Unterstützung!
-
Viel Erfolg!
Hier merken wir mal wieder, was für ein Murks dieser Cloudzwang ist...
-
@oxident Dankeschön, aber jetzt muss ich erstmal kapitulieren
Der alte Account ist definitiv kaputt. Anmelden geht nicht mehr und PW zurücksetzen auch nicht.Ich habe einen neuen Account angelegt und die das Wifi-Modul damit verbunden.
In der App sieht wieder alles schön aus. Aber das Array ist immer noch leer.Vielleicht liegt es daran, dass ich ein etwas anderes Modul habe:
https://www.poolpowershop.de/pool/wifi-adapter-fuer-waermepumpe-mida-quickGibt es irgendwo eine Beschreibung der API? Ich habe im netz nichts gefunden.
Vielleicht muss ich für das Modul einen anderen Endpunkt ansprechen. -
@fuxx-0 Ahh, ganz sicher läuft das damit anders. Mir scheint auch, als hättest du eine andere App.
Bei mir ist es "Aqua Temp".
Leider bleibt da nichts anderes übrig, als irgendwie herauszufinden, womit sich die App verbindet. Sorry, da fehlt mir aber die Erfahrung.
-
@oxident said in [Javascript] Midas (Aquatemp) Poolheizung:
Ich nutze auch die Aqua Temp App (Blaues Symbol mit weißem Tropfen).
Beim Link vom PoolPowerShop ist eine Midas App gezeigt. Die ist aber nicht für das WiFi Modul.
Da ich beim einbinden der Wifi App aussuchen sollte welches Modul ich verbinden möchte und das von Euch neben meinem gesehen hatte, dachte ich das läuft für alle gleich, solange sie eben in der App eingebunden sind. Scheint aber nicht der Fall zu sein.
Auf jeden Fall ganz lieben Dank für die Unterstützung! -
@oxident sagte in [Javascript] Midas (Aquatemp) Poolheizung:
Viel Erfolg!
Hier merken wir mal wieder, was für ein Murks dieser Cloudzwang ist...
[OT]
Ich suche auch schon lange eine Inverter für den Pool ohne cloud.
hatte auch bei der ersten Durchsicht der Datenblätter/Anschlusspläne eine gesehen, die@andy200877 sagte in [Javascript] Midas (Aquatemp) Poolheizung:
einen RS485 Anschluss besitzt.
aber leider nicht wiedergefunden.
habt ihr den Weg nochmal versucht?
PS habe ein paar Codezeilen in code-tags gesetzt.
-
@homoran Nun ja, meine Poolheizung hat in der Tat einen solchen Anschluss und angeblich haben es auch schon einige geschafft, dort die Steuerung direkt zu realisieren. Hier z. B.: https://control.com/forums/threads/first-venture-into-modbus-how-to-send-a-password.49759
Letzten Endes läuft es auf wohl auf einigen Wärmepumpen immer darauf hinaus, dass sie 1-2 RS485-Anschlüsse haben und dort dann auch das Display und ggf. der Cloud-Adapter mit eingehangen werden.
Da dieser Wifi-Adapter aber augenscheinlich auch nichts anderes als ein Modbus-TCP Wandler ist (HF-LPT230 Low Power WiFi Module) wäre es auch ein Ansatzpunkt, diesen direkt zu verwenden. Beispielsweise kann man unter http://ADAPTER-IP/iweb.html zumindest die Seite zum Firmware-Upgrade finden und der ein oder andere hat auch schon mittels Man-in-the-Middle die MQTT-Kommunikation zum China-Server abgefangen ... jedoch nicht wirklich verstanden:
https://community.home-assistant.io/t/implementation-of-aqua-temp-controlle/230400 -
@oxident Hallo oxident,
Ich habe dein Script am laufen und bin sehr zufrieden damit, klasse Arbeit.
Was mir jedoch heute auffiel ist wenn ich meine Pumpe abschalte geht die WP auf Fehler E03 was natürlich richtig ist (Durchfluß). Jedoch bleiben die Objekte "error, errorCode, errorLevel und errorMessage" leer ??? Ist das bekannt oder nur bei mir so ? Der Rest funktioniert und wird aktualisiert ...
In der Tuya App bekomme ich allerdings unter Info (das Ausrufezeichen) auch keinen Fehler angezeigt sehe ich gerade -
@flyer99 Danke
Ja, der Fehler E03 wird von der Cloud in der Tat gemeldet, jedoch nicht als "Fault" bezeichnet. Daher habe ich mich entschieden, diesen dann auch nicht durchzureichen.
Um zu schauen, ob und wie stark die Heizung gerade arbeitet könnte man den "rotor"-DP auswerten.
Tatsächliche Fehler werden aber (hoffentlich) zuverlässig über die Datenpunkte gemeldet. Kann man ja immer schlecht testen
-
Habe gerade eine neue Version hochgeladen. Dort sind aber nur zwei neue Temperaturwerte und die Ausgabe des JSON-Datensatzes vom Cloud-Server neu.
Ich hätte aber eine Bitte an alle Nutzer:
Hat jemand von Euch einen Energiemesser an der Pumpe?
Mich würde interessieren, ob die wirklich einen Standby-Verbrauch von 50W hat oder ob die Cloud das einfach falsch meldet... -
@oxident Also, eben mal ein paar Messungen gemacht (Energiemesser ist normalerweise vor der SFA-Pumpe somit schnell mal umgesteckt) ....
Energiemesser ist eine FritzDect-Steckdose
Du multiplizierst T07 mit T14 für die Berechnung der aktuellen Leistung der WP ? Dies konnte ich auf jeden Fall immer nachrechnen ..Messung 1:
Ausgabe Wärmepumpe: 478,8 W
Ausgabe FritzDect: 434 WMessung 2:
Ausgabe Wärmepumpe: 1075 W
Ausgabe FritzDect: 1080 WMessung 3:
Ausgabe Wärmepumpe: 479 W
Ausgabe FritzDect: 451 WMessung 4:
Ausgabe Wärmepumpe: 23 W
Ausgabe FritzDect: 5,93 WMessung 5:
Ausgabe Wärmepumpe: 0 W
Ausgabe FritzDect: 5,48 WFazit:
Also bei der Messung 1 habe ich mit Sicherheit nicht lange genug gewartet bis der FritzDect sich aktualisiert hat da die restlichen Werte im "groben" schon passen wie ich finde.
Messung 4 tritt ein wenn Solltemp. erreicht im Automatikmodus ODER bei Fehler Durchfluß
Messung 5 ist "AUS" --> also StandBy --> hier werden bei mir von der WP 0 Watt gemeldet, bei dir 50 W ???Ich habe jetzt nicht alle Modi explizit geprüft, ist aber glaube ich auch nicht nötig bei diesen ersten Vergleichsmessungen.
So, jetzt werde ich mal deine neue Version einpflegen, das mit dem Durchflußfehler passt dann für mich.
-
Gibt es eine Möglichkeit zu erkennen ob die Wärmepumpe heizt oder kühlt wenn sie auf Automatik steht ??
Da ich mit einem Script die kWh meiner Verbraucher über den Tag berechne wäre es cool wenn ich das unterscheiden könnte ... -
@flyer99 Danke für Deine Messungen! Dann bin ich beruhigt, dass der angezeigte Wert im Standby "falsch" ist
Du hast Recht, ich multipliziere T07 mit T14. Eventuell könnte man da mit Deinen Messungen noch etwas tunen.
Bezüglich dem aktuellen Betriebsmodus bei Auto recherchiere ich noch ein wenig. Das kann man bestimmt herausbekommen!