Seite 1 von 1

Rule Trigger: Item DummyNumber changed from 1 to 2

Verfasst: 6. Jul 2021 10:19
von hurra
Servus,

ich kann ja bekanntlich eine Rule mit einem Item triggern, wenn sich der Zustand von ON auf OFF ändert.

Aber ist das auch möglich, auf einzelne Werte eines Items zu triggern?
DummyNumber kann 1,2,3 und 4 annehmen. Ich möchte explizit abtriggern, wenn sich der Wert von 1 bis 2 ändert.

Leider bekomm ich das nicht zum laufen, im Netz finde ich aber auch nichts zu meinem Wunsch. Vielleicht könnt ihr mir bei der Lösung helfen?

Code: Alles auswählen

rule "Licht bei Legel 2"
when Item DummyNumber changed from 1 to 2
then
     LichtTreppenhaus.sendCommand(ON)
end

Danke!

Re: Rule Trigger: Item DummyNumber changed from 1 to 2

Verfasst: 6. Jul 2021 14:43
von peter-pan
Eigentlich sollte das schon möglich sein. Ich habe folgende Test-Rule erstellt:

Code: Alles auswählen

rule "test Dummy 7 Change"
when
    Item Dummy_7 changed from 1 to 2
then
    logInfo("Dummy 7","Number - previous: {} new {}", previousState, newState)
    Dummy_4.sendCommand(OFF)  
end

...und das hat geklappt

Log:

Code: Alles auswählen

2021-07-06 14:34:46.644 [INFO ] [rg.openhab.core.model.script.Dummy 7] - Number - previous: 1 new 2
Voraussetzung ist natürlich, dass das Item (Dummy_7 bzw. DummyNumber) den entsprechenden Status auch hat und in den anderen Status wechselt.

Rule Trigger: Item DummyNumber changed from 1 to 2

Verfasst: 7. Jul 2021 10:43
von udo1toni
hurra hat geschrieben:ist das auch möglich, auf einzelne Werte eines Items zu triggern?
Ja aber.


Du kannst z.B. den Trigger

Code: Alles auswählen

Item MyItem changed to 2

verwenden. Voraussetzung ist aber, dass MyItem einen Integer Wert hält. Über diese Einschränkung stolpert man gerne mal.
Wenn man Übergänge von einem auf einen anderen Wert betrachtet, also

Code: Alles auswählen

Item MyItem changed from 1 to 2
müssen beide Werte exakt so im Item vorliegen. Bei Items, die einen Float Wert halten, ist es oft notwendig, die erste Nachkommastelle mit anzugeben, also

Code: Alles auswählen

Item MyItem changed to 2.0
In den allermeisten Fällen ist es sinnvoller, den Trigger der Rule allgemeiner zu fassen (z.B. changed ohne irgendeine Einschränkung) und anschließend zu Beginn des Rule Codes Bedingungen einzubauen, die den Wert prüfen (denn dort kann man z.B. gezielt den Wert nach Integer wandeln).
Beim Trigger changed stehen im Rule-Code die beiden expliziten Variablen previousState und newState zur Verfügung (previousState hat in diesem Fall nichts mit Persistence zu tun!), man kann also auch so etwas machen:

Code: Alles auswählen

if((previousState as Number).intValue == 1 && (newState as Number).intValue == 2)
Oftmals will man aber ehr für viel mehr Werte Code ausführen und der alte Wert interessiert höchstens am Rande.


Gesendet von iPad mit Tapatalk

Re: Rule Trigger: Item DummyNumber changed from 1 to 2

Verfasst: 7. Jul 2021 12:01
von hurra
es funktioniert! aber ich kann mir jetzt leider nicht erklären, warum. Die Triggerbedingungen sind ja identisch!

Fancy!

Danke Udo für deine Ausführungen - hab ich mir gleich notiert!
Danke!

Re: Rule Trigger: Item DummyNumber changed from 1 to 2

Verfasst: 19. Jan 2022 17:25
von ./mf
hurra hat geschrieben: 7. Jul 2021 12:01 Die Triggerbedingungen sind ja identisch!
Sicher? 1 vs 1.0 bzw 2 vs 2.0 , wie Udo beschrieben hat.