Plugin: MiRobot2Lox-NG - Xiaomi Vacuum Robots

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • Gast

    Zuerst mal Danke für die tolle Arbeit. Das Einbinden hat bei mir dank der Anleitung problemlos funktioniert. Wäre es möglich, durch eine leichte Adaption das Plugin auch für den Xiaomi Smart Fan S2 zu verwenden? Er kommuniziert wie der Roboter auch via WLAN. Ich habe ihn zwar testweise als 2. Roboter eingetragen, was verständlicherweise nicht funktioniert hat...

    Kommentar


    • Prof.Mobilux
      Prof.Mobilux kommentierte
      Kommentar bearbeiten
      Du kannst direkt das Kommando und auch eine Option an das Programm miiocli übergeben. Der Aufruf der URL lautet:
      Code:
      http://loxberry/plugins/mirobot2lox-ng/sendcmd.cgi?command=sKOMMANDO&option=OPTION&robot=1&debug=0
      Damit wird auf der Konsole folgendes ausgeführt:
      Code:
      /usr/local/bin/miiocli  -o json_pretty vacuum --ip IPROBOT --token TOKEN KOMMANFO OPTION  2>&1
      Ich vermute mal, dass das "vacuum" vorne bei Dir das Problem darstellt. Welches KOmmando müsstest Du denn laut Doku auf der Konsole ausführen? Wie ist das genau aufgebaut?

    • Gast
      Gast kommentierte
      Kommentar bearbeiten
      Danke für den Tip. Das Kommando info funktioniert mit URL-Aufruf, andere Befehle nicht. Wenn ich in der Konsole vacuum durch fan ersetze, kann ich auch andere Kommandos übergeben (on, off, etc.). Die Befehlsreferenz findet sich hier: https://python-miio.readthedocs.io/e...odule-miio.fan oder ggf. auch hier https://github.com/syssi/xiaomi_fan.
      Keine Ahnung, wie sich das nun in ein Plugin umwandeln lässt :-)
      Zuletzt geändert von Gast; 09.07.2020, 22:55.

    • Prof.Mobilux
      Prof.Mobilux kommentierte
      Kommentar bearbeiten
      Das kann ich Dir einbauen. Mache ich am Wochenende.
  • Prof.Mobilux
    Supermoderator
    • 25.08.2015
    • 4627

    Gast Sorry, ich hatte Dich vergessen... Installiere bitte mal den letzten Master: https://github.com/mschlenstedt/LoxB...ive/master.zip

    Damit kannst Du in der URL eine zusätzliche Option "device" mit angeben. Wird diese Option gesetzt, wird anstelle von vacuum das angegebene Device verwendet. Aufruf so:

    Code:
    http://loxberry/plugins/mirobot2lox-ng/sendcmd.cgi?command=KOMMANDO&option=OPTION&robot= 1&debug=0&device=fan
    Damit müsste auf der Konsole folgender Befehl ausgeführt werden:

    Code:
    /usr/local/bin/miiocli -o json_pretty fan --ip IPROBOT --token TOKEN KOMMANDO OPTION
    Ich habe es aber selbst noch nicht getestet.
    🇺🇦 Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine


    LoxBerry - Beyond the Limits

    Kommentar

    • Olinist
      Azubi
      • 07.06.2020
      • 3

      Hallo, habe das problem "no space left on device" mittlerweile unter kontrolle. Dafür aber ein neues... :-(

      Sporadisch reagiert der Roboter nicht mehr auf befehle. (Error: No responce from device)

      Um den Fehler zu beheben, muss ich einfach nur die MiHome App öffnen und auf das Staubsauger-Template wechseln. Dann funktionieren die Befehle wieder für ca. 5 Tage.

      Nach der Ram belegung habe ich geschaut, da ist genügend Platz frei.

      Vielen Dank für die Hilfe.

      Gruß Oli

      Kommentar

      • meteo88
        Smart Home'r
        • 06.03.2020
        • 32

        Hallo,

        ich habe folgendes Problem:
        bei mir reagiert der Xiaomi Mi Vacuum Cleaner Pro nicht auf Befehle über den Loxberry (und auch nicht über das Terminal).
        Das einzige was funktioniert ist die Debug(Info) Abfrage!
        Aber bei allen anderen Befehlen lädt er lang im Browser bis dann die Meldung kommt:

        /usr/local/bin/miiocli -o json_pretty vacuum --ip 192.168.1.6 --token TOKEN start 2>&1 Output: ERROR:miio.miioprotocol:Got error when receiving: timed out Error: No response from the device
        Der Befehl:

        /usr/local/bin/mirobo discover --handshake 1

        liefert auch ein Ergebnis:
        /usr/local/bin/mirobo discover --handshake 1
        INFO:miio.miioprotocol:Sending discovery to <broadcast> with timeout of 5s..
        INFO:miio.miioprotocol: IP 192.168.1.6 (ID: 139df008) - token: b'ffffffffffffff ffffffffffffffffff'
        INFO:miio.miioprotocoliscovery done
        Der Befehl:
        /usr/local/bin/miiocli -d -o json_pretty vacuum --ip 192.168.1.6 --token TOKEN raw_command miIO.info 2>&1

        liefert:
        INFO:miio.cliebug mode active
        DEBUG:miio.vacuum:Read stored sequence ids: {'seq': 108, 'manual_seq': 0}
        DEBUG:miio.protocol:Unable to decrypt, returning raw bytes: b''
        DEBUG:miio.miioprotocol:Got a response: Container:
        data = Container:
        data = b'' (total 0)
        value = b'' (total 0)
        offset1 = 32
        offset2 = 32
        length = 0
        header = Container:
        data = b'!1\x00 \x00\x00\x00\x00\x13\x9d\xf0\x08_!v\x1a' (total 16)
        value = Container:
        length = 32
        unknown = 0
        device_id = unhexlify('139df008')
        ts = 2020-07-29 13:14:02
        offset1 = 0
        offset2 = 16
        length = 16
        checksum = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff \xff\xff\xff\xff' (total 16)
        DEBUG:miio.miioprotocoliscovered 139df008 with ts: 2020-07-29 13:14:02, token: b'ffffffffffffffffffffffffffffffff'
        DEBUG:miio.miioprotocol:192.168.1.6:54321 >>: {'id': 109, 'method': 'miIO.info', 'params': []}
        DEBUG:miio.miioprotocol:192.168.1.6:54321 (ts: 2020-07-29 13:14:02, id: 109) << {'partner_id': '', 'id': 109, 'code': 0, 'message': 'ok', 'result': {'hw_ver': 'Linux', 'fw_ver': '3.5.3_0017', 'ap': {'ssid': 'Smarttrins', 'bssid': 'e0:xx:xx:xx:xx:xx'}, 'netif': {'localIp': '192.168.1.6', 'mask': '255.255.255.0', 'gw': '192.168.1.1'}, 'model': 'viomi.vacuum.v8', 'mac': '64:xx:xx:xx:xx', 'token': 'TOKEN', 'life': 15286}}
        {
        "hw_ver": "Linux",
        "fw_ver": "3.5.3_0017",
        "ap": {
        "ssid": "SSID",
        "bssid": "e0:xx:xx:xx:xx:xx"
        },
        "netif": {
        "localIp": "192.168.1.6",
        "mask": "255.255.255.0",
        "gw": "192.168.1.1"
        },
        "model": "viomi.vacuum.v8",
        "mac": "64:xx:xx:xx:xx",
        "token": "TOKEN",
        "life": 15286
        }
        DEBUG:miio.vacuum:Writing {'seq': 109, 'manual_seq': 0} to /opt/loxberry/.cache/python-miio/python-mirobo.seq

        hab bereits loxberry komplett neu installiert, hat aber nix gebracht..
        weiters hab ich den Roboter auch noch einmal zurückgesetzt und den Token neu ausgelesen.
        Prinzipiell müsste der Token aber korrekt sein, wenn die Debug(Info) funktioniert, ist das richtig?
        Gibt es da eventuell generell ein Problem mit neueren Xiaomi Staubsaugerrobotern?
        Kann mir bitte wer helfen dabei?

        Danke und lg,
        Dominik
        Zuletzt geändert von meteo88; 29.07.2020, 15:18.

        Kommentar


        • AND
          AND kommentierte
          Kommentar bearbeiten
          Mein Xiaomi Mi Vacuum Cleaner Pro wird heute geliefert...
          Daher würde mich das auch sehr interessieren.

          PS: Für die Suche: Xiaomi Mijia Robot STYJ02YM ist der Name unter dem das Produkt im Sommer 2019 in China released wurde

        • meteo88
          meteo88 kommentierte
          Kommentar bearbeiten
          Ok, habe jetzt vom Entwickler vom python-miio Modul über Github erfahren, dass man den Xiaomi Mi Vacuum Cleaner Pro nur mit dem Befehl viomivacuum ansteuern kann (siehe https://github.com/rytilahti/python-miio/issues/750)

          Leider gibt es beim viomivacuum Modul nur einige wenige (wohl aber die wichtigsten) Befehle zum ausführen (über python-miio):

          carpet_mode Set the carpet mode.
          clean_mode Set the cleaning mode.
          dnd_status Returns do-not-disturb status.
          fan_speed_presets Return dictionary containing supported fanspeeds.
          home Return to home.
          info Get miIO protocol information from the device.
          led Switch the button leds on or off.
          mop_mode partial(func, *args, **keywords) - new function with...
          move Manual movement.
          pause Pause cleaning.
          raw_command Send a raw command to the device.
          set_dnd Set do-not-disturb.
          set_fan_speed Set fanspeed [silent, standard, medium, turbo].
          set_language Set the device's audio language.
          set_water_grade Set water grade [low, medium, high].
          start Start cleaning.
          status Retrieve properties.
          stop Stop cleaning.

          Allerdings haben die Befehle bei mir eine deutliche Verzögerung, teilweise >10s bis der Roboter reagiert, was nervig ist...
          Aber zumindest ansteuern kann man ihn damit:

          Beispiel für START:
          miiocli viomivacuum --ip 192.168.1.6 --token TOKEN start

          lg
          Dominik
      • fs79
        Smart Home'r
        • 25.04.2019
        • 52

        Hi in die Runde,
        dieser Staubsauger verhält sich etwas anders bzw. kommuniziert etwas anders.
        Ich habe folgendes Modell Mi Robot Vaccuum-Mop P (STYTJ02YM) und die Befehle lauten folgendermassen:
        miiocli viomivacuum --ip 10.0.0.xxx --token xxxx status
        miiocli viomivacuum --ip 10.0.0.xxx --token xxxx start
        miiocli viomivacuum --ip 10.0.0.xxx --token xxxx stop
        miiocli viomivacuum --ip 10.0.0.xxx --token xxxx home
        Die Frage ist jetzt wie wir das Plugin dazu bekommen viomivacuum statt vacuum zu nutzen.

        Prof.Mobilux
        Hab mal device=viomivacuum angehangen, das klappt leider nicht.
        Hab vorher auch den Master installiert. Hmm.
        Kannst du hier helfen?

        VG
        Frank
        Zuletzt geändert von fs79; 30.07.2020, 14:30.

        Kommentar

        • meteo88
          Smart Home'r
          • 06.03.2020
          • 32

          Hi Frank,

          haben die Befehle bei dir eine Verzögerung zwischen dem ausführen im Terminal bis zum Reagieren des Roboters? Bei mir eben teilweise mehr als 10 Sekunden...

          wie @Prof.Mobilux in Beitrag #182 geschrieben hat, kann man ja im http Aufruf nun den device übergeben, d.h. man kann:

          Code:
          http://loxberry/plugins/mirobot2lox-ng/sendcmd.cgi?command=KOMMANDO&option=OPTION&robot= 1&debug=0&device=viomivacuum
          schreiben, funktioniert bei mir auch so.

          Was aber vermutlich komplett anders ist, ist die Statusabfrage des Roboters, die funktioniert bei mir überhaupt nicht.

          lg

          Kommentar

          • fs79
            Smart Home'r
            • 25.04.2019
            • 52

            Das klappt bei mir leider nicht mit device=.
            Aber bei mir scheint nach der Installation des o.a. ZIP Archivs einiges nicht zu klappen. Installiere jetzt die freigegebene Version und starte nochmal neu.

            start, stop, status funktioniert bei mir.
            Diese Kommandos aber auch nicht immer. Also leider mit viomivacuum als Device auch nicht stabil, ich teste alles auf der Commandline.
            Mal sehen ob wir hier noch eine Lösung finden, da es aber im miiocli binary schon instabil ist, denke ich nicht das wir es mit dem Modul besser hinbekommen.

            Da wird aber schon eine Weil dran "gefummel" und es ist noch nicht stabil, das macht mich etwas skeptisch.
            Ganz guter Thread dazu, kommt von Homebridge dreht sich aber um dieses Gerät.
            Home Assistant release with the issue: 0.99.3 Operating environment (Hass.io/Docker/Windows/etc.): Hass.io Integration: https://www.home-assistant.io/integrations/vacuum.xiaomi_miio/ Description of...

            Zuletzt geändert von fs79; 30.07.2020, 15:11.

            Kommentar

            • fs79
              Smart Home'r
              • 25.04.2019
              • 52

              meteo88
              Probier mal folgendes.
              Ändere bitte in der Datei den retry_count
              /usr/local/lib/python3.7/dist-packages/miio/device.py
              def send(
              self,
              command: str,
              parameters: Any = None,
              retry_count=3,
              *,
              extra_parameters=None
              ) -> Any:

              def send(
              self,
              command: str,
              parameters: Any = None,
              #retry_count=3,
              retry_count=20,
              *,
              extra_parameters=None
              ) -> Any:
              VG

              Kommentar

              • fs79
                Smart Home'r
                • 25.04.2019
                • 52

                Prof.Mobilux
                hier die Statusabfragen eines Roborock S50, der mit deinem Modul läuft.
                #miiocli vacuum --ip x.x.x.x --token xx11223344 status
                Running command status
                <VacuumStatus state=Charger disconnected, error=No error bat=89%, fan=102% cleaned 0.0 m² in 0:00:07>
                Hier vom Viomivacuum
                #miiocli viomivacuum --ip x.x.x.x --token xx11223344 status
                State: ViomiVacuumState.Cleaning
                Mode: ViomiMode.Vacuum
                Error: Unknown error 0
                Battery: 73
                Fan speed: ViomiVacuumSpeed.Silent
                Box type: ViomiBinType.Vacuum
                Mop type: 0
                Clean time: 0:00:24
                Clean area: 24.32
                Water grade: ViomiWaterGrade.Medium
                Remember map: True
                Has map: False
                Has new map: False
                Mop mode: ViomiMode.Vacuum
                Kann ich irgendwo unterstützen, vielleicht im Anpassen der WebGui?
                Häkchen für viomivacuum statt vacuum abfragen und/oder fürs parsen/mappen der unterschiedlichen Antwort von Xiamo Robot?

                Ich benötige den Status vom Sauger um meine Alarmanlage abzuschalten wenn der läuft und die Steuerung um den zu starten wenn niemand daheim ist.

                Das funktioniert mit meinem Roborock schon super. Dafür vielen Dank von mir für Dein Modul.

                Kommentar

                • Prof.Mobilux
                  Supermoderator
                  • 25.08.2015
                  • 4627

                  Muss ich mir mal anschauen.
                  🇺🇦 Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine


                  LoxBerry - Beyond the Limits

                  Kommentar

                  • Prof.Mobilux
                    Supermoderator
                    • 25.08.2015
                    • 4627

                    Um den viomivacuum einzubinden brauche ich mal die Ausgabe von folgendem Kommando;

                    Code:
                    /usr/local/bin/miiocli -o json_pretty viomivacuum --ip IP --token TOKEN status
                    🇺🇦 Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine


                    LoxBerry - Beyond the Limits

                    Kommentar

                    • fs79
                      Smart Home'r
                      • 25.04.2019
                      • 52

                      Hi Prof.Mobilux
                      json_pretty darfst du nicht nutzen. Das muss also bei Nutzung von viomivacuum auch weggelassen werden.
                      Ansonsten ist der Auszug oben.

                      Kommentar


                      • Prof.Mobilux
                        Prof.Mobilux kommentierte
                        Kommentar bearbeiten
                        Nicht Dein Ernst, oder?! Das ist ja ein Schrott... Ich dachte die Option -o json_pretty wäre Device-Unabhängig implementiert... Bist Du sicher, dass das nicht geht? Würde nämlich das Parsen sehr viel vereinfachen.
                    • fs79
                      Smart Home'r
                      • 25.04.2019
                      • 52

                      Hi zusammen & Prof.Mobilux

                      Hap das repo gecloned und schon einiges verändert, passe jetzt noch den Grabber an so das der roborock status wenigstens wieder läuft,
                      Habe die Berechung bzw. den String für Dockrelease auch ins Wrapper Skript verschoben weil der Xiaomi da etwas anderes erwartet.
                      Das bedeutet das Roborock & Xiaomi schon mal gesteuert werden können.
                      Wobei zu beachten gilt das der Roborock da besser funktioniert, also weniger Delay hat, und mehr von seinen Stati, wie Verbrauchsmaterial, freigibt.
                      Ob es am Staubsauger selbst oder an der benutzen miiocli liegt kann ich nicht einschätzen.

                      vg

                      Kommentar


                      • Prof.Mobilux
                        Prof.Mobilux kommentierte
                        Kommentar bearbeiten
                        Perfekt. Das sendcmd.cgi hatte ich bereits angepasst. Das sollte eigentlich schon klappen.
                    • fs79
                      Smart Home'r
                      • 25.04.2019
                      • 52

                      Sicher bin ich mir allem nicht. ;-)
                      json_pretty liefert nichts zurück wenn es mit dem viomivacuum benutzt wird.
                      Richtig, du hast sendcmd.cgi schon angepasst.
                      Ich habe nur die Bewegungsroutine (dockrelease) ins Wrapper Skript verschoben weil der viomivacuum die anders braucht. Schiebe nur die Zeit ins Wrapperskript und mache die Berechnung und Anpassung dann da.
                      OK, habs in meinem Repo drin.
                      Hab ein freies Textfeld für das Device ins Webinterface eingebaut, falls jemand etwas anderes als vacuum oder viomivacuum braucht.
                      grabber.pl ignoriert nun erstmal alles ausser das Device vacuum. D.b. wir können uns ums Parsen bzw. den Status des xiaomi später kümmern.

                      Was aus meiner Sicht noch fehlt:
                      Parsing des Status vom Xiaomi viomivacuum
                      Nice to have:
                      Steuerbuttons ausblenden für das was der Xiamo nicht kann

                      Ich denke so kann man das Plugin wieder komplett nutzen mit den Roborocks und mit den Xiaomis. Wobei bei den Xiaomis kein Status kommt, derzeit.
                      Wichtig ist wenn Ihr Xiaomi Bot shabt, das ihr im Python den Retry höher setzt.
                      /usr/local/lib/python3.7/dist-packages/miio/device.py
                      def send(
                      self,
                      command: str,
                      parameters: Any = None,
                      #retry_count=3,
                      retry_count=20,
                      *,
                      extra_parameters=None
                      ) -> Any:
                      Zuletzt geändert von fs79; 31.07.2020, 16:16.

                      Kommentar

                      • Prof.Mobilux
                        Supermoderator
                        • 25.08.2015
                        • 4627

                        fs79 Super - vielen Dank! Mach bitte bei mir einen PullRequest in Git mit deinem Repo. Dann kann ich die Änderungen gleich übernehmen.

                        Das parsen des Status bauen wir dann halt über Regex ein. Scheint mir aber auch alles etwas hineingefrickelt zu sein im miiocli ;-)

                        Das Ausblenden machen wir nicht. Wir vermerken das im Wiki entsprechend. Das muss reichen.
                        🇺🇦 Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine


                        LoxBerry - Beyond the Limits

                        Kommentar

                        Lädt...