Unwetterwarnungen per Sprachausgabe ausgeben

Fast jeder kennt sie, die mobile Apps, die einem aktuelle Unwetterwarnungen auf das Handy pushen. Was ist aber, wenn man zu Hause ist und das Handy sich nicht in Reichweite befindet? Genau hier setzt eine interessante Lösung an, auf die mich der Blogleser Thomas aufmerksam gemacht hat. Eine Unwetterwarnung mit Sprachausgabe. In diesem Blogbeitrag erkläre ich euch, wie ihr in FHEM die Unwetterwarnungen abruft und diese dann akustisch über einen angeschlossenen Lautsprecher ausgibt.

Vorbereitungen

Einrichtung der Sprachausgabe auf dem Raspberry und definieren des Moduls „Text2Speech“ innerhalb von FHEM. Mehr dazu in meinem Blogbeitrag „Text2SPeech – Sprachausgabe auf dem Raspberry„.

Folgende Beschreibung geht von einem Text2Speech-Device mit dem Namen „MyTTS“ aus. Bei einem anderen Namen müssen die folgenden Befehle entsprechend angepasst werden.

Unwetterwarnungen abrufen

Es gibt diverse Möglichkeiten Unwetterwarnungen in FHEM abzurufen. Eine kleine Übersicht erhaltet ihr auf der FHEM-Wiki-Seite. Für die Sprachausgabe habe ich mich für das Modul „UWZ“ entschieden. Das Modul ruft abhängig von der Postleitzahl die Unwettermeldungen von der Seite www.unwetterzentrale.de ab. Bei Gebieten außerhalb Deutschlands lassen sich die Meldungen auch mit Geokoordinaten abrufen.

Folgende Befehle beziehen sich auf die Stadt Karlsruhe mit der Postleitzahl 76135. Für Informationen zu Orten außerhalb Deutschland einfach den FHEM-Wiki-Eintrag dazu lesen oder ins CommandRef schauen.

Mein UWZ-Device habe ich wie folgt definiert:

Es wird ein UWZ-Device mit dem Namen „Unwetterzentrale“ definiert. Als Ort wird Karlsruhe mit der Postleitzahl 76135 in Deutschland (DE) genommen. Aktualisiert wird alle 3600 Sekunden (jede Stunde).

UWZ Device FHEM

Sobald das Device definiert ist, kann man sich über den Eintrag „update“ im set-Dropdown-Menü die aktuellen Warnmeldungen holen.

Sollten aktuell Unwetterwarnungen vorliegen erhält man nun eine Menge ein Readings.

UWZ Reading FHEM

Je nach Anzahl an Warnungen gibt es unterschiedlich viele Readings. Nummeriert werden sie durch eine Zahl von 0-9 im Namen des Readings – Warn_0_End, Warn_0_Hai, … , Warn_1_End, Warn_1_Hail usw. Eine Übersicht der Readings gibt auf der FHEM-Wiki-Seite zum Modul UWZ.

Wichtig für die akustische Ausgabe sind hier die beiden Readings „Warn_0_LongText“ und „Warn_0_ShortText“. Diese beiden Readings beinhalten die erste Unwetterwarnung als Text. Entweder die lange oder die kurze Form.

Sprachausgabe einrichten

Wie oben schon, erwähnt läuft die Sprachausgabe über das Modul „Text2Speech“. In diesem Fall hat das definierte Device den Namen „MyTTS“.

Damit die Unwetterwarnungen akustisch ausgegeben werden, wird ein Notify definiert. Fürs Verständnis fange ich mit einem einfache Notify an

einfache Sprachausgabe

Das Notify wird zunächst mit den Dummy-Werten a und b definiert:

Über den DEF-Editor kann nun die finale Definition erfolgen.

Diese Definition legt nun zwei Variablen an. Eines mit der Anzahl an Warnmeldungen („warncounter“) und ein anderes mit dem Text der Warnmeldung („warntext“). Ich habe mich für die lange Version entschieden. Natürlich lässt sich hier auch die Kurzform („Warn_0_ShortText“) einsetzten.

Das Notify reagiert nun auf kein bestimmtes Reading. Sobald nun das Device „Unwetterzentrale“ ein Event erzeugt, werden die oben genannten Befehle ausgeführt. Liegt mindestens eine Warnmeldung vor („if($warncounter > 0)“ wird die Sprachausgabe gestartet und mit einem Gong eingeleitet.

Eine einfache Sprachausgabe ist nun eingerichtet. Problem bei dieser Art ist, dass das Device „Unwetterzentrale“ bei jeder Aktualisierung, also alle 3600 Sekunden, ein Event auslöst. Es wird also jede Stunde die Sprachausgabe gestartet. Dies könnte etwas nerven.

einfache Sprachausgabe nur bei Veränderung

Mit ein paar Anpassungen kann man dies jedoch umgehen. Der erste Gedanke liegt nahe, dass man das Notify anpasst und nur noch ein bestimmtes Reading überwacht – „Unwetterzentrale:.Warn_0_LongText {…“. Das Notify wird nun nur ausgeführt, wenn das Reading „Warn_0_LongText“ vom Device „Unwetterzentrale“ ein Event auslöst. Klingt zunächst richtig, jedoch löst das Reading ebenfalls jede Stunde bei seiner Aktualisierung ein Event aus. Egal, ob es sich Verändert hat oder nicht. Hier kommt das Attributen „event-on-change-reading“ zum Einsatz.

Das Device „Unwetterzentrale“ löst ab sofort nur noch ein Event aus, wenn sich das Reading „Warn_0_LongText“ gegenüber dem letzten Reading ändert. Dadurch, dass das Notify sowieso das komplette Device „Unwetterzentrale“ überwacht, kann dies so bleiben. Durch das hinzugefügte Attribut löst das Device nur noch ein Event bei Änderung des Readings „Warn_0_LongText“ aus.

einfache Sprachausgabe nur bei Veränderung mit Nachtruhe

Dank des Attributs erklingt die Sprachausgabe nun nur noch bei einer aktualisierten Warnmeldung. Klingt zunächst schon mal sehr praktisch. Jedoch spätestens Nachts um halb drei, wenn auf einmal eine Stimme in der Wohnung irgendwelche Warnmeldungen vorliest, hat man genug von dieser doch so praktischen aktustischen Warnwettermeldungen.

Aber auch gegen dieses kleine Problem gibt es natürlich eine Lösung. Eine Möglichkeit ist das Anpassen des Notifys. Durch das Hinzufügen einer Variable mit der aktuellen Zeit und das Erweitern der if-Abfrage lässt sich die Sprachausgabe zeitlich eingrenzen.

Mit der obigen Definition findet eine Sprachausgabe nur im Zeitraum von 8 Uhr bis 22 Uhr statt.

Eine weitere Möglichkeit die Sprachausgabe zeitlich zu begrenzen, ist der Einsatz eines at-Devices. Mit Hilfe von at-Devices lassen sich bestimmte Aktion zu einem bestimmten Zeitpunkt ausführen. Man definiert sich also zwei Devices, welche das Notify morgens aktivieren und abends wieder deaktivieren.

Die at-Devices aktivieren nun morgens um 8 Uhr das Notify und deaktivieren es wieder abends um 22 Uhr.

Alternative zu Text2Speech

Das Modul Text2Speech erfordert den Anschluss eines Lautsprechers an den Raspberry. Je nachdem, wo sich der Raspberry befindet, kann dies zu Problemen führen. Sollte sich der Raspberry zum Beispiel im Keller befinden, dann bringen die akustische Warnmeldungen wenig. Des Weiteren ist die Soundausgabe vom Raspberry nicht gerade die Beste.

Sollte man jedoch bereits ein Tablet zur Steuerung von FHEM eingerichtet haben (Tablet-UI), dann lässt sich dieses zur Soundausgabe nutzen. Dazu muss einfach das Tablet über das AMAD-Modul eingerichtet werden, mehr dazu auf meinem Blogbeitrag. Dadurch lassen sich diverse Einstellungen des Tablets über FHEM einstellen.

Zusätzliche zu erlaubt das Modul auch das Absetzen einer Nachricht, welche dann über das Tablet akustisch ausgegeben wird.

AMAD Sprachausgabe

Über das Set-Menü lässt sich über den Eintrag „ttsMsg“ ein Sprachausgabe starten.

Passt man nun das Notify an, dann werden die Wanrmeldungen über den Lautsprecher des Tablets ausgegeben.

Die Sprachausgabe findet nun über das Tablet statt. Da dieses auch zum Steuern verwendet wird, befindet sich dies meisten an einer zentralen Stelle. Die Warnmeldungen sind also entsprechend gut zu höhren.

Ein weiterer Vorteil ist der, dass die Soundqualität des Tablet besser und lauter ist als die vom Raspberry. Hier ist jeweils eine kleine Beispielausgabe vom Raspberry und vom Tablet.

Soundausgabe mit dem Modul Text2Speech über die integrierte Soundkarte vom Raspbbery:

Soundausgabe mit dem Modul AMAD2 über ein Tablet:

Der Qualitätsunterschied ist sehr gut zu erkennen. Hat man also ein Tablet eingerichtet,dann sollte man dieses für die Sprachausgabe verwenden.

Die Sprachausgabe lässt sich natürlich je nach Wunsch anpassen. Zum Beispiel mit dem Endzeitpunkt der Warnmeldungen, die Höhe der Warnstufe oder die Anzahl der Warnungen. Einfach die Readings vom UWZ-Modul entsprechend in die Sprachausgabe einbauen.

Ich hoffe ich konnte euch die Idee für die akustische Ausgabe von Unwetterwarnungen etwas näher bringen und bedanke mich hiermit nocheinmal beim Blogleser Thomas für die Inspiration.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

*