Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Zeit-Objekt als Trigger

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Zeit-Objekt als Trigger

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

      Wie ist es möglich in Blockly eine Zeit aus einem Objekt als Trigger zu verwenden?

      Ich möchte in Vis den Zeitplan meines iRobot Staubsaugers definieren können. Das Objekt per Vis zu definieren, so wie der Rest des Scripts ist kein Problem.

      Ich verstehe aber nicht, wie ich in Blockly eine Zeit (z.B. 13:12:00) aus dem Objekt als Cron übermitteln kann?!

      Die einzige Lösung die mir einfällt ist der Trigger auf jede Minute zu stellen und dann zu beginn des Scriptes überprüfen ob die aktuelle Zeit mit der definierten Zeit überein stimmt. Ist aber nicht so sauber, wenn das Script so 1440 Mal pro Tag gestartet wird für eine solch einfache Funktion.

      paul53 1 Reply Last reply Reply Quote 0
      • W
        wizzardking last edited by

        Konnte das Problem nun bereits selber lösen.

        Wenn als Trigger Cron ausgewählt wird, lässt sich ein Objekt als Cron verwenden.
        Das einzige "Problem" hierbei war, dass es nun ein weiteres Script und Objekt benötigt, welches die normale Zeit zu einem Cron-Format umwandelt.

        ACHTUNG: Das Objekt Mo1, welches bei dem angehängten Bild geändert wird, ist ein anderes Objekt, als welches hier getriggert wird und ebenfalls Mo1 benennt wurde (ja, etwas dumm, I know).

        Screenshot_3.png

        1 Reply Last reply Reply Quote 0
        • paul53
          paul53 @wizzardking last edited by

          @wizzardking Siehe hier.

          1 Reply Last reply Reply Quote 0
          • W
            wizzardking last edited by

            @paul53

            Vielen Dank für den Link zu Deinem Post. Dies ist tatsächlich die sauberere Lösung, da dies kein zusätzliches Objekt und Script benötigt. Leider funktioniert Deine Lösung bei mir aber nicht ganz so wie gedacht.

            1. Die Zeit im Objekt wird bei mir per Vis, in Form von einem Zeit-Widget Slider eingestellt. Dies hat zur Folge, wenn ich den Minuten Slider z.B. von 50 auf 56 verschiebe, registriert das Zeitobjekt kurzzeitig alle Schritte, abhängig von der Geschwindigkeit mit welcher ich den Slider verstelle.

            In meinem Fall habe ich den Slider zum testen von 20:50 auf 20:56 verstellt. Wie du dem angehängten Bild entnehmen kannst, wurde dadurch die Funktion "debug: test2" bei jedem Zwischenschritt, welches das Objekt registriert hatte, anschliessend auch noch einmal ausgelöst??!
            Eigentlich sollte dies doch die Stop Funktion verhindern?

            Download.png

            1. Wenn ich Deine Lösung richtig verstanden habe, so sehe ich ein Problem darin, wenn die Javascript Instanz, oder der komplette iobroker (bzw. mein NAS) neu gestartet wird. Das Script fängt mit dem Cronjob ja erst wieder an, wenn ich etwas am Zeitplan (Mo1 Objekt im Bild oben) verstelle?! Oder verstehe ich da etwas falsch?
            paul53 1 Reply Last reply Reply Quote 0
            • paul53
              paul53 @wizzardking last edited by paul53

              @wizzardking sagte:

              Das Script fängt mit dem Cronjob ja erst wieder an, wenn ich etwas am Zeitplan (Mo1 Objekt im Bild oben) verstelle?

              Ja, damit der Cronjob auch bei Skriptstart erzeugt wird, packe das Setzen der Variablen und den Zeitplan in eine Funktion und rufe diese Funktion sowohl bei Skriptstart als auch aus dem Trigger (nach stop schedule) auf.

              Das mehrfache Triggern kann man mit einem timeout verhindern:

              Blockly_SetCron.JPG

              1 Reply Last reply Reply Quote 0
              • W
                wizzardking last edited by

                @paul53 Vielen herzlichen Dank für Deine erneute Unterstützung!

                Da ich zuvor noch nie mit den Funktionen gearbeitet habe und ich Deinen Screenshot erst jetzt gerade sah (nachträglich noch eingefügt, oder war ich blind?) war ich gerade etwas beschäftigt mit dem Versuch dies richtig zu konfigurieren.

                Habs nun aber hinbekommen und scheint korrekt zu sein, wenn ich dies mit Deinem Beispiel vergleiche.

                Mit Deiner Lösung ist nun das Problem beim Script-Start gelöst, das wiederholte Aufrufen der Funktion aber leider nur teilweise.
                Mit Hilfe des Timeouts wird zwar der Cron nicht gleich beim verändern des Zeitobjektes gesetzt, sofern die Veränderung innerhalt des definierten Timeouts liegt, spätere Änderungen werden aber nicht mit der bisherigen überschrieben, sondern ergänzt.

                Wenn ich also um 10:00 das Zeitobjekt auf 14:30 einstelle, um 10:30 dies aber auf 14:45 korrigiere, so wird das Script sowohl um 14:30, als auch um 14:45 ausgeführt.

                Dies sollte aber eigentlich möglich sein zu verhindern, indem ich am Schluss den "falls, mache" Block einfüge und dort die Stunden und Minuten aus dem Zeitobjekt mit der aktuellen Zeit abgleiche. Das Script wird dann zwar dennoch gestartet, sollte so aber nichts ausführen und als workaround ausreichen.

                Da ich nun schon etwas müde bin, werde ich dies jedoch Morgen noch einmal in Ruhe anschauen.

                Vielen Dank noch einmal für Deine Hilfe!

                paul53 1 Reply Last reply Reply Quote 0
                • paul53
                  paul53 @wizzardking last edited by paul53

                  @wizzardking sagte:

                  Wenn ich also um 10:00 das Zeitobjekt auf 14:30 einstelle, um 10:30 dies aber auf 14:45 korrigiere, so wird das Script sowohl um 14:30, als auch um 14:45 ausgeführt.

                  Um das zu vehindern, ist stop schedule im Trigger eingebaut. Es kann aber ein Problem geben, wenn eine Funktion (schedule()) den gleichen Bezeichner hat wie eine Variable. Deshalb benenne die Variable schedule mal um in z.B. schedMo1.

                  1 Reply Last reply Reply Quote 0
                  • W
                    wizzardking last edited by wizzardking

                    @paul53 Das habe ich eigentlich auch eingebaut, schein aber nicht zu funktionieren.

                    Screenshot_8.png

                    1 Reply Last reply Reply Quote 0
                    • W
                      wizzardking last edited by

                      @paul53

                      Bei den hier Rot markierten Stellen habe ich "Wert von Objekt ..." genommen, anstelle direkter Werte wie in Deinem Besipiel.
                      Habe ich dort evtl. etwas missverstanden?

                      Screenshot_9.png

                      paul53 1 Reply Last reply Reply Quote 0
                      • paul53
                        paul53 @wizzardking last edited by

                        @wizzardking:

                        habe ich "Wert von Objekt ..." genommen

                        Wenn Du innerhalb der Funktion "Wert von Objekt" verwendest, sollte der Übergabeparameter uhrzeit entfallen, denn er ist dann überflüssig.

                        1 Reply Last reply Reply Quote 0
                        • W
                          wizzardking last edited by

                          @paul53

                          Demnach müsste dies so korrekt sein?

                          Download (1).png

                          Was ich aber leider noch immer nicht verstehe, ist was das für einen Block mit dem Inhalt "Wert" ist, welchen du bei Dir eingefügt hast und ich nun im Bild mit den ???? ersetzt habe. (sry, falls ich hier etwas Begriff stutzig bin)

                          paul53 1 Reply Last reply Reply Quote 0
                          • paul53
                            paul53 @wizzardking last edited by paul53

                            @wizzardking sagte:

                            Block mit dem Inhalt "Wert"

                            Unter Blöcke Trigger

                            Blockly_DP_Props.JPG

                            Ändere bitte den Variablenbezeichner von schedule !

                            W 1 Reply Last reply Reply Quote 0
                            • W
                              wizzardking @paul53 last edited by

                              @paul53 said in Zeit-Objekt als Trigger:

                              Ändere bitte den Variablenbezeichner von schedule !

                              Nice!!
                              Nach dem umbenennen musst ich auch die stop funktion neu zuweisen, da diese bei "schedule" blieb.
                              Scheint nun perfekt zu funktionieren.

                              Vielen Dank für Deine Geduld. Bin ich mir aus einem Forum so nicht gewohnt 😉

                              paul53 1 Reply Last reply Reply Quote 0
                              • paul53
                                paul53 @wizzardking last edited by paul53

                                @wizzardking Wenn mehrere Cronjobs in einem Skript erzeugt werden sollen, kann man es etwa so machen:

                                Blockly_SetCron.JPG

                                Die Funktionen Mo1() und Mo2() sind erforderlich, weil Blockly es nicht zulässt, den gleichen Cronjob zweimal (Skriptstart / Trigger) zu erzeugen.

                                S 1 Reply Last reply Reply Quote 0
                                • S
                                  Stefan Hanke @paul53 last edited by

                                  Hallo zusammen,

                                  ich habe das gleiche Problem wie @wizzardking mein cron-job läuft nach Änderung der Zeiten mehrfach.
                                  Und obwohl ich diesen Post jetzt gefühlt 100x gelesen habe, checke ich die Lösung nicht, vielleicht kann mir hier jemand "ein Licht ans Rad schrauben"...?
                                  😉

                                  Bei mir geht es um eine Bewässerung die zu bestimmten änderbaren Uhrzeiten laufen soll. Dazu habe ich in der VIS zwei Eingabe-Felder die mir die Start-Stund und die Start-Stund in 2 Datenpunkte schreiben, diese sollen dann vom cron-job übernommen werden. Das funktioniert soweit auch wie gewünscht.
                                  Nun habe ich in diesem Post gelernt, dass man den Job vorher stoppen muss um ihm dann die neuen Zeit einlesen zu lassen - das leuchtet mir auch ein.

                                  Wenn ich aber den "Stop" vor den cron-job setze, (im screenshot wieder/noch deaktiviert), bekomme ich aber eine Fehlermeldung.
                                  Kann mir jemand den Weg weisen, an welcher Position muss in den alten cron-job stoppen damit der Neue korrekt eingelesen werden kann ?
                                  @paul53 ich setze ganz stark auf Dich, Du scheinst hier den Durchblick zu haben...
                                  😉

                                  Danke schon mal an der Stelle,
                                  viele Grüße,
                                  Stefan.

                                  javascript - ioBroker 2020-10-15 16-33-51.jpg

                                  Bildschirmfoto 2020-10-15 um 16.35.38.jpg

                                  F 1 Reply Last reply Reply Quote 0
                                  • F
                                    fastfoot @Stefan Hanke last edited by

                                    @Stefan-Hanke Entferne das Leerzeichen im Namen des Zeitplans. Das Stop dann neu wählen damit er den geänderten Namen nimmt

                                    S 1 Reply Last reply Reply Quote 0
                                    • S
                                      Stefan Hanke @fastfoot last edited by

                                      Guten Morgen !
                                      So wie es aussieht, war es das tatsächlich - ein Leerzeichen !

                                      😳😳😳

                                      Ich habe damit beim Aktivieren von "Stop" kein Fehler mehr im log, jetzt beobachte ich das mal den Tag über, mal sehen ob der Rasen trocken bleibt.
                                      Zumindest was die von mir verursachte Nässe angeht, Regen kommt ja wahrscheinlich sowieso...
                                      😉

                                      @fastfoot Vielen herzlichen Dank schon mal an der Stelle...
                                      👍👍👍

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

                                        Hallo zusammen,

                                        ich möchte noch ein kurzes Feedback da lassen, es war tatsächlich das Leerzeichen im Namen des cron-jobs. Habe jetzt die letzten beiden Tage die Startzeiten gefühlt hundert mal geändert, das Programm lief jeweils nur einmal wie geplant durch.

                                        @fastfoot : nochmals vielen Dank für Deine Hilfe !
                                        👍👍👍

                                        Viele Grüße,
                                        Stefan

                                        F 1 Reply Last reply Reply Quote 0
                                        • F
                                          fastfoot @Stefan Hanke last edited by

                                          @Stefan-Hanke sagte in Zeit-Objekt als Trigger:

                                          es war tatsächlich das Leerzeichen im Namen

                                          man sollte eigentlich nie Leerzeichen oder Sonderzeichen in Namen oder Variablen verwenden. Iobroker wandelt die zwar in Unterstriche um, jedoch wurde das wohl im Stop nicht gemacht, deshalb der Fehler. In Github existiert ein issue dazu, sollte also irgendwann auch funktionieren

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

                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          957
                                          Online

                                          31.6k
                                          Users

                                          79.6k
                                          Topics

                                          1.3m
                                          Posts

                                          blockly
                                          4
                                          19
                                          3640
                                          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