In der heutigen Zeit interessieren wir (meine Frau und Ich) uns natürlich für die aktuellen Coronafallzahlen in unserem Landkreis. Das haben wir bisher immer über die Webseite des RKI getan. Da das aber unter Umständen sehr mühsam seien kann habe ich mich dazu entschieden das Ganze zu automatisieren und Push Mitteilungen verschicken zu lassen. Wie ich das getan habe, möchte ich in diesem Beitrag gerne etwas ausführlicher beschreiben.
Vorwort
Wir benutzen für unser SmartHome IP Symcon als Steuerzentrale. IP Symcon läuft auf einem Raspberry Pi* im Schaltschrank und die Programmierung erfolgt in der Programmiersprache PHP. Auch das Versenden von Push Mitteilungen steuert IP Symcon (Cloud Service von Symcon + APP). Dieser Beitrag richtet sich aber nicht nur an IP Symcon User. Die Datenbasis wird auch von anderen Systemen wie z.B. OpenHab oder Node-Red unterstützt.

Woher kommen die Daten?
Jeder kennt wahrscheinlich das Covid-19 Dashboard des Robert-Koch-Instituts. Was allerdings nicht so bekannt seien dürfte, ist der Covid-19 Datenhub. Dieser Service stellt alle Informationen zu Covid-19 Fallzahlen als REST-API zur Verfügung. Mithilfe des Datenhubs können externe Webseiten oder Programme auf die aktuellen Fallzahlen zugreifen. Wir nutzen die Daten der Landkreise für diesen Beitrag.

Wie kommen wir nun an die Daten?
Der Covid-19 Datenhub bietet einen sogenannten „API Explorer“ an, mit dessen Hilfe man sich eine URL Abfrage bauen kann. Für uns interessante Informationen sind:
- Inzidenz
- Anzahl aktuell erkrankter Personen
- Todesfälle
- Letzte Aktualisierung
Um an diese Informationen zu kommen, konfigurieren wir nun die Abfrage im API Explorer. Damit auch nur unser Landkreis Germersheim angezeigt wird, ist es wichtig einen Filter in der Abfrage auf „GEN |TEXT“ zu setzen. Hier trägt man den Landkreis ein und drückt dann die Eingabetaste um den Filter hinzuzufügen.

Um die Antwort der Abfrage möglichst klein zuhalten, aktivieren wir nur folgende Außenfelder in der Abfrage:
- cases
- deaths
- last_update
- cases7_per_100k_txt

Jetzt können wir die Abfrage URL in die Zwischenablage kopieren.

Wenn wir uns die URL im Browser anzeigen lassen, erhalten wir einen Text im JSON Format. Dieser Text ist für uns Menschen natürlich schlecht lesbar, für die Datenweiterverarbeitung aber perfekt.

Diese Abfrage kann nun auch in anderen Systemen wie zuvor beschrieben verwendet werden. Eine Decodierung des JSON Stings ist sowohl in OpenHab als auch in Node-Red möglich.
Datenverarbeitung in IP Symcon
Wie schon geschrieben, nutzt IP Symcon zur Programmierung die Programmiersprache PHP. Um die Daten in IP Symcon einzulesen, bedarf es zuerst etwas Vorarbeit. Zuerst werden Variablen erstellt, in die später die Werte geschrieben werden können. Dazu wählen wir uns eine Kategorie aus und klicken dann auf „Objekt hinzufügen“→“Variable“.

Das Ganze machen wir für insgesamt 5 Variablen und wählen jeweils den passenden Typ der Variable. Um die Push Mitteilungen zu versenden sind nur die Variablen: lastUpdate und message notwendig. Die 3 anderen Variablen nutzen wir, um die Werte später im Dashboard anzeigen zu lassen.

Danach erstellen wir ein Script, welches die Daten vom Covid-19 Datenhub abruft, die Werte aus dem JSON String decodiert und dann in die zuvor erstellten Variablen schreibt. Dazu wählen wir wieder die Kategorie aus und erstellen ein Script mit dem Namen „getRKIData“.

Es öffnet sich dann automatisch der Code Editor. Hier hinein kopieren wir das folgende Script. Die zuvor kopierte „Abfrage URL“ kopieren wir jetzt hinter „Sys_GetURLContent“.
<?php //load json response in $content variable $content = Sys_GetURLContent("https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=GEN%20%3D%20%27GERMERSHEIM%27&outFields=cases,deaths,OBJECTID,last_update,cases7_per_100k_txt&outSR=4326&f=json"); //decode json $json = json_decode($content); //set values SetValueString(31965,$json->features[0]->attributes->cases7_per_100k_txt); SetValueInteger(41808,$json->features[0]->attributes->cases); SetValueInteger(40691,$json->features[0]->attributes->deaths); SetValueString(41217,$json->features[0]->attributes->last_update); SetValueString(43961,"LK Germersheim -> Inzidenz: ".$json->features[0]->attributes->cases7_per_100k_txt." | Aktuell Erkrankte: ".$json->features[0]->attributes->cases." | Totesfälle: ".$json->features[0]->attributes->deaths); ?>
Da die Aktualisierung der Daten seitens RKI nur 1x am Tag stattfindet, reicht es aus das Script alle 60 Minuten auszuführen. Dazu weisen wir dem Script ein Ereignis zu, indem wir mit der rechten Maustaste auf das Script klicken und dann auf „Objekt hinzufügen“ → „Ereignis“ → „Zyklisch“ klicken.

In folgendem Popup stellen wir ein, das das Script jeden Tag alle 60 Minuten ausgeführt wird.

Sobald das Script nun alle 60 Minuten ausgeführt wird, werden die erstellten Variablen beschrieben.
Push Mitteilungen erstellen
Jetzt fehlt uns noch die eigentliche Push Mitteilung auf unser Smartphone. Dazu erstellen wir wie zuvor ein Script, nur dieses Mal mit dem Namen „send_message“ direkt unter der Variable „lastUpdate“.

Folgenden Code kopieren wir in den Code Editor.
<?php WFC_PushNotification(49262,"Aktuelle Covid News", GetValueString(43961), "connected",0); ?>
Hier wird eine Push Mitteilung mit dem Titel „Aktuelle Covid News“ und dem Text aus der Variable 43961, welche durch das vorherige Script beschrieben wurde, an unsere Smartphones gesendet. Damit aber nicht alle 60 Minuten eine Push Mitteilung gesendet wird, müssen wir dafür sorgen das die Mitteilung nur gesendet wird sobald sich die Variable „lastUpdate“ ändert. Dazu klicken wir auf das erstellte „send_message“ Script und fügen ein „ausgelöstes Ereignis“ ein.

Im darauf folgenden Popup wählen wir als auslösende Variable „lastUpdate“ aus und stellen bei „Auslöser“ → „Bei Veränderung“ ein und klicken dann auf OK.

Push Mitteilungen versenden
Das Senden der Push Mitteilungen übernimmt IP Symcon automatisch. Sobald sich nun die Variable „lastUpdate“ ändert, führt IP Symcon das Script „send_message“ aus und wir erhalten unsere Push Mitteilung.

Das war es auch schon mit meinem ersten Gast Beitrag hier auf dem Mojo-Blog. Ich hoffe der Beitrag war für den ein oder anderen Interessant und vielleicht sogar nützlich 🙂
Gruß
Kay