All,
I use the DWDUnwetter Binding to receive weather warnings. According to different warnings (heat, wind, thunderstorm), I want to turn on different switches. After the warning ends, the switch should turn off. For example, you can use the switch to close windows or open blinds. To do so, I created the follwing rule and items:
Unwetter.rules
var Timer Gewitter_Start_Timer = null
var Timer Gewitter_Ende_Timer = null
rule "DWD_Unwetter_Warnung"
when
Channel 'dwdunwetter:dwdwarnings:zuhause:updated1' triggered NEW
then
val String strMessage = (WarningzuhauseTyp.state.toString).toLowerCase
// Gewitter
if(strMessage.contains("gewitter")){
val millis_Gewitter_Start = (WarningzuhauseGueltigAb.state as DateTimeType).zonedDateTime.toInstant.toEpochMilli - now.millis
WarnungTimerGewitterStart.postUpdate(java.lang.Math.round(millis_Gewitter_Start/1000/60))
val millis_Gewitter_Ende = (WarningzuhauseGueltigBis.state as DateTimeType).zonedDateTime.toInstant.toEpochMilli - now.millis
WarnungTimerGewitterEnde.postUpdate(java.lang.Math.round(millis_Gewitter_Ende/1000/60))
createTimer(now.plusSeconds(5), [ |
var int Gewitter_Start = (WarnungTimerGewitterStart.state as Number).intValue
var int Gewitter_Ende = (WarnungTimerGewitterEnde.state as Number).intValue
if (Gewitter_Start_Timer !== null) {
Gewitter_Start_Timer.reschedule(now.plusMinutes(Gewitter_Start))
logInfo("WarnungStart", "Timer aktualisiert, Beginn der Gewitterarnung in " + Gewitter_Start + " Minuten")
}
else {logInfo("WarnungStart", "Beginn der Gewitterarnung in " + Gewitter_Start + " Minuten")
Gewitter_Start_Timer = createTimer(now.plusMinutes(Gewitter_Start), [ |
DWD_Gewitter.sendCommand("ON")
])
}
if (Gewitter_Ende_Timer !== null) {
Gewitter_Ende_Timer.reschedule(now.plusMinutes(Gewitter_Ende))
logInfo("WarnungEnde", "Timer aktualisiert, Ende der Gewitterwarnung in " + Gewitter_Ende + " Minuten")
}
else {logInfo("WarnungEnde", "Ende der Gewitterwarnung in " + Gewitter_Ende + " Minuten")
Gewitter_Ende_Timer = createTimer(now.plusMinutes(Gewitter_Ende), [ |
DWD_Gewitter.sendCommand("OFF")
])
}
])
}
else return
end
Unwetter.items (in addition you will need will need some of the demo.items from DWDUnwetter Binding):
Switch DWD_Gewitter "Starkes Gewitter"
Number WarnungTimerGewitterStart "Beginn Warnung in Minuten [%d]"
Number WarnungTimerGewitterEnde "Ende Warnung in Minuten [%d]"
You can add multiple switches depending on the type of warning.
As you will probably see right away, I am not a programmer, so I did all of this through trial and error. That is why I am happy to receive any suggestions on how to do this even better.
For example, I have no idea how to implement it if the warning duration is suddenly extended.
EDIT: I found out how to do this, a lot easier than I thougt…
Best regards,
Leif