NEWS
zeitabhängig triggern: Scheduler oder zyklische Abfrage?
-
Moin zusammen,
ich hab mal eine generelle Frage für die Runde, weil ich mir wegen der Thematik immer wieder Extra-Arbeit mache.
Folgendes Szenario: ich möchte zu einer bestimmten Uhrzeit etwas triggern, "Rollladen runter" meinetwegen.
Es geht hierbei nicht um das "wie", sondern die Frage was praktikabler ist im Bezug auf die Auslastung des Brokers.Nahmen wir mal an ich habe 5 oder mehr Timer für verschiedene Geräte und Systeme, dann müsste ich entweder minütlich einen Script (pro Timer) laufen lassen der entsprechend auf die aktuelle Uhrzeit gegen die gesetzte Zeit checkt und dann ggf. etwas auslöst.
Der andere Ansatz den ich momentan verfolge ist eine Cronregel, die ich dynamisch per VIS etc. ändern und steuern kann. Der Hintergedanke: ich muss das System nicht minütlich mit Abfragen befeuern sondern setzte einmalig den gewünschten Wert für den Job. Der Aufwand für ein solches Script ist jedoch ungleich höher (2 Scripte, verschiedene Objekte, Neustart, usw.).
Die Frage: wie stark fällt ein kleines Script (erste Variante) ins Gewicht wenn es minütlich abgefragt wird, Werte ausliest usw. - lohnt der Aufwand den ich betreibe überhaupt?
Ich füge hier mal noch ein Bild der 2. Variante ein, damit es vll. etwas deutlicher wird.
Evtl. gibt's ja 'nen ganz anderen/besseren Ansatz, oder ich mach mir einfach zu viele Gedanken
Grüße John.
-
@leone-mortuo sagte in zeitabhängig triggern: Scheduler oder zyklische Abfrage?:
Moin zusammen,
ich hab mal eine generelle Frage für die Runde, weil ich mir wegen der Thematik immer wieder Extra-Arbeit mache.
Folgendes Szenario: ich möchte zu einer bestimmten Uhrzeit etwas triggern, "Rollladen runter" meinetwegen.
Es geht hierbei nicht um das "wie", sondern die Frage was praktikabler ist im Bezug auf die Auslastung des Brokers.Nahmen wir mal an ich habe 5 oder mehr Timer für verschiedene Geräte und Systeme, dann müsste ich entweder minütlich einen Script (pro Timer) laufen lassen der entsprechend auf die aktuelle Uhrzeit gegen die gesetzte Zeit checkt und dann ggf. etwas auslöst.
Der andere Ansatz den ich momentan verfolge ist eine Cronregel, die ich dynamisch per VIS etc. ändern und steuern kann. Der Hintergedanke: ich muss das System nicht minütlich mit Abfragen befeuern sondern setzte einmalig den gewünschten Wert für den Job. Der Aufwand für ein solches Script ist jedoch ungleich höher (2 Scripte, verschiedene Objekte, Neustart, usw.).
Die Frage: wie stark fällt ein kleines Script (erste Variante) ins Gewicht wenn es minütlich abgefragt wird, Werte ausliest usw. - lohnt der Aufwand den ich betreibe überhaupt?
Ich füge hier mal noch ein Bild der 2. Variante ein, damit es vll. etwas deutlicher wird.
Evtl. gibt's ja 'nen ganz anderen/besseren Ansatz, oder ich mach mir einfach zu viele Gedanken
Grüße John.
Die Methode über ein eigenes zentrales "Heartbeat" Skript welches nichts macht als due aktuelle Zeit zu prüfen und dann bei Übereinstimmung der Zeit mit einer einstellbaren Zeit (diese am besten noch jede Minute per getState aus der StatesDB holen) etwas tut ist meiner Meinung nach Unsinn. Du belastest das System mit einer zyklischen Last die du zu 100% nicht brauchst.
Der Korrekte weg ist (meiner Meinung nach)
- Je EINEN State pro Aktion in dem drin steht zu welchem Zeitpunkt die Aktion stattfinden soll.
Danach gibt es 2 Optionen:
- in EINEM Skript
-- Zu beginn des Skriptes alle (oben angesprochenen) States einlesen und die entsprechenden Schedules erzeugen.
-- JE State ein Trigger auf Änderung des States -> Wenn geändert dann schedule anhalten und neu setzen. - Pro oben angegebenem State ein Skript
-- Zu beginn von diesem einen State den Wert einlesen und schedule anlegen
-- einen Trigger auf "wurde geaendert" und dann darin den schedule anpassen.
Die geschickte Nutzung der "Funktion" Blöcke erlaubt es dabei dafür zu sorgen das du nicht die gleichen Aktionen mehrfach zusammen bauen musst.
Wichtig ist das du auf keinen Fall die in deinem Bild verwendeten "mehrfachtrigger" nutzt. Das macht Dir und dem System nur mehr Arbeit.
A.
-
Danke für dein Feedback.
Sofern ich deine Ausführung richtig verstehe bin ich ja bereits recht nah an deiner 2. Option dran.
Ich lese die Werte für die Zeit bei Änderung ein halte den schedule an und erstelle ihn neu.Jedoch momentan noch mit einem mehrfach trigger, was ich dann wohl noch korrigieren werden.
Ziel wäre so oder so am Ende das das Script nun einmal, nämlich bei Änderung der gewünschten Triggerzeit durchläuft.