Hi,
nachdem wunderground in ihrer API scheinbar (bereits vor geraumer Zeit) bei den Unwetterwarnungen etwas umgestellt haben, wurde bei mir quasi immer eine Unwetterwarnung angezeigt. Ich habe heute mal recherchiert was dahinter stecken könnte. Folgendes habe ich herausgefunden:
Die Warnungsinformationen bezieht wunderground wohl von
http://meteoalarm.eu
Die Infos von dort sind in 5 Level eingeteilt:
snip_meteoalarm.JPG
Scheinbar ist Level 2 quasi immer aktiv. Also habe ich meine Regel entsprechend erweitert. Es gibt ein neues Item
Code: Alles auswählen
Number WeatherAlert_RAWAlertLevel (gWetter) {http="<[cacheWeatherAlertsWunderground:300000:XSLT(wunderground_weather_alertlevel.xsl)]" }
welches über die entsprechende transform (wunderground_weather_alertlevel.xsl) den Level erhält.
Als echte Unwetterwarnungen sind für mich nur Warnungen ab Level 3 (rot) relevant, also habe ich meine Regel entsprechend erweitert:
Code: Alles auswählen
/**
* Änderung am Unwetterwarnungsstatus
*/
rule "WeatherAlert_RAWMessage_Changed"
when
Item WeatherAlert_RAWMessage changed
then
//Leerzeichen am Anfang und Ende entfernen, sowie doppelte Leerzeichen im Text
alertmessage = WeatherAlert_RAWMessage.state.toString.trim().replaceAll("[\\s]+"," ")
//Prüfung ob eine Unwetterwarnung vorliegt (String länger als ein Zeichen und nicht uninitialisiert)
//Update Nov. 2017 wenn der Alertlevel > 2 ist laut http://meteoalarm.eu/
if (alertmessage.length() > 1 && alertmessage != "Uninitialized" && WeatherAlert_RAWAlertLevel.state > 2){
//Wenn JA Umlaute und falsche Zeichen der API ersetzen bzw. entfernen
logInfo("HomeBox.WeatherAlert_Message_Changed", "Unwetterwarnung erkannt")
val umlaute = newArrayList('Ä','Ö',"Ü","ä","ö","ü","ß","é","è","ê","â","á","à","§","°","ß","","","","","","Ö","Ä","Extrem Temperatur: ","")
val replace = newArrayList("Ä","Ö","Ü","ä","ö","ü","ß","é","è","ê","â","á","Ã","§","°","àŸ","&","nbsp","\n","\r"," ","Thunderstorms ","à–"," à„","Extreme high temperature","deutsch:")
umlaute.forEach[x,i|
alertmessage = alertmessage.replace(replace.get(i),x)
]
alertmessage = alertmessage.replaceAll("deutsch: ","")
//Item für Nachricht mit formatiertem String aktualisieren aktualisieren
WeatherAlert_Message.postUpdate(alertmessage)
WeatherAlert.postUpdate(alertmessage)
// Prüfung ob neue Unwettermeldung vorliegt (Aktivität == OFF)
if (WeatherAlertActive.state == OFF){
// Unwetterwarnung aktivieren
WeatherAlertActive.sendCommand(ON)
//Bewohner per WhatsApp informieren
//executeCommandLine("/opt/yowsup/yowsup-cli@@demos@@-c@@/opt/yowsup/homebox.config@@-s@@4915116217227-1435683963@@UNWETTERWARNUNG:\n" + alertmessage)
}
//Wenn NEIN
} else {
//Zurücksetzen der Nachricht
WeatherAlert_Message.postUpdate("Uninitialized")
WeatherAlert.postUpdate("Uninitialized")
//Wenn Aktivität noch ON
if (WeatherAlertActive.state == ON){
//Aktivierung abschalten
WeatherAlertActive.sendCommand(OFF)
//Bewohner per WhatsApp informieren
pushover("UNWETTERWARNUNG AUFGEHOBEN")
}
}
// Aktualisierungsdatum setzen
WeatherLastUpdate.postUpdate(new DateTimeType())
logDebug("HomeBox.WeatherRainForecast_Changed", "Updated WeatherLastUpdate: " + WeatherLastUpdate.state)
end
Eventuell hilft diese kleine Erweiterung dem einen oder anderen.
Grüße,
Seppy