Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. [Frage] Xiaomi Vacuum cleaner

    NEWS

    • [erledigt] 15. 05. Wartungsarbeiten am ioBroker Forum

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [Frage] Xiaomi Vacuum cleaner

    This topic has been deleted. Only users with topic management privileges can see it.
    • Meistertr
      Meistertr Developer last edited by

      @Alexh:

      Hallo zusammen,

      es gibt anscheinend Licht am Ende des Tunnels:

      https://github.com/rytilahti/python-mirobo/issues/75

      https://www.loxforum.com/forum/german/s … wlan/page6

      Ich hoffe damit kann einer von euch etwas anfangen. Werde heute auf jeden Fall mal probieren den Token mit Python umzuwandeln.

      Gruß

      Alex ` Werde es heute Abend in den Adapter einpflegen. Sollte ja schnell gemacht sein…

      Gesendet von meinem Handy

      1 Reply Last reply Reply Quote 0
      • S
        skorpil last edited by

        Und dann?

        Beschreibst Du dann dort das Vorgehen?

        1 Reply Last reply Reply Quote 0
        • ldittmar
          ldittmar Developer last edited by

          Hallo Leute,

          bei mir funktioniert alles prima. Bis auf die Tatsache, dass manchmal vergessen wird den Staubbehälter zu leeren. Kann man vom Sauger nicht auslesen, dass der Behälter entnommen wurde? Dann könnte ich ja darauf reagieren 🙂

          Grüße,

          ldittmar

          1 Reply Last reply Reply Quote 0
          • Meistertr
            Meistertr Developer last edited by

            So hab mich die letzten morgende mit der Verschlüsselung herumgeschlagen. wenn jemand mit ios dieses mal testen könnte ob die Tokenberechnung so korrekt ist wäre das super. ist jetzt erst mal ein normales Js-script und der token wird im log aussgegeben. Da mit das so noch nicht gefällt, ich aber noch nciht weiß wie ich es schöner realisieren kann baue ich es im Adapter wenn ich es eleganter gelößt habe und Rückmeldung bekommen habe, ob die Berechnung so korrekt ist.

            var crypto = require('crypto');
            
            var iostoken = '16a935db276e19b1c7bef0739f2deb7d3aca43c5e26a3c6445351cb2fb8495ea0143db63ee66b0cdff9f69917680151e';
            
            function  convertIos   (iot){
                    var key = new Buffer('00000000000000000000000000000000', 'hex');
                    log("key= " + key.toString('hex'));
                    var keystring = '00000000000000000000000000000000';
            
                    var ioto = new Buffer(iostoken.substr(0,64), 'hex');
                    var iot2 = new Buffer(iostoken.substr(32,96), 'hex');
                    log("ioto= " + ioto.toString('hex'));
                    //return ioto;
                    var decipher = crypto.createDecipheriv('aes-128-cbc', key,key);
                    var decipher1 = crypto.createDecipheriv('aes-128-cbc', key,key);
                    var dec =  decipher.update(ioto, 'binary', 'utf8') ;
                    var dec2 =  decipher1.update(iot2, 'binary', 'utf8') ;
                    log("dec2= " + (dec2)); 
                    var test =""+ dec +dec2;
                    log("Das Sollte der token sein= " + (test)); 
            
                    //dec += decipher.final('utf8');
            
                    //dec = dec.substring(0, dec.le ngth - 1);
                    //return dec;
                }
            
                convertIos("s");
            
            1 Reply Last reply Reply Quote 0
            • W
              weimaraner last edited by

              Habe zwar kein ios und (leider noch) keinen Xiaomi, lese hier aber schon lange mit und bin immer wieder baff über Euer know-how und Engagement.

              Grüße Andreas

              1 Reply Last reply Reply Quote 0
              • S
                skorpil last edited by

                @Meistertr:

                So hab mich die letzten morgende mit der Verschlüsselung herumgeschlagen. wenn jemand mit ios dieses mal testen könnte ob die Tokenberechnung so korrekt ist wäre das super. ist jetzt erst mal ein normales Js-script und der token wird im log aussgegeben. Da mit das so noch nicht gefällt, ich aber noch nciht weiß wie ich es schöner realisieren kann baue ich es im Adapter wenn ich es eleganter gelößt habe und Rückmeldung bekommen habe, ob die Berechnung so korrekt ist.

                var crypto = require('crypto');
                 
                var iostoken = '16a935db276e19b1c7bef0739f2deb7d3aca43c5e26a3c6445351cb2fb8495ea0143db63ee66b0cdff9f69917680151e';
                 
                  
                function  convertIos   (iot){
                        var key = new Buffer('00000000000000000000000000000000', 'hex');
                        log("key= " + key.toString('hex'));
                        var keystring = '00000000000000000000000000000000';
                
                        var ioto = new Buffer(iostoken.substr(0,64), 'hex');
                        var iot2 = new Buffer(iostoken.substr(32,96), 'hex');
                        log("ioto= " + ioto.toString('hex'));
                        //return ioto;
                        var decipher = crypto.createDecipheriv('aes-128-cbc', key,key);
                        var decipher1 = crypto.createDecipheriv('aes-128-cbc', key,key);
                        var dec =  decipher.update(ioto, 'binary', 'utf8') ;
                        var dec2 =  decipher1.update(iot2, 'binary', 'utf8') ;
                        log("dec2= " + (dec2)); 
                        var test =""+ dec +dec2;
                        log("Das Sollte der token sein= " + (test)); 
                    
                        //dec += decipher.final('utf8');
                
                        //dec = dec.substring(0, dec.le ngth - 1);
                        //return dec;
                    }
                    
                    
                    convertIos("s");
                ```` `  
                

                Kann leider nicht testen, da ich nicht zu Hause bin

                1 Reply Last reply Reply Quote 0
                • A
                  Alexh last edited by

                  Dumme Frage aber wo und wie muss ich den Code einfügen? Dann probiere ich mal mein Glück.

                  1 Reply Last reply Reply Quote 0
                  • AlCalzone
                    AlCalzone Developer last edited by

                    @Meistertr:

                    So hab mich die letzten morgende mit der Verschlüsselung herumgeschlagen. wenn jemand mit ios dieses mal testen könnte ob die Tokenberechnung so korrekt ist wäre das super. ist jetzt erst mal ein normales Js-script und der token wird im log aussgegeben. Da mit das so noch nicht gefällt, ich aber noch nciht weiß wie ich es schöner realisieren kann baue ich es im Adapter wenn ich es eleganter gelößt habe und Rückmeldung bekommen habe, ob die Berechnung so korrekt ist. `
                    Hat funktioniert! Was mir aufgefallen ist: Die letzten 32 Hex-Zeichen (0143db63ee66b0cdff9f69917680151e) sind bei meinem verschlüsselten Token identisch, das scheint Padding zu sein. Vielleicht lässt sich so die Entschlüsselung noch vereinfachen.

                    Edit: Der Code lässt sich vereinfachen. Der Knackpunkt ist aes-128-ecb mit leerem IV ("") und AutoPadding=false:

                    var crypto = require('crypto');
                    
                    var iostoken = '3a8e3ba61b7ad24a4132d9b55fd6b9cc4c952fbe34fc0bb298d3811d07a4c3310143db63ee66b0cdff9f69917680151e';
                    var expected = '6a66717767744f594f38714f52677a69'; // für Debug-Zwecke
                    
                    const key = Buffer.alloc(16, 0); // Oder new Buffer("0.....0", "hex") für alte NodeJS
                    const iv = "";
                    const encrypted = Buffer.from(iostoken.substr(0,64), "hex");
                    const decipher = crypto.createDecipheriv("aes-128-ecb", key, "");
                    decipher.setAutoPadding(false);
                    const decrypted = decipher.update(encrypted, "binary", "ascii") /*+ decipher.final("ascii")*/;
                    
                    log(`decrypted = ${decrypted} | expected = ${expected} | match = ${expected===decrypted}`);
                    

                    Gibt bei mir aus:

                    decrypted = 6a66717767744f594f38714f52677a69 | expected = 6a66717767744f594f38714f52677a69 | match = true
                    
                    1 Reply Last reply Reply Quote 0
                    • AlCalzone
                      AlCalzone Developer last edited by

                      @Alexh:

                      Dumme Frage aber wo und wie muss ich den Code einfügen? Dann probiere ich mal mein Glück. `
                      Als neues Skript im JavaScript-Adapter. Ist nur testweise und kann später gelöscht werden.

                      1 Reply Last reply Reply Quote 0
                      • A
                        Alexh last edited by

                        @AlCalzone:

                        @Alexh:

                        Dumme Frage aber wo und wie muss ich den Code einfügen? Dann probiere ich mal mein Glück. Als neues Skript im JavaScript-Adapter. Ist nur testweise und kann später gelöscht werden.

                        Dann muss ich aber von Blockly auf JavaScript umschalten oder? Aber auf Blockly komme ich dann ja nicht mehr zurück. Mit JavaScript habe ich es nämlich nicht so.

                        Danke für die Hilfe.

                        1 Reply Last reply Reply Quote 0
                        • AlCalzone
                          AlCalzone Developer last edited by

                          @Alexh:

                          Dann muss ich aber von Blockly auf JavaScript umschalten oder? Aber auf Blockly komme ich dann ja nicht mehr zurück. Mit JavaScript habe ich es nämlich nicht so. `
                          Ja, du erstellst einfach ein neues Skript, wählst dort JavaScript aus und fügst den Code ein. Brauchst du ja nicht mehr ändern (außer den 96-Zeichen Token). Wenn alles läuft, löschst du es einfach wieder, nachdem du den Token aus dem Log kopiert hast.

                          Deine anderen Skripte bleiben davon unberührt.

                          1 Reply Last reply Reply Quote 0
                          • Meistertr
                            Meistertr Developer last edited by

                            @AlCalzone:

                            @Meistertr:

                            So hab mich die letzten morgende mit der Verschlüsselung herumgeschlagen. wenn jemand mit ios dieses mal testen könnte ob die Tokenberechnung so korrekt ist wäre das super. ist jetzt erst mal ein normales Js-script und der token wird im log aussgegeben. Da mit das so noch nicht gefällt, ich aber noch nciht weiß wie ich es schöner realisieren kann baue ich es im Adapter wenn ich es eleganter gelößt habe und Rückmeldung bekommen habe, ob die Berechnung so korrekt ist. `
                            Hat funktioniert! Was mir aufgefallen ist: Die letzten 32 Hex-Zeichen (0143db63ee66b0cdff9f69917680151e) sind bei meinem verschlüsselten Token identisch, das scheint Padding zu sein. Vielleicht lässt sich so die Entschlüsselung noch vereinfachen.

                            Edit: Der Code lässt sich vereinfachen. Der Knackpunkt ist aes-128-ecb mit leerem IV ("") und AutoPadding=false:

                            var crypto = require('crypto');
                             
                            var iostoken = '3a8e3ba61b7ad24a4132d9b55fd6b9cc4c952fbe34fc0bb298d3811d07a4c3310143db63ee66b0cdff9f69917680151e';
                            var expected = '6a66717767744f594f38714f52677a69'; // für Debug-Zwecke
                            
                            const key = Buffer.alloc(16, 0); // Oder new Buffer("0.....0", "hex") für alte NodeJS
                            const iv = "";
                            const encrypted = Buffer.from(iostoken.substr(0,64), "hex");
                            const decipher = crypto.createDecipheriv("aes-128-ecb", key, "");
                            decipher.setAutoPadding(false);
                            const decrypted = decipher.update(encrypted, "binary", "ascii") /*+ decipher.final("ascii")*/;
                            
                            log(`decrypted = ${decrypted} | expected = ${expected} | match = ${expected===decrypted}`);
                            

                            Gibt bei mir aus:

                            decrypted = 6a66717767744f594f38714f52677a69 | expected = 6a66717767744f594f38714f52677a69 | match = true
                            ```` `  Super danke. Darauf hatte ich gehofft, dass jemand mit Ahnung von Verschlüsselung mir sagen kann wie man es vereinfacht. Ich wusste das es geht aber nur nicht wiem danke. Dann kann ich es morgen in den Adapter übernehmen.
                            

                            Gesendet von meinem Handy

                            1 Reply Last reply Reply Quote 0
                            • A
                              Alexh last edited by

                              Ah ich hatte gedacht, die Einstellung bezieht sich dann auf alle Script deshalb habe ich es bis jetzt nicht gemacht.

                              Gesendet von iPhone mit Tapatalk

                              1 Reply Last reply Reply Quote 0
                              • A
                                Alexh last edited by

                                Eine zweite Instanz von dem Adapter laufen zu lassen ist aber nicht möglich oder? Ich bekomme hier im Log immer folgende Fehlermeldung: error instance system.adapter.mihome-vacuum.1 terminated with code 0 (OK)

                                Ich bräuchte eine zweite Instanz, da ich zwei von den teilen habe. Oder wie kann ich sonst den zweiten auch noch über ioBroker steuern?

                                Danke.

                                1 Reply Last reply Reply Quote 0
                                • S
                                  skorpil last edited by

                                  Das geht, Du musst den Port für den zweiten ändern.

                                  1 Reply Last reply Reply Quote 0
                                  • Meistertr
                                    Meistertr Developer last edited by

                                    Manchmal frag ich mich wofür ich mir die Mühe für die readme mache 😞

                                    Gesendet von meinem Handy

                                    1 Reply Last reply Reply Quote 0
                                    • A
                                      Alexh last edited by

                                      Sorry, jetzt wo du es geschrieben hast, habe ich es auch gesehen.

                                      1 Reply Last reply Reply Quote 0
                                      • N
                                        neo4a last edited by

                                        @Meistertr:

                                        So hab mich die letzten morgende mit der Verschlüsselung herumgeschlagen. wenn jemand mit ios dieses mal testen könnte ob die Tokenberechnung so korrekt ist wäre das super. `

                                        Mit 2 Vacuum Cleaner getestet und funktioniert. Vielen Dank dafür!

                                        1 Reply Last reply Reply Quote 0
                                        • Meistertr
                                          Meistertr Developer last edited by

                                          die 0.5.8 ist nun offiziell online, hier kann der 96 stellige code vom ios und wie gewohnt auch der 32 stelligen eingegeben werden

                                          1 Reply Last reply Reply Quote 0
                                          • S
                                            skorpil last edited by

                                            MeisterTr, einfach mal wieder ein schnelles Dankeschön

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

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

                                            822
                                            Online

                                            31.6k
                                            Users

                                            79.5k
                                            Topics

                                            1.3m
                                            Posts

                                            204
                                            2196
                                            802882
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo