UNPKG

node-red-contrib-chronos

Version:

Time-based Node-RED scheduling, repeating, queueing, routing, filtering and manipulating nodes

298 lines (292 loc) 15.3 kB
<!-- Copyright (c) 2020 - 2026 Jens-Uwe Rossbach This code is licensed under the MIT License. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. --> <script type="text/html" data-help-name="chronos-scheduler"> <p> Plant das Versenden von Nachrichten oder Setzen von globalen / Flow-spezifischen Variablen zu bestimmten Uhrzeiten. </p> <h3>Details</h3> <p> Dieser Knoten kann Nachrichten schicken oder globale / Flow-spezifische Variablen setzen sobald eine geplant Uhrzeit erreicht wurde. Der Zeitpunkt kann entweder direkt eingegeben oder anhand von Sonnen- oder Mondständen berechnet werden. Mehrere Zeitereignisse können geplant werden und jedes Ereignis kann unterschiedliche Auslöser haben und unterschiedliche Ausgaben erzeugen. </p> <p> Für weitere Informationen bitte die ausführliche Dokumentation im <a href="https://github.com/jensrossbach/node-red-contrib-chronos/wiki/Scheduler-Node">Repository-Wiki</a> öffnen (nur in Englisch verfügbar). </p> <h3>Konfiguration</h3> <dl> <dt>Name</dt> <dd>Der Name des Knotens (optional).</dd> <dt>Konfiguration</dt> <dd> Ein Verweis auf den zu verwendenden Konfigurationsknoten. </dd> <dt>Reiter Zeitplan</dt> <dd> Liste der geplanten Zeitereignisse. Neue Einträge können über den Button unterhalb der Liste hinzugefügt werden. Vorhandene Einträge können neu angeordnet oder gelöscht werden. Jeder Eintrag in der Liste kann wie folgt konfiguriert werden: <ul> <li> Der Zielzeitpunkt, zu dem eine Ausgabe erzeugt werden soll. Abhängig von der Auswahl auf der linken Seite gibt es folgende Möglichkeiten: <ul> <li> <i>Uhrzeit</i>: Eine beliebige Uhrzeit kann direkt in der Form <code>hh:mm[:ss] [am|pm]</code> eingegeben werden. </li> <li> <i>Sonnenstand</i>: Der Sonnenstand kann aus einer Liste vorgegebener Werte ausgewählt werden. Wenn mit der Maus über den Button gefahren wird, wird eine Vorschau der Zeit angezeigt. </li> <li> <i>Mondstand</i>: Der Mondstand kann aus einer Liste vorgegebener Werte ausgewählt werden. Wenn mit der Maus über den Button gefahren wird, wird eine Vorschau der Zeit angezeigt. </li> <li> <i>Sonnenstand (benutzerdf.)</i>: Einer der Namen für benutzerdefinierte Sonnenstände kann eingegeben werden. </li> <li> <i>Cron-Tabelle</i>: Ein Cron-Zeitplan nach <a href="https://github.com/jaclarke/cronosjs#supported-expression-syntax">CronosJS Syntax</a> kann eingegeben werden. </li> <li> <i>Umgebungsvariable</i>: Der Zielzeitpunkt wird aus der angegebenen Umgebungsvariablen geladen, siehe Abschnitt <i>Eingabe</i> für weitere Informationen. </li> <li> <i>global</i>: Der Zielzeitpunkt wird aus der angegebenen globalen Kontextvariablen geladen, siehe Abschnitt <i>Eingabe</i> für weitere Informationen. </li> <li> <i>flow</i>: Der Zielzeitpunkt wird aus der angegebenen Flow-Kontextvariablen geladen, siehe Abschnitt <i>Eingabe</i> für weitere Informationen. </li> </ul> </li> <li> Ein zeitlicher Versatz in Minuten zwischen -300 und +300 kann angegeben werden. Der Versatz wird zur Zielzeit hinzuaddiert oder davon abgezogen. </li> <li> Wird eine Zufälligkeit zwischen 1 und 300 Minuten angegeben, wird der Versatz zufällig aus einem Bereich mit der angegebenen Breite gewählt. Der Versatzwert stellt dabei die Mitte der Zufälligkeitsspanne da. </li> <li> Die Ausgabe kann entweder eine vollständige Nachricht sein, spezifiziert als JSON- oder JSONata-Ausdruck, eine einzelne Eigenschaft der Nachricht unterschiedlichen Typs oder eine globale oder Flow-spezifische Variable. </li> </ul> </dd> <dt>Reiter Optionen</dt> <dd> Allgemeine Optionen, die konfiguriert werden können und nachfolgend beschrieben sind. </dd> <dt>Mit inaktivem Zeitplan starten</dt> <dd> Wenn aktiviert, wird der Zeitplan beim Starten des Knotens initial deaktiviert. </dd> <dt>Separate Ausgabe-Ports für Zeitereignisse</dt> <dd> Wenn aktiviert, wird für jedes Zeitereignis, das eine Nachricht als Ausgabe erzeugt, ein eigener Ausgabe-Port erstellt und die Nachricht des Zeitereignisses wird an den zugehörigen Ausgabe-Port geschickt. Für dynamisch programmierte Zeitereignisse wird immer ein Ausgabe-Port angelegt, da zur Konfigurationszeit nicht feststeht, ob das Zeitereignis eine Nachricht als Ausgabe erzeugt oder nicht. </dd> <dt>Ausgabe-Port für Ereigniszeiten</dt> <dd> Wenn aktiviert, wird ein zusätzlicher Ausgabe-Port erzeugt. Dieser Ausgabe-Port sendet eine Nachricht immer dann, wenn sich das Datum und die Zeit eines beliebigen Zeitereignisses aktualisieren. Die Nachricht enthält einen Zeitstempel für das nächste Zeitereignis in <code>msg.payload</code> und ein Array mit Zeitstempeln aller Zeitereignisse in <code>msg.events</code>. </dd> <dt>Beim Starten Nachrichten verzögern</dt> <dd> Wenn aktiviert, werden alle Nachrichten, die zum Startzeitpunkt des Knotens versendet werden sollen, um die angegebene Zeitspanne verzögert (standardmäßig um 0,1 Sekunden). </dd> </dl> <h3>Eingabe</h3> <dt>Zeitplan aktivieren/deaktivieren</dt> <dd> Um den Zeitplan oder einzelne Zeitereignisse zu aktivieren oder zu deaktivieren, muss eine Nachricht an den Scheduler-Knoten geschickt werden. Das Aktivieren des Zeitplans führt auch dazu, dass programmierte Zeitereignisse aus Kontextvariablen neu eingelesen werden. </dd> <dl class="message-properties"> <dt>payload<span class="property-type">boolean | array</span></dt> <dd>Schalter zum Aktivieren oder Deaktivieren von Zeitereignissen</dd> </dl> <dd> Wenn <code>msg.payload</code> ein boolescher Wert ist, wird der komplette Zeitplan aktiviert, wenn der Wert wahr ist, ansonsten deaktiviert. Ist <code>msg.payload</code> dagegen ein Array, muss jedes Element ein boolescher Wert sein und ist dem Zeitereignis mit dem selben Index zugeordnet. Wenn der Wert wahr ist, wird das zugehörige Zeitereignis aktiviert, ansonsten deaktiviert. </dd> <dt>Scheduler-Knoten steuern</dt> <dd> Der Scheduler-Knoten kann auf verschiedene Weise dynamisch gesteuert werden, indem eine Nachricht an den Knoten geschickt wird. </dd> <dl class="message-properties"> <dt>payload<span class="property-type">string | array</span></dt> <dd>Steuert den Knoten abhängig von den angegebenen Kommandos</dd> </dl> <dd> Wenn <code>msg.payload</code> eine Zeichenkette ist, wirkt sich das angegebene Kommando auf den kompletten Zeitplan aus. Ist <code>msg.payload</code> dagegen ein Array, muss jedes Element eine Zeichenkette sein und ist dem Zeitereignis mit dem selben Index zugeordnet. Das Kommando wirkt sich dann nur auf dieses Zeitereignis aus. </dd> <dd> Folgende Kommandos werden zurzeit unterstützt: <ul> <li> <code>toggle</code>: Schaltet den Aktivierungszustand um (d.h., aktivierte Zeitereignisse werden deaktiviert und umgekehrt). </li> <li> <code>reload</code>: Führt zu einer Neuberechnung von aktivierten Zeitereignissen (programmierte Daten aus Umgebungs- und Kontextvariablen werden ebenfalls erneut geladen). </li> <li> <code>trigger</code>: Löst aktivierte Zeitereignisse aus, d.h., die Ausgabekonfiguration des Zeitereignisses wird angewendet, so als wäre der geplante Zeitpunkt erreicht. Der reguläre Zeitpunkt des Ereignisses wird dabei nicht verändert. </li> <li> <code>trigger:forced</code>: Wie oben, allerdings werden auch deaktivierte Zeitereignisse ausgelöst, nicht nur aktivierte. </li> <li> <code>trigger:next</code>: Löst das als nächstes bevorstehende Zeitereignis aus. Wird nicht in Array-Elementen unterstützt, nur in <code>msg.payload</code> Zeichenketten. </li> </ul> </dd> <dt>Zeitplan dynamisch programmieren</dt> <dd> Die Konfiguration des Zielzeitpunkts kann dynamisch über die Eingangsnachricht überschrieben oder aus einer Umgebungs- oder Kontextvariablen geladen werden. </dd> <dl class="message-properties"> <dt>payload<span class="property-type">array</span></dt> <dd>Überschreibt ein einzelnes oder mehrere Zeitereignisse</dd> </dl> <dd> Die Elemente des <code>msg.payload</code> Arrays müssen Objekte sein und die folgenden Eigenschaften enthalten: </dd> <dl class="message-properties"> <dt>type<span class="property-type">string</span></dt> <dd>Auslöseart; entweder "time", "sun", "moon", "custom" oder "crontab"</dd> <dt>value<span class="property-type">string | number</span></dt> <dd>Auslösezeitpunkt; der Inhalt ist abhängig von der Auslöseart</dd> <dt class="optional">offset<span class="property-type">number</span></dt> <dd>Zeitlicher Versatz zum Auslösezeitpunkt in Minuten (nicht zutreffend auf Auslöseart "crontab")</dd> <dt class="optional">random<span class="property-type">number</span></dt> <dd>Zufälligkeitsspanne des Zeitversatzes in Minuten (nicht zutreffend auf Auslöseart "crontab")</dd> </dl> <dd> Außerdem ist es möglich, die Ausgaben der Zeitereignisse zu überschreiben. In diesem Fall muss ein erweitertes Format für die Objekte verwendet werden, bei dem die Daten für den Zielzeitpunkt (siehe oben) in eine Objekteigenschaft mit dem Namen <code>trigger</code> eingebettet werden und folgende weitere Eigenschaften vorhanden sind: </dd> <dl class="message-properties"> <dt>output.type<span class="property-type">string</span></dt> <dd>Ausgabeart; entweder "global", "flow", "msg" oder "fullMsg"</dd> <dt class="optional">output.value<span class="property-type">object</span></dt> <dd>Nur wenn Ausgabeart "fullMsg" ist; Inhalt der Ausgabenachricht</dd> <dt class="optional">output.property.name<span class="property-type">string</span></dt> <dd>Nur wenn Ausgabeart nicht "fullMsg" ist; Name der Ausgabe-Eigenschaft/-Variablen</dd> <dt class="optional">output.property.type<span class="property-type">string</span></dt> <dd> Kann optional auf "date" gesetzt und <code>output.property.value</code> ausgelassen werden, um das gleiche Verhalten zu bekommen, als wäre <i>timestamp</i> als Typ in der Benutzeroberfläche ausgewählt worden </dd> <dt class="optional">output.property.value<span class="property-type">any</span></dt> <dd>Nur wenn Ausgabeart nicht "fullMsg" ist; Wert der Ausgabe-Eigenschaft/-Variablen</dd> </dl> <dd> Tipp: Es ist möglich, boolsche Werte, Zeichenketten und Objekte in dem Array zu mischen. Somit können mithilfe einer einzigen Nachricht einige Zeitereignisse aktiviert oder deaktiviert, andere mit einem Kommando gesteuert und wieder andere überschrieben werden. Weiterhin ist es möglich, einzelne Array-Elemente auf <code>null</code> zu setzen, um die dazugehörigen Zeitereignis zu ignorieren. </dd> <dd> Umgebungs- und Kontextvariablen können als Zahlen, Zeichenketten oder Objekte spezifiziert werden. Bei letzterem muss die Objektstruktur die gleiche sein wie bei den Nachrichteneigenschaften (siehe oben). Zahlen müssen als Millisekunden seit Mitternacht angegeben werden und Zeichenketten müssen entweder eine Uhrzeit im 12- oder 24-Stunden-Format, einen Sonnenstand, einen Mondstand oder einen benutzerdefinierten Sonnenstand enthalten. </dd> <h3>Ausgaben</h3> <p> Geplante Nachrichten werden an den Ausgabe-Port der Nachricht gesendet. Der Aufbau und Inhalt der Nachricht kann statisch über die Konfiguration oder dynamisch über Eingangsnachrichten und Kontextvariablen festgelegt werden. </p> </script>