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
Ankündigung
Einklappen
Keine Ankündigung bisher.
Xiaomi / Roboroc Baustein 19001929
Einklappen
X
-
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):
Und fügt oberhalb von "cookies = {" folgendes ein: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
sieht dann so aus: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)
Wichtig, bei python muss alles richtig eingerückt sein.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
Aufruf:
XXXX= E-Mail AdresseCode:python3 token_extractor.py -uXXXX -pYYYY -sde
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
errorlog: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]
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
- Likes 1
Kommentar


Kommentar