Midea Comfee Klimaanlage über Fhem ?!

Begonnen von Aladin222, 11 November 2016, 11:36:07

Vorheriges Thema - Nächstes Thema

JudgeDredd

Hi Christian,

also irgendwie kommt das Modul bei Dir nicht in der Funktion "callScript_start" an.
Warum kann ich noch nicht sagen.

Ich gehe davon aus, das Dein FHEM auf dem aktuellen Stand ist (Featurelevel: 6.1)

Bitte mal in die FHEM-Kommandozeile den Scriptaufruf direkt eingeben und schauen, ob die Antwort als Ausgabe kommt.
{qx(/opt/fhem/.local/bin/setAC.py state -H 192.168.1.8 -I 18691697793261 -K 4136E882A281485BBA7D17CD092E7B2BB9D5A05731B84885A3A8AE82F0D5471E -T 8BF88B0EBF91F920565259D7EFA972352A2C8744A222346949F92CFEF8C1EEE7E6AF56513D46EA1609BEEF68061ED12C729674E35F900122B35AEB7265871E1F)}

Gruß,
JudgeDredd
Router: Eigenbau (pfSense)
FHEM: Hyper-V | Debian 12 (VM)

chrisse111179

Hallo,
ja, Featurelevel steht auf 6.1.

Der Befehl:
{qx(/opt/fhem/.local/bin/setAC.py state -H 192.168.1.8 -I 18691697793261 -K 4136E882A281485BBA7D17CD092E7B2BB9D5A05731B84885A3A8AE82F0D5471E -T 8BF88B0EBF91F920565259D7EFA972352A2C8744A222346949F92CFEF8C1EEE7E6AF56513D46EA1609BEEF68061ED12C729674E35F900122B35AEB7265871E1F)}

Gibt diese Ausgabe zurück:
{"id": 18691697793261, "name": "192.168.1.8", "power": "On", "beep": false, "temperature": 23.0, "mode": "auto", "fan": "Auto", "swing": "Off", "intense": "normal", "x_indoor_temperature": 22.0, "x_outdoor_temperature": 27.0}

Viele Grüße,
Christian

JudgeDredd

Hi Christian,

um der ganzen Sache weiter auf die Spur zu kommen, habe ich nochmal ein paar Logausgaben eingebaut.
Bitte mal das angehängte Modul benutzen und Verbose 5 Ausgabe mal bitte zeigen.

Gruß,
JudgeDredd
Router: Eigenbau (pfSense)
FHEM: Hyper-V | Debian 12 (VM)

chrisse111179

Guten Abend!
Nochmal danke dass du dich da so reinhängst!

Das ist die Log-Ausgabe bei einer Statusabfrage:

Referer: http://fhem:8083/fhem?detail=Klima_Schlafzimmer
2022.06.27 21:00:08 5: POST /fhem?detail=Klima_Schlafzimmer&dev.getKlima_Schlafzimmer=Klima_Schlafzimmer&cmd.getKlima_Schlafzimmer=get&arg.getKlima_Schlafzimmer=Status&val.getKlima_Schlafzimmer=&XHR=1&addLinks=1&fwcsrf=528215196300767&fw_id=525 HTTP/1.1
Referer: http://fhem:8083/fhem?detail=Klima_Schlafzimmer
2022.06.27 21:00:08 4: WEB_192.168.1.83_34544 POST /fhem?detail=Klima_Schlafzimmer&dev.getKlima_Schlafzimmer=Klima_Schlafzimmer&cmd.getKlima_Schlafzimmer=get&arg.getKlima_Schlafzimmer=Status&val.getKlima_Schlafzimmer=&XHR=1&addLinks=1&fwcsrf=528215196300767&fw_id=525; BUFLEN:0
2022.06.27 21:00:08 5: Cmd: >get Klima_Schlafzimmer Status<
2022.06.27 21:00:08 2: Klima_Schlafzimmer Select: get Klima_Schlafzimmer Status
2022.06.27 21:00:08 5: Klima_Schlafzimmer BlockingCall skipped existingPID (HASH(0x7183608)))
2022.06.27 21:00:08 4: WEB: /fhem?detail=Klima_Schlafzimmer&dev.getKlima_Schlafzimmer=Klima_Schlafzimmer&cmd.getKlima_Schlafzimmer=get&arg.getKlima_Schlafzimmer=Status&val.getKlima_Schlafzimmer=&XHR=1&addLinks=1&fwcsrf=528215196300767&fw_id=525 / RL:20 / text/plain; charset=UTF-8 / Content-Encoding: gzip


Und das wenn ich sie schalten möchte:
Referer: http://fhem:8083/fhem?detail=Klima_Schlafzimmer&fw_id=
2022.06.27 21:02:59 4: WEB_192.168.1.83_34212 POST /fhem&detail=Klima_Schlafzimmer&dev.setKlima_Schlafzimmer=Klima_Schlafzimmer&fwcsrf=528215196300767&cmd.setKlima_Schlafzimmer=set&arg.setKlima_Schlafzimmer=Auto&val.setKlima_Schlafzimmer=temp%3A17&val.setKlima_Schlafzimmer=swing%3AOff; BUFLEN:0
2022.06.27 21:02:59 5: Cmd: >set Klima_Schlafzimmer Auto temp:17,swing:Off<
2022.06.27 21:02:59 2: Klima_Schlafzimmer Select: set Klima_Schlafzimmer Auto
2022.06.27 21:02:59 3: Klima_Schlafzimmer Parameter BlockingCall: Klima_Schlafzimmer|/opt/fhem/.local/bin/setAC.py|on -H 192.168.1.8 -I 18691697793261 -K 4136E882A281485BBA7D17CD092E7B2BB9D5A05731B84885A3A8AE82F0D5471E -T 8BF88B0EBF91F920565259D7EFA972352A2C8744A222346949F92CFEF8C1EEE7E6AF56513D46EA1609BEEF68061ED12C729674E35F900122B35AEB7265871E1F -m Auto  --beep
2022.06.27 21:02:59 3: Klima_Schlafzimmer Parameter BlockingCall: Klima_Schlafzimmer|/opt/fhem/.local/bin/setAC.py|on -H 192.168.1.8 -I 18691697793261 -K 4136E882A281485BBA7D17CD092E7B2BB9D5A05731B84885A3A8AE82F0D5471E -T 8BF88B0EBF91F920565259D7EFA972352A2C8744A222346949F92CFEF8C1EEE7E6AF56513D46EA1609BEEF68061ED12C729674E35F900122B35AEB7265871E1F -m Auto -t 17 -s Off --beep
2022.06.27 21:02:59 5: Klima_Schlafzimmer BlockingCall skipped existingPID (HASH(0x7183608)))
2022.06.27 21:02:59 5: Starting notify loop for Klima_Schlafzimmer, 1 event(s), first is Auto temp:17,swing:Off
2022.06.27 21:02:59 5: End notify loop for Klima_Schlafzimmer
2022.06.27 21:02:59 5: GET /fhem?detail=Klima_Schlafzimmer&fw_id= HTTP/1.1
Referer: http://fhem:8083/fhem?detail=Klima_Schlafzimmer&fw_id=
2022.06.27 21:02:59 4: WEB_192.168.1.83_34212 GET /fhem?detail=Klima_Schlafzimmer&fw_id=; BUFLEN:0
2022.06.27 21:02:59 4: WEB: /fhem?detail=Klima_Schlafzimmer&fw_id= / RL:5161 / text/html; charset=UTF-8 / Content-Encoding: gzip
Referer: http://fhem:8083/fhem?detail=Klima_Schlafzimmer&fw_id=
2022.06.27 21:02:59 5: GET /fhem?cmd=%7BReadingsVal(%22Klima_Schlafzimmer%22%2C%22Auto%22%2C%22%22)%7D&XHR=1&fwcsrf=528215196300767 HTTP/1.1
Referer: http://fhem:8083/fhem?detail=Klima_Schlafzimmer&fw_id=
2022.06.27 21:02:59 4: WEB_192.168.1.83_34214 GET /fhem?cmd=%7BReadingsVal(%22Klima_Schlafzimmer%22%2C%22Auto%22%2C%22%22)%7D&XHR=1&fwcsrf=528215196300767; BUFLEN:0
2022.06.27 21:02:59 5: Cmd: >{ReadingsVal("Klima_Schlafzimmer","Auto","")}<
2022.06.27 21:02:59 4: WEB: /fhem?cmd=%7BReadingsVal(%22Klima_Schlafzimmer%22%2C%22Auto%22%2C%22%22)%7D&XHR=1&fwcsrf=528215196300767 / RL:21 / text/plain; charset=UTF-8 / Content-Encoding: gzip
2022.06.27 21:02:59 5: GET /fhem?cmd=%7BAttrVal(%22Klima_Schlafzimmer%22%2C%22room%22%2C%22%22)%7D&XHR=1&fwcsrf=528215196300767 HTTP/1.1
Referer: http://fhem:8083/fhem?detail=Klima_Schlafzimmer&fw_id=
2022.06.27 21:02:59 4: WEB_192.168.1.83_34224 GET /fhem?cmd=%7BAttrVal(%22Klima_Schlafzimmer%22%2C%22room%22%2C%22%22)%7D&XHR=1&fwcsrf=528215196300767; BUFLEN:0
2022.06.27 21:02:59 5: Cmd: >{AttrVal("Klima_Schlafzimmer","room","")}<
2022.06.27 21:02:59 4: WEB: /fhem?cmd=%7BAttrVal(%22Klima_Schlafzimmer%22%2C%22room%22%2C%22%22)%7D&XHR=1&fwcsrf=528215196300767 / RL:21 / text/plain; charset=UTF-8 / Content-Encoding: gzip
2022.06.27 21:02:59 5: GET /fhem?XHR=1&inform=type=status;filter=Klima_Schlafzimmer;since=1656356578.21987;fmt=JSON&fw_id=557&timestamp=1656356579427 HTTP/1.1
Referer: http://fhem:8083/fhem?detail=Klima_Schlafzimmer&fw_id=
2022.06.27 21:02:59 4: WEB_192.168.1.83_34214 GET /fhem?XHR=1&inform=type=status;filter=Klima_Schlafzimmer;since=1656356578.21987;fmt=JSON&fw_id=557&timestamp=1656356579427; BUFLEN:0
Referer: http://fhem:8083/fhem?detail=Klima_Schlafzimmer&fw_id=


Viele Grüße,
Christian

pink99panther

#64
Hi JudgeDredd
bin inzwischen auch etwas voran gekommen,
hänge aber auch an der Komunikation zwischen Modul und Script.

2022.06.27 21:04:05 4: KlimaKlb Aufruf setAC: /opt/midea-msmart/setAC.py off -H 192.168.178.56 -I 175.............797
hash- or arrayref expected (not a simple scalar, use allow_nonref to allow this) at ./FHEM/53_mideaAC.pm line 249.


Sind bei mir sehr wenige Logeinträge trotz Modul von gerade eben.

Der anfängliche "Fehler" lag am Verweis auf den Interpreter im Script.
Hab ich auf: #!/opt/fhem/Python-3.9.5/python geändert

LG
Manfred


JudgeDredd

Zitat von: chrisse111179 am 27 Juni 2022, 21:04:15
Nochmal danke dass du dich da so reinhängst!
Kein Problem, interessiert mich ja selbst, warum das nur bei Dir so ist.

Diese Zeile zeigt, warum das setAC.py nicht aufgerufen wird.
2022.06.27 21:00:08 5: Klima_Schlafzimmer BlockingCall skipped existingPID (HASH(0x7183608)))
Offensichtlich, gibt es schon einen Aufruf, welcher noch vollstaendig beendet ist.

Sagt Dir das irgendwas ?
rufst Du das Modul in sehr kurzen Abständen auf, oder hast einen extrem kurzen RefreshIntervall eingestellt ?

Kannst Du es bitte nochmal ohne Intervall und direkt nach einem FHEM Neustart testen ?



Zitat von: pink99panther am 27 Juni 2022, 21:15:37
Hab ich auf: #!/opt/fhem/Python-3.9.5/python geändert
Komisch, meine Python installationen liegen alle in /usr/bin
Nunja, dann ist diese Hürde ja zumindest genommen.
Zitat von: pink99panther am 27 Juni 2022, 21:15:37
hänge aber auch an der Komunikation zwischen Modul und Script.
Funktioniert denn bei Dir der direkte Aufruf auf der Shell ?
Router: Eigenbau (pfSense)
FHEM: Hyper-V | Debian 12 (VM)

pink99panther

ZitatFunktioniert denn bei Dir der direkte Aufruf auf der Shell ?
Ja, sogar aus der Eingabezeile in fhem.

JudgeDredd

Hallo Manfred,
Zitat von: pink99panther am 27 Juni 2022, 21:15:37
hänge aber auch an der Komunikation zwischen Modul und Script.
2022.06.27 21:04:05 4: KlimaKlb Aufruf setAC: /opt/midea-msmart/setAC.py off -H 192.168.178.56 -I 175.............797
hash- or arrayref expected (not a simple scalar, use allow_nonref to allow this) at ./FHEM/53_mideaAC.pm line 249.
Der Fehler sieht mir eher danach aus, als ob Du nicht die neuste version von mac-zhou verwendest (msmart 0.2.3)
bzw. nicht die passende setAC.py zum msmart hast.
Kannst Du mal schauen, ob Du noch eine frühere Version von msmart installiert hast ?

evtl. hilft ein update:
pip3 install --upgrade msmart
Router: Eigenbau (pfSense)
FHEM: Hyper-V | Debian 12 (VM)

pink99panther

Zitat von: JudgeDredd am 28 Juni 2022, 11:40:09
Hallo Manfred,Der Fehler sieht mir eher danach aus, als ob Du nicht die neuste version von mac-zhou verwendest (msmart 0.2.3)
bzw. nicht die passende setAC.py zum msmart hast.
Kannst Du mal schauen, ob Du noch eine frühere Version von msmart installiert hast ?

evtl. hilft ein update:
pip3 install --upgrade msmart

hatte schon die neueste Version
fhem@raspiKlb:~$ pip3 list module
Package                   Version
------------------------- ---------
certifi                   2022.6.15
cffi                      1.15.0
charset-normalizer        2.0.12
click                     8.1.3
idna                      3.3
ifaddr                    0.2.0
msmart                    0.2.3
pip                       22.1.2
pycparser                 2.21
pycryptodome              3.15.0
pycryptodome-test-vectors 1.0.10
pycryptodomex             3.14.1
PyYAML                    6.0
requests                  2.27.1
setuptools                56.0.0
shellescape               3.8.1
urllib3                   1.26.9
fhem@raspiKlb:~$

chrisse111179

Hallo,

Zitat von: JudgeDredd am 28 Juni 2022, 08:34:40


Diese Zeile zeigt, warum das setAC.py nicht aufgerufen wird.
2022.06.27 21:00:08 5: Klima_Schlafzimmer BlockingCall skipped existingPID (HASH(0x7183608)))
Offensichtlich, gibt es schon einen Aufruf, welcher noch vollstaendig beendet ist.

Sagt Dir das irgendwas ?
rufst Du das Modul in sehr kurzen Abständen auf, oder hast einen extrem kurzen RefreshIntervall eingestellt ?

Kannst Du es bitte nochmal ohne Intervall und direkt nach einem FHEM Neustart testen ?

ich hatte das Attribut AutoRefresh gar nicht gesetzt. Ich habe es jetzt auf 10 gestellt, da sollte der Intervall ja groß genug sein.
Direkt nach einem Neustart von FHEM konnte ich das Klimagerät ein Mal vom Webinterface aus schalten. Dann geht wieder nichts.

Viele Grüße,
Christian

JudgeDredd

@chrisse111179, @pink99panther

Hi ihr beiden,

also ich muss gestehen, so langsam gehen mir die Ideen aus.
Nur mal zur Sicherheit, das wir auf der gleichen Basis analysieren, habe ich beide aktuelle Dateien hier nochmal angehängt.
Diese erfordern die Version 0.2.3 von msmart.

Es war sicherlich etwas Pech, das mac-zhou Änderungen an msmart während der Entwicklungsphase meines Moduls vorgenommen hat.

Bitte nochmal versuchen.

  • setAC.py und 53_mideaAC.pm aus diesem Post nehmen
  • FHEM neu starten
  • Modul auf Verbose 5 setzen
  • get Status ausführen
  • nochmal get Status ausführen
  • das Log mir zur Verfügung stellen und mitteilen was passiert ist.

Gruß,
JudgeDredd
Router: Eigenbau (pfSense)
FHEM: Hyper-V | Debian 12 (VM)

pink99panther

#71
2022.06.29 14:27:50 3: FHEMWEB WEB CSRF error: csrf_26xxxxxxxxxxxxx ne csrf_42xxxxxxxxxxxxx for client WEB_192.168.115.21_60152 / command get KlimaKlb Status . For details see the csrfToken FHEMWEB attribute.
2022.06.29 14:27:50 2: KlimaKlb Select: get KlimaKlb Status
2022.06.29 14:27:50 3: KlimaKlb Parameter BlockingCall: KlimaKlb|/opt/midea-msmart/setAC.py|state -H 192.168.178.56 -I 175........797
2022.06.29 14:27:50 5: KlimaKlb BlockingCall newPID (972))
2022.06.29 14:27:50 4: KlimaKlb Aufruf setAC: /opt/midea-msmart/setAC.py state -H 192.168.178.56 -I 175........797
hash- or arrayref expected (not a simple scalar, use allow_nonref to allow this) at ./FHEM/53_mideaAC.pm line 249.
2022.06.29 14:28:55 2: KlimaKlb Select: get KlimaKlb Status
2022.06.29 14:28:55 5: KlimaKlb BlockingCall skipped existingPID (DEAD:972))


Ich glaube, ich sollte mich mal mit dem csrf-Thema beschäftigen  :o

Cinem

Hallo Zusammen,

ich hatte die selben Probleme, dass die Anlage nicht steuerbar war und habe mich die letzten Stunden ein wenig dahinter geklemmt und ein wenig herumgetestet.
Zitat von: JudgeDredd am 29 Juni 2022, 12:03:23
@chrisse111179, @pink99panther

Hi ihr beiden,

also ich muss gestehen, so langsam gehen mir die Ideen aus.
Nur mal zur Sicherheit, das wir auf der gleichen Basis analysieren, habe ich beide aktuelle Dateien hier nochmal angehängt.
Diese erfordern die Version 0.2.3 von msmart.

Es war sicherlich etwas Pech, das mac-zhou Änderungen an msmart während der Entwicklungsphase meines Moduls vorgenommen hat.

Bitte nochmal versuchen.

  • setAC.py und 53_mideaAC.pm aus diesem Post nehmen
  • FHEM neu starten
  • Modul auf Verbose 5 setzen
  • get Status ausführen
  • nochmal get Status ausführen
  • das Log mir zur Verfügung stellen und mitteilen was passiert ist.

Gruß,
JudgeDredd

Ich konnte es soweit herunterbrechen, dass der Rückgabewert vom Aufruf des Python-Scriptes nicht korrekt umgewandelt werden konnte. Ich habe die, derzeit bei mir funktionierende Version, mit angehängt.

Die grundsätzlichen Veränderungen sind, dass ich den Aufruf in ein Array stecke und anschließend das JSON als Objekt convertiere und zurück gebe (Zeile 249 bis 253).
Anschließend in der callScript_finish-Funktion wird der JSON-String wieder decodiert (Zeile 263 bis 264).

Hoffe das bringt alle ein wenig weiter

JudgeDredd

Zitat von: Cinem am 30 Juni 2022, 12:30:30
ich hatte die selben Probleme, dass die Anlage nicht steuerbar war und habe mich die letzten Stunden ein wenig dahinter geklemmt und ein wenig herumgetestet.
Die grundsätzlichen Veränderungen sind, dass ich den Aufruf in ein Array stecke und anschließend das JSON als Objekt convertiere und zurück gebe (Zeile 249 bis 253).
Anschließend in der callScript_finish-Funktion wird der JSON-String wieder decodiert (Zeile 263 bis 264).

Hi Cinem,

im Prinzip hast Du es fast genauso gemacht, wie ich in meinem Modul ganz zu Beginn (vor der Veröffentlichung)
Aktuell verwendet das Modul die Funktion "encode_json/decode_json", wie es auch im Modulentwickler-WIKI steht.

Ich würde gerne verstehen, warum es bei einigen (wie auch bei mir) Funktioniert und bei einigen eben nicht. Ich hoffe ich komme am Wochenende dazu das mal nachzustellen.
Danke schonmal für Deinen Einsatz.

Gruß,
JudgeDredd
Router: Eigenbau (pfSense)
FHEM: Hyper-V | Debian 12 (VM)

Cinem

Zitat von: JudgeDredd am 30 Juni 2022, 12:38:02
Hi Cinem,

im Prinzip hast Du es fast genauso gemacht, wie ich in meinem Modul ganz zu Beginn (vor der Veröffentlichung)
Aktuell verwendet das Modul die Funktion "encode_json/decode_json", wie es auch im Modulentwickler-WIKI steht.

Ich würde gerne verstehen, warum es bei einigen (wie auch bei mir) Funktioniert und bei einigen eben nicht. Ich hoffe ich komme am Wochenende dazu das mal nachzustellen.
Danke schonmal für Deinen Einsatz.

Gruß,
JudgeDredd

Gute und berechtigte Frage,

in meiner Installation hat dein Modul leider auch nicht funktioniert. Beim Debuggen konnte ich es auf den Rückgabewert von Python-Script zurückführen, da die Konvertierung für die Übergabe nicht korrekt funktioniert hat.
Zitat
hash- or arrayref expected (not a simple scalar, use allow_nonref to allow this) at ./FHEM/53_mideaAC.pm line 249.
Die Lösung lag hierbei im "allow_nonref" sowie der Enkodierung als UTF8 (Zeile 251).


Falls es bei deiner Fehlersuche hilft: In meinem Fall läuft FHEM in einer Docker-Umgebung mit dem Network-Mode "host".