In the actual situation, we (my wife and I) are interested in the current corona case numbers in our county. Until now, we have always done this via the website of the RKI. Since this can be very tedious, I decided to automate the process and send push notifications. I would like to describe in this post in more detail on how did it.
We use IP Symcon as a control center for our SmartHome. The IP Symcon runs on a Raspberry Pi* in a control cabinet. The programming is written in the programming language PHP. Also, the sending of push messages is controlled by IP Symcon (Cloud Service of Symcon + APP). This article is not only for IP Symcon users, but the database is also supported by other systems such as OpenHab or Node-Red.
Where does the data come from?
Everyone probably knows the Covid-19 dashboard of the Robert Koch Institute. What might not be so well known, is the Covid-19 Data Hub. This service makes all the information about Covid-19 case numbers available as a REST API. Using the data hub, external websites or programs can access the current case counts. We are using the county data for this article.
How do we get the data?
The Covid-19 data hub uses a so-called “API Explorer”, which can be used to build a URL query. The interesting information for us are:
- Number of currently ill people
- Last update
To get this information, we now create parameter query in the API Explorer. To display only our county Germersheim, it is important to set a filter in the query to “GEN |TEXT”. Here you enter the county and press the Enter key to add the filter.
To keep the query response as small as possible, we only enable the following outer fields in the query:
Now we can copy the query URL to the clipboard.
When we display the URL in the browser, we get a text in JSON format. This text is of course difficult to read for us humans, but perfect for data processing.
This query can now be used in other systems as described before. Decoding of the JSON string is possible in OpenHab as well as in Node-Red.
Data processing in IP Symcon
As mentioned above, IP Symcon uses the programming language PHP for programming. To read the data into IP Symcon, some preliminary work is required. First, we create variables, in which the values can be written later. For this we choose a category and click on “Add object”→”Variable”.
We do this for a total of 5 variables and select the appropriate type of variable for each. To send the push notifications only the variables: “lastUpdate” and “message” are necessary. We use the other 3 variables to display the values later in the dashboard.
Then we create a script that retrieves the data from the Covid-19 data hub, decodes the values from the JSON string, and then writes them to the variables we created earlier. To do this, we again select the category and create a script called “getRKIData”.
The code editor will open automatically. Here we copy and paste the following script. Then we copy the previously copied “Query URL” behind “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->attributes->cases7_per_100k_txt); SetValueInteger(41808,$json->features->attributes->cases); SetValueInteger(40691,$json->features->attributes->deaths); SetValueString(41217,$json->features->attributes->last_update); SetValueString(43961,"LK Germersheim -> Inzidenz: ".$json->features->attributes->cases7_per_100k_txt." | Aktuell Erkrankte: ".$json->features->attributes->cases." | Totesfälle: ".$json->features->attributes->deaths); ?>
Since RKI updates the data only once a day, it is sufficient to run the script every 60 minutes. To do this, we assign an event to the script by right-clicking on the script and then clicking on “Add object” → “Event” → “Cyclic”.
In the following popup we set the script to run every day for every 60 minutes.
As soon as the script is now executed every 60 minutes, the created variables are written.
Create Push notifications
Now we still need the push notification to our smartphone. For this we create a script as we did before, only this time with the name “send_message” directly under the variable “lastUpdate”.
Copy the following code into the code editor.
<?php WFC_PushNotification(49262,"Aktuelle Covid News", GetValueString(43961), "connected",0); ?>
Here, a push notification with the title “Latest Covid News” and the text from variable 43961, which was written by the previous script, is sent to our smartphones. To avoid sending a push message every 60 minutes, we must make sure that the message is only sent when the variable “lastUpdate” changes. For this we click on the created “send_message” script and add a “triggered event”.
In the following popup, we select “lastUpdate” as the triggering variable and set “Trigger” → “On Change” and then click OK.
Send Push notifications
Sending of push notifications is done automatically by IP Symcon. As soon as the variable “lastUpdate” changes, IP Symcon executes the script “send_message” and we receive our push notification.
This is the end of my first guest article on the Mojo blog. I hope the contribution was interesting for one or the other and maybe even useful 🙂