Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Roborock 1x am Tag starten

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Roborock 1x am Tag starten

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

      Hallo,

      ich will den Roborock automatisiert starten lassen, wenn wir aus dem Haus sind und dies nur, wenn er noch nicht gelaufen ist.

      Nun wollte ich diese Regel anwenden:
      6072_2018-08-17_23_18_10-javascript_-_iobroker.png

      Aber hierin scheint ein Fehler zu stecken. Wie frage ich denn ab, dass das letzte Änderungsdatum nicht dem heutigen Tag entspricht? Oder wie kann ich das JSON Format sogar auslesen? Da stehen tabellarisch alle Reinigungsvorgänge mit Datum und Uhrzeit gelistet drin.

      1 Reply Last reply Reply Quote 0
      • M
        maxpd last edited by

        Hier noch 2 weitere Screenshots. Einmal noch der ergänzte Trigger und einmal der Aufbau der JSON.

        6072_2018-08-20_11_07_11-.png 6072_2018-08-20_11_05_04-javascript_-_iobroker.png

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

          Mit diesem Script versucht mein Xiaomi Roboter V1 jeden Tag ( außer Sonntag ) um 13:30 Uhr zu starten.

          Falls mein Handy im WLAN ist bekomme ich eine Nachricht auf mein Handy, dass der Staubsauger in 30 minuten nocheinmal versucht zu starten.

          Nach 3 Versuchen gibt er dann auf und probiert es den nächsten Tag wieder.

          Ich habe oben alle Einstellungen gekennzeichnet und beschrieben. Falls Fragen dazu da sind dann einfach raus damit.

          In der ersten Zeile musst du vielleicht noch die Startzeit anpassen.

          30 = minuten

          13 = stunden

          1-6 = tage ( Mo - Sa )

          Montag bis Freitag um 16 Uhr wäre dann z.B.: "0 16 * * 1-5"

          schedule("30 13 * * 1-6", function () {
          
              /*
               *
               *   Einstellungen
               *   vvvvvvvvvvvvv
               */
          
              // Handy über das WLAN vom TR64 Adapter checken
              var aktiv = getState("tr-064.0.devices.OnePlus-6.active").val;
          
              // Zeit in Stunden zwischen den Versuchen
              var zeit = 0.5;
          
              // Anzahl der Versuche die durchgeführt werden sollen
              var versuche = 3;
          
              // Staubsauger State
              var vacuum = "mihome-vacuum.0.control.start";
          
              // Telegram Nachricht aktivieren? dann auf 'true' ändern
              var telegram = false;
          
              /*
               *   ^^^^^^^^^^^^^^^^^^
               *   Einstellungen Ende
               *
               */
          
              // ab hier muss eigentlich nichts geändert werden
              timeout(versuche, zeit);
          
              function timeout(versuche, sec) {
                  retry(1, versuche, sec);
              }
          
              function retry(n,n2,n3){
                  var sec = n3*1000*3600;
          
                  if(aktiv){
                      if(n == n2){
                          if(telegram){
                              sendTo("telegram.0", "send", {
                                  text: 'Staubsauger konnte nach ' + (n2) + ' Versuchen nicht gestartet werden.'
                              });
                          }
                      } else {
                          if(telegram){
                              sendTo("telegram.0", "send", {
                                  text: 'Versuch Nr. ' + (n) + ' von ' + n2 + ' den Staubsauger zu starten. Versuche in ' + (n3*60) + ' Min. nochmal.'
                              });
                          }
                          n++;
                          setTimeout(function () {
                              retry(n, n2, n3);
                          }, sec);
                      }
          
                  } else {
                      // Staubsauger starten
                      setState(vacuum, true);
                      if(telegram){
                          sendTo("telegram.0", "send", {
                              text: 'Sir Saug-A-Lot beginnt seinen Dienst.'
                          });
                      }
                  }
          
              }
          
          });
          
          
          Fruity 1 Reply Last reply Reply Quote 0
          • M
            maxpd last edited by

            Danke Night2k5 für deinen Vorschlag,

            bei mir ist lediglich das Problem offen, dass er nur 1x am Tag fahren und das anhand seiner Cleaning History festmachen soll.

            Aber irgendwie zieht das nicht so wie im obigen Screenshot angedacht war.

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

              @maxpd:

              Aber hierin scheint ein Fehler zu stecken. Wie frage ich denn ab, dass das letzte Änderungsdatum nicht dem heutigen Tag entspricht? `
              Du vergleichst eine Zahl (letzte Änderung, die als ms seit 1.1.1970 codiert wird) mit einer Zeichenkette, in der nur der aktuelle Tag steht. Das kann so nicht klappen.

              Es dürfte gehen, wenn du die letzte Änderung ebenfalls als Zeichenkette formatierst, auf die gleiche Weise wie das aktuelle Datum. Und das dann vergleichen.

              1 Reply Last reply Reply Quote 0
              • J
                Jan1 last edited by Jan1

                Da habe ich auch was für meinen Vorwerk, was so ziemlich Deinem Wunsch entspricht. Bei mir läuft der allerdings nur 3 mal die Woche Mo, Mi und Fr. Rreicht völlig aus beim Vorwerk, da der ne sehr gute Navigation hat und eine Stelle nur einmal saugt und erst fertig ist, wenn wirklich alles gesaugt wurde.

                Das Blockly ist sehr einfach und eigentlich selbsterklärend. Der DP "Anwesenheit", wird über ein extra Script, den tr-064 Adapter und WLAN Erkennung der Handys gesetzt.

                Grundsteuerung wenn keiner da, dann mach sauber, sonst setzte Variable "Reinigung_ausstehend"
                5076_1.png

                Start der ausstehenden Reinigung, wenn niemand mehr da ist
                ae7e8ac0-39bc-443f-a095-35c5298db95c-grafik.png

                Falls er mal manuell gestartet wurde und er noch ne ausstehende Reinigung hätte, wird das zurückgesetzt, damit er nicht 2 mal läuft (optional) (Aktion = 6 ist ein DP des VR200 und steht für gerade gereinigt)
                384217d4-a3f5-4487-86a9-28c928cd66f5-grafik.png

                Das Telegramm entfällt bei mir, da ich das über die Vorwerk APP eh auf's Handy bekomme 😉

                M 1 Reply Last reply Reply Quote 0
                • M
                  maxpd last edited by

                  Hallo Jan, ja das kommt dem ganzen schon nahe.

                  Dann werde ich es auch so über eine Variable lösen.

                  Ich dachte ich könnte mir die zusätzliche Logik sparen.

                  Wie man die Millisekunden in Zeit umwandelt, weiß ich nämlich nicht 😉

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

                    @maxpd:

                    Wie man die Millisekunden in Zeit umwandelt, weiß ich nämlich nicht 😉 `

                    Wie wäre es mit diesem Block? https://github.com/ioBroker/ioBroker.ja … -to-string

                    In den Ausschnitt fügst du einfach "Letzte Änderung von ... " ein. Dann das Ergebnis davon mit der formatierten aktuellen Zeit (wie du es bereits hast) vergleichen.

                    P.S. Millisekunden sind Zeit sind Zahlen, du darfst nur nicht Zahlen mit Zeichenketten in einem ganz anderen Format vergleichen

                    1 Reply Last reply Reply Quote 0
                    • J
                      Jan1 last edited by

                      @maxpd:

                      Hallo Jan, ja das kommt dem ganzen schon nahe.

                      Dann werde ich es auch so über eine Variable lösen.

                      Ich dachte ich könnte mir die zusätzliche Logik sparen.

                      Wie man die Millisekunden in Zeit umwandelt, weiß ich nämlich nicht 😉 `

                      Warum willst denn überhaupt was mit der Zeit in Deinem Script anstellen? Die Aufgaben Stellung war doch das Ding einmal am Tag los zuschicken, wenn keiner da ist und das kannst doch über den Zeitplan wie in meinem ersten Bild anpassen.

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

                        @Jan1:

                        Die Aufgaben Stellung war doch das Ding einmal am Tag los zuschicken, wenn keiner da ist […] `
                        und das Teil noch nicht manuell gestartet wurde!
                        @maxpd:

                        und dies nur, wenn er noch nicht gelaufen ist. `
                        Und dafür muss man wissen, ob er am jeweiligen Tag schon gelaufen ist. Deine Lösung ist vermutlich flexibler, über die Zeit ist es aber ein "Einzeiler".

                        1 Reply Last reply Reply Quote 0
                        • J
                          Jan1 last edited by

                          Ja dass das nix großartiges ist, ist klar. Bei mir frage ich einfach die Action 6 ab, dann weiß ich ob der lief 😉

                          1 Reply Last reply Reply Quote 0
                          • M
                            maxpd last edited by

                            Also mit der Variante funktionierts immer noch nicht.
                            6072_2018-09-07_22_12_43-javascript_-_iobroker.png

                            1 Reply Last reply Reply Quote 0
                            • M
                              maxpd last edited by

                              Also die Variante mit Datum der History auslesen bekomme ich nicht hin.

                              Nun habe ich es versucht mit der Variable, aber auch das funktioniert nicht. Wie kann ich die Variable auslesen, bzw. initial befüllen?

                              Bis nach der Falls Regel mit der Uhrzeit klappt alles.

                              6072_2018-09-23_21_53_16-javascript_-_iobroker.png

                              1 Reply Last reply Reply Quote 0
                              • M
                                matschkopf @Jan1 last edited by

                                @Jan1
                                Gutes, einfaches Skript.
                                Leider fehlt der der letzte Block (falls manuell gestartet wurde), hier ist ein falsches Bild zugeordnet (BlitzWolf Steckdose). Kannst du das richtige nochmal posten?

                                Danke.
                                Micha

                                J 1 Reply Last reply Reply Quote 0
                                • J
                                  Jan1 @matschkopf last edited by

                                  @matschkopf
                                  Ist ja lustig, da war mal das richtige drin. Habs geändert und auch gleich noch ein Fehler entfernt.

                                  M 1 Reply Last reply Reply Quote 1
                                  • M
                                    matschkopf @Jan1 last edited by

                                    @Jan1
                                    Super, vielen Dank.

                                    Ich war mir vorher nicht ganz sicher, aber jetzt mit dem Screenshot sehe ich, dass du tatsächlich die Bedingung Action ="6" abfragst.
                                    Habe eben mal eine manuelle Reinigung dgf. und den DP geloggt:
                                    vr200_log.jpg

                                    Bei mir geht er auf "4", wenn die Reinigung beendet ist.
                                    Es scheint bei dir ja seit mehr, als einem Jahr zu funktionieren...trotz dessen merkwürdig 🤓

                                    J 1 Reply Last reply Reply Quote 0
                                    • Fruity
                                      Fruity @Night2k5 last edited by

                                      @Night2k5 sagte in Roborock 1x am Tag starten:

                                      Mit diesem Script versucht mein Xiaomi Roboter V1 jeden Tag ( außer Sonntag ) um 13:30 Uhr zu starten.

                                      Falls mein Handy im WLAN ist bekomme ich eine Nachricht auf mein Handy, dass der Staubsauger in 30 minuten nocheinmal versucht zu starten.

                                      Nach 3 Versuchen gibt er dann auf und probiert es den nächsten Tag wieder.

                                      Ich habe oben alle Einstellungen gekennzeichnet und beschrieben. Falls Fragen dazu da sind dann einfach raus damit.

                                      In der ersten Zeile musst du vielleicht noch die Startzeit anpassen.

                                      30 = minuten

                                      13 = stunden

                                      1-6 = tage ( Mo - Sa )

                                      Montag bis Freitag um 16 Uhr wäre dann z.B.: "0 16 * * 1-5"

                                      schedule("30 13 * * 1-6", function () {
                                      
                                          /*
                                           *
                                           *   Einstellungen
                                           *   vvvvvvvvvvvvv
                                           */
                                      
                                          // Handy über das WLAN vom TR64 Adapter checken
                                          var aktiv = getState("tr-064.0.devices.OnePlus-6.active").val;
                                      
                                          // Zeit in Stunden zwischen den Versuchen
                                          var zeit = 0.5;
                                      
                                          // Anzahl der Versuche die durchgeführt werden sollen
                                          var versuche = 3;
                                      
                                          // Staubsauger State
                                          var vacuum = "mihome-vacuum.0.control.start";
                                      
                                          // Telegram Nachricht aktivieren? dann auf 'true' ändern
                                          var telegram = false;
                                      
                                          /*
                                           *   ^^^^^^^^^^^^^^^^^^
                                           *   Einstellungen Ende
                                           *
                                           */
                                      
                                          // ab hier muss eigentlich nichts geändert werden
                                          timeout(versuche, zeit);
                                      
                                          function timeout(versuche, sec) {
                                              retry(1, versuche, sec);
                                          }
                                      
                                          function retry(n,n2,n3){
                                              var sec = n3*1000*3600;
                                      
                                              if(aktiv){
                                                  if(n == n2){
                                                      if(telegram){
                                                          sendTo("telegram.0", "send", {
                                                              text: 'Staubsauger konnte nach ' + (n2) + ' Versuchen nicht gestartet werden.'
                                                          });
                                                      }
                                                  } else {
                                                      if(telegram){
                                                          sendTo("telegram.0", "send", {
                                                              text: 'Versuch Nr. ' + (n) + ' von ' + n2 + ' den Staubsauger zu starten. Versuche in ' + (n3*60) + ' Min. nochmal.'
                                                          });
                                                      }
                                                      n++;
                                                      setTimeout(function () {
                                                          retry(n, n2, n3);
                                                      }, sec);
                                                  }
                                      
                                              } else {
                                                  // Staubsauger starten
                                                  setState(vacuum, true);
                                                  if(telegram){
                                                      sendTo("telegram.0", "send", {
                                                          text: 'Sir Saug-A-Lot beginnt seinen Dienst.'
                                                      });
                                                  }
                                              }
                                      
                                          }
                                      
                                      });
                                      
                                      

                                      Hey Danke für diesen Script. Ich habe das Problem wenn ich ein zweites Gerät hinzufüge das er nur eins von beiden beachtet. Wie füge ich denn eine Regel hinzu, sodass er nur startet wenn beide Personen nicht anwesend sind?

                                      Lg Michel

                                      1 Reply Last reply Reply Quote 0
                                      • J
                                        Jan1 @matschkopf last edited by

                                        @matschkopf sagte in Roborock 1x am Tag starten:

                                        @Jan1
                                        Super, vielen Dank.

                                        Ich war mir vorher nicht ganz sicher, aber jetzt mit dem Screenshot sehe ich, dass du tatsächlich die Bedingung Action ="6" abfragst.
                                        Habe eben mal eine manuelle Reinigung dgf. und den DP geloggt:
                                        vr200_log.jpg

                                        Bei mir geht er auf "4", wenn die Reinigung beendet ist.
                                        Es scheint bei dir ja seit mehr, als einem Jahr zu funktionieren...trotz dessen merkwürdig 🤓

                                        Kann sogar sein, dass die 6 bei mir falsch ist, da ich sehr selten manuell starte und das wohl nicht merke. Muss ich mal checken. Irgendwie muss ich ja mal drauf gekommen sein und das ist schon länger her 😊

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

                                        Support us

                                        ioBroker
                                        Community Adapters
                                        Donate

                                        767
                                        Online

                                        31.7k
                                        Users

                                        79.6k
                                        Topics

                                        1.3m
                                        Posts

                                        6
                                        18
                                        1832
                                        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