Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Entwicklung
    4. Adapter mihome-vacuum anpassungen

    NEWS

    • 15. 05. Wartungsarbeiten am ioBroker Forum

    • Monatsrückblick - April 2025

    • Minor js-controller 7.0.7 Update in latest repo

    Adapter mihome-vacuum anpassungen

    This topic has been deleted. Only users with topic management privileges can see it.
    • D
      dirkhe Developer @mumurik last edited by

      @mumurik hast du den einzelnen Räumen auch einen IObroker Raum zugewiesen?
      9617ea20-56b9-40a4-960c-2575b5db71d4-image.png
      Was er genberell, auch bei den Timern macht, ist, dass er ausgehend von den ioBroker Räumen(die du bei Multi Clean zugewiesen hast) den entsprechenden mapIndex Eintrag sucht, der diesem Raum zugewiesen ist. Diesen mapIndex (oder halt auch mehrere) sendet er dann an den Robi

      Diginix M 2 Replies Last reply Reply Quote 0
      • D
        dirkhe Developer @xADDRx last edited by

        @xADDRx siehe meinen Kommentar von oben

        @dirkhe sagte in Adapter mihome-vacuum anpassungen:

        Die Karte wird in/durch die App in Räume aufgeteilt. Dabei bekommt jeder Raum eine fortlaufende Nummer. Da man in der Regel dann drei Karten hat (incl Backup), ist man bei der aktuellen dann irgendwann bei 3 x Räume. Ich vermute zumindest, dass der Index daher kommt. Da hilft dann nur ausprobieren und den Sauger einfach mal irendwo hinschicken, zb. nach 10 per customcommand app_segment_clean;10. Wenn du dann einen Treffer hast, kannst du per addRoom die 10 einegebn und er legt dir den Raum an.

        X 1 Reply Last reply Reply Quote 1
        • Diginix
          Diginix @dirkhe last edited by Diginix

          @dirkhe Muss man den Raum dem Knoten (Ordner) zuweisen so dass er automatisch rekursiv den 3 Kind Objekte zugeordnet wird oder auch direkt dem "clean Room" Objekt?

          Ich hatte nur die Knoten mit Raum versehen und mein Testtimer eben hat zwar lt. Log ausgelöst, aber es wurde kein Raum gesaugt. Danach habe ich bei den zwei Räumen den Raum zusätzlich noch dem "clean Room" gegeben und dann aber den Timer manuell angestoßen weil ich keine 15 Minuten warten wollte. Das hat dann funktioniert und der Sauger ist losgezogen.
          Kann nun an der Änderung des Raumes beim Objekt liegen oder am manuellen Starten des Timers.

          Variante 1, 2 oder 3?
          39a87e61-46ef-4065-b4ae-afa91f2c69fb-image.png

          Könntest du die Auswahl der Minuten beim Timer in 5 Minuten Schritten machen? Nur alle 15 Minuten ist zu unflexibel.

          D 1 Reply Last reply Reply Quote 0
          • D
            dirkhe Developer @Diginix last edited by dirkhe

            @Diginix der Raum braucht den Raum nicht, normalerweise nur der mapIndex. Ich habe das der einfachheitshalber am ganzen channel(Raum) gemacht.

            @Diginix sagte in Adapter mihome-vacuum anpassungen:

            Könntest du die Auswahl der Minuten beim Timer in 5 Minuten Schritten machen? Nur alle 15 Minuten ist zu unflexibel.

            erledigt, lade ich gleich mal hoch

            Diginix 1 Reply Last reply Reply Quote 0
            • Diginix
              Diginix @dirkhe last edited by

              @dirkhe Ok, mit Raum beim mapindex hat der Timer soeben korrekt gestartet. Allerdings immer fast 1 Minute verzögert. Also erst 21:45 und 56 Sekunden sprang der Timer an.
              Für mich wäre es auch ok wenn die Stunden/Minuten im Adapter freie Eingaben wären. Dann könnte man jede Minute wählen wie auch in der MiHome App. Auch produktiv fände ich minimal alle 5 Minuten gut. So oft sieht man die Liste ja dann auch nicht.

              1 Reply Last reply Reply Quote 0
              • D
                dirkhe Developer last edited by

                @Diginix sagte in Adapter mihome-vacuum anpassungen:

                @dirkhe Ok, mit Raum beim mapindex hat der Timer soeben korrekt gestartet. Allerdings immer fast 1 Minute verzögert. Also erst 21:45 und 56 Sekunden sprang der Timer an.
                Für mich wäre es auch ok wenn die Stunden/Minuten im Adapter freie Eingaben wären. Dann könnte man jede Minute wählen wie auch in der MiHome App. Auch produktiv fände ich minimal alle 5 Minuten gut. So oft sieht man die Liste ja dann auch nicht.

                Ich habe es ja schon eingebaut, und das verzögerte... Da bin aktuell dran. Das liegt daran, dass ich mich an das pingintervall hänge. Muß dann bischen früher reagieren....

                Diginix 1 Reply Last reply Reply Quote 0
                • Diginix
                  Diginix @dirkhe last edited by

                  @dirkhe Die Verzögerung ist mir egal. Das habe ich ja nur gemerkt weil ich die Funktionalität gerade genau prüfe.
                  Hätte ja auch sein können, dass es ein lokales "Problem" bei mir ist.
                  Ansonsten danke für die super Überarbeitung des Adapters!

                  Wann planst du den PR in die offizielle Version damit man ihn regulär beziehen und aktualisieren kann?

                  D 1 Reply Last reply Reply Quote 0
                  • D
                    dirkhe Developer @Diginix last edited by

                    @Diginix sagte in Adapter mihome-vacuum anpassungen:

                    Wann planst du den PR in die offizielle Version damit man ihn regulär beziehen und aktualisieren kann?

                    Ich hatte gedacht, dass mal am WE anzugehen. Ich weiss auch nicht, wer den mergt, ich nehme mal an @Meistertr ?

                    1 Reply Last reply Reply Quote 0
                    • D
                      dirkhe Developer last edited by

                      Minuten können jetzt auf alle 5 Minuten eingestellt werden und der timer geht auch pünktlich los

                      Diginix 1 Reply Last reply Reply Quote 1
                      • M
                        mumurik @dirkhe last edited by

                        @dirkhe sagte in Adapter mihome-vacuum anpassungen:

                        @mumurik hast du den einzelnen Räumen auch einen IObroker Raum zugewiesen?
                        9617ea20-56b9-40a4-960c-2575b5db71d4-image.png
                        Was er genberell, auch bei den Timern macht, ist, dass er ausgehend von den ioBroker Räumen(die du bei Multi Clean zugewiesen hast) den entsprechenden mapIndex Eintrag sucht, der diesem Raum zugewiesen ist. Diesen mapIndex (oder halt auch mehrere) sendet er dann an den Robi

                        ja, das hatte ich gemacht, jeder einzelner Raum ist einem IoBroker-Raum zugewiesen, wie bei dir im Screenshot. Im Object multiRoomClean sind die Räume angegeben, die mit multiClean angesteuert werden sollen.
                        Mir ist aber noch nicht klar, wie ich den Roboter starte, damit er die Räume ansteuert, die im multiRoomClean angegeben sind, einfach den Objekt multiRoomClean auf true setzen? Da passiert leider nichts, das habe ich bereits versucht...

                        1 Reply Last reply Reply Quote 0
                        • D
                          dirkhe Developer last edited by

                          Ich habe es bei mir gerade nochmal getestet und es funktioniert. Es ist doch ein Button, da musst du draufdrücken, im Prinzip wird das auf true gesetzt, das stimmt.
                          Setzte den adapter mal auf debug und schaue mal in Log oder poste es hier

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

                            @dirkhe danke, ne sieht so gut aus. danke.

                            1 Reply Last reply Reply Quote 0
                            • Diginix
                              Diginix @dirkhe last edited by Diginix

                              @dirkhe sagte in Adapter mihome-vacuum anpassungen:

                              Minuten können jetzt auf alle 5 Minuten eingestellt werden und der timer geht auch pünktlich los

                              @dirkhe Kann ich bestätigen.

                              Der Channel vom Raum muss den ioBroker Raum haben, nicht nur das mapindex Objekt.
                              Ich hab eben 3 Testtimer gebraucht, bei denen anfangs nur der mapindex den Raum kannte und es wurde keine Reinigung gestartet. Nur der Logeintrag für die vermeintliche Reinigung kam zum richtigen Zeitpunkt.
                              Erst wenn der Channel den Raum kennt, weiß der Adapter wirklich welcher Raum gemeint ist.
                              Daher wäre es cool wenn im Log bei der Zeile "set nächster Timer" gleich noch die Räume+Index mit ausgegeben würden.
                              Bei den fehlgeschlagenen Tests ist vollkommen unbekannt was der Adapter an den Sauger gesendet hat.
                              Loglevel Debug hab ich nicht aktiv. Vermutlich war es ein leeres "app_segment_clean".

                              1 Reply Last reply Reply Quote 0
                              • D
                                dirkhe Developer last edited by

                                Hmmm, ich habe gerade nochmal in den code geschaut. Also der TimerManager merkt sich nur die id des Timers. Wenn er dann dran ist, wird anhand des timers ermittelt, welche Räume daran gepflegt sind. Da wird überall die gleiche Funktion genutzt, ob du bei einem Timer sofort starten auswählst oder ob du multiroomclean drückst. mit den Räumen wird intern "cleanRooms" aufgerufen. Der mach dann folgendes

                                case 'cleanRooms':
                                               let rooms= obj.message // comma separated String with enum.rooms.XXX
                                               rooms && adapter.getForeignObjects(adapter.namespace + '.rooms.*.mapIndex', 'state', 'rooms',function(err,states){
                                                   if (states){
                                                       let mapIndex= [];
                                                       for ( let stateId in states){
                                                           for ( let r in states[stateId].enums)
                                                               if (rooms.indexOf(r) >= 0)
                                                                   mapIndex.push(stateId)
                                                       }
                                                       if (mapIndex.length == 1){ // trigger button, because than the fan_power will also set
                                                           adapter.setForeignState(mapIndex[0].replace('.mapIndex','.roomClean'), true, false);
                                                       } else if (mapIndex.length > 0){
                                                           adapter.getForeignStates(mapIndex, function(err,states){
                                                               mapIndex= [];
                                                               for ( let stateId in states){
                                                                   let val= parseInt(states[stateId].val,10)
                                                                   if (val != NaN)
                                                                       mapIndex.push(val)
                                                               }
                                                               adapter.sendTo(adapter.namespace, "cleanSegments",mapIndex.join(','))
                                                           })
                                                       }
                                                   }
                                               });
                                               return;
                                

                                was soviel heißt, wie gib mir die mapIndex Einträge aller Räume meines Adapters.
                                Dabei werdnen dann auch sofort die Räume mit ausgelesen. Dann frage ich von jedem zurückgegeben (mapIndex-)Objekt die Räume ab und vergleiche die mit den angeforderten. Das wird dann an "cleanSegments" direkt oder indirekt (bei einnem Treffer) übergeben.
                                Darum schreibe ich ins log auch nur, wann der nächste Timer (incl dessen id) losgeht. Der Raum interessiert mich da noch nicht.
                                Ich könnte aber in den commands noch eine Warnung ausgeben, wenn diese ohne Parameter aufgerufen würden. Zusätzlich könnte ich auch noch in den Namen des Channels timer die TimerID reinschreiben

                                Ich habe das gerade auch nochmal ausprobiert und bei mir funktioniert das auch mit dem Raum nur an mapIndex.

                                Diginix 1 Reply Last reply Reply Quote 0
                                • D
                                  dirkhe Developer last edited by

                                  Ich habe jetzt nochmal die Warnings bei leeren Räumen/mapIndex mit reingepackt und einen PR gestellt.

                                  1 Reply Last reply Reply Quote 0
                                  • Diginix
                                    Diginix @dirkhe last edited by Diginix

                                    @dirkhe Wenn alle Timer mal funktionieren, dann interessiere ich mich auch nicht mehr für Logeinträge. Am Ende stelle ich die meisten Adapter eh auf Loglevel warn. Da ich nun eine Lösung habe, die funktioniert, brauchst du da kein Aufwand betreiben. So wieder Adapter jetzt ist, ist er perfekt für mich. Ich brauche die MiHome App nun gar nicht mehr, außer vllt. mal für die Kartenbearbeitung.

                                    D.h. sobald @Meistertr den PR merged müsste der offizielle Adapter alle deine Erweiterungen enthalten?

                                    1 Reply Last reply Reply Quote 0
                                    • M
                                      mumurik @dirkhe last edited by

                                      @dirkhe sagte in Adapter mihome-vacuum anpassungen:

                                      Ich habe es bei mir gerade nochmal getestet und es funktioniert. Es ist doch ein Button, da musst du draufdrücken, im Prinzip wird das auf true gesetzt, das stimmt.
                                      Setzte den adapter mal auf debug und schaue mal in Log oder poste es hier

                                      bekomme folgende Fehlermeldung:

                                      mihome-vacuum.0	2020-01-17 20:06:25.148	error	[189](unknown) -> data for segment is not a number
                                      mihome-vacuum.0	2020-01-17 20:06:25.147	debug	Receive <<< {"error":{"code":-10000,"message":"data for segment is not a number"},"id":189}<<< 21310080000000000f9d2ccf5e2205b1896f24d2d6fc15813b1b98775008e4b00d55212412c09a0daa616947a3b1b72c0a841aac
                                      mihome-vacuum.0	2020-01-17 20:06:25.134	debug	sendMsgRaw >>> 21310070000000000f9d2ccf5e2205b112e0cce154de492e8055bae31aab0352808c12daa905e370d2440111e12dcf7a828d84b4c97c92dddeb33a565971ab300ca8f55808a67fa5e20250d8e90be0b916c1cade5d1839e5e4e84ce4
                                      mihome-vacuum.0	2020-01-17 20:06:25.134	debug	sendMsg >>> {"id":189,"method":"app_segment_clean","params":[null,17,null,104]}
                                      mihome-vacuum.0	2020-01-17 20:06:25.133	debug	Timestamp: 5e2205b1
                                      mihome-vacuum.0	2020-01-17 20:06:25.133	debug	trigger cleaning segment NaN,17,NaN,104
                                      mihome-vacuum.0	2020-01-17 20:06:25.132	debug	redis pmessage messagebox.system.adapter.mihome-vacuum.0 messagebox.system.adapter.mihome-vacuum.0 {"command":"cleanSegments","message":"NaN,17,NaN,104","from":"system.adapter.mihome-vacuum.0","_id"
                                      mihome-vacuum.0	2020-01-17 20:06:25.129	debug	sendTo "cleanSegments" to system.adapter.mihome-vacuum.0 from system.adapter.mihome-vacuum.0: NaN,17,NaN,104
                                      mihome-vacuum.0	2020-01-17 20:06:25.042	debug	redis pmessage messagebox.system.adapter.mihome-vacuum.0 messagebox.system.adapter.mihome-vacuum.0 {"command":"cleanRooms","message":"enum.rooms.kitchen","from":"system.adapter.mihome-vacuum.0","_id
                                      mihome-vacuum.0	2020-01-17 20:06:25.040	debug	sendTo "cleanRooms" to system.adapter.mihome-vacuum.0 from system.adapter.mihome-vacuum.0: enum.rooms.kitchen
                                      mihome-vacuum.0	2020-01-17 20:06:24.979	debug	stateChange mihome-vacuum.0.rooms.multiRoomClean {"val":false,"ack":false,"ts":1579287984977,"q":0,"from":"system.adapter.admin.0","user":"system.user.admin","lc":1579287984977}
                                      mihome-vacuum.0	2020-01-17 20:06:24.978	debug	redis pmessage io.mihome-vacuum.0.* io.mihome-vacuum.0.rooms.multiRoomClean {"val":false,"ack":false,"ts":1579287984977,"q":0,"from":"system.adapter.admin.0","user":"system.user.admin","lc":15792879
                                      
                                      D 1 Reply Last reply Reply Quote 0
                                      • D
                                        dirkhe Developer @mumurik last edited by

                                        @mumurik hast du irgendwelche leeren mapindex, denen du einen Raum zugewiesen hast?
                                        Ich sollte das zwar abfangen, wollte aber zumindest wissen, was die Ursache ist

                                        1 Reply Last reply Reply Quote 0
                                        • D
                                          dirkhe Developer last edited by

                                          Ich habe gerade nochmal in den code geschaut. Ich fange das mittlerweile ab, kann das sein, dass du noch eine ältere Version hast?

                                          M 1 Reply Last reply Reply Quote 0
                                          • M
                                            mumurik @dirkhe last edited by

                                            @dirkhe sagte in Adapter mihome-vacuum anpassungen:

                                            Ich habe gerade nochmal in den code geschaut. Ich fange das mittlerweile ab, kann das sein, dass du noch eine ältere Version hast?

                                            nein, ich habe heute alles deinstalliert und die neueste Version gezogen.

                                            Einen leeren Mapindex habe ich nicht, ich zeig dir am besten, wie es bei mir aussieht:
                                            f6cb12fe-ee5e-47ce-8775-3bb58ac503b7-image.png

                                            "roomClean" in jedem Zimmer funktioniert einwandfrei, wenn ich diesen auf true setze, aber "multiCleanRoom" funktioniert weder mit einem einzigen zugewiesenen Raum noch mit mehreren Räumen.

                                            Was ich gerade getestet habe, auch der Timer funktionier nicht, für keinen Raum, egal welche ich auswähle...

                                            Kann es sein, dass ich bei der Raumzuordnung/Benennung irgendetwas falsch gemacht habe bzw. dort noch irgendetwas verkehrt läuft?

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            889
                                            Online

                                            31.6k
                                            Users

                                            79.4k
                                            Topics

                                            1.3m
                                            Posts

                                            adapter entwicklung raumreinigung roborock test vacuum zeitplan
                                            67
                                            511
                                            85676
                                            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