Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Roborock S5 "cleaning area" per Tastendruck?

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Roborock S5 "cleaning area" per Tastendruck?

    This topic has been deleted. Only users with topic management privileges can see it.
    • K
      kaiserm @Stoni last edited by

      @Stoni Die Karte ist gespeichert, sollte also nicht mehr neu aufegabut werden.

      Ich will von den Szenen weg.

      Ich realisiere wohl alles direkt mit Blockly.

      LG Martin

      1 Reply Last reply Reply Quote 0
      • K
        kaiserm last edited by

        Ich bin begeistert.

        Unser S50 ist nun voll per Sprache bedienbar.

        Er fährt zum Mülleimer, reinigt alles oder auch nur bestimmte Räume, macht ein Päuschen, fährt zurück zur Ladestation.

        iobroker rockt.

        LG Martin

        1 Reply Last reply Reply Quote 0
        • 0
          0018 @Brati last edited by

          @Brati sagte in Roborock S5 "cleaning area" per Tastendruck?:

          Einstellungen/ Staubsaugereinstellungen/ Kartenspeichermodus on/off

          Ich habe aber die russische App, sollte in der Chinaversion jedoch genauso sein. Das geht erst, wenn einmal die Karte aufgebaut wurde. Danach bleibt sie immer so erhalten.

          Meinst du MiHome App oder Flole VAC?
          Habe bei mir Valetudo drauf, geht das dann trotzdem?

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

            @0018 Wenn du Valetudo hast, is die Karte egal. Mein Skript oben erkennt die Orientierung und dreht die Koordinaten entsprechend.

            0 1 Reply Last reply Reply Quote 0
            • 0
              0018 @AlCalzone last edited by

              @AlCalzone Mal angenommen ich habe den Sauger durch meine Wohnung geschickt und habe dann eine komplette Karte aus der ich die Koordinaten für die Bereichsreinigung ziehen kann. Was ist denn wenn ich den Sauger dann mal per Knopfdruck am Gerät starten will? Dann generiert er doch eine neue Karte und die Bereichkoordinaten sind hinüber oder? Kann man das vermeiden?

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

                @0018 Nein, die Koordinaten stimmen immer noch.

                Die Karte dreht sich beim Sauger der 1. Generation gerne, aber mein Skript erkennt dank Valetudo automatisch die Rotation und rechnet die Koordinaten entsprechend um.

                0 1 Reply Last reply Reply Quote 0
                • 0
                  0018 @AlCalzone last edited by

                  @AlCalzone Ist es egal wie die Karte steht, wenn ich meine Koordinaten für die Raumzuweisung definiere?

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

                    @0018
                    Siehe Skript:

                    // Koordiaten zählen von unten links (0,0) nach oben rechts (51200,51200)
                    // Die folgenden Koordinaten gehen von nicht rotierter Karte (Winkel 0) aus
                    

                    Winkel 0 heißt "Robo links vom Dock". Wenn das bei dir anders ist, müsstest du in Zeile 119ff die Interpretation der Winkel ändern. Beispiel: Sauger steht bei dir normalerweise rechts, dann 180 => 0, 270 => 90, 90 => 270, 0 => 180.

                    0 1 Reply Last reply Reply Quote 0
                    • M
                      Mor9oth @kaiserm last edited by

                      @kaiserm Hey! Vielen Dank für das Blocky! Finde ich eine tolle Funktion! Habe ich gestern auch mal direkt nachgebaut, allerdings funktioniert es bei mir leider nicht. 😞 Jetzt hoffe ich hier auf etwas Hilfe ...
                      Im Protokoll kommt die Meldung:

                      09:35:03.244	info	javascript.0 (1571) Start javascript script.js.common.Leere_den_Staubbehälter
                      09:35:03.247	info	javascript.0 (1571) script.js.common.Leere_den_Staubbehälter: registered 1 subscription and 0 schedules
                      

                      Der Roborock fährt weder los noch gibt die Alexa den Speak-Befehl aus. Allerdings gibt Sie als Antwort auf meine Spracheingabe die Bestätigung "ok" bzw. den "Pieps" aus.

                      Das Blocky scheint mir identisch nachgebaut zu sein. Aus folgenden Pfaden kommen die Variabeln:

                      • summary: Alexa2/0/History/summary

                      • speak: Alexa2/0/Echo-Devices/Geräte-NUMMER/Commands/speak

                      • go to Point: Mihome-vacuum/0/control/goto

                      • Die Koordianten kommen aus Flolevac (Vgl. @AlCalzone )

                      Screenshot Blocky mit Protokoll:
                      blocky-staubbehälter-leeren.jpg

                      Oder muss ich noch etwas ganz anderes machen, bzw. haben damit das Script überhaupt funktioniert? Bin leider ein Noob, daher komme ich leider nicht weiter ...

                      Was ich auch noch probiert habe: Ich habe dem Script einen "smartName" gegeben, damit dieses im Cloud-Adapter als "Smart Gerät" auftaucht und dann in den Alexa-Routinen per Sprachsteuerung integrierbar wird. Auch um synonyme Befehle definieren zu können. Ist das richtig, bzw. notwendig mit dem Blocky-Script? Immerhin ist doch der speak-Befehl eine Bedingung im Script ...

                      Könnte mir bitte jemand helfen?

                      1 Reply Last reply Reply Quote 0
                      • M
                        Mor9oth @AlCalzone last edited by

                        @AlCalzone Sauber! Das Script funktioniert nun auch bei mir hervorragend! Besten Dank! 😊 👏

                        1 Reply Last reply Reply Quote 0
                        • 0
                          0018 @AlCalzone last edited by 0018

                          @AlCalzone sagte in Roborock S5 "cleaning area" per Tastendruck?:

                          @kaiserm Also wie versprochen:

                          Muss als TypeScript angelegt werden und benötigt das zusätzliche Paket "axios":

                          Bekomme bei mir folgende Meldung:

                          javascript.0	2019-12-07 00:24:41.947	warn	ERROR: Cannot find module 'axios'.
                          javascript.0	2019-12-07 00:24:41.947	warn	^
                          javascript.0	2019-12-07 00:24:41.947	warn	import axios from "axios";
                          javascript.0	2019-12-07 00:24:41.947	warn	(2094) script.js.common.4_MiRobot.MiRobot_Zone_neu: TypeScript compilation had errors:
                          

                          Habe im JS Instanz das Paket axios hinzugefügt, aber die Meldung kommt trotzdem noch. Muss ich das noch irgendwo anders eintragen?

                          Gibt es einen Grund warum der Sauger erst zu einem Spot fährt, bevor die Zonenreinigung startet?

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

                            @0018 sagte in Roborock S5 "cleaning area" per Tastendruck?:

                            Habe im JS Instanz das Paket axios hinzugefügt, aber die Meldung kommt trotzdem noch. Muss ich das noch irgendwo anders eintragen?

                            Ich bin mir nicht sicher, ob der aktuelle Adapter damit schon released ist. Wenn es die Option "Activate syntax help for these npm modules:" gibt, trag da auch noch axios ein. Ansonsten folgende Zeile über den Import schreiben:

                            // @ts-ignore
                            

                            Gibt es einen Grund warum der Sauger erst zu einem Spot fährt, bevor die Zonenreinigung startet?

                            Ja, das ist leiser als wenn er im Reinigungs-Modus in die Zone fährt.

                            1 Reply Last reply Reply Quote 0
                            • M
                              Mor9oth @AlCalzone last edited by

                              Hey @AlCalzone kann man dein Script denn auch so anpassen/erweitern, dass es zusätzlich zu den Räumen auch Positionen gibt, die nur angefahren werden könnten? Um z.B. den Staubbehälter vor dem Mülleimer leeren zu können? "Fahre Staubsauger zum Mülleimer"
                              Zudem wäre es denke ich auch interessant wenn man die Saugstufen in Abhängigkeit machen könnten. Im Bad könnte ich beispielsweise immer eine starke Stufe vertragen da hier unser Katzenklo steht. Oder kann man es in Abhängikeit vom Raum so einstellen, dass der ZoneCleanup auch mehrfach ausgeführt wird? Über ein paar Scripterweiterungen würde ich micht mega freuen 🙂

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

                                @Mor9oth Gute Ideen. Eventuell komme ich morgen dazu - aber keine Garantie!

                                M 1 Reply Last reply Reply Quote 0
                                • M
                                  Mor9oth @AlCalzone last edited by

                                  @AlCalzone Freut mich sehr 👍

                                  1 Reply Last reply Reply Quote 0
                                  • 0
                                    0018 @AlCalzone last edited by

                                    @AlCalzone sagte in Roborock S5 "cleaning area" per Tastendruck?:
                                    Beispiel: Sauger steht bei dir normalerweise rechts, dann 180 => 0, 270 => 90, 90 => 270, 0 => 180.

                                    Ja genau, mein Sauger steht rechts vom Dock. Habe jetzt nachdem ich die Daten angepasst habe, leider das Problem das meine Bereiche nicht mehr mit den Koordinaten aus der Valetudo Map
                                    übereinstimmen. Muss ich hier auch noch was drehen? Den die Zonenkordination sind ja dann auch gedreht oder?

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

                                      @0018 Inwiefern stimmt es nicht mehr überein?

                                      0 1 Reply Last reply Reply Quote 0
                                      • 0
                                        0018 @AlCalzone last edited by 0018

                                        @AlCalzone Damit das ganze besser zu erklären ist hier mit Screenshots.

                                        1. So sieht meine Karte in Valetudo und die dazugehörigen Koordinaten der Zone1 aus:
                                          Karte Valetudo

                                        2. Aus meiner Sicht steht mein Robo rechts vom Dock, daher folgende Anpassung deines Scriptes:

                                        const rooms: Record<string, Rectangle[]> = {
                                            "Test": [[26397, 22791, 29302, 24138]],
                                        };
                                        

                                        ab Zeile 119:

                                            // Valetudo zählt von oben links nach unten rechts, d.h. die Y-Koordinaten
                                            // sind entgegengesetzt der mathematischen Definition
                                            let c2r = [robot[0] - charger[0], charger[1] - robot[1]];
                                            const angle = Math.atan2(c2r[1], c2r[0]) * 180 / Math.PI;
                                            log("angle = " + angle);
                                            if (angle <= 45 && angle >= -45) {
                                                log("Sauger steht rechts");
                                                return 0;
                                            } else if (angle > 45 && angle < 135) {
                                                log("Sauger steht oben");
                                                return 90;
                                            } else if (angle < -45 && angle > -135) {
                                                log("Sauger steht unten");
                                                return 270;
                                            } else {
                                                return 180;
                                            }
                                        }
                                        
                                        1. Wenn ich dann die Zonnenreinigung starte, sieht das auf der Vaeltuda Map dann wie folgt aus:
                                          Robot180

                                        2. Als test mal mit dem Standard:

                                            // Valetudo zählt von oben links nach unten rechts, d.h. die Y-Koordinaten
                                            // sind entgegengesetzt der mathematischen Definition
                                            let c2r = [robot[0] - charger[0], charger[1] - robot[1]];
                                            const angle = Math.atan2(c2r[1], c2r[0]) * 180 / Math.PI;
                                            log("angle = " + angle);
                                            if (angle <= 45 && angle >= -45) {
                                                log("Sauger steht rechts");
                                                return 180;
                                            } else if (angle > 45 && angle < 135) {
                                                log("Sauger steht oben");
                                                return 270;
                                            } else if (angle < -45 && angle > -135) {
                                                log("Sauger steht unten");
                                                return 90;
                                            } else {
                                                return 0;
                                            }
                                        }
                                        

                                        ergibt folgendes Ergebniss:
                                        Robot0

                                        Habe auch schon 90 + 270 probiert, leider auch ohne Erfolg.
                                        Im Script habe ich mal den Angle mit geloggt und bei den Versuchen kommt immer ähnliches raus....

                                        javascript.0	2019-12-09 21:12:16.299	info	(2094) script.js.common.4_MiRobot.MiRobot_Zone_neu: angle = -2.981461219982192
                                        javascript.0	2019-12-09 21:06:13.153	info	(2094) script.js.common.4_MiRobot.MiRobot_Zone_neu: angle = 2.8912695962205643
                                        javascript.0	2019-12-09 20:56:30.228	info	(2094) script.js.common.4_MiRobot.MiRobot_Zone_neu: angle = -1.461310090881229
                                        

                                        Vielleicht siehst du ja auf Anhieb woran es liegt?

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

                                          @0018 sagte in Roborock S5 "cleaning area" per Tastendruck?:

                                          Vielleicht siehst du ja auf Anhieb woran es liegt?

                                          Auf dem 1. Bild im Dock sieht es für mich so aus als zeigt der Sauger nach links, d.h. Winkel 0°. Hast du die Koordinaten direkt aus Valetudo? Dann müssen ggf. die Y-Koordinaten aller Zonen invertiert werden, da Valetudo anscheinend anders zählt als der Sauger selbst:

                                          y(für Skript) = 51200 - y(Valetudo)
                                          
                                          0 1 Reply Last reply Reply Quote 0
                                          • 0
                                            0018 @AlCalzone last edited by

                                            @AlCalzone Ja, die Koordinaten sind direkt aus Valetudo unter http://IPdesSaugers/zone
                                            Habe jetzt die Y-Koordinaten nach Vorgabe umgerechnet und jetzt stimmen die Zonen überein.
                                            Der Tipp mit

                                            // @ts-ignore 
                                            

                                            hat auch funktioniert. Scheint also auf den ersten Blick erstmal alles zu passen. Ich werde es jetzt die nächsten Wochen mal testen.

                                            Vielen Dank!

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            606
                                            Online

                                            31.6k
                                            Users

                                            79.6k
                                            Topics

                                            1.3m
                                            Posts

                                            javascript
                                            9
                                            57
                                            7615
                                            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