Rule Trigger: Item DummyNumber changed from 1 to 2

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
hurra
Beiträge: 66
Registriert: 28. Aug 2019 10:52

Rule Trigger: Item DummyNumber changed from 1 to 2

Beitrag 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!

Benutzeravatar
peter-pan
Beiträge: 2564
Registriert: 28. Nov 2018 12:03
Answers: 25
Wohnort: Schwäbisch Gmünd

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

Beitrag 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.
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.1.1 openhabian

Benutzeravatar
udo1toni
Beiträge: 13860
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Rule Trigger: Item DummyNumber changed from 1 to 2

Beitrag 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
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

hurra
Beiträge: 66
Registriert: 28. Aug 2019 10:52

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

Beitrag 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!

./mf
Beiträge: 44
Registriert: 8. Jan 2022 00:15
Answers: 1

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

Beitrag 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.
OpenHAB 3.2 im Docker auf Pi4-4GB

Antworten