ich möchte gerne in einer Rule zwei Ereignisse über eine UND Verknüpfung Programmieren. Wie geht das? Ich habe in allen Beispielen nur ODER Verknüpfungen gefunden.
Ich möchte Beispielsweise so etwas ansteuern:
Wenn Schalter 1 = 1 und Sunset =1 dann Rollo runter
Es wird ja mit einer Rule immer auf ein Event reagiert. Eine Rule kann nicht auf zwei Events gleichzeitig reagieren, nur auf das eine oder das andere. Deswegen kann man nicht UND verknüpfen.
Man möge mich korrigieren, wenn mein Verständnis da falsch ist.
Du müsstest also eine Rule erstellen, die auf “Sunset” reagiert und eine globale Variable entsprechend setzt.
Eine zweite Rule reagiert auf deinen Schalter und vergleicht dann, wenn der Schalter auf ON gegangen ist, ob “Sunset” global auf 1 ist und führt die entsprechende Aktion aus.
Beispielswiese so (Pseudocode, ungetestet):
var Number globalSunset = 0;
rule "check sunset"
when
itemSunset changed
then
globalSunset = (itemSunset.state == ON) ? 1: 0;
rule "handle switch"
when
itemSwitch changed from OFF to ON
then
if(globalSunset == 1){
//do
}
Wie pmayer sagt, kannst du die Und-Verknüfung im “then”-Teil der Regel machen. Aber statt zwei separate Regeln zu erstellen, kannst du auch eine Regel definieren, die feuert, sobald eines der Ereignisse auftritt und anschließend überprüft, ob es sogar tatsächlich beide sind.
when
itemSwitch changed from OFF to ON or
itemSunset changed
then
if(globalSunset == 1 && itemSunset.state == ON){
... }
bei node-red musst du genau so eine Funktion schreiben die einen Vergleich anstellt. Node-red ist keine logische Programmierumgebung, wie man es vielleicht von einer SPS (o.ä.) kennt. Es gibt keinen “und”-node… es wird immer nur de message flow verarbeitet.
== vergleicht = weißt zu && “und”-Verknüpfung || “oder”-Verknüpfung