Pittini / iobroker-nodemihome

Steuerung von bisher nicht unterstützten Xiaomi Geräten in Iobroker via node-mihome
MIT License
27 stars 15 forks source link

Bitte Unterstützung für deerma.humidifier.jsq4 hinzufügen #50

Closed daniel89fhem closed 2 years ago

daniel89fhem commented 2 years ago

Hi Pittini,

kannst du bitte die Unterstützung für den Luftbefeuchter XIAOMI Mijia CJSJSQ01DY Pure Evaporation (lt. deinem Script kommt das Modell deerma.humidifier.jsq4) hinzufügen?

In der App gibt es folgende Punkte: Ein / Aus Level 1 / Level 2 / Humidify Im Modus Humidity kann der Zielwert von 40 bis 70% stufenlos eingestellt werden Sheduled On / Off (damit kann man eine "Zeitschaltuhr" einstellen, nach der der Befeuchter Ein / Ausgeschaltet werden kann - wird also nicht benötigt) Licht Ein / Aus Sound Ein / Aus

Umgebungstemperatur und Luftfeuchtigkeit können ausgelesen werden. Wenn der Tank leer ist, gibt es eine Push-Benachrichtigung (ebenso wenn der Tank angehoben wird)

Wenn du noch weitere Informationen von mir brauchst, bitte einfach Bekannt geben.

Danke dir schonmal

Pittini commented 2 years ago

Ich hab Dein "kannst Du mal..." zum Anlass genommen die schon länger geplante Anleitung für "Kannste mal" zu schreiben, damit ich das nicht jeden aufs neue hier schreibe. Schau doch bitte mal in die Develop Branch auf Git. Dort liegt Skript in neuer Version, passende Def Datei und ne Anleitung, schau doch bitte ob Du damit klar kommst und gib Feedback.

daniel89fhem commented 2 years ago

Danke dir für die rasche Bearbeitung.

Ich habe mir deine ganzen Infos mal angesehen und auch den Test durchgeführt. Dabei konnte ich von iobroker aus den Luftbefeuchter Ein und Ausschalten. In der App wurde das auch angezeigt. Umgekehrt ging das leider nicht. Also wenn ich in der App Ein und Ausschalte, dann wurde der Datenpunkt in iobroker nicht aktualisiert.

Ich hatte mir dann einen anderen Luftbefeuchter im Script als auch in der def Datei angesehen und dort ist mir aufgefallen, dass das wohl mit getPower funktionieren sollte. Leider klappte das bei mir nicht. Im Gegenteil, sobald ich diese Funktion in die def Datei geschrieben habe, kam ein Fehler im Javascript Adapter, dass das modul "node-mihome" nicht gefunden wurde und folgende Fehlermeldung:

javascript.0 (2410) script.js.Xiaomi: TypeError: Cannot read property 'miioProtocol' of undefined

Ich habe aber trotzdem schon versucht, die 3 Arbeitsfunktionen hinzuzufügen. Also Lüfterstufe 1, Lüfterstufe 2 und automatisch nach Luftfeuchtigkeit. Das hat dann auch funktioniert. Also ich konnte im iobroker den Datenpunkt fan-level ändern und dass wurde dann auch in der app angezeigt. Umgekehrt ging das wie oben bei power leider auch nicht.

Dann wollte ich noch die Temperatur und die Luftfeuchtigkeit anzeigen lassen. Auch das klappte leider nicht.

Ich hab dir mal den Script-Code angehängt, sowie die Def-Datei1, die funktioniert, aber keine Rückmeldung aus der App gibt. Und die Def-Datei2, mit der ich das Problem beheben wollte (durch vergleichen mit einem anderen Luftbefeuchter), aber nach dem Start des Javascript-Adapters fehler kommen

Bin gespannt, was ich hier alles verbrochen habe :D

Def_Datei2.txt Script_Teil.txt Def_Datei1.txt

Pittini commented 2 years ago

Soo habs Dir mal fertig gemacht wie ich denke dasses passen müßte. Bitte Def Datei und Skript neu vom Def Branch holen, und sicherheitshalber den angelegten Objektbaum komplett löschen (wird autom. neu angelegt)

Zu Deinen Versuchen/Fragen:

  1. Alle "get" Funktionen in den Def Dateien werden vom Skript NICHT genutzt, ich hol mir gleich das ganze Objekt. Jede Änderung an den "get" Funktionen sind also zwingend wirkungslos.
  2. Wenn steuern klappt, aber scheinbar keine Daten kommen, kann das mehrere Ursachen haben. Zum einen wird nur alle 10sek refresht, solange solltest also immer warten. Zum anderen hab ich jetzt schon öfters gehört, dasses mit der App Anmeldung Kollisionen geben soll (ich hatte das Problem allerdings noch nie), also meld Dich mal sicherheitshalber von der App ab.
daniel89fhem commented 2 years ago

Wow, dankeschön für die schnelle Rückmeldung

Was soll ich sagen: Script und def Datei aus der developer branch reinkopiert, Baum gelöscht, Javascript Adapter neu gestartet und? => ALLES FUNKTIONIERTE SOFORT. DANKE dir vielmals :)

Nun funktioniert auch alles in beide Richtungen.

Einen letzten Punkt habe ich noch, dieser hat aber nichts mit diesem Gerät zu tun denke ich. Ich bekomme in unregelmäßigen Abständen einen Timeout error vom Script im Javascript Adapter. Hier die Meldungen: `

javascript.0 2021-12-03 15:14:49.125 error FetchError: network timeout at: https://api.io.mi.com/app/home/device_list at Timeout. (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-fetch/lib/index.js:1476:13) at listOnTimeout (internal/timers.js:557:17) at processTimers (internal/timers.js:500:7)
javascript.0 2021-12-03 15:14:49.125 error Error: network timeout at: https://api.io.mi.com/app/home/device_list
javascript.0 2021-12-03 15:14:49.123 error An error happened which is most likely from one of your scripts, but the originating script could not be detected.

Es funktioniert aber weiterhin die Kommunikation in beide Richtungen. Weißt du, was hier die Fehlermeldung verursacht?`

Pittini commented 2 years ago

Prima wenn alles klappt. Bitte alles mal durchtesten und dann freigeben, dann gehts in die Main Branch. Die Fehlermeldung kommt ab und an (auch bei mir), kannste soweit ignorieren. Is ne Art connection timeout zu xiaomi, passiert scheinbar wenn im Netz bei Xiaomi viel los ist.

daniel89fhem commented 2 years ago

Also ich habe heute noch einmal alles getestet. Auch die leere Tankmeldung. Alles hat funktioniert. Kann von mir aus gerne in die Main Branch landen.

An dieser Stelle noch einmal ein fettes DANKE an dich :)

Bezüglich der Fehlermeldung: Ok, gut zu wissen. Wahrscheinlich kann man das im Script nicht irgendwie berücksichtigen, damit da kein Fehler mehr kommt oder? Bei mir kam diese Meldung manchmal im Minutentakt. Dann wieder längere Zeit nicht usw. Aber das müllt halt das logfile unnötig zu. Daher die Frage

Pittini commented 2 years ago

Wahrscheinlich kann man das im Script nicht irgendwie berücksichtigen, damit da kein Fehler mehr kommt oder?

So isses, weil die Meldung gar nicht vom Skript kommt, sondern von der node-mihome.

Nachdem alles passt, mach ich hier dann mal zu und wünsche viel Spaß.