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

          Lädt...
          X