Wie erstelle ich eine UND Verknüpfung in einer Rule?

Hi,

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

Gruß
mecha

Sers @mecha,

auch wenn openHab bei mir ein wenig her ist:

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
    }

so long,
p

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){
    ... }
1 Like

Hi,

danke für eure Vorschläge. Die Idee mit den Variablen finde ich gut.

@pmayer: bietet NodeRed da einen einfacheren Weg?

Noch eine Frage zu der Syntax @yoshi : warum im if Teil doppelte Zeichen?

Sers,

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

so long,
p