- Platform information: OH 2.3
I wrote a rule that re-sends commands when a blind / rollerhutter is offline. It does work well. I am, however looking for an improvement as I think my use of timers is not ideal.
Second question: is there a way to derive the channel from the item (for the offline detection)
var Timer T1
var Timer T2
var Timer T3
var Timer T4
var Timer T5
var Timer T6
var Timer T7
var Timer T8
var Timer T9
var Timer T10
var Timer T11
var Timer T12
var Timer T13
rule "RolloResendCommand"
when
Member of gRollo received command
then
createTimer(now.plusSeconds(1)) [
var String myChannel = NULL
var Timer reSendTimer
switch (triggeringItem.name.toString()) {
case 'EG_Wohnen_RaffstoreWest' : { myChannel = "homematic:HM-LC-Bl1PBU-FM:pivccu:MEQ070724"; if (T1!== null) T1.cancel() }
case 'EG_Wohnen_RaffstoreOst' : { myChannel = "homematic:HM-LC-Bl1PBU-FM:pivccu:MEQ071124"; if (T2!== null) T2.cancel() }
case 'EG_Wohnen_RolloOst' : { myChannel = "homematic:HM-LC-Bl1PBU-FM:pivccu:MEQ031127"; if (T3!== null) T3.cancel() }
case 'EG_Kueche_Rollo' : { myChannel = "homematic:HM-LC-Bl1PBU-FM:pivccu:MEQ072240"; if (T4!== null) T4.cancel() }
case 'EG_WC_Rollo' : { myChannel = "homematic:HM-LC-Bl1PBU-FM:pivccu:MEQ072056"; if (T5!== null) T5.cancel() }
case 'EG_Arbeitszimmer_Rollo' : { myChannel = "homematic:HM-LC-Bl1PBU-FM:pivccu:MEQ110144"; if (T6!== null) T6.cancel() }
case 'EG_Flur_Rollo' : { myChannel = "homematic:HM-LC-Bl1PBU-FM:pivccu:MEQ072218"; if (T7!== null) T7.cancel() }
case 'OG_Bad_Rollo' : { myChannel = "homematic:HM-LC-Bl1PBU-FM:pivccu:MEQ110061"; if (T8!== null) T8.cancel() }
case 'OG_Leo_RolloWest' : { myChannel = "homematic:HM-LC-Bl1PBU-FM:pivccu:MEQ110059"; if (T9!== null) T9.cancel() }
case 'OG_Tim_RolloOst' : { myChannel = "homematic:HM-LC-Bl1PBU-FM:pivccu:MEQ110628"; if (T10!== null) T10.cancel() }
case 'OG_Toby_RolloSued' : { myChannel = "homematic:HM-LC-Bl1PBU-FM:pivccu:MEQ110622"; if (T11!== null) T11.cancel() }
case 'OG_Felix_RolloOst' : { myChannel = "homematic:HM-LC-Bl1PBU-FM:pivccu:MEQ110132"; if (T12!== null) T12.cancel() }
case 'OG_Schlafen_Rollo' : { myChannel = "homematic:HM-LC-Bl1PBU-FM:pivccu:MEQ117014"; if (T13!== null) T13.cancel() }
// default : { }
}
var status = ThingAction.getThingStatusInfo(myChannel).getStatus()// openhab 2.3
// var status = getThingStatusInfo(myChannel).getStatus()// openhab 2.4
if (status.toString() == "OFFLINE") {
sendMail("fritzmessage@gmx.de", triggeringItem.name.toString()+ "is offline", "Resend Command: " + receivedCommand.toString() )
logInfo(triggeringItem.name.toString(), "is offline. Resend Command: " + receivedCommand.toString() )
reSendTimer = createTimer(now.plusSeconds(180)) [
logInfo(triggeringItem.name.toString(), "execute timer. Resend Command: " + receivedCommand.toString())
triggeringItem.sendCommand(receivedCommand)
]
switch (triggeringItem.name.toString()) {
case 'EG_Wohnen_RaffstoreWest' : { T1= reSendTimer}
case 'EG_Wohnen_RaffstoreOst' : { T2= reSendTimer}
case 'EG_Wohnen_RolloOst' : { T3= reSendTimer}
case 'EG_Kueche_Rollo' : { T4= reSendTimer}
case 'EG_WC_Rollo' : { T5= reSendTimer}
case 'EG_Arbeitszimmer_Rollo' : { T6= reSendTimer}
case 'EG_Flur_Rollo' : { T7= reSendTimer}
case 'OG_Bad_Rollo' : { T8= reSendTimer}
case 'OG_Leo_RolloWest' : { T9= reSendTimer}
case 'OG_Tim_RolloOst' : { T10= reSendTimer}
case 'OG_Toby_RolloSued' : { T11= reSendTimer}
case 'OG_Felix_RolloOst' : { T12= reSendTimer}
case 'OG_Schlafen_Rollo' : { T13= reSendTimer}
}
}
]
end