Autor Thema: Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz  (Gelesen 11556 mal)

Offline herrmannj

  • Global Moderator
  • Hero Member
  • ****
  • Beiträge: 5996
Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
« am: 24 August 2020, 18:44:17 »
Hallo zusammen,

folgende def erstellt ein Device welches alle Landkreise/Städte mit einem 7-Tage-Inzidenz > 25 (erstes multi) sowie zusätzlich ausgewählte Landkreise/Städte (zweites multi) anzeigt. Ein aktuelles JsonMod ist erforderlich.

define RKI7 JsonMod https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=1%3D1&outFields=last_update,cases7_per_100k,BEZ,BEM,GEN,BL,county&returnGeometry=false&outSR=4326&f=json
Readinglist:
multi(jsonPath('$.features[?(@.attributes.cases7_per_100k > 25)]'), property('attributes.GEN'), sprintf('%.1f', property('attributes.cases7_per_100k')));
multi(jsonPath("\$.features[?(\@.attributes.GEN in ['Hamburg', 'Stormarn', 'Harburg'])]"), property('attributes.GEN'), sprintf('%.1f', property('attributes.cases7_per_100k')));

update morgens um 7:00
interval   0 7 * * *
Ausgabe:
   READINGS:
     2020-08-24 18:34:51   Dachau          26.6
     2020-08-24 18:34:51   Ebersberg       37.3
     2020-08-24 18:34:51   Frankfurt_Oder  27.6
     2020-08-24 18:34:51   Frankfurt_am_Main 34.0
     2020-08-24 18:34:51   Germersheim     27.9
     2020-08-24 18:34:51   Gro-Gerau       29.5
     2020-08-24 18:34:51   Hamburg         7.5
     2020-08-24 18:34:51   Hamm            27.4
     2020-08-24 18:34:51   Harburg         3.6
     2020-08-24 18:34:51   Heilbronn       38.9
     2020-08-24 18:34:51   Ingolstadt      31.4
     2020-08-24 18:34:51   Kelheim         29.4
     2020-08-24 18:34:51   Munchen         27.9
     2020-08-24 18:34:51   Neu-Ulm         27.6
     2020-08-24 18:34:51   Offenbach_am_Main 55.1
     2020-08-24 18:34:51   Rosenheim       45.8
     2020-08-24 18:34:51   Stormarn        4.9
     2020-08-24 18:34:51   Ulm             28.5
     2020-08-24 18:34:51   Wiesbaden       34.8

vg
Joerg
« Letzte Änderung: 24 August 2020, 18:46:04 von herrmannj »
smartVisu mit fronthem, einiges an HM, RFXTRX, Oregon, CUL, Homeeasy, ganz viele LED + Diverse

Offline olvis

  • New Member
  • *
  • Beiträge: 14
Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
« Antwort #1 am: 09 September 2020, 12:29:13 »
Hi, danke. Nette Idee.
Habe das ganze in eine ReadingsGroup gepackt und die Ausgabe farbcodiert (>50 = rot, >25 = orange, darunter grün).
Dazu noch die Timestamps entfernt (notime) und die einzelnen Zeilen nicht klickbar (nolinks)
defmod COVID readingsGroup RKI7
attr COVID nolinks 1
attr COVID notime 1
attr COVID valueStyle { if($VALUE > 50) {'style="color:red"'} elsif($VALUE > 25) {'style="color:orange"'} else{'style="color:green"'}}

Und noch ein Kommentar für die Auswahl von Städten:
Umlaute kann man im multi angeben, in der Ausgabe sind es dann nur die "reinen" Vokale: Köln --> Koln

vg
Oliver
« Letzte Änderung: 09 September 2020, 12:33:26 von olvis »

Offline herrmannj

  • Global Moderator
  • Hero Member
  • ****
  • Beiträge: 5996
Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
« Antwort #2 am: 09 September 2020, 13:07:51 »
Moin,

Zitat
Umlaute kann man im multi angeben, in der Ausgabe sind es dann nur die "reinen" Vokale: Köln --> Koln

Yepp, blöde Beschränkung bei den Namen für Readings innerhalb fhem. Umlaute sind verboten, die Korrektur erfolgt in JsonMod "minimal invasiv", aus 'ö' wird 'o'
smartVisu mit fronthem, einiges an HM, RFXTRX, Oregon, CUL, Homeeasy, ganz viele LED + Diverse

Offline Parador

  • Full Member
  • ***
  • Beiträge: 246
Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
« Antwort #3 am: 16 Oktober 2020, 15:19:35 »
Hallo Joerg,

erstmal danke fürs Teilen dieses sehr aktuellen Beispiels!
Nachdem ich heute ein Update gefahren habe, erhalte einen Fehler im Log angezeigt:
Zitat
error: wrong filter expression in JsonPath filter:   (#1398) in multi(jsonPath('$.features[?(@.attributes.cases7_per_100k > 25)]'), property('attributes.GEN'), sprintf('%.1f', property('attributes.cases7_per_100k')))

was kann passiert sein? Habe den Part 1:1 per Copy & Paste eingefügt...


Kann es auch sein, dass mit der Quelle etwas nicht passt? Bei Deinem Beispiel "Stormarn" wird aktuell ein Wert von 14,3 angezeigt über die Webseite: https://www.kreis-stormarn.de/aktuelles/pressemeldungen/2020/zahl-der-bestaetigten-corona-faelle-in-stormarn.html wird aber ein Wert von 23,4 gemeldet (gestern 19,3). Auch bei uns hier weicht der Wert deutlich ab... +20 in etwa...

Danke & viele Grüße
« Letzte Änderung: 16 Oktober 2020, 15:31:50 von Parador »

Offline herrmannj

  • Global Moderator
  • Hero Member
  • ****
  • Beiträge: 5996
Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
« Antwort #4 am: 16 Oktober 2020, 17:44:12 »
Moin

Zur Quelle: ist das rki, sind deren Zahlen.

Der Fehler ist ein Bug. Komme allerdings erst Anfang der Woche dazu, wird beseitigt.

Vg
Jörg
smartVisu mit fronthem, einiges an HM, RFXTRX, Oregon, CUL, Homeeasy, ganz viele LED + Diverse

Offline Parador

  • Full Member
  • ***
  • Beiträge: 246
Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
« Antwort #5 am: 16 Oktober 2020, 18:39:41 »
Hallo Joerg,

danke für die schnelle Antwort & die Fehlerbeseitigung ;-)
Zur Quelle: komisch, habe vorhin die Zahlen über https://npgeo-corona-npgeo-de.hub.arcgis.com/datasets/917fc37a709542548cc3be077a786c17_0/data?geometry=-30.805%2C46.211%2C52.823%2C55.839&orderBy=GEN&selectedAttribute=cases7_per_100k abgerufen, und da kommen für uns ganz andere Zahlen raus.
Stormarn stimmt mit den 14,3 überein... sind auch RKI Zahlen

VG

Offline herrmannj

  • Global Moderator
  • Hero Member
  • ****
  • Beiträge: 5996
Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
« Antwort #6 am: 16 Oktober 2020, 21:09:11 »
Wenn du eine andere Quelle kennst kannst du die problemlos nehmen, das ist ja der Zweck von jsonmod.

Vg
Joerg
smartVisu mit fronthem, einiges an HM, RFXTRX, Oregon, CUL, Homeeasy, ganz viele LED + Diverse

Offline Parador

  • Full Member
  • ***
  • Beiträge: 246
Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
« Antwort #7 am: 18 Oktober 2020, 14:44:11 »
Hallo Joerg,

alles klar, habe mich an die andere Quelle angehängt und lerne gerade wie ich mit JsonMod umgehen muss...
darf ich hier meine Fragen dazu stellen?

Mit der Abfrage:
Zitat
https://opendata.arcgis.com/datasets/917fc37a709542548cc3be077a786c17_0.geojson?where=GEN%20%3D%20'Augsburg'
die komischerweise nicht direkt funktioniert...
deshalb noch mal der Weg dorthin:
Aufruf von: https://hub.arcgis.com/datasets/917fc37a709542548cc3be077a786c17_0
dann Aufruf der Daten, dann Einschränkung selbiger in Spalte "GEN" auf Stadt hier Augsburg, dann kommen Werte für Stadt und Landkreis, dann auf der rechten Seite bei "API's" das GEOJSON für das gefilterte Datenset.. dann kommt: https://opendata.arcgis.com/datasets/917fc37a709542548cc3be077a786c17_0.geojson?where=GEN%20%3D%20'Augsburg'
Nun kommt man zu einer JSON Datei die sich abrufen lässt...

Daraus habe ich mir Werte nun folgendermaßen dem erhaltenen JSON ausgelesen:

single(jsonPath('$.features.0.properties.EWZ'), 'Stadt_Einwohner', 'leer');
single(jsonPath('$.features.0.properties.cases7_per_100k'), 'Stadt_Faelle7_pro_100k', 'leer');
single(jsonPath('$.features.0.properties.deaths'), 'Stadt_Tote', 'leer');
single(jsonPath('$.features.0.properties.cases'), 'Stadt_Faelle', 'leer');
single(jsonPath('$.features.0.properties.recovered'), 'Stadt_Genesene', 'nicht gemeldet');
single(jsonPath('$.features.0.properties.last_update'), 'Stadt_Stand', 'leer');
single(jsonPath('$.features.1.properties.EWZ'), 'Landkreis_Einwohner', 'leer');
single(jsonPath('$.features.1.properties.cases7_per_100k'), 'Landkreis_Faelle7_pro_100k', 'leer');
single(jsonPath('$.features.1.properties.deaths'), 'Landkreis_Tote', 'leer');
single(jsonPath('$.features.1.properties.cases'), 'Landkreis_Faelle', 'leer');
single(jsonPath('$.features.1.properties.recovered'), 'Landkreis_Genesene', 'nicht gemeldet');
single(jsonPath('$.features.1.properties.last_update'), 'Landkreis_Stand', 'leer');

Nun habe ich noch eine Frage

b) ich würde gerne die cases7_per_100k gleich auf eine/zwei Stellen hinter dem Punkt/Komma runden bekomme das aber nicht hin..
Bisher habe ich es mit folgendem probiert:
single(jsonPath('$.features.0.properties.cases7_per_100k', '%0.2f'), 'Stadt_Faelle7_pro_100k', 'leer');

Vielen Dank für Deine Unterstützung schon jetzt
« Letzte Änderung: 20 Oktober 2020, 09:38:12 von Parador »

Offline herrmannj

  • Global Moderator
  • Hero Member
  • ****
  • Beiträge: 5996
Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
« Antwort #8 am: 18 Oktober 2020, 15:34:53 »
Moin,

Bug aus Post #3 https://forum.fhem.de/index.php/topic,113798.msg1092984.html#msg1092984 ist gefixed. Die neue Version ist im svn und wird ab morgen Vormittag per fhem update verteilt.

Die Liste (>35) ist erschreckend lang...  ???

Zu den Abweichungen bei den Zahlen (Landkreis selber vs RKI): soweit ich verstehe gibt es einen zeitlichen Versatz.

Das Beispiel aus dem letzten post kann ich nicht nachvollziehen, die Quelle liefert bei mir keine Daten.

vg
Joerg
smartVisu mit fronthem, einiges an HM, RFXTRX, Oregon, CUL, Homeeasy, ganz viele LED + Diverse
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline Parador

  • Full Member
  • ***
  • Beiträge: 246
Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
« Antwort #9 am: 18 Oktober 2020, 15:48:56 »
Habe gerade den Weg zu den Daten nochmal beschrieben, falls Zeit und Interesse besteht. bei der Quelle scheinen die Daten aktueller...
Kannst Du mir noch einen Tipp für's Runden geben?

VG

Offline herrmannj

  • Global Moderator
  • Hero Member
  • ****
  • Beiträge: 5996
Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
« Antwort #10 am: 18 Oktober 2020, 16:11:20 »
klar; Du da fehlt ein 'f' bei Dir: jsonPathf 
smartVisu mit fronthem, einiges an HM, RFXTRX, Oregon, CUL, Homeeasy, ganz viele LED + Diverse

Offline Parador

  • Full Member
  • ***
  • Beiträge: 246
Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
« Antwort #11 am: 19 Oktober 2020, 08:07:09 »
Hallo,

super das klappt schon alles perfekt - DANKE.
Allerdings kriege ich immer noch einen Fehler im Log, hast Du da vielleicht auch einen Tipp?

Vielen Dank
« Letzte Änderung: 20 Oktober 2020, 09:37:11 von Parador »

Offline RockFan

  • Full Member
  • ***
  • Beiträge: 117
Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
« Antwort #12 am: 19 Oktober 2020, 22:03:00 »
Hallo Joerg,

ich bin gerade zufällig auf den Post gestoßen und habe es gleich mal umgesetzt, da das ja momentan DAS Kriterium für Regulierungen ist.
Vielen Dank!

Hierbei ist mir aufgefallen, dass die Verwendung des Feldes "GEN" in einigen Fällen (z.B. Augsburg, München, uvm.) zu dem Problem führt, dass sowohl die Städte, als auch die Landkreise im Feld GEN den exakt gleichen Namen haben ("Augsburg", "München", ...) und somit nur eines von Beiden herausgefiltert wird.

Das kann man allerdings relativ leicht beheben, indem man "county" statt "GEN" verwendet. Im Ergebnis sind zwar die unschönen "_", die die Leerzeichen ersetzen ("SK_Munchen", "LK_Munchen", ...), aber dafür ist das Ergebnis vollständig.

Viele Grüße
Dieter
Raspbian (Buster) auf Raspberry Pi 4 /  CUL + RFXTRX + TCM / FS20, FHT 80B, S300TH, Intertechno, DMX, Milight, EnOcean, Homematic, AMAD, Home Connect, MiSmartHome, Yeelight, ...
Gefällt mir Gefällt mir x 1 Informativ Informativ x 1 Liste anzeigen

Offline yersinia

  • Hero Member
  • *****
  • Beiträge: 1092
    • Cyanide & Happiness
Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
« Antwort #13 am: 20 Oktober 2020, 08:14:52 »
Das kann man allerdings relativ leicht beheben, indem man "county" statt "GEN" verwendet. Im Ergebnis sind zwar die unschönen "_", die die Leerzeichen ersetzen ("SK_Munchen", "LK_Munchen", ...), aber dafür ist das Ergebnis vollständig.
Man kann aber auch über OBJECTID gehen (welchen man sich aus der Quelle erst relativ mühsam raussuchen muss) und diesen Wert als Identifier der Readings nehmen und die Beschreibung als Readingswert. Ein Beispiel ist hier->https://forum.fhem.de/index.php/topic,109413.msg1093720.html#msg1093720 aufgeführt.

Für SK München wäre es 224, LK München ist 239:
defmod coronaSpreadCounties JsonMod https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=1%3D1&outFields=death_rate,cases,deaths,cases_per_100k,cases_per_population,cases7_per_100k,BL,BL_ID,county,OBJECTID&returnGeometry=false&outSR=4326&f=json
attr coronaSpreadCounties event-on-update-reading .computedReadings
attr coronaSpreadCounties interval 10 */3 * * *
attr coronaSpreadCounties readingList multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['224', '239'])]"), concat(property('attributes.OBJECTID'),'_name'), property('attributes.county'));;\
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['224', '239'])]"), concat(property('attributes.OBJECTID'),'_cases'), property('attributes.cases'));;\
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['224', '239'])]"), concat(property('attributes.OBJECTID'),'_deaths'), property('attributes.deaths'));;\
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['224', '239'])]"), concat(property('attributes.OBJECTID'),'_cases7_per_100k'), property('attributes.cases7_per_100k'));;
attr coronaSpreadCounties room CoViD-19
attr coronaSpreadCounties stateFormat { my $ret = "<div style=\"text-align: left;;\">";;\
$ret .= "last <a href=\"https://corona.rki.de\" title=\"RKI CoViD19\" rel=\"noopener noreferrer\" target=\"_blank\">RKI CoViD-19</a> check => ";;\
$ret .= POSIX::strftime("%d.%m. %H:%M",localtime(time_str2num(ReadingsTimestamp($name,".computedReadings","2000-01-01 00:00:00"))));;\
$ret .= "<br \/>";;\
$ret .= ReadingsVal($name,"224_name","-").": ";;\
$ret .= "<font style=\"font-weight:bold;;color:";;\
if(ReadingsNum($name,"224_cases7_per_100k",0) < 35) {\
$ret .= "green";;\
} elsif (ReadingsNum($name,"224_cases7_per_100k",0) < 50) {\
$ret .= "orange";;\
} else {\
$ret .= "red";;\
}\
$ret .= ";;\">".sprintf("%.1f", ReadingsNum($name,"224_cases7_per_100k",0))."</font>&nbsp;;&amp;;&nbsp;;";;\
$ret .= "<font style=\"color:orange;;\">".ReadingsVal($name,"224_cases","-")." F&auml;;lle</font>&nbsp;;&amp;;&nbsp;;";;\
$ret .= "<font style=\"color:red;;\">".ReadingsVal($name,"224_deaths","-")." Tote</font><br \/>";;\
$ret .= ReadingsVal($name,"239_name","-").": ";;\
$ret .= "<font style=\"font-weight:bold;;color:";;\
if(ReadingsNum($name,"239_cases7_per_100k",0) < 35) {\
$ret .= "green";;\
} elsif (ReadingsNum($name,"239_cases7_per_100k",0) < 50) {\
$ret .= "orange";;\
} else {\
$ret .= "red";;\
}\
$ret .= ";;\">".sprintf("%.1f", ReadingsNum($name,"239_cases7_per_100k",0))."</font>&nbsp;;&amp;;&nbsp;;";;\
$ret .= "<font style=\"color:orange;;\">".ReadingsVal($name,"239_cases","-")." F&auml;;lle</font>&nbsp;;&amp;;&nbsp;;";;\
$ret .= "<font style=\"color:red;;\">".ReadingsVal($name,"239_deaths","-")." Tote</font>";;\
$ret .= "</div>";;\
return $ret;;}
attr coronaSpreadCounties update-on-start 1
attr coronaSpreadCounties webCmd reread
« Letzte Änderung: 20 Oktober 2020, 10:02:09 von yersinia »
viele Grüße, yersinia
----
FHEM 6.0 (SVN) on RPi 4B with RasPi OS Buster (perl 5.28.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@aculfw | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

Offline ErzGabriel

  • Full Member
  • ***
  • Beiträge: 315
Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
« Antwort #14 am: 25 Oktober 2020, 15:05:00 »
Hallo zusammen.
Ich habe versucht, das Beispiel nachzubauen, über copy & paste. Aber seit 3 Tagen erhalte ich keine Daten vom RKI. Fhem ist auf dem neusten Stand und neu gestartet habe ich es auch.
Hat jemand von Euch einen Tipp für mich, warum nichts ankommt?

Danke.