Ankündigung

Einklappen
Keine Ankündigung bisher.

Xiaomi / Roboroc Baustein 19001929

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

    hmm, wüsste ich nichts von, habs aber grad probiert, war auch tatsächlich in der APP auch abgemeldet. hat aber leider nicht funktioniert, login auf website und APP geht, baustein aber nicht

    Kommentar


      Die haben die Authentifizierung vollständig geändert, mit 2 FA und zusätzlich Link.

      Ich hab das Skript hier abgeändert, damit die Credentails ausgegeben werden.

      Das Ding lädt ihr runter und braucht auch python3 auf dem Rechner.

      https://github.com/PiotrMachowski/Xi...n_extractor.py

      Dann sucht ihr diese Funktion (Aktuell Zeile 131):

      Code:
          def execute_api_call_encrypted(self, url, params):
        def execute_api_call_encrypted(self, url, params):
              headers = {
                  "Accept-Encoding": "identity",
                  "User-Agent": self._agent,
                  "Content-Type": "application/x-www-form-urlencoded",
                  "x-xiaomi-protocal-flag-cli": "PROTOCAL-HTTP2",
                  "MIOT-ENCRYPT-ALGORITHM": "ENCRYPT-RC4",
              }
              cookies = {
                  "userId": str(self.userId),
                  "yetAnotherServiceToken": str(self._serviceToken),
                  "serviceToken": str(self._serviceToken),
                  "locale": "en_GB",
                  "timezone": "GMT+02:00",
                  "is_daylight": "1",
                  "dst_offset": "3600000",
                  "channel": "MI_APP_STORE"
              }
              millis = round(time.time() * 1000)
              nonce = self.generate_nonce(millis)
              signed_nonce = self.signed_nonce(nonce)
              fields = self.generate_enc_params(url, "POST", signed_nonce, nonce, params, self._ssecurity)
              response = self._session.post(url, headers=headers, cookies=cookies, params=fields)
              if response.status_code == 200:
                  decoded = self.decrypt_rc4(self.signed_nonce(fields["_nonce"]), response.text)
                  return json.loads(decoded)
              return None​
      Und fügt oberhalb von "cookies = {" folgendes ein:

      Code:
              print ("serviceToken: "+self._serviceToken)
              print ("SSec: "+self._ssecurity)
              print ("Uid:"+str(self.userId))
      
              output = f"{self._serviceToken}\n{self._ssecurity}\n{self.userId}"
              print(output)
      sieht dann so aus:
      Code:
          def execute_api_call_encrypted(self, url, params):
              headers = {
                  "Accept-Encoding": "identity",
                  "User-Agent": self._agent,
                  "Content-Type": "application/x-www-form-urlencoded",
                  "x-xiaomi-protocal-flag-cli": "PROTOCAL-HTTP2",
                  "MIOT-ENCRYPT-ALGORITHM": "ENCRYPT-RC4",
              }
      
              print ("serviceToken: "+self._serviceToken)
              print ("SSec: "+self._ssecurity)
              print ("Uid:"+str(self.userId))
      
              output = f"{self._serviceToken}\n{self._ssecurity}\n{self.userId}"
              print(output)
              
              cookies = {
                  "userId": str(self.userId),
                  "yetAnotherServiceToken": str(self._serviceToken),
                  "serviceToken": str(self._serviceToken),
                  "locale": "en_GB",
                  "timezone": "GMT+02:00",
                  "is_daylight": "1",
                  "dst_offset": "3600000",
                  "channel": "MI_APP_STORE"
              }
              millis = round(time.time() * 1000)
              nonce = self.generate_nonce(millis)
              signed_nonce = self.signed_nonce(nonce)
              fields = self.generate_enc_params(url, "POST", signed_nonce, nonce, params, self._ssecurity)
              response = self._session.post(url, headers=headers, cookies=cookies, params=fields)
              if response.status_code == 200:
                  decoded = self.decrypt_rc4(self.signed_nonce(fields["_nonce"]), response.text)
                  return json.loads(decoded)
              return None
      Wichtig, bei python muss alles richtig eingerückt sein.

      Aufruf:
      Code:
      python3 token_extractor.py -uXXXX -pYYYY -sde
      XXXX= E-Mail Adresse
      YYYY= Passwort

      Nachdem ihr die Captcha und die URL aufgerufen habt, gibt das Skript dann den Auth-Token aus. Ist dann irgendwas was so aussieht:

      asdfoiuartuhrtuiz
      fsidu48==
      weouirweui

      Also, 3 Zeilen mit Zeilenumbrüche.

      Das kopiert ihr nun in Edomi rein, wichtig ist, dass die Zeilenumbrüche stimmen. Das ist dann der Xiamo Cloud Token, was dem LBS an E7 übergeben werden muss.
      Danach LBS über E1 mit "1" im Live-Modus triggern und schauen, ob wieder alles geht.

      Kommentar


        edit; erst grade jetzt dein post gesehen.... werde testen, merci für deine hilfe

        hab jetzt mal edomi neu gestartet, die log einträge haben sich verändert, aber es geht leider immer noch nicht

        lbs log
        HTML-Code:
        2025-10-13 22:10:42 274038 16395 Kritisch Login failed.{"notificationUrl":"https:\/\/account.xiaomi.com\/fe\/service\/identity\/authStart?sid=xiaomiio&context=D2MR_[---lange kryptische Zeichenfolge---]&_locale=de_CH","result":"ok","code":0,"miDemo":0,"captchaUrl":null,"description":"\u6210\u529f","location":"","securityStatus":16,"pwd":0,"child":0,"desc":"\u6210\u529f"}
        2025-10-13 22:10:42 276133 16395 Kritisch Login fehlgeschlagen!
        2025-10-13 22:10:42 276283 16395 Debug cloud->isAccessible:N-E10=-E11=
        2025-10-13 22:10:42 276374 16395 Kritisch IP/Token leer! Baustein muss richtig konfiguriert werden! Abbruch
        2025-10-13 22:10:42 278584 16395 Debug Ausführungszeit: 2.5475239753723 [s]  ​
        errorlog:

        HTML-Code:
        2025-10-13 22:10:41 103512 ? 16395 Datei: /usr/local/edomi/www/data/liveproject/lbs/EXE19001929.php | Fehlercode: 2 | Zeile: 946 | rand() expects exactly 2 parameters, 1 given  ​
        Zuletzt geändert von mmarkus; 13.10.2025, 21:26.

        Kommentar


          Nachtrag. Die Cloud ist nur notwendig, wenn die Map benutzt werden soll. Wer den LBS offline laufen lassen will, braucht die IP-Adresse vom Roboter und Roboter-Token. Diese Informationen werden auch vom token_extractor ausgegeben.

          Heisst: Wer die Cloud-Map weiterhin nutzen will:

          1) Xiaomi-Cloud-Token an E7 übergeben
          2) E2+E3 = Leer lassen

          Wer den Roboter offline ohne Map nutzen will:
          Den Token-extractor verwenden und IP-Adresse und Roboter-Token rauskopieren.

          1) E2,E3, E7 leer lassen
          2) E10 = IP vom Roboter
          3) E11 = Token vom Roboter

          Dann lässt sich dieser komplett ohne Cloud nutzen, allerdings entfällt leider die Map.

          Kommentar


            Der LBS konnte bisher die Credentials mit der 2FA Cloudtoken nicht mehr abrufen. Ich hab das Problem jetzt mit der 1.25 gefixed.

            E2/E3 sind entfallen. Dafür gibt es jetzt E8. E8 muss manuell getriggert werden (ich machh es im Live-modus einfach indem ich dort eine "1" reinschreibe).
            Dann wird an A9 und A10 die URL für den Cloudlogin ausgegeben.

            Ist jetzt geschmackssache, ob man A9 in der Visu einbindet und mit dem Handy scanned oder den Link über A10 manuell im Browser aufruft und
            sich mit seinen Xiaomi-Credentials einloggt.

            Nachdem man die Anmeldung bestätigt hat (wichtig: ca. 2 Minuten Timeout), holt der LBS jetzt automatisch die Cloud credentials und läuft wie gehabt.

            Kann den LBS gerade nicht hochladen, weil svs nicht geht, sobald das geklärt ist, lad ich die neue Version des LBS hoch.

            Wichtig: A10 gibt den Cloudtoken aus, der abgerufen wurde. Der muss in einer remanten Variable gespeichert werden, die wiederrum an E7 übergeben wird. Ansonsten muss immer beim neustart von Edomi die Cloud Authentifizierung durchgefürht werden. Die Credentials sind einige Monate Aktiv, aber nervig ist es, wenn man alle 3-4 Monate edomi neustartet und dann über externe Authentifikatoren muss. Sollte jetzt Geschichte sein.


            image.png

            Kommentar

            Lädt...
            X