fhempy: miio (Xiaomi WiFi Devices)

Begonnen von dominik, 30 Oktober 2020, 21:26:31

Vorheriges Thema - Nächstes Thema

dominik

xiaomi_tokens speichert Passwort und Username aus Sicherheitsgründen nicht. Du musst also vor jeder Abfrage wieder Username und Passwort eingeben und erst dann get_tokens.

Ich hab leider nicht den Viomi, sondern den Xiaomi V1 Vacuum. Das ist aber eine sehr hilfreiche Info, dass es nur bei geänderter Datei so ist. Bedeutet das, dass du auch keinen set status Fehler hast, wenn du die alte Datei verwendest und über die App steuerst?
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

Stelaku

Leider nein. Ich habe gerade alles wieder auf null gestellt und ein kpl. neues fhem mit der standard viomivacuum.py datei inbetrieb genommen.
Wenn ich jetzt über die Fernbedienung den Sauger aus der Ladestation fahre und dann set status klicke wird die Seite neu geladen, aber das State des Device bleibt unverändert auf Docked.
Wenn ich jetzt nochmal im drop down status auswähle und set klicke kommt der Fehler beim zweiten klick. Verdammt ich dachte es liegt an der Datei. Leider nicht.

Ich weiß nicht in wie weit das hilft. Auf meiner live Instanz habe ich noch die fempy Version von letzter Woche. Auf der läuft alles ohne Fehlermeldungen.
Da wird bei jeden set status klick die Seite neu geladen und das state neu geschrieben.

Viele Grüsse

Stephan

frank

ist eventuell in der javescript console im browser was zu erkennen?
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

Stelaku

#93
Zitatist eventuell in der javescript console im browser was zu erkennen?
Hier mal ein Auszug aus der javascript console
Layout-Darstellung wurde erzwungen, bevor die Seite vollständig geladen war. Falls Stylesheet noch nicht geladen sind, kann dies zu einem kurzzeitigen Darstellung des Inhalts ohne Formatierung führen. jquery.min.js:4:29775
23:14:48.620 FW_queryValue:{ReadingsVal("Martha_1","carpet_mode","")} fhemweb.js:512:13
23:14:48.623 FW_queryValue:{AttrVal("Martha_1","room","")} fhemweb.js:512:13
23:14:48.725 Inform-channel opened (HTTP) with filter Martha_1 fhemweb.js:512:13
23:14:48.748 Rcvd: ["Martha_1","ViomiVacuumState.Docked","<div id=\u0022Martha_1\u0022  title=\u0022ViomiVacuumState.Docked\u0022 class=\u0022col2\u002...(165) fhemweb.js:512:13
23:14:54.724 Rcvd: ["Martha_1","ViomiVacuumState.Docked","<div id=\u0022Martha_1\u0022  title=\u0022ViomiVacuumState.Docked\u0022 class=\u0022col2\u002...(165) fhemweb.js:512:13
23:14:54.727 Rcvd: ["Martha_1-status","<miio.viomivacuum.ViomiVacuumStatus object at 0x725972d0>","<miio.viomivacuum.ViomiVacuumStatus object at 0x7259...(139) fhemweb.js:512:13
23:14:54.730 Rcvd: ["Martha_1-status-ts","2020-12-11 23:14:54","2020-12-11 23:14:54"] fhemweb.js:512:13
23:14:58.919 FW_queryValue:{ReadingsVal("Martha_1","status","")} fhemweb.js:512:13
23:14:58.921 FW_cmd:/fhem?cmd=help Martha_1&XHR=1 fhemweb.js:512:13
23:15:02.087 FW_cmd:/fhem?cmd.setMartha_1%3Dset%20Martha_1%20status%20&XHR=1 fhemweb.js:512:13
23:15:02.174 Rcvd: ["Martha_1","ViomiVacuumState.Docked","<div id=\u0022Martha_1\u0022  title=\u0022ViomiVacuumState.Docked\u0022 class=\u0022col2\u002...(165) fhemweb.js:512:13
23:15:02.321 Rcvd: ["Martha_1","ViomiVacuumState.Docked","<div id=\u0022Martha_1\u0022  title=\u0022ViomiVacuumState.Docked\u0022 class=\u0022col2\u002...(165) fhemweb.js:512:13
23:15:02.324 Rcvd: ["Martha_1-status","<miio.viomivacuum.ViomiVacuumStatus object at 0x72597430>","<miio.viomivacuum.ViomiVacuumStatus object at 0x7259...(139) fhemweb.js:512:13
23:15:02.325 Rcvd: ["Martha_1-status-ts","2020-12-11 23:15:02","2020-12-11 23:15:02"] fhemweb.js:512:13

## Die nächsten Vier Zeilen werden ausgegeben wenn das pop up Fenster mit der Medlung angezeigt wird.

23:15:03.844 FW_cmd:/fhem?cmd.setMartha_1%3Dset%20Martha_1%20status%20undefined&XHR=1 fhemweb.js:512:13
23:15:09.110 FW_cmd:/fhem?cmd.setMartha_1%3Dset%20Martha_1%20status%20undefined&XHR=1 fhemweb.js:512:13
23:15:12.476 FW_cmd:/fhem?cmd.setMartha_1%3Dset%20Martha_1%20status%20undefined&XHR=1 fhemweb.js:512:13
23:15:17.829 FW_cmd:/fhem?cmd.setMartha_1%3Dset%20Martha_1%20status%20undefined&XHR=1 fhemweb.js:512:13
23:15:29.491 Rcvd: ["Martha_1","ViomiVacuumState.Docked","<div id=\u0022Martha_1\u0022  title=\u0022ViomiVacuumState.Docked\u0022 class=\u0022col2\u002...(165) fhemweb.js:512:13
23:15:29.492 Rcvd: ["Martha_1-status","<miio.viomivacuum.ViomiVacuumStatus object at 0x72597a50>","<miio.viomivacuum.ViomiVacuumStatus object at 0x7259...(139) fhemweb.js:512:13
23:15:29.492 Rcvd: ["Martha_1-status-ts","2020-12-11 23:15:29","2020-12-11 23:15:29"] fhemweb.js:512:13

Und hier mal ein mitschnitt wenn Martha_1 zur Ladestation zurückfährt und ich dabei immer wieder auf set status klicke. Ohne Pop up Fenster und Fehlermeldung
23:30:40.566 FW_cmd:/fhem?cmd.setMartha_1%3Dset%20Martha_1%20status%20&XHR=1 fhemweb.js:512:13
23:30:40.652 Rcvd: ["Martha_1","ViomiVacuumState.Returning","<div id=\u0022Martha_1\u0022  title=\u0022ViomiVacuumState.Returning\u0022 class=\u0022col...(174) fhemweb.js:512:13
23:30:44.628 FW_cmd:/fhem?cmd.setMartha_1%3Dset%20Martha_1%20status%20&XHR=1 fhemweb.js:512:13
23:30:44.710 Rcvd: ["Martha_1","ViomiVacuumState.Returning","<div id=\u0022Martha_1\u0022  title=\u0022ViomiVacuumState.Returning\u0022 class=\u0022col...(174) fhemweb.js:512:13
23:30:48.604 FW_cmd:/fhem?cmd.setMartha_1%3Dset%20Martha_1%20status%20&XHR=1 fhemweb.js:512:13
23:30:48.691 Rcvd: ["Martha_1","ViomiVacuumState.Returning","<div id=\u0022Martha_1\u0022  title=\u0022ViomiVacuumState.Returning\u0022 class=\u0022col...(174) fhemweb.js:512:13
23:30:50.027 FW_cmd:/fhem?cmd.setMartha_1%3Dset%20Martha_1%20status%20&XHR=1 fhemweb.js:512:13
23:30:50.110 Rcvd: ["Martha_1","ViomiVacuumState.Returning","<div id=\u0022Martha_1\u0022  title=\u0022ViomiVacuumState.Returning\u0022 class=\u0022col...(174) fhemweb.js:512:13
23:30:51.155 FW_cmd:/fhem?cmd.setMartha_1%3Dset%20Martha_1%20status%20&XHR=1 fhemweb.js:512:13
23:30:51.244 Rcvd: ["Martha_1","ViomiVacuumState.Returning","<div id=\u0022Martha_1\u0022  title=\u0022ViomiVacuumState.Returning\u0022 class=\u0022col...(174) fhemweb.js:512:13
23:30:54.708 FW_cmd:/fhem?cmd.setMartha_1%3Dset%20Martha_1%20status%20&XHR=1 fhemweb.js:512:13
23:30:54.792 Rcvd: ["Martha_1","ViomiVacuumState.Returning","<div id=\u0022Martha_1\u0022  title=\u0022ViomiVacuumState.Returning\u0022 class=\u0022col...(174) fhemweb.js:512:13
23:31:09.117 Rcvd: ["Martha_1","ViomiVacuumState.Returning","<div id=\u0022Martha_1\u0022  title=\u0022ViomiVacuumState.Returning\u0022 class=\u0022col...(174) fhemweb.js:512:13
23:31:09.118 Rcvd: ["Martha_1-accesspoint_bssid","dc:39:6f:a4:49:ff","dc:39:6f:a4:49:ff"] fhemweb.js:512:13
23:31:09.119 Rcvd: ["Martha_1-accesspoint_bssid-ts","2020-12-11 23:31:09","2020-12-11 23:31:09"]

Viele Grüsse

Stephan

curt

#94
Zitat von: Stelaku am 11 Dezember 2020, 19:55:34
Du müsstes doch auch das Device xiaomi_tokens bei Dir haben.
Du solltest den Token über das Device einfach nochmal anfragen.
Ich hab das gerade bei mir ausprobiert und es hat erst ein neues reading für den token gegeben als ich das Device xiaomi_tokens einmal gelöscht habe und dann wieder neu

Zitat von: dominik am 11 Dezember 2020, 20:16:01
xiaomi_tokens speichert Passwort und Username aus Sicherheitsgründen nicht. Du musst also vor jeder Abfrage wieder Username und Passwort eingeben und erst dann get_tokens.

Hallo @Stelaku @dominik
bedauerlicherweise funktioniert das nicht, es wird kein neues Token als Attribut angelegt. Dominik, hast Du da auch was verändert?

Auf den schnellen Blick ins Log fällt mir

"Unknown argument ?, choose one of username password country:de,cn,sg get_tokens:noArg"

auf.

Falls erforderlich kann ich das fragliche Log heute oder morgen Abend nachreichen.

P.S: Falls die Meldung auf die Mailadresse abstellt: Hier liegt @gmx.net vor.)
RPI 4 - Jeelink HomeMatic Z-Wave

Stelaku

Hallo curt
Ich habe es gerade nochmal bei mir ausprobiert mit aktuellem fempy.

Delete xiaomi_tokens
save config
shutdown restart
define xiaomi_tokens PythonModule xiaomi_tokens
set xiaomi_tokens username <Meine Mail Adresse>
set xiaomi_tokens password <Mein Passwort>
set xiaomi_tokens get_tokens


und nach ein paar Sekunden wenn Du die Seite mit F5 aktualisierst kommt das reading mit den token.

Viele Grüsse

Stephan

dominik

xiaomi_tokens: Genau, man muss danach F5 drücken, da FHEM neue Readings erst nach einem Reload der Seite anzeigt.

@Stephan
Zur weiteren Eingrenzung des Fehler, ist es richtig, dass der Fehler nur auftritt, wenn die FHEM Seite nicht neu geladen wird? Sobald die Seite neu geladen wird, tritt der Fehler nicht auf?
Dann hattest du noch das Thema, dass "ViaomiStatus(.....)......" zurückgeliefert wurde, wann ist das der Fall?
Wird in der alten Version die FHEM Seite nach jedem "status" neu geladen?
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

dominik

Mach bitte auch mal beim BindingsIo Device verbose=5 und schick mir dann das fhem Log im Fehlerfall - das kann durchaus groß werden, gerne per PN. Gleiches bitte auch am Live System, da sollte dann ersichtlich sein wo der Unterschied ist.
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

Stelaku

#98
Hallo Dominik
Ich glaube es wird immer heißer

ZitatZur weiteren Eingrenzung des Fehler, ist es richtig, dass der Fehler nur auftritt, wenn die FHEM Seite nicht neu geladen wird? Sobald die Seite neu geladen wird, tritt der Fehler nicht auf?

das stimmt, ich habe es gerade getestet. Wenn ich einmal auf set status klicke wird die Seite nicht neu geladen und ich kann gleich nochmal set klicken, was dann den Fehler erzeugt.
Mache ich das selbe und drücke immer nach einen set status die F5 taste kommt der Fehler nicht. Und das Device zeigt seinen aktuellen status.

ZitatWird in der alten Version die FHEM Seite nach jedem "status" neu geladen?

genau das passiert in der alten Version. Set status angeklickt , Seite wird neu geladen.

Anbei noch meine beiden log´s in Verbose 5 für BindingsIO einmal mit meiner live Instanz alte fempy Version und meine Test Instanz mit der aktuellen fempy Version.

das log mit der Fehlermeldung ist ab 13:49:24 der Fehler zu sehen.


dominik

Hier liegt das Problem
BindingsIo: <<< WS: {"args":["Martha_1","status","undefined"]

Es wird "undefined" von FHEM als Argument mitgegeben. Kann es sein, dass das nur vorkommt wenn kein Reading aktualisiert wird? Oder hast du den Fehler auch reproduzieren können, wenn ein Reading aktualisiert wird?
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

Stelaku

Hallo Dominik

ZitatEs wird "undefined" von FHEM als Argument mitgegeben. Kann es sein, dass das nur vorkommt wenn kein Reading aktualisiert wird? Oder hast du den Fehler auch reproduzieren können, wenn ein Reading aktualisiert wird?

Wenn der Fehler kommt wird auch kein reading aktualisieren. Sprich Martha_1 ist nicht im Dock aber die Anzeige in Fhem bleibt auf Docked. Auch wenn ich mit F5 die Seite neu aufbauen lasse.
Den Fehler konnte ich nicht reproduzieren wenn die reading neu gesetzt werden.
Wenn der Sauger auf Cleaning steht und ich den set status klicke wird die Seite auch nicht neu geladen aber die readings werden aktualiesiert. Kann man schön sehen am reading clean_area.
Das wird immer neu gesetzt.

Viele Grüsse

Stephan

dominik

Kannst du die Ausgabe der JavaScript Console bitte mal im Fehlerfall posten?
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

dominik

Und mach bitte noch folgenden Test:
/opt/fhem/FHEM/bindings/python/fhempy/lib/miio/miio.py
Diese Zeile suchen (sollte ca. 137 sein):
reply = await utils.run_blocking(functools.partial(fct, *args))
danach einfügen
await fhem.readingsSingleUpdate(self.hash, "testreading", "ok", 1)

Bitte auf die Einrückung achten, das ist bei Python wichtig.
Bin gespannt ob es damit immer funktioniert, so wäre meine Erwartung.
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

Stelaku

Hallo Dominik

ZitatKannst du die Ausgabe der JavaScript Console bitte mal im Fehlerfall posten?

Klar mache ich gerne. Da habe ich dreimal hintereinander auf set status geklickt


21:03:06.507 Rcvd: ["Martha_1","ViomiVacuumState.Docked","<div id=\u0022Martha_1\u0022  title=\u0022ViomiVacuumState.Docked\u0022 class=\u0022col2\u002...(165) fhemweb.js:512:13
21:03:06.508 Rcvd: ["Martha_1-testreading","ok","ok"] fhemweb.js:512:13
21:03:06.508 Rcvd: ["Martha_1-testreading-ts","2020-12-12 21:03:07","2020-12-12 21:03:07"] fhemweb.js:512:13
21:03:06.570 Rcvd: ["Martha_1","ViomiVacuumState.Docked","<div id=\u0022Martha_1\u0022  title=\u0022ViomiVacuumState.Docked\u0022 class=\u0022col2\u002...(165) fhemweb.js:512:13

## status im drop down ausgewählt

21:03:06.571 Rcvd: ["Martha_1-status","<miio.viomivacuum.ViomiVacuumStatus object at 0x725104f0>","<miio.viomivacuum.ViomiVacuumStatus object at 0x7251...(139) fhemweb.js:512:13

## set das erste mal angeklickt ohne Fhelermeldung

21:03:06.572 Rcvd: ["Martha_1-status-ts","2020-12-12 21:03:07","2020-12-12 21:03:07"] fhemweb.js:512:13

## set das zweite mal angeklickt jetzt kommt die Fehlermeldung ( pop up Fenster )

21:03:11.274 FW_cmd:/fhem?cmd.setMartha_1%3Dset%20Martha_1%20status%20undefined&XHR=1 fhemweb.js:512:13

## set das dritte mal angeklickt selbe Fehlermeldung. Die Seite hat sich jedesmal nicht neu geladen

21:03:19.825 FW_cmd:/fhem?cmd.setMartha_1%3Dset%20Martha_1%20status%20undefined&XHR=1 fhemweb.js:512:13

## Hier kannst Du sehen das sich der status des Device nicht geändert hat, obwohl status angefordert wurde.
## Der Sauger steht jetzt vor der Ladestation und nicht Docked. In der alten Version wird mir in dieser Situation online als Status des Device angezeigt.

21:03:36.526 Rcvd: ["Martha_1","ViomiVacuumState.Docked","<div id=\u0022Martha_1\u0022  title=\u0022ViomiVacuumState.Docked\u0022 class=\u0022col2\u002...(165) fhemweb.js:512:13

## Dein Testreading wurde angelegt.

21:03:36.528 Rcvd: ["Martha_1-testreading","ok","ok"] fhemweb.js:512:13
21:03:36.531 Rcvd: ["Martha_1-testreading-ts","2020-12-12 21:03:37","2020-12-12 21:03:37"] fhemweb.js:512:13
21:03:38.717 Rcvd: ["Martha_1","ViomiVacuumState.Docked","<div id=\u0022Martha_1\u0022  title=\u0022ViomiVacuumState.Docked\u0022 class=\u0022col2\u002...(165) fhemweb.js:512:13
21:03:38.719 Rcvd: ["Martha_1-testreading","ok","ok"] fhemweb.js:512:13
21:03:38.721 Rcvd: ["Martha_1-testreading-ts","2020-12-12 21:03:39","2020-12-12 21:03:39"] fhemweb.js:512:13
21:03:38.723 Rcvd: ["Martha_1","ViomiVacuumState.Docked","<div id=\u0022Martha_1\u0022  title=\u0022ViomiVacuumState.Docked\u0022 class=\u0022col2\u002...(165) fhemweb.js:512:13
21:03:38.724 Rcvd: ["Martha_1-status","<miio.viomivacuum.ViomiVacuumStatus object at 0x725101b0>","<miio.viomivacuum.ViomiVacuumStatus object at 0x7251...(139) fhemweb.js:512:13
21:03:38.726 Rcvd: ["Martha_1-status-ts","2020-12-12 21:03:39","2020-12-12 21:03:39"] fhemweb.js:512:13


ZitatUnd mach bitte noch folgenden Test:
/opt/fhem/FHEM/bindings/python/fhempy/lib/miio/miio.py
Diese Zeile suchen (sollte ca. 137 sein):

Habe ich gemacht. Das reading testreading ist jetzt in den readings zu sehen zeigt ok an und wird jedesmal rot wenn ich set status das erstemal vor der Fehlermeldung anklicke. Beim zweitenmal
kommt dann wieder das pop up Fenster. Die Fhem Seite wird nicht automatisch neu geladen.
Wenn ich immer nach dem ersten set status klick auf F5 drücke kommt die Fehlermeldung wie schon gehabt nicht mehr.

Viele Grüsse

Stephan

dominik

Ok, danke für den Test. Dann hat es nichts mit der Reading Aktualisierung zu tun.

Der Test war jetzt mit der originalen miio Library, also wo move nicht geht. Richtig?

Ich suche mal weiter...btw, wie lange ist dein letztes FHEM Update am Live System her?
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik