node-red-contrib-chronos
Version:
Time-based Node-RED scheduling, repeating, queueing, routing, filtering and manipulating nodes
294 lines (288 loc) • 15 kB
HTML
<!--
Copyright (c) 2020 - 2025 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.
</li>
<li>
<i>Mondstand</i>: Der Mondstand kann aus einer Liste
vorgegebener Werte ausgewählt werden.
</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>