Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Roborock Adapter tester gesucht

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Roborock Adapter tester gesucht

    This topic has been deleted. Only users with topic management privileges can see it.
    • David G.
      David G. @copystring last edited by

      @copystring

      Hab die Dev Version vom 25 Feb installiert.
      Aktualisiere jetzt mal teste morgen.

      Vorhin hab ich nochmal probiert und da hat es geklappt, allerdings in einer anderen Etage.

      Melde mich

      1 Reply Last reply Reply Quote 0
      • David G.
        David G. @copystring last edited by David G.

        @copystring

        So,

        habe getestet. Es klappt.
        Allerdings war es wohl ein Fehler meinerseits.

        Ich muss (wie ich jetzt gemerkt habe) erst die Multimap der Etage laden, und dann die Reinigung starten.
        Das bekomme ich aber leicht in einem Skript eingebaut.

        EDIT:
        Hab mir ein Blockly geschrieben, um sicherzugehen, dass ich nur Räume in einer Etage aktiv habe und wähle dementsprechend die entsprechende Map aus.

        Screenshot_20230227_073612_Chrome.jpg

        So kann man in der Visu nichts falsch machen:
        Screenshot_20230227_073743_Fully Kiosk Browser.jpg

        Aber eine andere Frage:
        Bei jedem Start sende ich vorab noch die Saugleistung und Wassermenge über set_water_box_custom_mode und set_custom_mode.
        Die Beiden Datenpunkte stehen in meiner Visualisierung zum dropdown bereit.

        Das mache ich, da meine Frau das ggf zwischenzeitlich per App geändert haben könnte.

        Ist es möglich die beiden Datenpunkte unter commands vom Adapter aus mit dem Roboter synchron zu halten?

        So müsste man/ich es nicht immer mit senden und man sieht die aktuelle Einstellung in seiner Auswahl.

        S copystring 2 Replies Last reply Reply Quote 2
        • S
          simplyclever @David G. last edited by

          @david-g Könntest Du Blockly und VIS (Widgets?) teilen?

          David G. 1 Reply Last reply Reply Quote 0
          • David G.
            David G. @simplyclever last edited by

            @simplyclever

            Anbei das Skript:

            <xml xmlns="https://developers.google.com/blockly/xml">
             <variables>
               <variable id="m*1}PM*vX/e5QPUWCX/~">raume_og</variable>
               <variable id="HGnKiadUT}LlnVPI#)V5">raume_ug</variable>
               <variable id="WF[nL{a)J(;8bBQ3kw,Q">j</variable>
             </variables>
             <block type="variables_set" id="LJG9IQ:;c(+_sG54Nbpv" x="563" y="-1213">
               <field name="VAR" id="m*1}PM*vX/e5QPUWCX/~">raume_og</field>
               <value name="VALUE">
                 <block type="selector" id="YMrJZw87j]=8);ry1@f]">
                   <field name="TEXT">roborock.0.Devices.7UreppMhwYr4WlSbCtcsno.floors.1.*</field>
                 </block>
               </value>
               <next>
                 <block type="variables_set" id="H8H5NrBhth.kWD,lWmWC">
                   <field name="VAR" id="HGnKiadUT}LlnVPI#)V5">raume_ug</field>
                   <value name="VALUE">
                     <block type="selector" id="+9@TR[f{`qLJ+Gt$L4f9">
                       <field name="TEXT">roborock.0.Devices.7UreppMhwYr4WlSbCtcsno.floors.0.*</field>
                     </block>
                   </value>
                   <next>
                     <block type="on_ext" id="/[tZ4DhA:zBka)VD;oq:">
                       <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation>
                       <field name="CONDITION">true</field>
                       <field name="ACK_CONDITION"></field>
                       <value name="OID0">
                         <shadow type="field_oid" id=")9tNYU]I]2zJRDL$yJ!L">
                           <field name="oid">default</field>
                         </shadow>
                         <block type="variables_get" id="f{{]lfXFJ7}HcU;T%14x">
                           <field name="VAR" id="m*1}PM*vX/e5QPUWCX/~">raume_og</field>
                         </block>
                       </value>
                       <statement name="STATEMENT">
                         <block type="controls_forEach" id="Y,;q@xe$2!LnUQcP)|Yy">
                           <field name="VAR" id="WF[nL{a)J(;8bBQ3kw,Q">j</field>
                           <value name="LIST">
                             <block type="variables_get" id="DU8hj`D=P}-_8~k~*fTS">
                               <field name="VAR" id="HGnKiadUT}LlnVPI#)V5">raume_ug</field>
                             </block>
                           </value>
                           <statement name="DO">
                             <block type="control_ex" id="zD?!9SShbd,Ky#a%!AJ%">
                               <field name="TYPE">false</field>
                               <field name="CLEAR_RUNNING">FALSE</field>
                               <value name="OID">
                                 <shadow type="field_oid" id="Vqmc=1_*}x+nX$AOsaRb">
                                   <field name="oid">Object ID</field>
                                 </shadow>
                                 <block type="variables_get" id="G9:X=`u[])`|5aU8+=Dw">
                                   <field name="VAR" id="WF[nL{a)J(;8bBQ3kw,Q">j</field>
                                 </block>
                               </value>
                               <value name="VALUE">
                                 <shadow type="logic_boolean" id="[L!m2~:ZWQxe8@yU[7NP">
                                   <field name="BOOL">FALSE</field>
                                 </shadow>
                               </value>
                               <value name="DELAY_MS">
                                 <shadow type="math_number" id="N.HMqS+m/3H14%B3F[1|">
                                   <field name="NUM">0</field>
                                 </shadow>
                               </value>
                             </block>
                           </statement>
                           <next>
                             <block type="update" id="T5Nr6)3:_o*4OwlC,kkB">
                               <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                               <field name="OID">roborock.0.Devices.7UreppMhwYr4WlSbCtcsno.commands.load_multi_map</field>
                               <field name="WITH_DELAY">FALSE</field>
                               <value name="VALUE">
                                 <block type="math_number" id="lbmY(vKPJw?rI3Ly9ZVT">
                                   <field name="NUM">1</field>
                                 </block>
                               </value>
                             </block>
                           </next>
                         </block>
                       </statement>
                       <next>
                         <block type="on_ext" id="`yx429a:d#})9*}K:x5?">
                           <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation>
                           <field name="CONDITION">true</field>
                           <field name="ACK_CONDITION"></field>
                           <value name="OID0">
                             <shadow type="field_oid">
                               <field name="oid">default</field>
                             </shadow>
                             <block type="variables_get" id="[M6zXe5%J(zRl=5D6@AI">
                               <field name="VAR" id="HGnKiadUT}LlnVPI#)V5">raume_ug</field>
                             </block>
                           </value>
                           <statement name="STATEMENT">
                             <block type="controls_forEach" id="9b[KI}p/Vcqmi;AIOvoP">
                               <field name="VAR" id="WF[nL{a)J(;8bBQ3kw,Q">j</field>
                               <value name="LIST">
                                 <block type="variables_get" id="^iD/8)NBfbWNoi)a1xWA">
                                   <field name="VAR" id="m*1}PM*vX/e5QPUWCX/~">raume_og</field>
                                 </block>
                               </value>
                               <statement name="DO">
                                 <block type="control_ex" id="W5yI0~~A}BRZ;w]H-M5y">
                                   <field name="TYPE">false</field>
                                   <field name="CLEAR_RUNNING">FALSE</field>
                                   <value name="OID">
                                     <shadow type="field_oid">
                                       <field name="oid">Object ID</field>
                                     </shadow>
                                     <block type="variables_get" id="[Tr|(mpClG/-*BP,,SfZ">
                                       <field name="VAR" id="WF[nL{a)J(;8bBQ3kw,Q">j</field>
                                     </block>
                                   </value>
                                   <value name="VALUE">
                                     <shadow type="logic_boolean" id="j}b57r;.pBj=*o$_ZC^Y">
                                       <field name="BOOL">FALSE</field>
                                     </shadow>
                                   </value>
                                   <value name="DELAY_MS">
                                     <shadow type="math_number" id="ArP;CZy8xNW6dzENFQ[A">
                                       <field name="NUM">0</field>
                                     </shadow>
                                   </value>
                                 </block>
                               </statement>
                               <next>
                                 <block type="update" id="Wwrb?1viM#Hn+RTHv:J4">
                                   <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                                   <field name="OID">roborock.0.Devices.7UreppMhwYr4WlSbCtcsno.commands.load_multi_map</field>
                                   <field name="WITH_DELAY">FALSE</field>
                                   <value name="VALUE">
                                     <block type="math_number" id="7/b3!/qa$]8DV[^/_HXa">
                                       <field name="NUM">0</field>
                                     </block>
                                   </value>
                                 </block>
                               </next>
                             </block>
                           </statement>
                         </block>
                       </next>
                     </block>
                   </next>
                 </block>
               </next>
             </block>
            </xml>
            

            Als Visu nutze ich Lovelace.
            Hast du das auch?

            S 1 Reply Last reply Reply Quote 1
            • S
              simplyclever @David G. last edited by

              @david-g Danke! Ich benutze VIS. Aber evtl. hilft es anderen.

              David G. 1 Reply Last reply Reply Quote 0
              • David G.
                David G. @simplyclever last edited by

                @simplyclever

                Gerne,

                das was du auf dem Bild siehst ist easy und "nicht wert zu posten" in Lovelace.

                Das hier ist eher interessant.
                Screenshot_20230227_100259_Fully Kiosk Browser.jpg

                Wenn man auf "Los" drückt öffnen sich das vorherige Bild. Oben links der Status der Basis als Popup. Oben rechts der Adapterstatus.
                Bei den unteren Icons klappen die entsprechenden Dinge aus.
                Das Poste ich, wenn ich mit allem fertig bin, im Lovelace Thread.
                Da wird sich immer schön ausgetauscht.

                1 Reply Last reply Reply Quote 0
                • David G.
                  David G. last edited by David G.

                  Ich habe den Adapter heute mal auf der Arbeit in einer Ubuntu VM (über vmware esxi) installiert (den-version von vor 10min) um mir die Funktionen anzuschauen die am RPI nicht klappen.

                  Hier möchte sich der Adapter nicht verbinden:

                  
                  roborock.0
                  2023-02-27 14:04:35.458	info	Terminated (NO_ERROR): Without reason
                  
                  roborock.0
                  2023-02-27 14:04:35.457	info	terminating
                  
                  roborock.0
                  2023-02-27 14:04:35.453	warn	Restart initiated
                  
                  roborock.0
                  2023-02-27 14:04:35.436	error	Connection timed out! Deleting UserData and trying again
                  
                  roborock.0
                  2023-02-27 14:04:30.435	info	MQTT initialized
                  
                  roborock.0
                  2023-02-27 14:04:29.442	info	starting. Version 0.0.10-alpha.0 (non-npm: copystring/ioBroker.roborock#dev) in /opt/iobroker/node_modules/iobroker.roborock, node: v14.19.3, js-controller: 4.0.21
                  
                  wendy2702 1 Reply Last reply Reply Quote 0
                  • wendy2702
                    wendy2702 @David G. last edited by

                    @david-g sagte in Roborock Adapter tester gesucht:

                    Arbeit in einer Ubuntu VM (über vmware esxi)

                    Zu wenig infos.

                    Welche Ubuntu Version?
                    NodeJS?
                    NPM?
                    Log im Debug mode

                    1 Reply Last reply Reply Quote 0
                    • David G.
                      David G. last edited by David G.

                      @wendy2702

                      Bleibt nun grün.
                      Die Firewall hat den Adapter irgendwie geblockt. Mal sehen warum (hab Sie grad zum Test kurz deaktiviert).

                      1 Reply Last reply Reply Quote 0
                      • copystring
                        copystring @David G. last edited by

                        @david-g said in Roborock Adapter tester gesucht:

                        @copystring

                        So,

                        habe getestet. Es klappt.
                        Allerdings war es wohl ein Fehler meinerseits.

                        Ich muss (wie ich jetzt gemerkt habe) erst die Multimap der Etage laden, und dann die Reinigung starten.
                        Das bekomme ich aber leicht in einem Skript eingebaut.

                        Genau. Die Karte muss ausgewählt sein damit dort entsprechenden gesaugt wird.

                        EDIT:
                        Hab mir ein Blockly geschrieben, um sicherzugehen, dass ich nur Räume in einer Etage aktiv habe und wähle dementsprechend die entsprechende Map aus.

                        Es reicht tatsächlich aus nur die Karte auszuwählen. Den Rest macht der Adapter automatisch. Das bedeutet es werden nur die Räume zum Reinigen abgeschickt, welche auf auf der aktuellen Karte verfügbar sind. Dadurch muss man nicht jedes mal die zu reinigenden Räume ändern.

                        Screenshot_20230227_073612_Chrome.jpg

                        So kann man in der Visu nichts falsch machen:
                        Screenshot_20230227_073743_Fully Kiosk Browser.jpg

                        Aber eine andere Frage:
                        Bei jedem Start sende ich vorab noch die Saugleistung und Wassermenge über set_water_box_custom_mode und set_custom_mode.
                        Die Beiden Datenpunkte stehen in meiner Visualisierung zum dropdown bereit.

                        Das mache ich, da meine Frau das ggf zwischenzeitlich per App geändert haben könnte.

                        Ist es möglich die beiden Datenpunkte unter commands vom Adapter aus mit dem Roboter synchron zu halten?

                        So müsste man/ich es nicht immer mit senden und man sieht die aktuelle Einstellung in seiner Auswahl.

                        Ähm nein. Das baue ich bewusst nicht ein da die commands, wie der Name schon verrät, einfach nur Befehle sind. Dort wird absichtlich nichts gelesen weil der echte wert von z.B. water_box_custom_mode unter deviceStatus zu finden ist. Synchron ist also alles unter deviceStatus. Diese nehmen auch die Daten aus der App entsprechend an. Wenn du dann über den Adapter set_water_box_custom_mode ausführst taucht genau so unter deviceStatus auf wie aus der App.

                        David G. 2 Replies Last reply Reply Quote 0
                        • copystring
                          copystring last edited by copystring

                          Ich brauche mal eure Hilfe.
                          Es geht darum, die echten Werte der Verbrauchsmaterialien des Saugroboters zu bekommen.
                          Bei mir sind das diese: Filter, Main Brush, Side Brush.
                          In der aktuellen dev branch von gerade eben wird nicht mehr wie zuvor HomeData nur ein mal beim Einrichten des Adapters aktualisiert, sondern bei jedem Reconnect. Dadurch werden selbstverständlich einige weitere Daten zur Verfügung gestellt.
                          In diesem Fall geht es um drei Werte im JSON String unter deviceStatus von HomeData.: 125, 126,127
                          Diese haben bei mir folgende Bedeutung:

                          • 125 = Main Brush
                          • 126 = Side Brush
                          • 127 = Filter

                          Von jedem Wert dann jeweils 1 abziehen. Das sollte dann dem Wert in der App entsprechen.
                          Klappt das bei euch auch würde ich das tatsächlich einbauen. Dadurch erhalten wir alle drei Stunden (oder bei Reconnect) die echten Werte in Prozent der Verbrauchsmaterialien, ohne für jeden Roboter eine eigene Berechnung durchführen zu müssen.

                          1 Reply Last reply Reply Quote 0
                          • David G.
                            David G. @copystring last edited by

                            @copystring sagte in Roborock Adapter tester gesucht:

                            Ähm nein. Das baue ich bewusst nicht ein da die commands......

                            Okay, danke für die Info. Dann schaue ich mal, wie man das in der Visu schlau umsetzt um sich nicht von den "falschen" Werten irritieren zu lassen.

                            @copystring sagte in Roborock Adapter tester gesucht:

                            Ich brauche mal eure Hilfe.
                            Es geht darum, die echten Werte der Verbrauchsmaterialien des Saugroboters zu bekommen.

                            Gibt es die Werte schon irgendwo?
                            In der Json hab ich was stehen, hier exemplarisch ein Wert.

                                      "id": "125",
                                      "name": "主刷寿命",
                                      "code": "main_brush_life",
                                      "mode": "rw",
                                      "type": "VALUE",
                                      "property": "{\"max\": 100, \"min\": 0, \"step\": 1, \"unit\": null, \"scale\": 1}",
                                      "desc": null
                            
                            1 Reply Last reply Reply Quote 0
                            • copystring
                              copystring last edited by

                              @david-g said in Roborock Adapter tester gesucht:

                              Gibt es die Werte schon irgendwo?
                              In der Json hab ich was stehen, hier exemplarisch ein Wert.

                                        "id": "125",
                                        "name": "主刷寿命",
                                        "code": "main_brush_life",
                                        "mode": "rw",
                                        "type": "VALUE",
                                        "property": "{\"max\": 100, \"min\": 0, \"step\": 1, \"unit\": null, \"scale\": 1}",
                                        "desc": null
                              

                              Ja weiter unten im deviceStatus

                              David G. 1 Reply Last reply Reply Quote 0
                              • David G.
                                David G. @copystring last edited by David G.

                                @copystring

                                Gefunden

                                      "deviceStatus": {
                                        "120": 0,
                                        "121": 8,
                                        "122": 79,
                                        "123": 102,
                                        "124": 203,
                                        "125": 99,
                                        "126": 99,
                                        "127": 98,
                                        "128": 0,
                                        "133": 1
                                      },
                                

                                Stimmt bei mir aber nicht mit den Daten in der App überein (auch nicht mit -1).
                                Screenshot_20230227_234401_Roborock.jpg

                                copystring 1 Reply Last reply Reply Quote 0
                                • copystring
                                  copystring @David G. last edited by

                                  @david-g OK. Mal bitte in ioBroker checken, wann HomeData zuletzt geschrieben wurden. Sind das vielleicht alte Daten?

                                  David G. 1 Reply Last reply Reply Quote 0
                                  • David G.
                                    David G. @copystring last edited by

                                    @copystring sagte in Roborock Adapter tester gesucht:

                                    @david-g OK. Mal bitte in ioBroker checken, wann HomeData zuletzt geschrieben wurden. Sind das vielleicht alte Daten?

                                    In der Tat.
                                    Ist vom 19.2

                                    copystring 1 Reply Last reply Reply Quote 0
                                    • copystring
                                      copystring @David G. last edited by

                                      @david-g aber die aktuelle dev branch ist installiert? Die schreibt bei jedem Start die Daten neu.

                                      David G. 1 Reply Last reply Reply Quote 0
                                      • David G.
                                        David G. @copystring last edited by David G.

                                        @copystring

                                        Ja, gestern Abend nach deinem Post mit der Bitte zu testen installiert.

                                        Installiere gleich nochmal drüber.

                                        EDIT
                                        Jetzt stimmen die Werte.
                                        Braucht das auf git ggf kurz bis die aktuellste Version ausgeliefert wird?

                                           "deviceStatus": {
                                                "120": 0,
                                                "121": 8,
                                                "122": 22,
                                                "123": 104,
                                                "124": 201,
                                                "125": 96,
                                                "126": 94,
                                                "127": 92,
                                                "128": 0,
                                                "133": 1
                                              },
                                        

                                        Die Werte sind zum Screenshot oben wirklich was gesunken.

                                        1 Reply Last reply Reply Quote 0
                                        • David G.
                                          David G. @copystring last edited by

                                          @copystring sagte in Roborock Adapter tester gesucht:

                                          Ähm nein. Das baue ich bewusst nicht ein da die commands, wie der Name schon verrät, einfach nur Befehle sind.

                                          Da habe ich doch nochmal eine Frage zu.
                                          Wie würdest du einen parallelen Betrieb der App und Iobroker dann in einer Visualisierung umsetzen?

                                          Ich sehe mehrere Varianten, die aber alle Nachteile haben.

                                          Man zeigt in der Visu den Wert unter commands und steuert auch darüber. Diese Werte sind aber veraltet, falls zuvor die App genutzt wurde

                                          Ich zeige den Wert von deviceStatus und mache zusätzlich ein dropdown mit den Werten aus commands. Sieht aber a nicht gut aus und kann b zu Problemen führen wenn ich die Saugleistung zb in der App aktuell auf stark stehen habe, diese über den Adapter auf leise stellen möchte und diese unter commands bereits auf leise steht. Dann müsste man immer erst was anderes auswählen und dann wieder auf leise gehen.

                                          Wie ich es jetzt mache. In der VIS wie unter 1 und ein Blockly was commands mit deviceStatus syncon hält. Der Nachteil ist, dass man jede akustische Meldung doppelt bekommt mit einigen Sekunden Versatz. Ist von der Bedienung her die beste Variante,abgesehen von dem doppelten Geräusch.

                                          copystring 1 Reply Last reply Reply Quote 0
                                          • copystring
                                            copystring @David G. last edited by

                                            @david-g Schau dir mal aliase an. Dort kann man getter und setter einstellen.
                                            Set wäre dann command und get entsprechend der Status aus deviceStatus.
                                            Den alias dann in vis verwenden.
                                            Das hat den auch den Vorteil, dass wenn man den Roboter Mal tauschen muss reicht es aus die aliase anzupassen und in vis muss nichts geändert werden.

                                            David G. 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            743
                                            Online

                                            31.6k
                                            Users

                                            79.5k
                                            Topics

                                            1.3m
                                            Posts

                                            51
                                            766
                                            144804
                                            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