node-red-contrib-chronos
Version:
Time-based Node-RED scheduling, repeating, queueing, routing, filtering and manipulating nodes
363 lines (357 loc) • 17.5 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-filter">
<p>
Filtert Nachrichten anhand eines bestimmten Zeitpunkts.
</p>
<h3>Details</h3>
<p>
Diese Knoten ist ähnlich dem Zeitweichenknoten, aber anstatt Nachrichten an
verschiedene Ausgabe-Ports umzuleiten, werden diese anhand spezifizierter
Kriterien gefiltert und entweder weitergeleitet oder verworfen.
</p>
<p>
Für weitere Informationen bitte die ausführliche Dokumentation im
<a href="https://github.com/jensrossbach/node-red-contrib-chronos/wiki/Time-Filter-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>Basiszeit</dt>
<dd>
Die Basiszeit wird für den Vergleich mit den Operanden der Bedingungen
verwendet. Folgende Möglichkeiten gibt es:
<ul>
<li>
<i>Nachrichteneingang</i>: Zeitpunkt des Eintreffens der
Nachricht.
</li>
<li>
<i>global</i>, <i>flow</i>, <i>msg</i>: Zeit aus einer
Kontextvariablen or einer Nachrichteneigenschaft. Die
Variablen/Eigenschaften können folgendes Format haben:
<ul>
<li>
Zahl (Zeitstempel)
<ul>
<li>
Anzahl Millisekunden seit Beginn der
UNIX-Zeitzählung (Weltzeit)
</li>
<li>
Anzahl Millisekunden seit Mitternacht,
(lokaler Zeit) wenn Wert kleiner als
86.400.000
</li>
</ul>
</li>
<li>
Zeichenkette
<ul>
<li>Uhrzeit im 12- oder 24-Stunden-Format</li>
<li>
Datum und Uhrzeit in Region-spezifischem
Format
</li>
<li>Datum und Uhrzeit in ISO 8601 Format</li>
</ul>
</li>
</ul>
</li>
</ul>
</dd>
<dt>Auswertung</dt>
<dd>
Gibt die Auswertungsmethode zum Weiterleiten von Nachrichten basierend
auf den Ergebnissen der Bedingungen an. Es gibt folgende Möglichkeiten:
<ul>
<li>
<i>Logisches ODER</i>: Die Nachricht wird weitergeleitet,
wenn mindestens eine der Bedingungen wahr ist.
</li>
<li>
<i>Logisches UND</i>: Die Nachricht wird nur weitergeleitet,
wenn alle Bedingungen wahr sind.
</li>
<li>
<i>Annotation</i>: Die Nachricht wird immer weitergeleitet
und das Ergebnis der Bedingungen wird als Array von booleschen
Werten in der Eigenschaft <code>msg.evaluation</code>
bereitgestellt.
</li>
<li>
<i>JSONata</i>: Die Nachricht wird weitergeleitet, wenn der
angegebene JSONata-Ausdruck wahr ist. Über die Variable
<code>$condition</code> können die Ergebnisse der Bedingungen
als Array von booleschen Werten abgefragt werden.
</li>
</ul>
</dd>
<dt>Bedingungen</dt>
<dd>
Liste der Bedingungen zum Filtern der Nachrichten. 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.
Abhängig vom gewählten Operator oder der gewählten Quelle auf der
linken Seite gibt es die folgenden Möglichkeiten:
<ul>
<li>
Operator <i>==</i>: Prüft ob die Basiszeit mit der spezifizierten
Zeit identisch ist.
</li>
<li>
Operator <i>!=</i>: Prüft ob die Basiszeit nicht mit der
spezifizierten Zeit identisch ist.
</li>
<li>
Operator <i>Vor</i>: Prüft ob die Basiszeit früher als die
spezifizierte Zeit ist.
</li>
<li>
Operator <i>Bis</i>: Prüft ob die Basiszeit früher als oder
gleich wie die spezifizierte Zeit ist.
</li>
<li>
Operator <i>Ab</i>: Prüft ob die Basiszeit gleich wie oder
später als die spezifizierte Zeit ist.
</li>
<li>
Operator <i>Nach</i>: Prüft ob die Basiszeit später als die
spezifizierte Zeit ist.
</li>
<li>
Operator <i>Zwischen</i>: Prüft ob die Basiszeit gleich wie oder
später als die erste und früher als oder gleich wie die zweite
spezifizierte Zeit ist.
</li>
<li>
Operator <i>Außerhalb</i>: Prüft ob die Basiszeit früher als die
erste oder später als die zweite spezifizierte Zeit ist.
</li>
<li>
Operator <i>Tage</i>: Prüft ob die Basiszeit auf spezielle Tage
eines Monats zutrifft. Das kann der erste, zweite, dritte, vierte,
fünfte oder letzte Tag, Wochentag, Werktag oder Wochenendtag sein.
Es kann auch ein gerader Tag oder ein bestimmter Tag eines Monats
oder jedes Monats sein. Alle Operanden können durch Aktivieren
der Option <i>Ausschließen</i> negiert werden.
</li>
<li>
Operator <i>Wochentage</i>: Prüft ob die Basiszeit auf den ausgewählten
Wochentag zutrifft.
</li>
<li>
Operator <i>Monate</i>: Prüft ob die Basiszeit auf einen der
ausgewählten Monate zutrifft.
</li>
<li>
Quelle <i>Ausdruck</i>: Das Ergebnis der Bedingung wird von
dem angegebenen JSONata-Ausdruck abgeleitet. Es werden zusätzliche
Zeitberechnungsfunktionen unterstützt und die Basiszeit kann
über die Variable <code>$baseTime</code> abgefragt werden.
</li>
<li>
Quelle <i>Kontext</i>: Lädt die Bedingung aus der angegebenen
Umgebungs- bzw. Kontextvariable. Siehe Abschnitt <i>Eingabe</i>
weiter unten für eine Beschreibung der benötigten Struktur der
Variable.
</li>
</ul>
Für die Zeiteingabe, abhängig von der Auswahl auf der linken Seite,
gibt es folgende Möglichkeiten:
<ul>
<li>
<i>Uhrzeit</i>: Eine beliebige Uhrzeit kann direkt im 12-
oder 24-Stunden-Format eingegeben werden. Optional ist die
Eingabe eines Datums und einer Zeit in Region-spezifischem
oder ISO 8601 Format möglich.
</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 (benutzerdef.)</i>: Einer der Namen für benutzerdefinierte
Sonnenstände kann eingegeben werden.
</li>
<li>
<i>env</i>, <i>global</i>, <i>flow</i>, <i>msg</i>: Die Zeit
wird aus einer Umgebungs- oder Kontextvariablen oder einer
Nachrichteneigenschaft gelesen. Die Variablen/Eigenschaften
können folgendes Format haben:
<ul>
<li>
Zahl (Zeitstempel)
<ul>
<li>
Anzahl Millisekunden seit Beginn der
UNIX-Zeitzählung (Weltzeit)
</li>
<li>
Anzahl Millisekunden seit Mitternacht,
(lokaler Zeit) wenn Wert kleiner als
86.400.000
</li>
</ul>
</li>
<li>
Zeichenkette
<ul>
<li>Uhrzeit im 12- oder 24-Stunden-Format</li>
<li>Sonnenstand</li>
<li>Mondstand</li>
<li>Benutzerdefinierter Sonnenstand</li>
<li>
Datum und Uhrzeit in Region-spezifischem
Format
</li>
<li>Datum und Uhrzeit in ISO 8601 Format</li>
<li>Datum und Sonnenstand</li>
<li>Datum und Mondstand</li>
<li>
Datum und benutzerdefinierter
Sonnenstand
</li>
</ul>
</li>
</ul>
</li>
</ul>
Die spezifizierten Zeitpunkte können zusätzlich mittels eines
(wahlweise zufälligen) Versatzes verschoben werden und die
Genauigkeit der Zeitpunkte für den Vergleich kann festgelegt
werden. Die entsprechenden Eingabefelder können über den
Pfeil-Knopf auf der rechten Seite ausgeklappt werden.
</dd>
<dt>Alle Bedingungen müssen zutreffen</dt>
<dd>
Wenn aktiviert, müssen alle Bedingungen erfüllt sein, um Nachrichten
weiterzuleiten (logische UND-Verknüpfung). Ansonsten reicht es aus,
dass eine einzige Bedingung erfüllt ist (logische ODER-Verknüpfung).
</dd>
<dt>Nur annotieren, nicht filtern</dt>
<dd>
Wenn aktiviert, werden eingehende Nachrichten in jedem Fall
weitergeleitet und die Ergebnisse der Auswertung aller Bedingungen
werden in der Eigenschaft <code>msg.evaluation</code> gespeichert.
</dd>
</dl>
<h3>Eingabe</h3>
<p>
Eintreffende Nachrichten werden entweder weitergeleitet oder verworfen.
</p>
<p>
Bedingungen können dynamisch programmiert werden, indem diese so
konfiguriert werden, dass die entsprechenden Daten aus einer Kontextvariablen
gelesen werden (siehe Abschnitt <i>Konfiguration</i> oben). Die Variablen
müssen Objekte sein und die folgenden Eigenschaften enthalten:
</p>
<dl class="message-properties">
<dt>operator<span class="property-type">string</span></dt>
<dd>
Operator für den Vergleich; entweder "equal", "notEqual", "before", "until",
"since", "after", "between", "outside", "days", "weekdays" oder "months"
</dd>
<dt class="optional">operands<span class="property-type">object | array</span></dt>
<dd>Operanden für den Vergleich; der Inhalt ist abhängig vom Operator</dd>
</dl>
<p>
Wenn <code>operator</code> folgendes enthält:
<ul>
<li>"equal", "notEqual", "before", "until", "since" oder "after", muss <code>operands</code> ein Objekt sein</li>
<li>"between" oder "outside", muss <code>operands</code> ein Array mit zwei Objekten sein, die den zwei Operanden entsprechen</li>
</ul>
Die Objekte müssen jeweils folgende Eigenschaften enthalten:
</p>
<dl class="message-properties">
<dt>type<span class="property-type">string</span></dt>
<dd>Art des Operanden; entweder "time", "sun", "moon" oder "custom"</dd>
<dt>value<span class="property-type">string</span></dt>
<dd>Operandenwert; der Inhalt ist abhängig von der Art des Operanden</dd>
<dt>offset<span class="property-type">number</span></dt>
<dd>Zeitlicher Versatz zum Operandenwert in Minuten</dd>
<dt>random<span class="property-type">number</span></dt>
<dd>Zufälligkeitsspanne des Zeitversatzes in Minuten</dd>
<dt class="optional">precision<span class="property-type">string</span></dt>
<dd>
Vergleichsgenauigkeit; entweder "millisecond", "second",
"minute", "hour", "day", "month" oder "year"
</dd>
</dl>
<p>
Wenn <code>operator</code> "days" enthält, muss <code>operands</code> ein
Objekt sein und folgende Eigenschaften enthalten:
</p>
<dl class="message-properties">
<dt>type<span class="property-type">string</span></dt>
<dd>
Art des Operanden; entweder "first", "second", "third", "fourth",
"fifth", "last", "even" oder "specific"
</dd>
<dt class="optional">day<span class="property-type">string | number</span></dt>
<dd>
Abhängig von der Art des Operanden der (englische) Name eines Tages
oder der Monatstag als Zahl; gilt nicht für den Typ "even"
</dd>
<dt class="optional">month<span class="property-type">string</span></dt>
<dd>(Englischer) Name des Monats; gilt nur für den Typ "specific"</dd>
<dt>exclude<span class="property-type">boolean</span></dt>
<dd>Negiertes Ergebnis</dd>
</dl>
<p>
Wenn <code>operator</code> "weekdays" enthält, muss <code>operands</code>
ein Objekt sein. Dieses kann boolesche Eigenschaften enthalten, deren
Namen einem englischen Wochentag ("monday", "tuesday", ...) entsprechen.
Wenn der Wert wahr ist, ist die Bedingung für Basiszeiten an dem
entsprechenden Tag erfüllt oder sie ist nicht erfüllt, wenn der Wert der
Eigenschaft falsch ist oder die Eigenschaft fehlt.
</p>
<p>
Wenn <code>operator</code> "months" enthält, muss <code>operands</code>
ein Objekt sein. Dieses kann boolesche Eigenschaften enthalten, deren
Namen einem englischen Monat ("january", "february", ...) des Jahres
entsprechen. Wenn der Wert wahr ist, ist die Bedingung für Basiszeiten
in dem entsprechenden Monat erfüllt oder sie ist nicht erfüllt, wenn der
Wert der Eigenschaft falsch ist oder die Eigenschaft fehlt.
</p>
<h3>Ausgaben</h3>
<p>
Wenn eine oder mehrere Bedingungen auf die konfigurierte Basiszeit
unter Berücksichtigung der ausgewählten Auswertungsmethode zutreffen,
wird die Nachricht zum Ausgabe-Port gesendet.
</p>
<p>
Nur wenn für die Auswertungsmethode <i>Annotation</i> ausgewählt wurde:
</p>
<dl class="message-properties">
<dt>evaluation<span class="property-type">array</span></dt>
<dd>Enthält die Ergebnisse der Auswertung aller Bedingungen</dd>
</dl>
</script>