Hi Community,
I have purchased a couple of window Sensors.
My Syntax for the Item Names is as follows:
Contact LivingRoom_Window_Sensor "Terassentür [MAP(de.map):%s]" (gGroundFloor,gGF_gLivingroom_gWindowSensor,fg_gStatus_gSensor_gWindow,fg_gStatus_gSensor) {channel="zwave:device:Zwave_Usb:node21:sensor_door"}
Number LivingRoom_Window_BatteryLevel "Batterie Terassentür [%d %%]" (gGroundFloor,gGF_gLivingroom_gWindowSensor, fg_gStatus_gBattery) {channel="zwave:device:Zwave_Usb:node21:battery-level"}
DateTime LivingRoom_Window_SensorTimestamp "Terassentür gelüftet am [%1$td.%1$tm. %1$tH:%1$tM]" (gGroundFloor,gFF_gBathroom_gWindowSensor,fg_gStatus_gSensor)
String LivingRoom_Window_SensorOpen "Terassentür Gelüftet für: [JS(mins.js):%s]" (gGroundFloor,gFF_gBathroom_gWindowSensor,fg_gStatus_gSensor)
I have a rule, which gives returns a timestamp when the window was last opened:
rule "Window Open TimeStamp"
when
Member of fg_gStatus_gSensor_gWindow changed from CLOSED to OPEN
then
if(previousState == NULL) return;
postUpdate(triggeringItem.name+"Timestamp", now.toString)
end
So far so good.
I also want do display the duration. I did that for one window as follows:
rule "duration"
when
Item Bathroom_Window_SensorContact changed from OPEN to CLOSED
then
//duration as Number in minutes
val duration = (now.millis - (Bathroom_Window_SensorTimestamp.state as DateTimeType).zonedDateTime.toInstant.toEpochMilli) / 1000
Bathroom_Window_SensorOpen.postUpdate(duration)
end
I am now desperately trying to convert this into a Group Based approach, but my log tells me that .state is not something I can use. This is what I tried:
rule "Group duration"
when
Member of fg_gStatus_gSensor_gWindow changed from OPEN to CLOSED
then
//duration as Number in minutes
val duration = (now.millis - ((triggeringItem.name+"Timestamp").state as DateTimeType).zonedDateTime.toInstant.toEpochMilli) / 1000
postUpdate(triggeringItem.name+"Open", duration)
end
Probably I am terribly wrong about String/Number and DateTime. Maybe you guys can help.
Thanks