good next setp
I changed/added the following rules:
rule "Alarm detected"
when
Member of gAlarm changed
then
var message = "An event was triggered: " + triggeringItem.name + ", current state=" + triggeringItem.state + " - check for alarm report"
logInfo("Alarm", message)
if (triggeringItem.state == ON) {
message = message + "\n\nAlarm status (all):\n"
gAlarm?.allMembers.forEach[sw|
message = message + sw.name + ": " + sw.state.toString + "\n"
alarm = true;
]
reportAlarm.apply(houseId, mailTo, "Alarm "+triggeringItem.name+" triggered!", message, mailFooter)
}
end
rule "Alarm detected receivedON"
when
Member of gAlarm changed to ON
then
logInfo("Alarm", "A member of gAlarm received ON: " + triggeringItem.name + ", state=" + triggeringItem.state)
end
rule "Alarm detected receivedOFF"
when
Member of gAlarm changed to OFF
then
logInfo("Alarm", "A member of gAlarm received OFF: " + triggeringItem.name + ", state=" + triggeringItem.state)
end
rule "Alarm detected receivedON_OFF"
when
Member of gAlarm changed from ON to OFF
then
logInfo("Alarm", "A member of gAlarm changed from ON to OFF: " + triggeringItem.name + ", state=" + triggeringItem.state)
end
rule "Alarm detected receivedOFF_ON"
when
Member of gAlarm changed from OFF to ON
then
logInfo("Alarm", "A member of gAlarm changed from OFF to ON: " + triggeringItem.name + ", state=" + triggeringItem.state)
end
rule "Alarm detected receivedUpdate"
when
Member of gAlarm received update
then
logInfo("Alarm", "A member of gAlarm received an update: " + triggeringItem.name + ", state=" + triggeringItem.state)
end
rule "Alarm detected receivedCommand"
when
Member of gAlarm received command
then
logInfo("Alarm", "A member of gAlarm received a command: " + triggeringItem.name + ", state=" + triggeringItem.state)
end
Example showing the delay between the alarm and rule trigger:
==> /usr/share/openhab2/log/events.log <==
2019-01-14 18:14:24.833 [vent.ItemStateChangedEvent] - Alarm_LaundryRoom_Tamper changed from NULL to ON
2019-01-14 18:14:34.283 [vent.ItemStateChangedEvent] - VPN_TPH_RTIME changed from 162.0 to 150.0
2019-01-14 18:14:34.297 [vent.ItemStateChangedEvent] - network_pingdevice_tph_oh_lastseen changed from 2019-01-14T18:13:34.088+0100 to 2019-01-14T18:14:34.255+0100
==> /usr/share/openhab2/log/openhab.log <==
2019-01-14 18:14:45.437 [INFO ] [eclipse.smarthome.model.script.Alarm] - A member of gAlarm received an update: Alarm_LaundryRoom_Tamper, state=ON
2019-01-14 18:14:45.442 [INFO ] [lipse.smarthome.model.script.Holiday] - Check for public holiday
2019-01-14 18:14:45.485 [INFO ] [lipse.smarthome.model.script.DayTime] - nNow=1814,nSunset=0,nSunrise=0isNight=false,isWeekend=false
2019-01-14 18:14:45.487 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Error during the execution of startup rule 'Update sunrise and sunset': Unparseable date: "2019-1-14 NULL"
2019-01-14 18:14:45.487 [INFO ] [eclipse.smarthome.model.script.Alarm] - A member of gAlarm received ON: Alarm_LaundryRoom_Tamper, state=ON
2019-01-14 18:14:45.505 [INFO ] [eclipse.smarthome.model.script.Alarm] - A member of gAlarm received an update: Alarm_LaundryRoom_Tamper, state=ON
2019-01-14 18:14:45.509 [INFO ] [eclipse.smarthome.model.script.Alarm] - An event was triggered: Alarm_LaundryRoom_Tamper, current state=ON - check for alarm report
==> /usr/share/openhab2/log/events.log <==
2019-01-14 18:14:49.222 [vent.ItemStateChangedEvent] - Alarm_LaundryRoom_Tamper changed from ON to OFF
==> /usr/share/openhab2/log/openhab.log <==
2019-01-14 18:14:54.427 [INFO ] [eclipse.smarthome.model.script.Alarm] - A member of gAlarm changed from ON to OFF: Alarm_LaundryRoom_Tamper, state=OFF
2019-01-14 18:14:54.427 [INFO ] [eclipse.smarthome.model.script.Alarm] - A member of gAlarm received an update: Alarm_LaundryRoom_Tamper, state=OFF
2019-01-14 18:14:54.429 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'Alarm detected': Couldn't invoke 'assignValueTo' for feature JvmVoid: (eProxyURI: zwave.rules#|::0.2.0.2.0.2.1.0.1.7.0.1.0.1::0::/1)
2019-01-14 18:14:54.446 [INFO ] [eclipse.smarthome.model.script.Alarm] - An event was triggered: Alarm_LaundryRoom_Tamper, current state=OFF - check for alarm report
2019-01-14 18:14:54.452 [INFO ] [eclipse.smarthome.model.script.Alarm] - A member of gAlarm received OFF: Alarm_LaundryRoom_Tamper, state=OFF
2019-01-14 18:14:54.461 [INFO ] [eclipse.smarthome.model.script.Alarm] - A member of gAlarm received an update: Alarm_LaundryRoom_Tamper, state=OFF
- Alarm was triggered (ON): 2019-01-14 18:14:24.833
- The first rule executes at 2019-01-14 18:14:45.437 = 21sec delay!
- There are other events in between, so OH can’t be blocked in general
- OFF at 2019-01-14 18:14:49.222, first execution at 2019-01-14 18:14:54.427 = 5sec delay
Another examples shows the exact difference:
2019-01-14 18:21:39.611 [vent.ItemStateChangedEvent] - Alarm_LaundryRoom_Tamper changed from OFF to ON
==> /usr/share/openhab2/log/openhab.log <==
2019-01-14 18:21:39.648 [INFO ] [eclipse.smarthome.model.script.Alarm] - A member of gAlarm received an update: Alarm_LaundryRoom_Tamper, state=ON
2019-01-14 18:21:39.652 [INFO ] [eclipse.smarthome.model.script.Alarm] - A member of gAlarm received ON: Alarm_LaundryRoom_Tamper, state=ON
2019-01-14 18:21:39.659 [INFO ] [eclipse.smarthome.model.script.Alarm] - A member of gAlarm changed from OFF to ON: Alarm_LaundryRoom_Tamper, state=ON
2019-01-14 18:21:39.675 [INFO ] [eclipse.smarthome.model.script.Alarm] - An event was triggered: Alarm_LaundryRoom_Tamper, current state=ON - check for alarm report
2019-01-14 18:21:39.686 [INFO ] [eclipse.smarthome.model.script.Alarm] - A member of gAlarm received an update: Alarm_LaundryRoom_Tamper, state=ON
- ON at 2019-01-14 18:21:39.611, rule execution at 2019-01-14 18:21:39.648 - delay of 37ms vs. 5/21sec!
- same rules, same setup
I couldn’t catch the situiation I had this afternoon where the state was already back to OFF when the “changed rule” was triggered.
So I have 2 issues
- why are there delays between 37ms and 21sec?
- how to handle safely the asynchronous execution of the trigger and rule execution so I know that there was a change to ON even the current state was already reset (OFF)