@tpr:Das Python-Skript von mir ist jetzt da zu haben: https://github.com/rytilahti/python-mirobo - dank zu gst666 (für krypto) und Meistertr (kommandos). Bis jetzt es ist nur mit meinem Robo gestetet, soweit ist die IP + das Token vorhanden sollte es einfach zu nutzen sein. Wer mehrere Kommandos weiß, bitte Bescheid (am liebsten als github issue) sagen / PR erzeugen.
![]()
Hast du vor dein Python Skript anzupassen? Bis jetzt läuft meiner damit leider nicht mehr, nach dem Update.
Das Skript soll wieder funktionieren. Das Problem war das die Sequenznummer müssen zuwachsend sein. Dazu soll das Skript jetzt mehr robust in solchen Problemfällen sein, da es beim Fehler das Kommando mit neuer Sequenznummer wiederholt.
NEWS
Latest posts made by tpr
-
RE: [Frage] Xiaomi Vacuum cleaner
-
RE: [Frage] Xiaomi Vacuum cleaner
Auf meinem Mac (Python 3.6.0 :: Anaconda 4.3.1 (x86_64)) bekomme ich die Fehlermeldung
!
msg = {u'data': {u'value': cmd}, u'header': {u'value': header}, u'checksum': 0} ! m = Message.build(msg) ! Traceback (most recent call last): ! File "<ipython-input-18-f0bb71292b90>", line 3, in <module> m = Message.build(msg) ! File "/anaconda/lib/python3.6/site-packages/construct/core.py", line 193, in build self.build_stream(obj, stream, context, **kw) ! File "/anaconda/lib/python3.6/site-packages/construct/core.py", line 205, in build_stream self._build(obj, stream, context, "building") ! File "/anaconda/lib/python3.6/site-packages/construct/core.py", line 872, in _build buildret = sc._build(subobj, stream, context, path) ! File "/anaconda/lib/python3.6/site-packages/construct/core.py", line 2713, in _build return self.subcon._build(obj, stream, context, path) ! File "/anaconda/lib/python3.6/site-packages/construct/core.py", line 1656, in _build buildret = self.subcon._build(obj, stream, context, path) ! File "/anaconda/lib/python3.6/site-packages/construct/core.py", line 2143, in _build value = self.subcon._build(value, stream, context, path) ! File "/anaconda/lib/python3.6/site-packages/construct/core.py", line 306, in _build return self.subcon._build(self._encode(obj, context), stream, context, path) ! File "/anaconda/lib/python3.6/site-packages/mirobo/protocol.py", line 114, in _encode return Utils.encrypt(json.dumps(obj).encode('utf-8') + b'\x00') ! File "/anaconda/lib/python3.6/site-packages/mirobo/protocol.py", line 45, in encrypt key, iv = Utils.key_iv() ! File "/anaconda/lib/python3.6/site-packages/mirobo/protocol.py", line 39, in key_iv key = Utils.md5(Utils.token) ! File "/anaconda/lib/python3.6/site-packages/mirobo/protocol.py", line 34, in md5 checksum.update(data) ! TypeError: Unicode-objects must be encoded before hashing</module></ipython-input-18-f0bb71292b90>
`Das sind mindestens mit Python 3.4 entweder "bytes" oder "bytearray" Objekten statt Unicode. Leider weiß ich gerade nicht wie man damit umgehen könnte. Könntest du bitte ein Issue darüber ins github repo hinzufügen?
Auf meinem Raspberry Pi steigt er mit beim install aus mit der Fehlermeldung
AttributeError: 'Distribution' object has no attribute '_egg_fetcher'
Hat jemand das Paket https://github.com/rytilahti/python-mirobo
auf seinem Mac oder Raspberry Pi erfolgreich laufen? `
Ich habe es erneut mit Raspberry PI getestet, für eine erfolgreiche Installation benötigt man eine neuere Version als Pis 1.5.6 von setuptools. Hier ist wie ich es gerade getestet habe:
virtualenv -p python3 testenv source testenv/bin/activate pip install -U setuptools pip install -e git+https://github.com/rytilahti/python-mirobo#egg=python-mirobo # für git version, pip install python-mirobo für release.
-
RE: [Frage] Xiaomi Vacuum cleaner
@markus-:Hat jemand von Euch den Air Purifier 2 laufen?
Als m.header.value.devtype bekomme ich also 825 - das kann so nicht stimmen, oder? `
Als Hex ist es bei mir "033b" statt "00c4" im Beispiel für den Air Purifier.
Wenn du das änderst sollten die Befehle funktionieren. `
Jetzt wird die Bibliothek direkt diese Information (devtype, serial) vom Gerät abholen, leider kenne ich nicht direkt die Kommandos anderer Geräte (ein paar von Purifier sind in diesem Thema zu finden). Die rohen Kommandos könntest du mit raw_command (wie hier gezeigt https://github.com/rytilahti/python-mir … ctionality) ausführen um andere Geräte zu steuern.Die beiden serial und devtype stehen nicht wirklich für entsprechende Merkmale, sondern sie sind nur wegen einer Behauptung so genannt. Auf eeur Erkenttnisse bzw. Patches würde mich natürlich freuen
-
RE: [Frage] Xiaomi Vacuum cleaner
Scheinbar gibt es mehrere HW/Protokolversionen, deswegen funktioniert es vielleicht für alle mit zurzeitigen hardkodierten Werten: https://github.com/rytilahti/python-mirobo/issues/1
edit: sollte aber kein Problem sein soweit die Werten sind von helo-Paket ausgenommen, wusste es nicht, dass es so mit iobroker-plugin seie. Sorry für den Lärm.
-
RE: [Frage] Xiaomi Vacuum cleaner
Ich denke, ich warte jetzt mal ab, was Meistertr und gst666 mit dem Adapter anstellen. Denn irgendwie bin ja jetzt zur Untätigkeit verdammt. Mirobo läuft, aber ich kann es nicht nutzen, weil vlt. der Token nicht stimmt oder timeout oder …?
Jedenfalls 100000 Dank an alle, due sich hier engagieren. Und wie gesagt, wenn ich helfen kann, dann lasst es mich wissen. `
Der Token sieht gut aus, damit sollte es klappen (ohne leerzeihnen usw.). Wenn nicht, kann man ja leider nicht so viel damit machen.. Und ja, es lohnt sich auf den Adapter zu warten, insb. als er wird direkt mit ioBroker integriert. Jedoch danke für das Testen, es hat mir geholfen! Wenn es nicht mit dem Adapter geht, ist die Ursache der Token. -
RE: [Frage] Xiaomi Vacuum cleaner
tpr,
Danke für Deine Antwort. Er saugt aber nicht! Ich werde nachher noch mal versuchen, kurz hintereinander das Kommando zweimal zu senden. Kommt der Fehler mit dem timeout auch, wenn der Token nicht stimmt? Ich habe ihn bei der Ersteinrichtung generiert. Allerdings hat sich das Gerät später zweimal neue Softwareaktualisierungen geholt. Und ich bin daher nicht mehr sicher, ob der Token noch richtig ist. `
Das Timeout kommt auch wenn der Token falsch ist, da der Robot nämlich dann nichts geantwortet hat. Wegen Softwareaktualisierungen sollte es nicht verloren gehen, soweit man es nicht erneut mit Wifi verbunden muss. Also mag sein, dass Dein Token Falsch ist. Hier ist wie ich es bei mir aussieht: MIROBO_TOKEN=476e6b70343055483230644c53707a42 -
RE: [Frage] Xiaomi Vacuum cleaner
@gst666 wenn du noch Hilfe brauchst, sag bescheid…
Wofür ist eigentlich die Find-Funktion?
Sie lässt der Robot nur etwas auf Chinesisch aussprechen, eventuell ist nur nützlich für die Lokatierung wenn er verloren gegangen ist.(Und fanspeed ist ja 0-100, steht für die Luftabsaugung statt Lüfter, wird aber in Status als fanspeed genannt. Hier ein komplettes Beispiel: {'id': 1, 'result': [{'state': 6, 'error_code': 0, 'msg_ver': 4, 'fan_power': 70, 'clean_time': 1580, 'clean_area': 20935000, 'battery': 100, 'map_present': 1, 'msg_seq': 164, 'in_cleaning': 0, 'dnd_enabled': 0}]}, die State- und Fehlernummer sind hier zu sehen: https://github.com/rytilahti/python-mir … ers.py#L30)
-
RE: [Frage] Xiaomi Vacuum cleaner
Fazit: es klappt leider nicht. Hinweis: nach der Installation habe ich einmal bewußt nur mirobo eingegeben, um zu testen. Dann fordert mirobo ja die ip und den token an. Di habe ich danach mit Export eingegeben. Die ip ist richtig. das zeigt die Antwort auf Discover:
` > (test_environment) root@raspberrypi:~# mirobo discover
INFO:mirobo.vacuum:Sending discovery packet to broadcast address..
WARNING:mirobo.protocol:Unable to decrypt, returning raw bytes.
INFO:mirobo.vacuum: IP 192.168.X.X: 844 - token: b'ffffffffffffffffffffffffffffffff'
WARNING:mirobo.vacuum:error while reading discover results: timed out
(test_environment) root@raspberrypi:~# `
Etwas irritiert bin ich über den timeout. Denn mit der regulären IOS App komme ich drauf und sehe die Daten.
Es ist doch zu dumm, daß ich Dein Programm hier nicht ans Laufen bekomme. Hast Du noch eine Idee? `
Ok, jetzt läuft das Skript mindestens, ist schon eine Fortschritt! Wie sieht dein Token aus, das Du exportiert hast? Das mit nur 'f's zeigt nur, dass der Robo ist schon mit dem App verbunden und gibt den Token nicht mehr. Seit spät gestern soll das Timeout 5s sein, manchmal (insb. wenn er saugt) kriegt man die Timeouts. Dabei hilft eine Neuausführung des Kommandos.
-
RE: [Frage] Xiaomi Vacuum cleaner
File "/usr/local/lib/python2.7/dist-packages/mirobo/vacuum.py", line 14, in init
self.token = bytes.fromhex(token)
AttributeError: type object 'str' has no attribute 'fromhex'
Was will uns das sagen? `
Es soll mit python/pip3 installiert und benutzt werden, da es nur python3 unterstützt. Hier nochmal Schritt zu Schritt wie ich es gerade mit virtualenv auf Raspberry Pi 3 mit Raspbian Jessie getestet habe:!
homeassistant@rasputin:~ $ virtualenv test_environment -p python3 Already using interpreter /usr/bin/python3 Using base prefix '/usr' New python executable in test_environment/bin/python3 Also creating executable in test_environment/bin/python Installing setuptools, pip...done. homeassistant@rasputin:~ $ source test_environment/bin/activate (test_environment)homeassistant@rasputin:~ $ pip install -U pip setuptools Downloading/unpacking pip from https://pypi.python.org/packages/b6/ac/7015eb97dc749283ffdec1c3a88ddb8ae03b8fad0f0e611408f196358da3/pip-9.0.1-py2.py3-none-any.whl#md5=297dbd16ef53bcef0447d245815f5144 Downloading pip-9.0.1-py2.py3-none-any.whl (1.3MB): 1.3MB downloaded Downloading/unpacking setuptools from https://pypi.python.org/packages/49/09/68b43c68492a9d437c137892d11427ac45a1497812c8a8ce2cd17649a27c/setuptools-34.3.1-py2.py3-none-any.whl#md5=ea9c9c51767f5037754dc6228cdeb607 Downloading setuptools-34.3.1-py2.py3-none-any.whl (389kB): 389kB downloaded Downloading/unpacking packaging>=16.8 (from setuptools) Downloading packaging-16.8-py2.py3-none-any.whl Downloading/unpacking six>=1.6.0 (from setuptools) Downloading six-1.10.0-py2.py3-none-any.whl Downloading/unpacking appdirs>=1.4.0 (from setuptools) Downloading appdirs-1.4.3-py2.py3-none-any.whl Downloading/unpacking pyparsing (from packaging>=16.8->setuptools) Downloading pyparsing-2.2.0-py2.py3-none-any.whl (56kB): 56kB downloaded Installing collected packages: pip, setuptools, packaging, six, appdirs, pyparsing Found existing installation: pip 1.5.6 Uninstalling pip: Successfully uninstalled pip Found existing installation: setuptools 5.5.1 Uninstalling setuptools: Successfully uninstalled setuptools Successfully installed pip setuptools packaging six appdirs pyparsing Cleaning up... (test_environment)homeassistant@rasputin:~ $ pip install python-mirobo Collecting python-mirobo Using cached python_mirobo-0.0.3-py3-none-any.whl Collecting cryptography (from python-mirobo) Using cached cryptography-1.7.2.tar.gz Collecting pretty-cron (from python-mirobo) Using cached pretty_cron-1.0.2-py2.py3-none-any.whl Collecting click (from python-mirobo) Using cached click-6.7-py2.py3-none-any.whl Collecting construct (from python-mirobo) Using cached construct-2.8.10-py2.py3-none-any.whl Collecting idna>=2.0 (from cryptography->python-mirobo) Downloading idna-2.5-py2.py3-none-any.whl (55kB) 100% |████████████████████████████████| 61kB 1.6MB/s Collecting pyasn1>=0.1.8 (from cryptography->python-mirobo) Using cached pyasn1-0.2.3-py2.py3-none-any.whl Requirement already satisfied: six>=1.4.1 in ./test_environment/lib/python3.4/site-packages (from cryptography->python-mirobo) Requirement already satisfied: setuptools>=11.3 in ./test_environment/lib/python3.4/site-packages (from cryptography->python-mirobo) Collecting cffi>=1.4.1 (from cryptography->python-mirobo) Using cached cffi-1.9.1.tar.gz Requirement already satisfied: appdirs>=1.4.0 in ./test_environment/lib/python3.4/site-packages (from setuptools>=11.3->cryptography->python-mirobo) Requirement already satisfied: packaging>=16.8 in ./test_environment/lib/python3.4/site-packages (from setuptools>=11.3->cryptography->python-mirobo) Collecting pycparser (from cffi>=1.4.1->cryptography->python-mirobo) Using cached pycparser-2.17.tar.gz Requirement already satisfied: pyparsing in ./test_environment/lib/python3.4/site-packages (from packaging>=16.8->setuptools>=11.3->cryptography->python-mirobo) Installing collected packages: idna, pyasn1, pycparser, cffi, cryptography, pretty-cron, click, construct, python-mirobo Running setup.py install for pycparser ... done Running setup.py install for cffi ... done Running setup.py install for cryptography ... done Successfully installed cffi-1.9.1 click-6.7 construct-2.8.10 cryptography-1.7.2 idna-2.5 pretty-cron-1.0.2 pyasn1-0.2.3 pycparser-2.17 python-mirobo-0.0.3 (test_environment)homeassistant@rasputin:~ $ mirobo State: Charging Battery: 100 Fanspeed: 30 Cleaning since: 0:26:44 Cleaned area: 21.3275 m² DND enabled: 0 Map present: 1 in_cleaning: 0 !
! Zuvor hatte ich schon MIROBO_TOKEN und MIROBO_IP mit export gesetzt wie in README.md gezeigt ist. -
RE: [Frage] Xiaomi Vacuum cleaner
tpr,
erstmal wieder ein DD (=dickes Dankeschön
)
Wenn das wohl an "zu alten" pip und setuptool liegt, dann müssen diese sich doch irgendwie auf den neuesten Stand bringen lassen können. Ich habe den Raspi im übrigen erst vor ca. 3 Wochen neu aufgesetzt. Und er läuft mit Jessie, ist geupdated und geupgraded. So richtig kapieren tue ich das nicht. `
Kein Problem. In "pip install -U pip" -U steht für upgrade -> das sollte es aktualisieren. Ebenso für setuptools.