Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. ioBroker Allgemein
  4. [Frage] Xiaomi Vacuum cleaner

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.9k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.3k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.5k

[Frage] Xiaomi Vacuum cleaner

Geplant Angeheftet Gesperrt Verschoben ioBroker Allgemein
2.2k Beiträge 204 Kommentatoren 978.3k Aufrufe 39 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • G Offline
    G Offline
    gst666
    schrieb am zuletzt editiert von
    #92

    Ja, kann man:

    { "result": 0, "id": 6430 }

    Die ID ist dieselbe, da es ja die Antwort auf die Frage ist. Der Fehlercode ist null.

    Das Progrämmchen, an dem ich bastele, kann die Nachrichten codieren/decodieren und an das Gerät senden und empfangen.

    Der Befehl für Pause lautet:

    {"id":8243,"method":"app_pause"}
    

    Dann gibt es noch einen Befehl, damit die Kiste wieder zur Ladestation zurückbeordert wird:

    {"id":8093,"method":"app_charge"}
    

    Ich werde eastcost das Programm dann mal zum Testen schicken, damit evt. Fehler noch beseitigt werden, bevor ich es in die freie Wildbahn entlasse.

    1 Antwort Letzte Antwort
    0
    • G Offline
      G Offline
      gst666
      schrieb am zuletzt editiert von
      #93

      Hier die Befehle für den Airpurifier:

      "method":"get_prop","params":["aqi","led","mode","filter1_life","buzzer","favorite_level","temp_dec","humidity","motor1_speed","led_b","child_lock","use$
      
      "method":"set_power","params":["on"]
      "method":"set_power","params":["off"]
      
      "method":"set_mode","params":["auto"]
      "method":"set_mode","params":["silent"]
      "method":"set_mode","params":["favorite"]
      
      "method":"set_level_favorite","params":[10]   // Für Favoriten
      
      "method":"set_buzzer","params":["on"]
      "method":"set_buzzer","params":["off"]
      
      "method":"set_led_b","params":[0]
      "method":"set_led_b","params":[1]
      "method":"set_led_b","params":[2]
      
      set_app_extra","params":[0]  //Turbo mode off
      set_app_extra","params":[1]  //Turbo mode on
      
      1 Antwort Letzte Antwort
      0
      • MeistertrM Offline
        MeistertrM Offline
        Meistertr
        Developer
        schrieb am zuletzt editiert von
        #94

        Ich kenne mich mit der Verschlüsselung nicht so gut aus. Kann man nicht wen man weiß was drin steht und die verschlüsselte nachricht hat einen Token generieren?

        Gesendet von meinem E5823 mit Tapatalk

        1 Antwort Letzte Antwort
        0
        • G Offline
          G Offline
          gst666
          schrieb am zuletzt editiert von
          #95

          Grundsätzlich kann man das. Ist nur eine Frage der Zeit.

          Hier mal eine alte Diskussion:

          http://security.stackexchange.com/quest … the-key-is

          Das geht heute sicherlich schneller. Wenn Du nicht ausreichend Rechenleistung hast, kann es trotzdem Jahre bis Jahrzehnte Dauern. Deshalb ist das für einen normalen Nutzer keine sinnvolle Option. Besser ist es herauszufinden, wann der Token übermittelt wird.

          Wenn der Token für jedes Gerät anders ist (so sieht es zur Zeit aus), so muss die App irgendwann mal erfahren, wie der Token lautet. Wenn das Gerät den Token nich bei dem Start der App ausplaudert, so wird die App den Key wahrscheinlich aus der Cloud erfragen.

          Ein Test-Szenario wäre, den Internetzugang abzuklemmen und den Gesamten Verkehr zwischen Robot und App mitzuschneiden. Wenn die Info immer von der App aus der Cloud geladen wird, so dürfte sich das Gerät nicht mehr bedienen lassen. Wenn der Robot noch funktioniert, so müsste man sich den Datenverkehr anschauen ob der Key jetzt doch von dem Robot mitgeteilt wurde. Wenn nicht, so hat die App den Token zwischengespeichert.

          Hier würde dann nur helfen, die App nebst Daten zu löschen und neu zu installieren und den Datenverkehr mitzuschneiden.

          Ein anderer Ansatz wäre, den Datenverkehr mitzuschneiden, wenn das Gerät (WLAN-Einrichtung) erstmalig eingerichtet wird. Hier wird das Gerät mit Sicherheit den Token verraten. Auch die Cloud braucht ja irgendwann einmal den Token.

          1 Antwort Letzte Antwort
          0
          • S Offline
            S Offline
            skorpil
            schrieb am zuletzt editiert von
            #96

            > Ein anderer Ansatz wäre, den Datenverkehr mitzuschneiden, wenn das Gerät (WLAN-Einrichtung) erstmalig eingerichtet wird. Hier wird das Gerät mit Sicherheit den Token verraten. Auch die Cloud braucht ja irgendwann einmal den Token.

            Da ich meinen noch nicht habe und demnächst erst einrichte: wie geht das Mitschneiden? Ich würde das ja tun, und dem Forum zur Verfügung stellen, wenn ich eine möglichst detaillierte Step by Step Beschreibung bekäme. Oder es kommt jemand zu mir und wir machen das gemeinsam (wenn jemand in der Nähe von Köln wohnt). Bin zu allen Schandtaten bereit - wenn ich damit helfe kann.

            1 Antwort Letzte Antwort
            0
            • S Offline
              S Offline
              skorpil
              schrieb am zuletzt editiert von
              #97

              …und noch eine kurze Frage resp. Hinweis. Obwohl ich ja das Gerät noch gar nicht habe, habe ich mir aber schon die App unter iOS heruntergeladen und mich angemeldet. Beim "Spielen " habe ich gesehen, dass unter meinem Profilbild eine 10-stellige Zahl steht.

              Hat die eine Bedeutung für unsere Fragestellungen? Hat die was mir dem Token zu tun?

              1 Antwort Letzte Antwort
              0
              • G Offline
                G Offline
                gst666
                schrieb am zuletzt editiert von
                #98

                Heute habe ich schon wieder neue Erkenntnisse gesammelt. Der Token kann sich ändern. Wenn man das Gerät abmeldet und anschließend neu anmeldet, hat das Gerät einen neuen Token. Daher an alle, die bei dem Vacuum den Token haben, ja nicht Gerät abmelden und anschließend anmelden.

                Des Weiteren habe ich noch eine interessante Erfahrung gemacht. Ein Device wird nur dann angezeigt, wenn man in der App dieselbe Zone (z.B. China Mainland) einstellt, wie diejenige Zone, die man auch bei der Einrichtung verwendet hat. Ich hatte auf dem Handy Singapore eingestellt und damit das Gerät eingerichtet. Auf Openstack habe ich Mainland China verwendet und konnte das Gerät nicht sehen. Nach dem Umstellen war es plötzlich da. Da das Gerät auch in Mainland China verfügbar ist, heißt dass, dass für jede Zone die Geräte getrennt in der Cloud verwaltet werden.

                1 Antwort Letzte Antwort
                0
                • G Offline
                  G Offline
                  gst666
                  schrieb am zuletzt editiert von
                  #99

                  So im Augenblick sind neue Erkenntnisse etwas zäh. Leider Schaffe ich es nicht mittels Bluestack meinen Air Purifier neu anzumelden. Das liegt wohl daran, das das Anfragen die eigentlich ins Netz laufen sollten ins leere laufen.

                  Dabei ist mir aber eine Eigenheit aufgefallen. Resetet man das Gerät bzw. meldet es ab, so erhält es mit dem Abmelden einen neuen Token und nicht erst bei der neuen Anmeldung. Es wäre klasse, wenn einer, der den Vacuum hat und schon die neue Firmware ohne passenden Token hat, mal sein Gerät abmelden könnte. Es wird dann ein neues WLAN angezeigt. Dieses bitte auswählen und dann an die Adresse 192.168.13.1 auf den UDP Port mal das Magic Paket senden. Es würde mich interessieren, ob in diesem Augenblick das Paket übermittelt wird. Dies könnte den anderen helfen.

                  1 Antwort Letzte Antwort
                  0
                  • bahnuhrB Online
                    bahnuhrB Online
                    bahnuhr
                    Forum Testing Most Active
                    schrieb am zuletzt editiert von
                    #100

                    @skorpil:

                    …und noch eine kurze Frage resp. Hinweis. Obwohl ich ja das Gerät noch gar nicht habe, habe ich mir aber schon die App unter iOS heruntergeladen und mich angemeldet. Beim "Spielen " habe ich gesehen, dass unter meinem Profilbild eine 10-stellige Zahl steht.

                    Hat die eine Bedeutung für unsere Fragestellungen? Hat die was mir dem Token zu tun? `

                    Hallo,

                    ich hab auch so eine 10-stellige Zahl dort stehen.

                    Weißt du mittlerweile für was die gut ist?

                    P.S.

                    Mein robot ist auch noch nicht da.

                    Bestellt am 05.02.

                    shipped out am 17.02.

                    Bei Hermes bisher noch nicht angekommen.

                    @all

                    Gibt es einen Ablauf bei Erstinbetriebnahme des Geräte den man beachten sollte.

                    z.B. gleich von Anfang an die Wifi signale auffangen.

                    mfg


                    Wenn ich helfen konnte, dann Daumen hoch (Pfeil nach oben)!
                    Danke.
                    gute Forenbeiträge: https://forum.iobroker.net/topic/51555/hinweise-f%C3%BCr-gute-forenbeitr%C3%A4ge
                    ScreenToGif :https://www.screentogif.com/downloads.html

                    1 Antwort Letzte Antwort
                    0
                    • MeistertrM Offline
                      MeistertrM Offline
                      Meistertr
                      Developer
                      schrieb am zuletzt editiert von
                      #101

                      Habe heute die Anzeige bekommen dass ein Firmware Update bereit steht. Werde morgen früh den Roboter mal neu anmelden und schauen was er macht und danach das ganze mal mit der neuen Firmware ausprobieren. Vll ist der Token ja wieder da…

                      Gesendet von meinem E5823 mit Tapatalk

                      1 Antwort Letzte Antwort
                      0
                      • S Offline
                        S Offline
                        skorpil
                        schrieb am zuletzt editiert von
                        #102

                        @bahnuhr:

                        1. nein, keine Ahnung, was das ist. Aus dem Forum hat ja leider auch niemand dazu geantwortet;-(

                        2. bestellt am 28.1. Status:

                        ` > 2017-02-12 19:12:00 Parcel departure in Shenzhen Sorting Centre

                        2017-02-13 06:33:00 Parcel departure arrive in HongKong Sorting Centre

                        2017-02-14 10:25:00 Parcel is leaving Hong Kong Airport

                        2017-02-15 10:35:00 United Kingdom Lonton Sorting Centre

                        2017-02-16 08:15:00 Information sent to Germany `

                        Warten wir es ab!

                        1 Antwort Letzte Antwort
                        0
                        • bahnuhrB Online
                          bahnuhrB Online
                          bahnuhr
                          Forum Testing Most Active
                          schrieb am zuletzt editiert von
                          #103

                          @skorpil

                          du hast ja viel da stehen; bei mir steht nur:
                          filename="bild1.jpg" index="0">~~

                          Die 10 stellige Nr. scheint wohl die account Nr. zu sein. Also wahrscheinlich eine laufende Nr. bzgl. unserer Anmeldung bei mi home.

                          mfg


                          Wenn ich helfen konnte, dann Daumen hoch (Pfeil nach oben)!
                          Danke.
                          gute Forenbeiträge: https://forum.iobroker.net/topic/51555/hinweise-f%C3%BCr-gute-forenbeitr%C3%A4ge
                          ScreenToGif :https://www.screentogif.com/downloads.html

                          1 Antwort Letzte Antwort
                          0
                          • G Offline
                            G Offline
                            gst666
                            schrieb am zuletzt editiert von
                            #104

                            Ein Firmware-Update würde ich zur Zeit nicht machen, wenn es keinen zwingenden Grund gibt.

                            Der Token hat soweit ich erkennen kann nichts mit dem Account zu tun. Dafür spricht auch, dass wenn das Gerät abgemeldet wird dieses schon einen neuen Token erzeugt, der bei dem Anmelden dann gleich bleibt. Spannend ist was bei der Anmeldung geschieht. Im Auslieferungszustand spannt das Gerät ein eigenes WLAN auf. die iOS-App ist auch nur dann bereit ein neues Gerät anzulernen, wenn es sich mit der passenden WLAN-ID verbindet. Interessant wäre es, wenn jemand diese Kommunikation mitschneiden könnte. Ich habe es bislang leider nicht geschafft. Als Ausweg werden ich mittels eines RASPI mal ein solches Gerät imitieren, um zu sehen, was dann passiert.

                            Auf jeden Fall wird die WLAN-ID dann gesetzt. Ich vermute, dass im Auslieferungszustand irgendwie auch der Token abgefragt werden kann. Ich gehe davon aus, dass der Token nicht in der Cloud gespeichert ist, da das Gerät ja gerade nicht einem Account zugeordnet ist. Darüber hinaus kann man das Gerät auch mittels Tasten am Gerät (zumindest bei meinem Air Purifier) zurücksetzen und es ist keine Verbindung zum Netzwerk nötig. Daher muss das Gerät den Token am Anfang irgendwie mal bekanntgeben und er wird dann wohl in der Cloud gespeichert.

                            Die Nummer in der Cloud scheint tatsächlich nur eine fortlaufende Nummer zu sein, die keinen Bezug zu dem Token hat.

                            1 Antwort Letzte Antwort
                            0
                            • G Offline
                              G Offline
                              gst666
                              schrieb am zuletzt editiert von
                              #105

                              So, nun ist es Zeit für das Angekündigte Skript:

                              ! #!/usr/bin/python
                              ! # X… Pocket Knife
                              ! # TODO:
                              ! # Verschluesselung
                              ! # Ergebnis vom Command ausgeben
                              ! import sys
                              ! import socket
                              ! import struct
                              ! import hashlib
                              ! import argparse
                              ! # https://cryptography.io/
                              ! from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
                              ! from cryptography.hazmat.backends import default_backend
                              ! from cryptography.hazmat.primitives import padding
                              ! _backend = default_backend()
                              ! TARGET_IP = ""
                              ! TARGET_PORT = 54321
                              ! parser = argparse.ArgumentParser(description=("Control Xiaomi Mi Home Wifi devices"))
                              ! parser.add_argument("-ip", type=str, help="IP or DNS-Name of the device")
                              ! parser.add_argument("-info", help="get info of the device", action="store_true")
                              ! parser.add_argument("-power", type=str, choices=["on", "off"], help="turn Air Purifier 'on' or 'off'")
                              ! parser.add_argument("-mode", type=str, choices=["auto", "silent","favorite"], help="set mode of Air Purifier to 'auto','silent' or 'favorite'")
                              ! parser.add_argument("-token", type=str, help="set token for cryption/encryption (only for experts)")
                              ! parser.add_argument("-cmd", type=str, help="encrypt given command and send to device (only for experts)")
                              ! parser.add_argument("-decode", type=str, help="decipher a given cipher with given token (only for experts)")
                              ! #parser.add_argument("–print-raw", action='store_true')
                              ! args = parser.parse_args()
                              ! class XiaomiPacket():
                              ! def init(self):
                              ! self.magic = "2131".decode('hex')
                              ! self.length = "0020".decode('hex')
                              ! self.unknown1 = "FFFFFFFF".decode('hex')
                              ! self.devicetype = "FFFF".decode('hex')
                              ! self.serial = "FFFF".decode('hex')
                              ! self.stamp = "FFFFFFFF".decode('hex')
                              ! self.checksum = "ffffffffffffffffffffffffffffffff".decode('hex')
                              ! self.data = ""
                              ! self.token = ""
                              ! def setRaw(self, raw):
                              ! self.magic = raw[ 0: 2]
                              ! self.length = raw[ 2: 4]
                              ! self.unknown1 = raw[ 4: 8]
                              ! self.devicetype = raw[ 8:10]
                              ! self.serial = raw[10:12]
                              ! self.stamp = raw[12:16]
                              ! self.checksum = raw[16:32]
                              ! self.data = raw[32:]
                              ! if self.length=="0020".decode('hex'):
                              ! self.token=self.checksum
                              ! return
                              ! def updateChecksum(self):
                              ! self.checksum = md5(self.magic+self.length+self.unknown1+self.devicetype+self.serial+self.stamp+self.token+self.data)
                              ! return
                              ! def getRaw(self):
                              ! if len(self.data)>0:
                              ! self.updateChecksum()
                              ! raw = self.magic+self.length+self.unknown1+self.devicetype+self.serial+self.stamp+self.checksum+self.data
                              ! return raw
                              ! else:
                              ! raw = self.magic+self.length+self.unknown1+self.devicetype+self.serial+self.stamp+self.checksum
                              ! return raw
                              ! def getPlainData(self):
                              ! plain = decrypt(self.token, self.data)
                              ! return plain
                              ! def setPlainData(self,plain):
                              ! self.data = encrypt(self.token, plain)
                              ! length = len(self.data)+32
                              ! self.length = format(length, '04x').decode('hex')
                              ! self.updateChecksum()
                              ! return
                              ! def setHelo(self):
                              ! self.magic = "2131".decode('hex')
                              ! self.length = "0020".decode('hex')
                              ! self.unknown1 = "FFFFFFFF".decode('hex')
                              ! self.devicetype = "FFFF".decode('hex')
                              ! self.serial = "FFFF".decode('hex')
                              ! self.stamp = "FFFFFFFF".decode('hex')
                              ! self.checksum = "ffffffffffffffffffffffffffffffff".decode('hex')
                              ! self.data = ""
                              ! self.token = ""
                              ! return
                              ! def findXiaomi(self):
                              ! sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
                              ! sock.bind(('', 0))
                              ! sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
                              ! Packet = XiaomiPacket()
                              ! Packet.setHelo()
                              ! sock.sendto(Packet.getRaw(), ('<broadcast>', TARGET_PORT))
                              ! d = sock.recvfrom(1024)
                              ! print d[1][0]
                              ! return d[1][0]
                              ! def printPacket(self,txt):
                              ! txt=(txt[0:11]+" ")[0:12]
                              ! txt=txt+self.getRaw().encode('hex')
                              ! txt=txt[:160]
                              ! print txt
                              ! return
                              ! def md5(data):
                              ! checksum = hashlib.md5()
                              ! checksum.update(data)
                              ! return checksum.digest()
                              ! def key_iv(token):
                              ! key = md5(token)
                              ! iv = md5(key+token)
                              ! return (key, iv)
                              ! def encrypt(token, plaintext):
                              ! key, iv=key_iv(token)
                              ! padder = padding.PKCS7(128).padder()
                              ! padded_plaintext = padder.update(plaintext)+padder.finalize()
                              ! cipher = Cipher(algorithms.AES(key),modes.CBC(iv),backend=_backend)
                              ! encryptor = cipher.encryptor()
                              ! return encryptor.update(padded_plaintext)+encryptor.finalize()
                              ! def decrypt(token, ciphertext):
                              ! key, iv = key_iv(token)
                              ! cipher = Cipher(algorithms.AES(key),modes.CBC(iv),backend=_backend)
                              ! decryptor = cipher.decryptor()
                              ! padded_plaintext = decryptor.update(bytes(ciphertext))+decryptor.finalize()
                              ! unpadder = padding.PKCS7(128).unpadder()
                              ! unpadded_plaintext = unpadder.update(padded_plaintext)+unpadder.finalize()
                              ! return unpadded_plaintext
                              ! def GetSessionInfo():
                              ! try:
                              ! sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
                              ! except socket.error:
                              ! print('Failed to create socket')
                              ! sys.exit()
                              ! try:
                              ! PACKET = XiaomiPacket()
                              ! PACKET.setHelo()
                              ! #PACKET.printPacket('HELO')
                              ! sock.sendto(PACKET.getRaw(), (TARGET_IP, TARGET_PORT))
                              ! sock.settimeout(1.0)
                              ! try:
                              ! d = sock.recvfrom(1024)
                              ! except socket.timeout:
                              ! print "Timeout"
                              ! sys.exit()
                              ! PACKET.setRaw(d[0])
                              ! if args.token:
                              ! PACKET.token=args.token.decode('hex')
                              ! #PACKET.printPacket('HELO answer')
                              ! if PACKET.devicetype.encode('hex')=="034c":
                              ! print "Device Type: Xiaomi Mi Robot Vacuum"
                              ! elif PACKET.devicetype.encode('hex')=="00c4":
                              ! print "Device Type: Xiaomi Smart Mi Air Purifier"
                              ! else:
                              ! print "Device Type: "+PACKET.devicetype.encode('hex')
                              ! print "Token: "+PACKET.token.encode('hex')
                              ! return PACKET
                              ! except socket.error, msg:
                              ! print('Error Code: '+str(msg[0])+' Messge: '+msg[1])
                              ! sys.exit()
                              ! def SendRcv(PACKET):
                              ! try:
                              ! sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
                              ! except socket.error:
                              ! print('Failed to create socket')
                              ! sys.exit()
                              ! try:
                              ! #PACKET.printPacket('Send')
                              ! #print PACKET.getPlainData()
                              ! sock.sendto(PACKET.getRaw(), (TARGET_IP, TARGET_PORT))
                              ! sock.settimeout(1.0)
                              ! d = sock.recvfrom(1024)
                              ! PACKET.setRaw(d[0])
                              ! #print PACKET.getPlainData()
                              ! #print PACKET.data.encode('hex')
                              ! return
                              ! except socket.error, msg:
                              ! print('Error Code: '+str(msg[0])+' Messge: '+msg[1])
                              ! sys.exit()
                              ! return
                              ! #Packet.setPlainData('{"id":6148,"method":"get_prop","params":["aqi","led","mode","filter1_life","buzzer","favorite_level","temp_dec","humidity","motor1_speed","led_b","child_lock"]}')
                              ! if args.ip:
                              ! TARGET_IP = args.ip
                              ! else:
                              ! Packet = XiaomiPacket()
                              ! TARGET_IP = Packet.findXiaomi()
                              ! if args.decode:
                              ! if not args.token:
                              ! print "For this option the token argument is needed!"
                              ! sys.exit()
                              ! Packet = XiaomiPacket()
                              ! if args.decode.decode('hex')[0:2]=='!1':
                              ! Packet.data=args.decode.decode('hex')[32:]
                              ! else:
                              ! Packet.data=args.decode.decode('hex')
                              ! Packet.token=args.token.decode('hex')
                              ! print Packet.getPlainData()
                              ! if args.info:
                              ! Packet = GetSessionInfo()
                              ! k = key_iv(Packet.token)
                              ! if args.power:
                              ! Packet = GetSessionInfo()
                              ! if Packet.devicetype.encode('hex')!="00c4":
                              ! print "ERROR: Air Purifier not recognized!"
                              ! sys.exit()
                              ! print args.power
                              ! if args.power=="on":
                              ! Packet.setPlainData('{"id":6149,"method":"set_power","params":["on"]}')
                              ! SendRcv(Packet)
                              ! else:
                              ! Packet.setPlainData('{"id":6149,"method":"set_power","params":["off"]}')
                              ! SendRcv(Packet)
                              ! if args.mode:
                              ! Packet = GetSessionInfo()
                              ! if Packet.devicetype.encode('hex')!="00c4":
                              ! print "ERROR: Air Purifier not recognized!"
                              ! sys.exit()
                              ! print args.mode
                              ! if args.mode=="auto":
                              ! Packet.setPlainData('{"id":6149,"method":"set_mode","params":["auto"]}')
                              ! SendRcv(Packet)
                              ! elif args.mode=="silent":
                              ! Packet.setPlainData('{"id":6149,"method":"set_mode","params":["silent"]}')
                              ! SendRcv(Packet)
                              ! else:
                              ! Packet.setPlainData('{"id":6149,"method":"set_mode","params":["favorite"]}')
                              ! SendRcv(Packet)
                              ! if args.cmd:
                              ! Packet = GetSessionInfo()
                              ! Packet.setPlainData(args.cmd)
                              ! SendRcv(Packet)
                              ! print Packet.getPlainData()</broadcast>

                              Zur Installation:

                              Es muss Python (Version 2.x) installiert sein. Darüber hinaus muss cryptography installiert sein (pip Install cryptography / sollte es Probleme geben, fehlen evtl. noch andere Bibliotheken; war auf Raspi so ne Orgie)

                              Zur Benutzung:

                              xpn -h gibt Hilfe aus

                              mit -ip kann eine IP vorgegeben werden.

                              mit -info kann man sich den Token anzeigen lassen

                              mit -token kann man dem Programm einen Token vorgeben

                              mit -decode (Token muss mit -token angegeben werden) kann man eine Nachricht entziffern

                              Falls man einen Mir Purifier hat kann man mit -power und -mode ihn steuern. Für Vaccum werde ich das noch ergänzen.

                              Das ganze funktioniert nur, wenn das Gerät freiwillig den Token freigibt (häng von Firmware-Version ab). Hier forsche ich noch ein wenig.

                              1 Antwort Letzte Antwort
                              0
                              • MeistertrM Offline
                                MeistertrM Offline
                                Meistertr
                                Developer
                                schrieb am zuletzt editiert von
                                #106

                                ich habe gerade ein bisschen rum gespielt. Beim Abmelden werden keine daten gesendet (Also kein neuer Toker oder zu mindestens nicht für mich sichtbar). Das wieder anmelden konnte ich nicht über bluestack machen, da er Bluetooth haben wollte, also konnte ich da auch leider keine Daten abgreifen. Dann habe ich das Update gemach (jaaaaaa ich war neugierig was passiert…) Leider auch hier kein erfolg, habe die ganze zeit mit geschnitten aber keine informativen Daten gefunden.

                                Schade drum, wäre schön wenn der Roboter vollkommen durchsichtig wäre....

                                Ich habe die Befürchtung, dass der Roboter auf die Cloud angewiesen ist und ohne sie der Token nicht ermittelt werden kann...

                                1 Antwort Letzte Antwort
                                0
                                • MeistertrM Offline
                                  MeistertrM Offline
                                  Meistertr
                                  Developer
                                  schrieb am zuletzt editiert von
                                  #107

                                  Die Hoffnung stirbt zuletzt.

                                  @ gst666 kannst du mal schauen ob das der Token für die Nachricht ist….

                                  Token: D14BD369DEAB115E7C4C872E9897C8D2

                                  Nachricht: 213100600000000002f20d8f58b1c57b473a37bf4f99795bb471b4c2d52ec9852449cae7e1029ed72090ab523cb6758655368a399bdf20ec86bef10404ec41df7eb5dc825288b00b79fc4b3b2bb6d1a7183e5165cfe5e88529e00228d2e7302d

                                  1 Antwort Letzte Antwort
                                  0
                                  • G Offline
                                    G Offline
                                    gst666
                                    schrieb am zuletzt editiert von
                                    #108

                                    > @ gst666 kannst du mal schauen ob das der Token für die Nachricht ist….

                                    Leider nein.

                                    Ich denke, ich habe einen Mechanismus gefunden. Wenn das Gerät im reseteten Zustand sich befindet, so scheint es bei der HELO Nachricht den Key preiszugeben. Hast Du es geschafft, dass Skript zu installieren? Dann resete mal das Gerät. Das Gerät hat dann eine WLAN-SSID, die mit zhimi… beginnt. In dieses WLAN einloggen. dann das Skript ausführen:

                                    xpn -info

                                    Dann wird der token vermutlich angezeigt.

                                    Wäre schön zu hören, dass es klappt.

                                    1 Antwort Letzte Antwort
                                    0
                                    • G Offline
                                      G Offline
                                      gst666
                                      schrieb am zuletzt editiert von
                                      #109

                                      Noch einen Zusatz:

                                      Über Bluestack habe ich die Anmeldung auch nicht hinbekommen. Habe daher mit dem Raspi eine Art Emulator gebaut. Den Anmeldevorgang habe ich wahrscheinlich auch dekodiert. Muss noch einen Gegentest mit dem wahren Gerät machen.

                                      1 Antwort Letzte Antwort
                                      0
                                      • G Offline
                                        G Offline
                                        gst666
                                        schrieb am zuletzt editiert von
                                        #110

                                        So, jetzt habe ich den Anmeldevorgang identifiziert:

                                        Sobald der Router resetet ist kann man die WLAN-Daten und die Verknüpfung zum Account herstellen

                                        {"id":29,"method":"miIO.config_router","params":{"country_domain":"sg","ssid":"WLANKENNUNG","uid":123456789,"gmt_offset":3600,"passwd":"geheim"}}'
                                        

                                        Dabei muss "WLANKENNUNG" durch die SSID und "geheim" durch das WLAN-Password ersetzt werden.

                                        Des Weiteren muss die richtige uid eingetragen werden. Dies ist die Nummer, die unter Profil in der App gesehen werden kann. Hier bitte aufpassen, da sich sonst jemand über ein neues Gerät "freut".

                                        {"id":36,"method":"miIO.stop_diag_mode","params":""}
                                        

                                        Hiermit wird das Gerät neu gestartet. Wenn man sich zu viel Zeit lässt, geht das auch automatisch. Damit meldet sich das Device in der Cloud an und ist mittels der App auch wieder erreichbar.

                                        1 Antwort Letzte Antwort
                                        0
                                        • MeistertrM Offline
                                          MeistertrM Offline
                                          Meistertr
                                          Developer
                                          schrieb am zuletzt editiert von
                                          #111

                                          Reicht es das device in der app abzumelden? Oder muss ich das über die Reset Taste machen?

                                          Gesendet von meinem E5823 mit Tapatalk

                                          1 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate
                                          FAQ Cloud / IOT
                                          HowTo: Node.js-Update
                                          HowTo: Backup/Restore
                                          Downloads
                                          BLOG

                                          794

                                          Online

                                          32.4k

                                          Benutzer

                                          81.6k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe