Hallo.
Vielleicht nochmal ne Grundlagenfrage, die ich nicht ergooglet bekomme:
Wie kann ich beim Neustart verhindern, dass Rules ausgelöst werden?
Also Items wechseln von NULL oder UNDEF to irgendein Wert und schon kommt die Rule "when item changed".
Ist nicht schlimm, aber mir gefällts nicht.
Es bringt auch nichts, wenn ich die Werte in einer Rule "when System started" auf den Wert OFF oder so setze. Die nachfolgende Rule wegen Item Änderung kommt dann trotzdem.
Geht das irgendwie: einen definierten Zustand am Anfang vorgeben, ohne gleich alle Rules mal durchzulaufen?
Vielen Dank und schönen Abend.
Auslösen von rules beim Neustart verhindern
-
- Beiträge: 45
- Registriert: 3. Jul 2019 10:30
- udo1toni
- Beiträge: 15247
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Auslösen von rules beim Neustart verhindern
Den Trigger selbst kannst Du nicht verhindern, ebenso natürlich nicht, dass die Rule los läuft. Wohl kannst Du aber in der Rule prüfen, ob der alte Wert NULL war und die Rule damit abbrechen lassen:
Anzumerken ist vielleicht noch, dass previousState etwas anderes ist, als MyItem.previousState, für Letzteres wird eine laufende Persistence benötigt, für Ersteres nicht, denn previousState ist eine implizite Variable, die immer bei changed als Trigger zur Verfügung steht.
EDIT: es muss implizit heißen, nicht explizit...
Code: Alles auswählen
rule "testrule"
when
Item MyItem changed
then
if(previousState == NULL) return;
logInfo("test","Die Rule wurde getriggert, alter Wert {}, aktueller Wert {}",previousState,MyItem.state)
end
EDIT: es muss implizit heißen, nicht explizit...
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 45
- Registriert: 3. Jul 2019 10:30
Re: Auslösen von rules beim Neustart verhindern
super! Vielen Dank.
Werde die Rules (mal wieder) alle überarbeiten.
Schönen Abend noch.
Werde die Rules (mal wieder) alle überarbeiten.
Schönen Abend noch.
-
- Beiträge: 45
- Registriert: 3. Jul 2019 10:30
Re: Auslösen von rules beim Neustart verhindern
sorry. doch noch ne Frage.
Sie verhält es sich bei
when
Item ITEM1 changed to OPEN
or
Item ITEM2 changed to OPEN
was steht dann in PreviousState? Der Wert von Item1 oder der von Item2?
Sie verhält es sich bei
when
Item ITEM1 changed to OPEN
or
Item ITEM2 changed to OPEN
was steht dann in PreviousState? Der Wert von Item1 oder der von Item2?
- peter-pan
- Beiträge: 2758
- Registriert: 28. Nov 2018 12:03
- Wohnort: Schwäbisch Gmünd
Re: Auslösen von rules beim Neustart verhindern
Das müsste eigentlich der Wert von dem Item sein, der den Trigger ausgelöst hat. Den kannst du auch abfragen wie den "previousState". Der heisst "triggeringItem".
z.B.:
z.B.:
Code: Alles auswählen
logWarn("windchill"," Triggering Item: {} Status: {}",triggeringItem.name, triggeringItem.state)
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian
- udo1toni
- Beiträge: 15247
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Auslösen von rules beim Neustart verhindern
Es ist unerheblich, ob der Trigger eingeschränkt wird, die implizite Variable ist immer gesetzt.
Die impliziten Variablen werden unmittelbar vor dem Abarbeiten der Rule gesetzt, logischerweise immer durch das auslösende Ereignis.
previousState enthält also den alten Wert des Items, welches die Rule getriggert hat.
Es gibt noch weitere implizite Variablen (Siehe hier: https://www.openhab.org/docs/configurat ... tion-block)
receivedCommand - Ist verfügbar, sobald die Rule mindestens einen Trigger received command hat.
previousState - Ist verfügbar, sobald die Rule mindestens einen Trigger changed hat.
newState - Ist verfügbar, sobald die Rule mindestens einen Trigger changed oder received update hat.
triggeringItem - Ist verfügbar, sobald die Rule mindestens einen Trigger received command, changed oder received update hat.
receivedEvent - Ist verfügbar, sobald die Rule mindestens einen channel-basierten Trigger hat.
Wenn man eine Rule baut, die unterschiedliche Trigger hat, kann man über diese Variablen auch gut zwischen den verschiedenen Triggern unterscheiden, da z.B. triggeringItem auf null gesetzt ist, falls die Rule durch Time cron, System started oder Channel triggered getriggerrt wurde. Entsprechendes ergibt sich für die anderen Variablen.
Man kann auch gut erkennen, dass (mindestens) noch eine implizite Variable fehlt, nämlich triggeringChannel.
Die impliziten Variablen werden unmittelbar vor dem Abarbeiten der Rule gesetzt, logischerweise immer durch das auslösende Ereignis.
previousState enthält also den alten Wert des Items, welches die Rule getriggert hat.
Es gibt noch weitere implizite Variablen (Siehe hier: https://www.openhab.org/docs/configurat ... tion-block)
receivedCommand - Ist verfügbar, sobald die Rule mindestens einen Trigger received command hat.
previousState - Ist verfügbar, sobald die Rule mindestens einen Trigger changed hat.
newState - Ist verfügbar, sobald die Rule mindestens einen Trigger changed oder received update hat.
triggeringItem - Ist verfügbar, sobald die Rule mindestens einen Trigger received command, changed oder received update hat.
receivedEvent - Ist verfügbar, sobald die Rule mindestens einen channel-basierten Trigger hat.
Wenn man eine Rule baut, die unterschiedliche Trigger hat, kann man über diese Variablen auch gut zwischen den verschiedenen Triggern unterscheiden, da z.B. triggeringItem auf null gesetzt ist, falls die Rule durch Time cron, System started oder Channel triggered getriggerrt wurde. Entsprechendes ergibt sich für die anderen Variablen.
Man kann auch gut erkennen, dass (mindestens) noch eine implizite Variable fehlt, nämlich triggeringChannel.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet