rule "Beispiel"
when
Time cron "0 0 6-7 * * ?"
then
if(Item.state changed)
Geht das überhaupt? Oder kann ich in der if Abfrage nur den Status direkt abfragen? Also ob er ON oder OFF ist zum Beispiel.
Ich würde gerne nur die Tatsache abfragen, ob sich der Status geändert hat, nicht in was er sich geändert hat!
rule "Beispiel für changed from OFF to ON"
when
Time cron "0 0 6-7 * * ?"
then
if(Item.previousState.state == OFF && Item.state == ON){
//DOSTUFF
}
end
rule "Beispiel - Hat sich der Status in den letzten 6 Stunden geändert?"
when
Time cron "0 0 6-7 * * ?"
then
if(Item.changedSince(now.minusHours(6))){
//DOSTUFF
}
end
rule "Beispiel"
when
Item.state changed
then
if(now.getHourOfDay > 5 && now.getHourOfDay < 7) //6:00 - 6:59 Uhr
{Status hat sich im Zeitraum geändert}
end
Wenn
es zwischen 6 und 7 Uhr ist
dann
(if)wenn sich ein Item geändert hat
(if)wenn das Item sich auf ON geändert hat
dann mache A
(else) anderenfalls
(if) wenn das Item ungleich ON ist
dann mache B
Genau bei deinem Aufbau mit Time Cron wird die Regel 1 mal um 6 ausgeführt und um 7 Uhr
mit Item changed wird es ausgeführt immer wenn sich das item ändert und dann die zeit abfrage also
Das ist ein sehr schwammiger Trigger für die Rule. Soll die Rule ständig lauschen? Das geht so nicht. Du brauchst einen eindeutigen Trigger.
Das kann in Deinem Fall nur das Item.Changed-Ereignis sein.
Im "then-Anweisungsteil" musst Du dann den Zeitbereich eingrenzen
violine21 hat geschrieben: ↑15. Feb 2020 21:10
Das ist ein sehr schwammiger Trigger für die Rule. Soll die Rule ständig lauschen? Das geht so nicht. Du brauchst einen eindeutigen Trigger.
So habe ich das noch gar nicht betrachtet. Danke für die deutlichen Worte.
Mein Denken war einfach, das ich zu einem bestimmten Zeitpunkt, bzw. in einem Zeitbereich, eine Abfrage laufen lassen kann.
Das die Abfrage aber der Trigger sein muss, das habe ich nun kapiert.
Kann ich eigentlich im THEN-Bereich der Rule die IF-Abfragen so oft schachteln wie ich möchte?
lukh hat geschrieben: ↑15. Feb 2020 22:26
Mein Denken war einfach, das ich zu einem bestimmten Zeitpunkt, bzw. in einem Zeitbereich, eine Abfrage laufen lassen kann.
Das die Abfrage aber der Trigger sein muss, das habe ich nun kapiert.
Kann ich eigentlich im THEN-Bereich der Rule die IF-Abfragen so oft schachteln wie ich möchte?
Zu einem bestimmten Zeitpunkt, das geht immer. Auch zu festgelegten Zeitpunkten (z.B. alle x Sekunden) innerhalb eines Zeitbereichs gehts.
Wenn dann aber das changed-Ereignis genau zwischen den Zeitpunkten auftritt, hat es OH nicht mitbekommen.Zeitpunkt und changed-Ereignis
müssten praktisch zeitlich zusammen fallen. Das ist unwahrscheinlich.
Du kannst if-Abfragen schachteln, allerdings weiss ich nicht, ob es eine Verschachtelungstiefe gibt.
Die Rules sind eventbezogen. Es geht also um Ereignisse. Die Rule wird in dem Moment gestartet, in dem das Ereignis eintritt.
Ein Zeitraum ist aber kein Event. Ein Zeitpunkt wäre ein Event (die Rule startet beim Erreichen des Zeitpunkts).
Die Rule muss also exakt andersrum funktionieren. Die Rule wird bei Änderung des Items gestartet, innerhalb der Rule (also im then-Block) wird dann geprüft, ob der Zeitraum passt.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet