Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. Neuer Adapter für Roborock-Staubsauger

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Neuer Adapter für Roborock-Staubsauger

    This topic has been deleted. Only users with topic management privileges can see it.
    • jahnbes
      jahnbes @SpacerX last edited by

      @spacerx
      Ja, ich prüfe es ja auch nach, so ich die Möglichkeit dazu habe. Und die habe ich bei der Reinigungsstation nicht, bedingt durch das Fehlen derselben.
      Da hilft nur Schwarmintelligenz und schnelles Reagieren.
      Gruß Bert.

      A 1 Reply Last reply Reply Quote 0
      • JackDaniel
        JackDaniel @copystring last edited by

        @copystring sagte in Neuer Adapter für Roborock-Staubsauger:
        .

        Um diese herauszufinden habe ich dieses Wiki mit der entsprechenden Anleitung erstellt. https://github.com/copystring/ioBroker.roborock/wiki/Sniffing-Roborock-MQTT-traffic

        da würde ich gerne helfen mit meinem q revo, was mir dabei aber unklar ist:

        1. mein iobroker läuft auf einem debain nuc = nix mit *.exe starten 😞
        2. verwende ich wiregurad schon mit meinem geräten, wird dann eine neue verbindung eingerichtet?
        S 1 Reply Last reply Reply Quote 0
        • S
          SpacerX @JackDaniel last edited by

          @jackdaniel sagte in Neuer Adapter für Roborock-Staubsauger:

          mein iobroker läuft auf einem debain nuc = nix mit *.exe starten

          Selbes Problem. Wie kann ich den Datenverkehr App zum Sauger und dessen antworten unter Debian sniffen.
          Ich hab schon quer durch das WWW gesucht, kann nur mit den englischen Beiträgen nicht viel anfangen.

          1 Reply Last reply Reply Quote 0
          • copystring
            copystring last edited by

            Zum Testen habe ich mir aber ioBroker auf Windows installiert. Dort dann den Roborock Adapter installieren und dem Wiki folgen.
            Für Debian kann ich keinen Support geben. Geht theoretisch auch, habe ich aber nicht getestet.

            A S 2 Replies Last reply Reply Quote 0
            • A
              andibr @copystring last edited by

              @copystring

              Ich gehe davon aus, dass euch für MQTT die Tools schon bekannt sind:
              Linux (Debian) == mqttx
              Windows == mqtt.fx

              Damit könnt ih den gesamten Trafic vom MQTT-Broker Abonieren, und dann mal schauen und immer weiter eingrenzen.

              Aber vermutlich schreibe ich da Dinge die ihr schon längst kennt. Etwas änliches gibt es glaub auch für Modbus TCP/RTU, aber mir fällt der Namen nicht gerade ein.
              Beim Linux gibt es noch irgendwie eine Möglichkeit, den Trafic über einen Port mit zuschneiden und in ein File zu paken. Aber auch da gibt es garantiert Personen die das besser wissen und können.

              Andi

              copystring 1 Reply Last reply Reply Quote 0
              • A
                andibr @jahnbes last edited by

                @jahnbes said in Neuer Adapter für Roborock-Staubsauger:

                @spacerx
                Ja, ich prüfe es ja auch nach, so ich die Möglichkeit dazu habe. Und die habe ich bei der Reinigungsstation nicht, bedingt durch das Fehlen derselben.
                Da hilft nur Schwarmintelligenz und schnelles Reagieren.
                Gruß Bert.

                In gewissem Umfang kann ich da sicher Hilfe resp. Datenwerte liefern, den ich habe in meinem Haushalt einen S7 Max Ultra mit Reinigungsstation. Habe einfach aktuell nicht sehr viel Zeit zur Verfügung, aber Datenpunkte aus den Objekten raussuchen sollte gehen.

                Andi

                1 Reply Last reply Reply Quote 0
                • S
                  SpacerX @SpacerX last edited by SpacerX

                  Ich möchte meine heutige Ausbeute teilen.

                  Es geht um Funktionen Rund um die Station vom S7 MaxV Ultra.

                  Meine Voraussetzungen:

                  • Kleines Blockly zum loggen der Datenpunkte vom Sauger geschrieben.
                  • Adapter vorrübergehend die Aktualisierung 5s gestellt.
                  • Mit Taschenlampe vor die Station gehockt und aufgeschrieben was passiert.
                  • Robi steht in der Station zum laden, dann Mopp Waschen gestartet.

                  Meine Aufzeichnungen dazu:

                  Log Mopp Waschen mit Roboter Wassertank leer.

                  2023-08-03 18:29:08.482 # Robi -> State [deviceStatus.state] = 8 -> 26 (Fahre Mopp waschen)
                  2023-08-03 18:29:08.487 # Robi -> Is returning [deviceStatus.in_returning] = 0 -> 1
                  2023-08-03 18:29:08.488 # Robi -> In Fresh State [deviceStatus.in_fresh_state] = 1 -> 0
                  2023-08-03 18:29:08.489 # Robi -> Back Type [deviceStatus.back_type] = -1 -> 1
                  2023-08-03 18:29:48.716 # Robi -> State [deviceStatus.state] = 26 -> 23 (Mopp waschen)
                  2023-08-03 18:29:48.719 # Robi -> Is returning [deviceStatus.in_returning] = 1 -> 0
                  2023-08-03 18:29:48.721 # Robi -> Back Type [deviceStatus.back_type] = 1 -> -1
                  2023-08-03 18:29:48.721 # Robi -> Wash Phase [deviceStatus.wash_phase] = 0 -> 11
                  2023-08-03 18:29:48.722 # Robi -> Wash Ready [deviceStatus.wash_ready] = 0 -> 1
                  2023-08-03 18:29:49.365 # Robi -> Water Filter [consumables.strainer_work_times] = 4 -> 5
                  2023-08-03 18:29:49.366 # Robi -> High-speed maintenance brush [consumables.cleaning_brush_work_times] = 4 -> 5
                  2023-08-03 18:31:03.661 # Robi -> Wash Phase [deviceStatus.wash_phase] = 11 -> 12
                  2023-08-03 18:31:08.651 # Robi -> Wash Phase [deviceStatus.wash_phase] = 12 -> 10
                  2023-08-03 18:31:38.662 # Robi -> Wash Phase [deviceStatus.wash_phase] = 10 -> 13
                  2023-08-03 18:32:53.675 # Robi -> Wash Phase [deviceStatus.wash_phase] = 13 -> 12
                  2023-08-03 18:32:58.637 # Robi -> Wash Phase [deviceStatus.wash_phase] = 12 -> 14
                  2023-08-03 18:33:08.634 # Robi -> State [deviceStatus.state] = 23 -> 6 (Rückkehr zur Station)
                  2023-08-03 18:33:08.677 # Robi -> Is returning [deviceStatus.in_returning] = 0 -> 1
                  2023-08-03 18:33:08.679 # Robi -> Back Type [deviceStatus.back_type] = -1 -> 0
                  2023-08-03 18:33:08.680 # Robi -> Wash Phase [deviceStatus.wash_phase] = 14 -> 0
                  2023-08-03 18:33:13.670 # Robi -> Wash Ready [deviceStatus.wash_ready] = 1 -> 0
                  2023-08-03 18:33:31.225 # Robi -> Times Dust Collected [cleaningInfo.dust_collection_count] = 77 -> 78 "Wahrscheinlicht Staubbehälterantleerungen"
                  2023-08-03 18:33:33.671 # Robi -> State [deviceStatus.state] = 6 -> 8 (Akku laden)
                  2023-08-03 18:33:33.674 # Robi -> Is returning [deviceStatus.in_returning] = 1 -> 0
                  2023-08-03 18:33:33.674 # Robi -> In Fresh State [deviceStatus.in_fresh_state] = 0 -> 1
                  2023-08-03 18:33:33.675 # Robi -> Back Type [deviceStatus.back_type] = 0 -> -1
                  

                  Mopp Waschen mit Roboter Wassertank 100% voll.

                  2023-08-03 18:40:38.661 # Robi -> State [deviceStatus.state] = 8 -> 26 (Fahre Mopp waschen)
                  2023-08-03 18:40:38.706 # Robi -> Is returning [deviceStatus.in_returning] = 0 -> 1
                  2023-08-03 18:40:38.706 # Robi -> In Fresh State [deviceStatus.in_fresh_state] = 1 -> 0
                  2023-08-03 18:40:38.708 # Robi -> Back Type [deviceStatus.back_type] = -1 -> 1
                  2023-08-03 18:41:18.782 # Robi -> State [deviceStatus.state] = 26 -> 23 (Mopp waschen)
                  2023-08-03 18:41:18.787 # Robi -> Is returning [deviceStatus.in_returning] = 1 -> 0
                  2023-08-03 18:41:18.793 # Robi -> Back Type [deviceStatus.back_type] = 1 -> -1
                  2023-08-03 18:41:18.805 # Robi -> Wash Phase [deviceStatus.wash_phase] = 0 -> 11
                  2023-08-03 18:41:18.806 # Robi -> Wash Ready [deviceStatus.wash_ready] = 0 -> 1
                  2023-08-03 18:41:19.536 # Robi -> Water Filter [consumables.strainer_work_times] = 5 -> 6
                  2023-08-03 18:41:19.537 # Robi -> High-speed maintenance brush [consumables.cleaning_brush_work_times] = 5 -> 6
                  2023-08-03 18:42:58.756 # Robi -> Wash Phase [deviceStatus.wash_phase] = 11 -> 12
                  2023-08-03 18:43:03.720 # Robi -> Wash Phase [deviceStatus.wash_phase] = 12 -> 13
                  2023-08-03 18:44:38.786 # Robi -> Wash Phase [deviceStatus.wash_phase] = 13 -> 12
                  2023-08-03 18:44:43.771 # Robi -> Wash Phase [deviceStatus.wash_phase] = 12 -> 14
                  2023-08-03 18:44:48.739 # Robi -> State [deviceStatus.state] = 23 -> 6 (Rückkehr zur Station)
                  2023-08-03 18:44:48.741 # Robi -> Is returning [deviceStatus.in_returning] = 0 -> 1
                  2023-08-03 18:44:48.781 # Robi -> Back Type [deviceStatus.back_type] = -1 -> 0
                  2023-08-03 18:44:48.782 # Robi -> Wash Phase [deviceStatus.wash_phase] = 14 -> 0
                  2023-08-03 18:44:58.779 # Robi -> Wash Ready [deviceStatus.wash_ready] = 1 -> 0
                  2023-08-03 18:45:18.992 # Robi -> State [deviceStatus.state] = 6 -> 8 (Akku laden)
                  2023-08-03 18:45:18.994 # Robi -> Is returning [deviceStatus.in_returning] = 1 -> 0
                  2023-08-03 18:45:18.995 # Robi -> In Fresh State [deviceStatus.in_fresh_state] = 0 -> 1
                  2023-08-03 18:45:18.996 # Robi -> Back Type [deviceStatus.back_type] = 0 -> -1
                  

                  Mopp Waschen mit Roboter Wassertank 50% voll.

                  2023-08-03 12:51:35.610 # Robi -> State [deviceStatus.state] = 8 -> 26 (Fahre Mopp waschen)
                  2023-08-03 12:51:35.653 # Robi -> Is returning [deviceStatus.in_returning] = 0 -> 1
                  2023-08-03 12:51:35.654 # Robi -> In Fresh State [deviceStatus.in_fresh_state] = 1 -> 0
                  2023-08-03 12:51:35.655 # Robi -> Back Type [deviceStatus.back_type] = -1 -> 1
                  2023-08-03 12:52:05.895 # Robi -> State [deviceStatus.state] = 26 -> 23 (Mopp waschen)
                  2023-08-03 12:52:05.899 # Robi -> Is returning [deviceStatus.in_returning] = 1 -> 0
                  2023-08-03 12:52:05.901 # Robi -> Back Type [deviceStatus.back_type] = 1 -> -1
                  2023-08-03 12:52:05.902 # Robi -> Wash Ready [deviceStatus.wash_ready] = 0 -> 1
                  2023-08-03 12:52:06.393 # Robi -> Water Filter [consumables.strainer_work_times] = 3 -> 4
                  2023-08-03 12:52:06.394 # Robi -> High-speed maintenance brush [consumables.cleaning_brush_work_times] = 3 -> 4
                  2023-08-03 12:52:10.868 # Robi -> Wash Phase [deviceStatus.wash_phase] = 0 -> 11	"11 = Mopp Waschen mit Bürste und Wasser"
                  2023-08-03 12:53:25.678 # Robi -> Wash Phase [deviceStatus.wash_phase] = 11 -> 12	"12 = Wasserauffang unter Bürste leeren"
                  2023-08-03 12:53:30.667 # Robi -> Wash Phase [deviceStatus.wash_phase] = 12 -> 10	"10 = scheint das Befüllen vom Wassertank zu sein"
                  2023-08-03 12:53:40.630 # Robi -> Wash Phase [deviceStatus.wash_phase] = 10 -> 13	"13 = Mopp abbürsten ohne Wasser (Auswringen???)"
                  2023-08-03 12:54:55.687 # Robi -> Wash Phase [deviceStatus.wash_phase] = 13 -> 12	"12 = Wasserauffang unter Bürste leeren"
                  2023-08-03 12:55:00.703 # Robi -> Wash Phase [deviceStatus.wash_phase] = 12 -> 14	"14 = Bürste in Parkposition fahren"
                  2023-08-03 12:55:05.641 # Robi -> State [deviceStatus.state] = 23 -> 6 (Rückkehr zur Station)
                  2023-08-03 12:55:05.685 # Robi -> Is returning [deviceStatus.in_returning] = 0 -> 1
                  2023-08-03 12:55:05.687 # Robi -> Back Type [deviceStatus.back_type] = -1 -> 0
                  2023-08-03 12:55:05.688 # Robi -> Wash Phase [deviceStatus.wash_phase] = 14 -> 0
                  2023-08-03 12:55:10.693 # Robi -> Wash Ready [deviceStatus.wash_ready] = 1 -> 0
                  2023-08-03 12:55:30.906 # Robi -> State [deviceStatus.state] = 6 -> 8 (Akku laden)
                  2023-08-03 12:55:30.910 # Robi -> Is returning [deviceStatus.in_returning] = 1 -> 0
                  2023-08-03 12:55:30.915 # Robi -> In Fresh State [deviceStatus.in_fresh_state] = 0 -> 1
                  2023-08-03 12:55:30.916 # Robi -> Back Type [deviceStatus.back_type] = 0 -> -1
                  

                  Dazu meine Erkenntnisse.

                  deviceStatus.wash_phase
                  10 = Befüllen Roboter Wassertank
                  11 = Mopp Waschen mit Wasser und Reinigungsbürste
                  12 = Wasserauffang der Station unter Reinigungsbürste leeren
                  13 = Mopp Waschen nur Reinigungsbürste (Auswringen)
                  14 = Reinigungsbürste in Parkposition fahren

                  Das Befüllen des Roboter-Wassertanks wird immer bei Mopp-Waschen ausgeführt wenn der Tank nicht voll ist.

                  Dazu gleich noch für Später den Schmutzwasserbehälter vor jedem Start leer gemacht und vor dem Mopp-Waschen Befehl den Moppwaschmodus umgestellt um den Wasserverbrauch beim Mopp-Waschen zu ermitteln.

                  • Moppwäsche-Modus = Wassersparend -> Schmutzwasserbehälter = ca.130ml
                  • Moppwäsche-Modus = Mittel -> Schmutzwasserbehälter = ca.200ml
                  • Moppwäsche-Modus = Intensiv -> Schmutzwasserbehälter = ca.290ml

                  Für den Moppwaschmodus den man in der App wählen kann scheint es noch kein equivalenten Datenpunkt im Adapter zu geben.

                  Robi steht in Station zum laden, dann Staubbehälter entleeren gestartet.

                  2023-08-03 19:00:48.710 # Robi -> State [deviceStatus.state] = 8 -> 22 (Staubbehälter entleeren)
                  2023-08-03 19:00:48.713 # Robi -> In Fresh State [deviceStatus.in_fresh_state] = 1 -> 0
                  2023-08-03 19:01:18.709 # Robi -> State [deviceStatus.state] = 22 -> 8 (Akku laden)
                  2023-08-03 19:01:18.712 # Robi -> In Fresh State [deviceStatus.in_fresh_state] = 0 -> 1
                  

                  Der Datenpunkt deviceStatus.back_type scheint zu definieren wie rum der Roboter an die Station heran gefahren ist.

                  deviceStatus.back_type
                  -1 = NULL (wird immer auf diesen Wert zurück gesetzt.)
                  0 = Vorwärts -> Laden und Staubbehälter entleeren.
                  1 = Rückwärts -> Mopp Waschen

                  Zur Bedeutung von deviceStatus.in_fresh_state hab ich eine Idee die ich aber erst mit Test bestätigen muss.

                  jahnbes 2 Replies Last reply Reply Quote 1
                  • copystring
                    copystring @andibr last edited by

                    @andibr said in Neuer Adapter für Roborock-Staubsauger:

                    @copystring

                    Ich gehe davon aus, dass euch für MQTT die Tools schon bekannt sind:
                    Linux (Debian) == mqttx
                    Windows == mqtt.fx

                    Damit könnt ih den gesamten Trafic vom MQTT-Broker Abonieren, und dann mal schauen und immer weiter eingrenzen.

                    Aber vermutlich schreibe ich da Dinge die ihr schon längst kennt. Etwas änliches gibt es glaub auch für Modbus TCP/RTU, aber mir fällt der Namen nicht gerade ein.
                    Beim Linux gibt es noch irgendwie eine Möglichkeit, den Trafic über einen Port mit zuschneiden und in ein File zu paken. Aber auch da gibt es garantiert Personen die das besser wissen und können.

                    Andi

                    Nein. Das geht nicht mehr, seitdem ich da herumgespielt habe. Roborock hat das mitbekommen. Man kann nur noch über mitimproxy den Traffic mitschneiden. Vorher konnte man ganz einfach den Topic für das Senden der Befehle abonnieren. Das wurde gesperrt. Daher muss mitgeschnitten werden.
                    Der gesamte Datenverkehr ist mit SSL und speziellen Keys doppelt verschlüsselt und kodiert. Der Adapter dekodiert und entschlüsselt alles, wenn die Nachrichten mit mitmproxy und meinen python addon an den Adapter geschickt wird.

                    A 1 Reply Last reply Reply Quote 0
                    • A
                      andibr @copystring last edited by

                      @copystring
                      Ok, dass ist aber doof. Wieder eine Firma die nicht will das man sich vor der chinesischen Überwachung verstecken kann.
                      Da könnte es ja auch sein, dass mit eine Firmeware Update alle eure super Arbeit zu nichte gemacht wird?

                      Andi

                      copystring 1 Reply Last reply Reply Quote 0
                      • copystring
                        copystring @andibr last edited by

                        @andibr said in Neuer Adapter für Roborock-Staubsauger:

                        @copystring
                        Ok, dass ist aber doof. Wieder eine Firma die nicht will das man sich vor der chinesischen Überwachung verstecken kann.
                        Da könnte es ja auch sein, dass mit eine Firmeware Update alle eure super Arbeit zu nichte gemacht wird?

                        Andi

                        Unwahrscheinlich. Mitschneiden von Traffic kann man nicht verhindern. Änderungen könnte man schnell einbauen, indem man einfach den Traffic neu mitschneidet.

                        1 Reply Last reply Reply Quote 0
                        • jahnbes
                          jahnbes @SpacerX last edited by

                          @spacerx
                          Danke! Ich werde mich am Wochenende darum kümmern und das Wiki ergänzen.

                          Kannst Du mir / uns das "Kleines Blockly zum loggen der Datenpunkte vom Sauger geschrieben." zukommen lassen?

                          Gruß Bert.

                          S 2 Replies Last reply Reply Quote 0
                          • S
                            SpacerX @jahnbes last edited by SpacerX

                            @jahnbes sagte in Neuer Adapter für Roborock-Staubsauger:

                            Kannst Du mir / uns das "Kleines Blockly zum loggen der Datenpunkte vom Sauger geschrieben." zukommen lassen?

                            Kann ich.

                            Ich habe noch etwas dran herum gestrickt damit es einfach so läuft ohne Anpassungen.

                            Zu beachten ist das nur vom Adapter bereitgestellte Datenpunkte erfasst werden und immer die Verzögerung eintritt die beim Aktualisierungsintervall im Adapter angegeben ist.

                            SchnipSchnap.PNG

                            <xml xmlns="https://developers.google.com/blockly/xml">
                              <variables>
                                <variable id="Dp(TEdvXq|dD(9XLkW!D">text</variable>
                                <variable id=":UNV]Z$?%Qg963*a]Bn@">id</variable>
                                <variable id="y]eb]G~;C._1Kg*RZ*)b">robiDevice</variable>
                                <variable id="+r1nueMYBS=AZLN+pK0^">datenpunkt</variable>
                                <variable id="k6-Q,C$hI=dp+9Lz9*Ih">beschreibung</variable>
                              </variables>
                              <block type="procedures_defcustomnoreturn" id="qIp]hmVn|SQ~VcN{33kg" x="38" y="-213">
                                <mutation statements="false">
                                  <arg name="text" varid="Dp(TEdvXq|dD(9XLkW!D"></arg>
                                </mutation>
                                <field name="NAME">RobiLog</field>
                                <field name="SCRIPT">Y29uc29sZS5sb2coKCcjIFJvYmkgLT4gJyArIFN0cmluZyh0ZXh0KSkpOw==</field>
                                <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
                              </block>
                              <block type="procedures_defcustomreturn" id="CP?Cyo9e2)ey}0dh;^ke" x="37" y="-162">
                                <mutation statements="false"></mutation>
                                <field name="NAME">GetRobiStateText</field>
                                <field name="SCRIPT">dmFyIHN0YXRlSUQgPSAicm9ib3JvY2suMC5EZXZpY2VzLiIgKyByb2JpRGV2aWNlICsgIi5kZXZpY2VTdGF0dXMuc3RhdGUiDQpyZXR1cm4gZ2V0T2JqZWN0KHN0YXRlSUQpLmNvbW1vbi5zdGF0ZXNbZ2V0U3RhdGUoc3RhdGVJRCkudmFsXQ==</field>
                                <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
                              </block>
                              <block type="procedures_defcustomreturn" id="oX1{x8TY@`NKcBbs^kq`" x="38" y="-113">
                                <mutation statements="false">
                                  <arg name="id" varid=":UNV]Z$?%Qg963*a]Bn@"></arg>
                                </mutation>
                                <field name="NAME">GetName</field>
                                <field name="SCRIPT">cmV0dXJuIGdldE9iamVjdChpZCkuY29tbW9uLm5hbWU7</field>
                                <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
                              </block>
                              <block type="procedures_defcustomreturn" id="O-zZjZP:-@/s|8_l-`wX" x="38" y="-62">
                                <mutation statements="false"></mutation>
                                <field name="NAME">GetDevice</field>
                                <field name="SCRIPT">dmFyIGRldmljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5hcHBseSgkKCJyb2Jvcm9jay4wLkRldmljZXMuKiIpKVswXS5zcGxpdCgnLicpWzNdOw0KY29uc29sZS5sb2coKFsnICMgUm9iaSAtPiBTdGFydCBsb2dnaW5nIFJvYm9yb2NrIEluc3RhbnogMCAtIERldmljZTogIicsZGV2aWNlLCciJ10uam9pbignJykpKTsNCnJldHVybiBkZXZpY2U7</field>
                                <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
                              </block>
                              <block type="procedures_defcustomreturn" id="b#cVo{O:Xr%.:G~wk%BH" x="38" y="-12">
                                <mutation statements="false">
                                  <arg name="id" varid=":UNV]Z$?%Qg963*a]Bn@"></arg>
                                </mutation>
                                <field name="NAME">GetDatenpunkt</field>
                                <field name="SCRIPT">dG1wTGlzdGUgPSBpZC5zcGxpdCgnLicpOw0KdG1wTGlzdGUgPSB0bXBMaXN0ZS5zbGljZSh0bXBMaXN0ZS5sZW5ndGggLSAyLCB0bXBMaXN0ZS5sZW5ndGgpOw0KcmV0dXJuIHRtcExpc3RlLmpvaW4oJy4nKTs=</field>
                                <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
                              </block>
                              <block type="procedures_defcustomreturn" id="N%zy{o^r_)pj@)iW{[?^" x="38" y="38">
                                <mutation statements="false">
                                  <arg name="id" varid=":UNV]Z$?%Qg963*a]Bn@"></arg>
                                </mutation>
                                <field name="NAME">GetSektion</field>
                                <field name="SCRIPT">dG1wTGlzdGUgPSBpZC5zcGxpdCgnLicpOw0KcmV0dXJuIHRtcExpc3RlLnNsaWNlKC0yKVswXQ==</field>
                                <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
                              </block>
                              <block type="comment" id="?!:f=F9o%1h~eQ+b=~1H" x="37" y="88">
                                <field name="COMMENT">Roborock DP`s loggen</field>
                                <next>
                                  <block type="variables_set" id="*IkFS7Tt#d$=Zm3kGZ@u">
                                    <field name="VAR" id="y]eb]G~;C._1Kg*RZ*)b">robiDevice</field>
                                    <value name="VALUE">
                                      <block type="procedures_callcustomreturn" id="K-7wFf;`p!Dsqw69}$fO">
                                        <mutation name="GetDevice"></mutation>
                                      </block>
                                    </value>
                                    <next>
                                      <block type="on_ext" id="}Cjj:guHosL3tZ9AS7!F">
                                        <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation>
                                        <field name="CONDITION">ne</field>
                                        <field name="ACK_CONDITION"></field>
                                        <value name="OID0">
                                          <shadow type="field_oid" id="_1~8-Qi)XQQfbpzHscaH">
                                            <field name="oid">default</field>
                                          </shadow>
                                          <block type="selector" id="%nM33D%sk`5v*|1MAb4k">
                                            <field name="TEXT">roborock.0.Devices." + robiDevice + ".*</field>
                                          </block>
                                        </value>
                                        <statement name="STATEMENT">
                                          <block type="variables_set" id="Y5uR438l0`7hHKOW4aqP">
                                            <field name="VAR" id="+r1nueMYBS=AZLN+pK0^">datenpunkt</field>
                                            <value name="VALUE">
                                              <block type="procedures_callcustomreturn" id="3CX:;{,RAM%~o.w6B-gn" inline="true">
                                                <mutation name="GetDatenpunkt">
                                                  <arg name="id"></arg>
                                                </mutation>
                                                <value name="ARG0">
                                                  <block type="on_source" id="d-*Fm*J|4{(1#,-UGfb,">
                                                    <field name="ATTR">id</field>
                                                  </block>
                                                </value>
                                              </block>
                                            </value>
                                            <next>
                                              <block type="controls_if" id="s9!Kr3|Fy|vPX`(aBW|^">
                                                <mutation elseif="2" else="1"></mutation>
                                                <value name="IF0">
                                                  <block type="logic_compare" id="~wZ4EwlpPJ]w[VS:1{qA">
                                                    <field name="OP">EQ</field>
                                                    <value name="A">
                                                      <block type="variables_get" id="+dbMgijJ12zIg1zv*?bh">
                                                        <field name="VAR" id="+r1nueMYBS=AZLN+pK0^">datenpunkt</field>
                                                      </block>
                                                    </value>
                                                    <value name="B">
                                                      <block type="text" id="8FXGeXyr?zpfFei$1618">
                                                        <field name="TEXT">deviceStatus.msg_seq</field>
                                                      </block>
                                                    </value>
                                                  </block>
                                                </value>
                                                <statement name="DO0">
                                                  <block type="comment" id="2b{#DDDt4KmkFVzUfvPT">
                                                    <field name="COMMENT">ausschließen</field>
                                                  </block>
                                                </statement>
                                                <value name="IF1">
                                                  <block type="logic_compare" id="0!^^HpJ.J08-{eY*ODa3">
                                                    <field name="OP">EQ</field>
                                                    <value name="A">
                                                      <block type="variables_get" id=")|yoBHjnvqqN@kOxF3le">
                                                        <field name="VAR" id="+r1nueMYBS=AZLN+pK0^">datenpunkt</field>
                                                      </block>
                                                    </value>
                                                    <value name="B">
                                                      <block type="text" id="Z;6E8hFG!WL:oZSGB0Tm">
                                                        <field name="TEXT">networkInfo.rssi</field>
                                                      </block>
                                                    </value>
                                                  </block>
                                                </value>
                                                <statement name="DO1">
                                                  <block type="comment" id="qnCQIoA)9[ijQMLQF6no">
                                                    <field name="COMMENT">ausschließen</field>
                                                  </block>
                                                </statement>
                                                <value name="IF2">
                                                  <block type="logic_compare" id="R!z=Y/lV^q|3{z#*MX?n">
                                                    <field name="OP">EQ</field>
                                                    <value name="A">
                                                      <block type="procedures_callcustomreturn" id="lBk9kQU1UfL35p1}`X%/" inline="true">
                                                        <mutation name="GetSektion">
                                                          <arg name="id"></arg>
                                                        </mutation>
                                                        <value name="ARG0">
                                                          <block type="on_source" id="inf$mhhpto.(Z#qor)gM">
                                                            <field name="ATTR">id</field>
                                                          </block>
                                                        </value>
                                                      </block>
                                                    </value>
                                                    <value name="B">
                                                      <block type="text" id="P[^^zTEfaL)=-BV:atZ[">
                                                        <field name="TEXT">map</field>
                                                      </block>
                                                    </value>
                                                  </block>
                                                </value>
                                                <statement name="DO2">
                                                  <block type="comment" id="IrLaMx.fY]vHKd=GC|]m">
                                                    <field name="COMMENT">ausschließen</field>
                                                  </block>
                                                </statement>
                                                <statement name="ELSE">
                                                  <block type="variables_set" id="5wr|$lnk==:5JTX)rDfk">
                                                    <field name="VAR" id="k6-Q,C$hI=dp+9Lz9*Ih">beschreibung</field>
                                                    <value name="VALUE">
                                                      <block type="text" id="Z(s%7um*A*H;~t9eiq#c">
                                                        <field name="TEXT"></field>
                                                      </block>
                                                    </value>
                                                    <next>
                                                      <block type="controls_if" id="g}5r)k5v#*y|]xH[lpE$">
                                                        <value name="IF0">
                                                          <block type="logic_compare" id="]:,Uu/R%/+22NQ-m]x:_">
                                                            <field name="OP">EQ</field>
                                                            <value name="A">
                                                              <block type="variables_get" id="#=HegdOuoxuWaVjhrB8u">
                                                                <field name="VAR" id="+r1nueMYBS=AZLN+pK0^">datenpunkt</field>
                                                              </block>
                                                            </value>
                                                            <value name="B">
                                                              <block type="text" id="_{#]pq]9a+2R;eM!wt5:">
                                                                <field name="TEXT">deviceStatus.state</field>
                                                              </block>
                                                            </value>
                                                          </block>
                                                        </value>
                                                        <statement name="DO0">
                                                          <block type="variables_set" id="fD)M(aoA*^`D@`fLBYW3" disabled="true">
                                                            <field name="VAR" id="k6-Q,C$hI=dp+9Lz9*Ih">beschreibung</field>
                                                            <value name="VALUE">
                                                              <block type="text_join" id="bh:KAYP%BS8VW6=XC]8C" inline="true">
                                                                <mutation items="3"></mutation>
                                                                <value name="ADD0">
                                                                  <block type="text" id="hb[3Y**=`bfao{[D^e2c">
                                                                    <field name="TEXT"> (</field>
                                                                  </block>
                                                                </value>
                                                                <value name="ADD1">
                                                                  <block type="field_oid" id="(eK!JWI[O-3X@y_%jST/">
                                                                    <field name="oid">alias.0.Kueche.Roborock.Status.Zustand</field>
                                                                  </block>
                                                                </value>
                                                                <value name="ADD2">
                                                                  <block type="text" id="P:j.NT!lnmMvX`/KvVlk">
                                                                    <field name="TEXT">)</field>
                                                                  </block>
                                                                </value>
                                                              </block>
                                                            </value>
                                                            <next>
                                                              <block type="variables_set" id="|tzt{0w;V0obfXU}$pk-">
                                                                <field name="VAR" id="k6-Q,C$hI=dp+9Lz9*Ih">beschreibung</field>
                                                                <value name="VALUE">
                                                                  <block type="text_join" id=":PATIg.X0t##Du:,wU#`" inline="true">
                                                                    <mutation items="3"></mutation>
                                                                    <value name="ADD0">
                                                                      <block type="text" id="?X:DfH.Zm-_r$K5O][fp">
                                                                        <field name="TEXT"> (</field>
                                                                      </block>
                                                                    </value>
                                                                    <value name="ADD1">
                                                                      <block type="procedures_callcustomreturn" id="cDL1Mb$AAM$)z,[yj9^V" inline="true">
                                                                        <mutation name="GetRobiStateText"></mutation>
                                                                      </block>
                                                                    </value>
                                                                    <value name="ADD2">
                                                                      <block type="text" id=",3_,#[I$6[:,f:M|cT_k">
                                                                        <field name="TEXT">)</field>
                                                                      </block>
                                                                    </value>
                                                                  </block>
                                                                </value>
                                                              </block>
                                                            </next>
                                                          </block>
                                                        </statement>
                                                        <next>
                                                          <block type="procedures_callcustomnoreturn" id="0]vAqu2g7aQrTv|hf%W+" inline="true">
                                                            <mutation name="RobiLog">
                                                              <arg name="text"></arg>
                                                            </mutation>
                                                            <value name="ARG0">
                                                              <block type="text_join" id="FkCwEa@T*cREvAt;iV*#">
                                                                <mutation items="4"></mutation>
                                                                <value name="ADD0">
                                                                  <block type="procedures_callcustomreturn" id="ba5]2zs,;pKK9P/sfH-?" inline="true">
                                                                    <mutation name="GetName">
                                                                      <arg name="id"></arg>
                                                                    </mutation>
                                                                    <value name="ARG0">
                                                                      <block type="on_source" id="L$IUp=sJxALkb[!h=,l7">
                                                                        <field name="ATTR">id</field>
                                                                      </block>
                                                                    </value>
                                                                  </block>
                                                                </value>
                                                                <value name="ADD1">
                                                                  <block type="text_join" id="S].PLij5PRyzH^RY+b48" inline="true">
                                                                    <mutation items="3"></mutation>
                                                                    <value name="ADD0">
                                                                      <block type="text" id="a),`F*[,hxB}KrSOk3r`">
                                                                        <field name="TEXT"> [</field>
                                                                      </block>
                                                                    </value>
                                                                    <value name="ADD1">
                                                                      <block type="variables_get" id=".{KppZkN-dBxc!zEjCSZ">
                                                                        <field name="VAR" id="+r1nueMYBS=AZLN+pK0^">datenpunkt</field>
                                                                      </block>
                                                                    </value>
                                                                    <value name="ADD2">
                                                                      <block type="text" id="M*9=yoSfjY[z)(qCZ|+/">
                                                                        <field name="TEXT">] =  </field>
                                                                      </block>
                                                                    </value>
                                                                  </block>
                                                                </value>
                                                                <value name="ADD2">
                                                                  <block type="text_join" id="Q%QO01tRqYTTg)HJLpuW" inline="true">
                                                                    <mutation items="3"></mutation>
                                                                    <value name="ADD0">
                                                                      <block type="on_source" id="8X.KdeqQu]=!sw.iN~fA">
                                                                        <field name="ATTR">oldState.val</field>
                                                                      </block>
                                                                    </value>
                                                                    <value name="ADD1">
                                                                      <block type="text" id="T=TB(;Oo=zS.sJf#}c3$">
                                                                        <field name="TEXT"> -&gt; </field>
                                                                      </block>
                                                                    </value>
                                                                    <value name="ADD2">
                                                                      <block type="on_source" id="H=Uvd4SX;)7L3|Y_(F!!">
                                                                        <field name="ATTR">state.val</field>
                                                                      </block>
                                                                    </value>
                                                                  </block>
                                                                </value>
                                                                <value name="ADD3">
                                                                  <block type="variables_get" id="i+fzc8kY=V}R`Lv%V/UW">
                                                                    <field name="VAR" id="k6-Q,C$hI=dp+9Lz9*Ih">beschreibung</field>
                                                                  </block>
                                                                </value>
                                                              </block>
                                                            </value>
                                                          </block>
                                                        </next>
                                                      </block>
                                                    </next>
                                                  </block>
                                                </statement>
                                              </block>
                                            </next>
                                          </block>
                                        </statement>
                                      </block>
                                    </next>
                                  </block>
                                </next>
                              </block>
                            </xml>
                            


                            Mit den 3 "falls mache" werden drei Datenpunkte ausgeschlossen die das log sehr unübersichtlich machen. Wer diese mit haben will, einfach den Block hinter falls ausblenden.
                            Wer noch weitere Ausschließen will, dann ein "falls mache" hinzufügen.

                            Dann viel Spaß beim Loggen der Adapterdatenpunkte.

                            MfG Ralf

                            jahnbes M 2 Replies Last reply Reply Quote 0
                            • jahnbes
                              jahnbes @SpacerX last edited by

                              @spacerx
                              Es ist mir etwas peinlich, aber nachdem ich mir fast den iobroker zerschossen habe, wie bekomme ich Dein Skript bei mir in den iobroker?
                              Das Blockly ist nur ein Ausschnitt und der Code bringt bei mir nur Fehler. Finden wir einen Weg. Wie machst Du das bei Dir, also Dein Weg vom Code zum Blockly?
                              Gruß Bert.

                              S 1 Reply Last reply Reply Quote 0
                              • S
                                SpacerX @jahnbes last edited by

                                @jahnbes auf der Seite JavaScript ein neues Blockly erstellen. Das dann öffnen und oben rechts im Editor Block einfügen wählen. Dort kopierst du den Code aus dem Spoiler rein. Dann Skript speichern und starten.
                                das war es.

                                jahnbes 1 Reply Last reply Reply Quote 0
                                • jahnbes
                                  jahnbes @SpacerX last edited by jahnbes

                                  @spacerx
                                  Danke, der Weg funktionierte leider nicht. Ich habe inzwischen auch gefunden, warum, in Deinem Blockly-Skript oben fehlt die erste Zeile

                                  <xml xmlns="https://developers.google.com/blockly/xml">

                                  Steht die am Beginn des Blockly-Skriptes, dann wird blockly ohne Fehler erkannt und angezeigt.
                                  Mehr noch nicht, ich bin am forschen.
                                  Gruß Bert.

                                  S 1 Reply Last reply Reply Quote 0
                                  • S
                                    SpacerX @jahnbes last edited by

                                    @jahnbes Sorry.

                                    Ich hatte es schon komplett kopiert und im Code Tag war auch alles enthalten.
                                    Nur Stand der Code Tag in der gleichen Zeile wie der Beginn des Codes so das diese von HTML verschluckt wurde.

                                    Ich hab das in meinem Beitrag oben korrigiert und auch den Import sowie dann die Funktion getestet.

                                    Nun ist alles Richtig und es sollte funktionieren.

                                    jahnbes 1 Reply Last reply Reply Quote 0
                                    • jahnbes
                                      jahnbes @SpacerX last edited by

                                      @spacerx
                                      Da sind noch ein paar private (?) Funktionen enthalten, die nicht mit rübergekommen sind, oder denke ich da falsch? Von "RobiLog" nach unten bis "GetSektion".
                                      Siehe im Bild links
                                      roblog_1.jpg
                                      Sind das private Funktionen oder allen zugängliche und ich habe sie nur noch nicht gefunden?
                                      Gruß Bert.

                                      S 1 Reply Last reply Reply Quote 0
                                      • S
                                        SpacerX @jahnbes last edited by SpacerX

                                        @jahnbes das sind kleine Javascripts wenn du bei der Funktion auf (...) klickst siehst du diese.
                                        Das Blockly sollte so funktionieren. Einfach Starten und im Log sollte was von:
                                        "Start logging Roborock Instanz 0 - Device: "deindevice"

                                        Ich schrub ja schon das ich den Code im oben im Spoiler korrigiert habe.

                                        Ich hab das in meinem Beitrag oben korrigiert und auch den Import sowie dann die Funktion getestet.

                                        Nun ist alles Richtig und es sollte funktionieren.

                                        jahnbes 1 Reply Last reply Reply Quote 0
                                        • jahnbes
                                          jahnbes @SpacerX last edited by

                                          @spacerx
                                          Klasse, jetzt sehe ich den log auch, vielen Dank und ein schönes Wochenende!
                                          Gruß Bert.

                                          1 Reply Last reply Reply Quote 0
                                          • S
                                            SpacerX @copystring last edited by

                                            @copystring
                                            Ich hab mich mal am Sniffing Versuch.
                                            So einfach wie es in der Wiki steht ist ja doch nicht.
                                            Dazu hab ich mir auch mal ioBroker auf Windows installiert mit nur Roborock Adapter.
                                            Erst mal den ganzen Kram nach Python zu installieren hat schon fast den ganzen Nachmittag aufgefressen.
                                            Der Proxy auf dem Windows Rechner läuft und WireGuard auf dem IPhone auch.
                                            Das Zertifikat hab ich abgerufen und im Iphone installiert.
                                            Ich bekomme einfach keine Verbindung Zustande. Es kommen Fehler von TCL Version auf Client.

                                            Könntest du mir da etwas unter die Arme greifen. Gern auch in einem Beitrag um das hier nicht so zuzumüllen,

                                            copystring 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

                                            763
                                            Online

                                            31.7k
                                            Users

                                            79.7k
                                            Topics

                                            1.3m
                                            Posts

                                            114
                                            812
                                            162058
                                            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