FHEM Forum

FHEM => Automatisierung => Thema gestartet von: herrmannj am 24 August 2020, 18:44:17

Titel: Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: herrmannj 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
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: olvis 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
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: herrmannj am 09 September 2020, 13:07:51
Moin,

ZitatUmlaute 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'
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: Parador 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:
Zitaterror: 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 (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
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: herrmannj 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
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: Parador 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
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: herrmannj 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
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: Parador 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:
Zitathttps://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
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: herrmannj 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
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: Parador 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
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: herrmannj am 18 Oktober 2020, 16:11:20
klar; Du da fehlt ein 'f' bei Dir: jsonPathf 
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: Parador 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
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: RockFan 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
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: yersinia am 20 Oktober 2020, 08:14:52
Zitat von: RockFan am 19 Oktober 2020, 22:03:00Das 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
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: ErzGabriel 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.
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: yersinia am 25 Oktober 2020, 15:33:24
Ist das ein Doppelpost weil du im anderen Thread eine ähnliche Frage gestellt hast -> https://forum.fhem.de/index.php/topic,109413.msg1095291.html#msg1095291 (https://forum.fhem.de/index.php/topic,109413.msg1095291.html#msg1095291)?

Tipps kann man viele geben, warum es bei dir nicht gehen könnte.
Ein list des Devices und etwaige Log-Auszüge hilft.
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: ErzGabriel am 25 Oktober 2020, 15:54:48
Ist kein Doppelpost in meinen Augen. Hier geht es um die Inzidenz und im anderen Thread geht es um die Daten für Welt und Bundesländer.

Das hier hat sich auch seit wenigen Minuten erledigt, auf einmal kommen die Daten an, ich kann mir nur nicht erklären warum. Ich habe nichts am System geändert.
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: Gisbert am 09 November 2020, 18:34:36
Hallo hermannj,
hallo yersinia,

mittlerweile gibt es ja soviele Städte/Landkreise mit einem 7-Tage-Inzidenzwert > 50, so dass diese Zahl alleine nicht ausreicht.
Kann man aus dem vorhandenen Datensatz auch mehrere Berechnungen zur Anzahl, z.B. > 100, > 150, > 200, > 300 durchführen lassen?

Mit dem Attribut readingList könnte ich ja mehere Abfragen machen, > 100 usw., aber das ist von mir nur geraten.
Wie aber würde ich die Anzahl > 50, 100 usw. aus den Readings herausfiltern?

Könnt ihr mir weiterhelfen? (Edit: Fragezeichen vergessen)

Hier ist meine derzeitige, funktionierende Definition:
defmod 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
attr RKI7 comment https://forum.fhem.de/index.php/topic,97471.msg907044.html#msg907044
attr RKI7 readingList multi(jsonPath('$.features[?(@.attributes.cases7_per_100k > 50)]'), property('attributes.GEN'), sprintf('%.1f', property('attributes.cases7_per_100k')));;
attr RKI7 room Corona
attr RKI7 sortby 1
attr RKI7 stateFormat {"Zahl der Landkreise/Städte</br>\
mit 7-Tage-Inzidenz > 50: <font style=\"color:red;;font-weight:bold;;\">".ReadingsVal($name,'_Anzahl','-')."</font>"}
attr RKI7 userReadings _Anzahl {my $anz = grep( m/.*/, ( keys %{$hash->{READINGS}} ));; return $anz;;}


Viele Grüße Gisbert
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: Gisbert am 11 November 2020, 07:33:06
Hallo hermannj,
hallo yersinia,

die Ermittelung der Anzahl der Städte/Landkreise mit RKI7 > 50 habe ich wohl aus einer anderen Quelle kopiert.
attr RKI7 userReadings _Anzahl {my $anz = grep( m/.*/, ( keys %{$hash->{READINGS}} ));; return $anz;;}

Habt ihr eine Idee, wie die Information > 100, etc. in einem Device erzeugt werden kann? Oder muss ich dafür jeweils ein eigenes Device anlegen? Hoffentlich letzteres nicht.

Viele​ Grüße​ Gisbert​
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: herrmannj am 11 November 2020, 19:18:30
Du kannst im Filter die 25 gegen die 100 tauschen, dann zeigt er nur die mit mehr als hundert an.
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: Gisbert am 12 November 2020, 00:03:30
Zitat von: herrmannj am 11 November 2020, 19:18:30
Du kannst im Filter die 25 gegen die 100 tauschen, dann zeigt er nur die mit mehr als hundert an.

Hallo herrmannj,

klar das geht, dann mach ich einen Screenshot und schreibe den Wert zur Sicherheit noch per Hand in eine Tabelle auf Papier 8) 8) 8)
Ich dachte da eher an was automatischeres  :'( ??? :-X

Ich bin ja auf die Programmierer angewiesen, also auf dich, und hoffe deshalb auf deine Unterstützung. Wenn du der Meinung bist, dass es keine oder keine einfache, automatisierte Lösung gibt, dann respektiere ich dies natürlich.

Viele​ Grüße​ Gisbert​
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: yersinia am 12 November 2020, 13:01:31
Ich glaube nicht, dass JsonMod Ranges oder kombinierte (AND) Bedingungen akzeptiert. Man möge mich korrigieren.

Man könnte allerdings mehrere JsonMod Devices (>50, >100, >150, >200 usw) anlegen mit einem user-reading und dann eine readingsgroup drauflassen.

Oder man schränkt die Inzidenz nicht ein und generiert sich mehrere user-readings, die die anzahl entsprechend auswertet. Wie dies gehen sollte, kann ich mir jetzt noch nicht vorstellen.

Mit etwas rumspielen fand ich diese -sicher nicht optimale- Lösung:
attr RKI7 readingList multi(jsonPath('$.features..attributes'), property('GEN'), sprintf('%.1f', property('cases7_per_100k')));;
attr RKI7 stateFormat { my $ret = "<div style=\"text-align:left;;\">Zahl der Landkreise/Städte<br />";;\
$ret .= "mit 7-Tage-Inzidenz < 50: <font style=\"color:yellow;;font-weight:bold;;\">".ReadingsVal($name,'_Anzahl_50','-')."</font><br />";;\
$ret .= "mit 7-Tage-Inzidenz > 50 & < 100: <font style=\"color:red;;font-weight:bold;;\">".ReadingsVal($name,'_Anzahl_100','-')."</font><br />";;\
$ret .= "mit 7-Tage-Inzidenz > 100 & < 150: <font style=\"color:red;;font-weight:bold;;\">".ReadingsVal($name,'_Anzahl_150','-')."</font><br />";;\
$ret .= "mit 7-Tage-Inzidenz > 150 & < 200: <font style=\"color:red;;font-weight:bold;;\">".ReadingsVal($name,'_Anzahl_200','-')."</font><br />";;\
$ret .= "mit 7-Tage-Inzidenz > 200 & < 250: <font style=\"color:red;;font-weight:bold;;\">".ReadingsVal($name,'_Anzahl_250','-')."</font><br />";;\
$ret .= "mit 7-Tage-Inzidenz > 250: <font style=\"color:red;;font-weight:bold;;\">".ReadingsVal($name,'_Anzahl_u250','-')."</font></div>";;\
return $ret;;\
}
attr RKI7 userReadings _Anzahl_50 { my $anz = grep {ReadingsNum($NAME,$_,0) < 50.1;;} (keys %{$hash->{READINGS}});;\
return $anz;;\
},\
_Anzahl_100 { my $anz = grep {ReadingsNum($NAME,$_,0) > 50 && ReadingsNum($NAME,$_,0) < 100.1;;} (keys %{$hash->{READINGS}});;\
return $anz;;\
},\
_Anzahl_150 { my $anz = grep {ReadingsNum($NAME,$_,0) > 100 && ReadingsNum($NAME,$_,0) < 150.1;;} (keys %{$hash->{READINGS}});;\
return $anz;;\
},\
_Anzahl_200 { my $anz = grep {ReadingsNum($NAME,$_,0) > 150 && ReadingsNum($NAME,$_,0) < 200.1;;} (keys %{$hash->{READINGS}});;\
return $anz;;\
},\
_Anzahl_250 { my $anz = grep {ReadingsNum($NAME,$_,0) > 200 && ReadingsNum($NAME,$_,0) < 250.1;;} (keys %{$hash->{READINGS}});;\
return $anz;;\
},\
_Anzahl_u250 { my $anz = grep {ReadingsNum($NAME,$_,0) > 250;;} (keys %{$hash->{READINGS}});;\
return $anz;;\
}

Generiert sechs User-Readings (<50, 50-100, 100-150, 150-200, 200-250, >250), die wahrscheinlich mitgezählt werden.
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: Gisbert am 12 November 2020, 18:52:44
Hallo yersinia,

funktioniert super, vielen Dank !!
Die Übersicht hilft etwas, das Desaster zu verstehen, ohne dass man daran etwas ändern könnte.
Beim Googlen ist mir aufgefallen, dass es ganz viele Seiten gibt, die Fallzahlen angeben, wobei es anscheinend aber kleinere Unterschiede gibt. Vermutlich ist es schwer den Zahlensalat unter Kontrolle zu bringen.

Viele Grüße Gisbert
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: yersinia am 13 November 2020, 09:03:38
Zitat von: Gisbert am 12 November 2020, 18:52:44Beim Googlen ist mir aufgefallen, dass es ganz viele Seiten gibt, die Fallzahlen angeben, wobei es anscheinend aber kleinere Unterschiede gibt. Vermutlich ist es schwer den Zahlensalat unter Kontrolle zu bringen.
Viele verschiedene Quellen ergeben verschiedene Zahlen, auch die Berechnungsmodelle sind je nach Quelle unterschiedlich. Selbst die tagesaktuellen Zahlen des RKIs sind für mich erstmal nur grobe Richtwerte (https://youtu.be/dNMy28J3dLo?t=1100), je mehr Zeit vergangen ist, umso -gefühlter- valider die Zahlen.
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: wendeling am 15 November 2020, 20:08:41
Hallo,
habe mich an das RKI7 gehalten .
Doch ich bekomme als Reading alle Eintragungen , also alle Städte?
Was mache ich falsch ?



multi(jsonPath('$.features[?(@.attributes.cases7_per_100k > 25)]'), property('attributes.GEN'), sprintf('%.1f', property('attributes.cases7_per_100k')));;\
multi(jsonPath("\$.features[?(\@.attributes.GEN in ['Forchheim', 'Bamberg', 'Erlangen', 'Neustadt a.d. Waldnaab'])]"), property('attributes.GEN'), sprintf('%.1f', property('attributes.cases7_per_100k')));;



Mit freundlichen Grüßen
Wendelin
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: rudolfkoenig am 15 November 2020, 22:20:04
Mit folgenden FHEM "Hausmitteln" kriegt man auch die gewuenschten Daten:

define rki7 at *07:00 {\
  HttpUtils_NonblockingGet({ \
    url=>'https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=1%3D1&outFields=cases7_per_100k,county&returnGeometry=false&outSR=4326&f=json',\
    callback=>sub{\
      json2reading($defs{rki7},$_[2],'',undef,\
        'hashKeyRename($ret,"features_(.*)_attributes_county:(.*(Forchheim|Bamberg|Erlangen|Neustadt a.d.Waldnaab))","features_(.*)_attributes_cases7_per_100k")'\
      )\
    }\
  })\
}


Nach "set rki7 execNow" hat man folgende Readings/Events:
   READINGS:
     2020-11-15 22:14:09   LK_Bamberg      137.262763058649
     2020-11-15 22:14:09   LK_Erlangen     163.920094417974
     2020-11-15 22:14:09   LK_Forchheim    124.781632143748
     2020-11-15 22:14:09   LK_Neustadt_a.d.Waldnaab 130.227633668608
     2020-11-15 22:14:09   SK_Bamberg      113.734765357424
     2020-11-15 22:14:09   SK_Erlangen     123.524811602446
     2020-11-15 22:14:02   state           Next: 07:00:00
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: herrmannj am 16 November 2020, 00:02:09
Danke für Deinen Beitrag Rudi, zurück zur Frage wendeling.

Das Beispiel im ersten Post liefert Landkreise mit einem 7-Tage-Inzidenz > 25 _plus_ einige fest definierte SK/LK.
Zitatich bekomme als Reading alle Eintragungen , also alle Städte?
7-Tage-Inzidenz > 25 sind (leider) fast alle Städte/LK :(.

Also entweder höher setzen (> 250):

Bamberg 137.3 15.11.2020 23:39
Bautzen 299.2 15.11.2020 23:39
Berlin_Mitte 359.8 15.11.2020 23:39
Berlin_Neukolln 265.9 15.11.2020 23:39
Berlin_Tempelhof-Schoneberg 266.3 15.11.2020 23:39
Duisburg 288.2 15.11.2020 23:39
Duren 277.4 15.11.2020 23:39
Erlangen 123.5 15.11.2020 23:39
Erzgebirgskreis 252.9 15.11.2020 23:39
Forchheim 124.8 15.11.2020 23:39
Frankfurt_am_Main 254.5 15.11.2020 23:39
Freyung-Grafenau 404.5 15.11.2020 23:39
Furth 250.6 15.11.2020 23:39
Herne 317.7 15.11.2020 23:39
Hildburghausen 261.1 15.11.2020 23:39
Kaiserslautern 264.2 15.11.2020 23:39
Ludwigshafen_am_Rhein 279.2 15.11.2020 23:39
Merzig-Wadern 272.2 15.11.2020 23:39
Neustadt_a.d._Waldnaab 130.2 15.11.2020 23:39
Nurnberg 267.0 15.11.2020 23:39
Offenbach_am_Main 296.3 15.11.2020 23:39
Salzgitter 327.9 15.11.2020 23:39
Speyer 269.0 15.11.2020 23:39
Traunstein 340.6 15.11.2020 23:39
Weiden_i.d._OPf. 264.4 15.11.2020 23:39


oder nur die Referenz LK. Dann ist die dies (der erste multi() entfällt komplett):
multi(jsonPath("\$.features[?(\@.attributes.GEN in ['Forchheim', 'Bamberg', 'Erlangen', 'Neustadt a.d. Waldnaab'])]"), property('attributes.GEN'), sprintf('%.1f', property('attributes.cases7_per_100k')));

Auf diese Art schick formatiert (eine Nachkommastelle), einfach zu warten, deutlich leichter anzupassen wenn sich der Aufbau der Json Source ändert, Passwörter und Keys werden verwaltet, Fehlerbehandlung und retry werden von JsonMod übernommen, bei JSON Quellen mit variablen Mengen werden bei Bedarf readings aus der Liste entfernt (und vAm).
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: wendeling am 16 November 2020, 19:52:40
Hallo ,
vielen Dank rudolfKönig hat super funktioniert 😊
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: Kitt am 01 Dezember 2020, 19:21:01
Hallo,

bei mir wird im STATE nur "? ? ?" angezeigt. Kann mir jemand sagen, woran das liegen könnte?

Danke und LG
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: jkriegl am 01 Dezember 2020, 19:58:33
Zeig ein list oder mind. Dein stateFormat. Ohne Info ist keine Hilfe möglich.
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: Kitt am 01 Dezember 2020, 23:00:17
Hallo,

Internals:
   API_LAST_RES 1606859760.19644
   API__LAST_MSG 200
   CFGFN     
   DEF        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
   FUUID      5fc016b4-f33f-52ef-2557-103da557e3e6559a
   NAME       Corona
   NEXT       2020-12-01 22:58:00
   NOTIFYDEV  global
   NR         104
   NTFY_ORDER 50-Corona
   SOURCE     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 (200)
   STATE      ???
   SVN        21711 2020-04-17 23:29:22 UTC
   TYPE       JsonMod
   CONFIG:
     IN_REQUEST 0
     SOURCE     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
     SECRET:
   READINGS:
Attributes:
   interval   */2 * * * *
   readingList multi(jsonPath("\$.features[?(\@.attributes.GEN in ['Hamburg'])]"), property('attributes.GEN'), sprintf('%.1f', property('attributes.cases7_per_100k')));
   room       Draußen


In meinem Logfile steht folgende Meldung:
2020.12.01 00:02:00 2: [Corona] error while evaluating readingList: Can't use string ("70328736.0") as a subroutine ref while "strict refs" in use at ./FHEM/98_JsonMod.pm line 503.

Danke und LG
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: herrmannj am 01 Dezember 2020, 23:49:24
Mach mal ein update. Dein JsonMod ist ur-ur-ur Alt.
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: Kitt am 02 Dezember 2020, 21:14:54
hab ich gerade mal über den Befehl "update" gemacht.
Hab leider weiterhin das gleiche Problem...?
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: herrmannj am 02 Dezember 2020, 21:22:49
ist das eine Frage? Wenn ja welche und bitte ein list des Devices nach Deinem Update
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: Kitt am 02 Dezember 2020, 21:28:40
hier nochmal das list:

Internals:
   API_LAST_RES 1606940760.59111
   API__LAST_MSG 200
   DEF        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
   FUUID      5fc016b4-f33f-52ef-2557-103da557e3e6559a
   NAME       Corona
   NEXT       2020-12-02 21:28:00
   NOTIFYDEV  global
   NR         78
   NTFY_ORDER 50-Corona
   SOURCE     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 (200)
   STATE      ???
   SVN        21711 2020-04-17 23:29:22 UTC
   TYPE       JsonMod
   CONFIG:
     IN_REQUEST 0
     SOURCE     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
     SECRET:
   READINGS:
Attributes:
   interval   */2 * * * *
   readingList multi(jsonPath("\$.features[?(\@.attributes.GEN in ['Hamburg'])]"), property('attributes.GEN'), sprintf('%.1f', property('attributes.cases7_per_100k')));
   room       Draußen
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: herrmannj am 02 Dezember 2020, 21:33:13
ist die gleiche uralt Version wie gestern... Neustart gemacht? Wenn ja ist Dein Update schief gegangen.

Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: Kitt am 02 Dezember 2020, 21:38:19
stimmt  :-\ woran kann das denn liegen  ???
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: Kitt am 30 Dezember 2020, 10:59:18
Hallo nochmal,

hab endlich das Problem mit der alten Version gelöst (die Rechte waren falsch vergeben).

Jetzt funktioniert es endlich!

Danke für die Hilfe und noch schöne Feiertage
LG
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: Ainadilion am 02 April 2021, 19:49:01
Hallo, die Übersicht zur Anzahl der Landkreise mit den jeweiligen Inzidenzen funktioniert sehr gut. Wie bekomme ich userReadings hin mit der Ausgabe der Werte der drei höchsten Inzidenzen der jeweiligen Landkreise und die drei geringsten Werte mit Ausgabe der Landkreise hin?
Gruß
Ainadilion
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: TWART016 am 12 April 2021, 02:12:08
Ich frage die Werte jede Stunde ab. Der Readingstimestamp ändert sich bei jeder Abfrage, auch wenn sich der ReadingsVal nicht ändert. Kann das beeinflusst werden?

Zudem ist der OldreadingsVal leer. Wenn Daten sich ändern, ist der Wert korrekt.

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-change-reading .*
attr coronaSpreadCounties interval 0 */1 * * *
attr coronaSpreadCounties oldreadings .*_cases7_per_100k
attr coronaSpreadCounties readingList multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['183', '181', '179', '184', '186', '187', '188'])]"), concat(property('attributes.OBJECTID'),'_name'), property('attributes.county'));;\
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['183', '181', '179', '184', '186', '187', '188'])]"), concat(property('attributes.OBJECTID'),'_cases'), property('attributes.cases'));;\
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['183', '181', '179', '184', '186', '187', '188'])]"), concat(property('attributes.OBJECTID'),'_deaths'), property('attributes.deaths'));;\
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['183', '181', '179', '184', '186', '187', '188'])]"), concat(property('attributes.OBJECTID'),'_cases7_per_100k'), property('attributes.cases7_per_100k'));;
attr coronaSpreadCounties update-on-start 1
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: rudolfkoenig am 12 April 2021, 08:56:29
ZitatDer Readingstimestamp ändert sich bei jeder Abfrage, auch wenn sich der ReadingsVal nicht ändert. Kann das beeinflusst werden?
Vermutlich ja, mit dem event-on-change-reading Attribut.

ZitatZudem ist der OldreadingsVal leer.
Vermutlich ist das oldreadings Attribut nicht gesetzt.
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: TWART016 am 13 April 2021, 00:05:07
Zitat von: rudolfkoenig am 12 April 2021, 08:56:29
Vermutlich ja, mit dem event-on-change-reading Attribut.
event-on-change-reading .* ist gesetzt: Im Filelog wird das richtig geschrieben, nur die Änderungen. In den Readings steht bei jedem Interval die Uhrzeit, auch wenn sich nichts ändert.

Zitat von: rudolfkoenig am 12 April 2021, 08:56:29
Vermutlich ist das oldreadings Attribut nicht gesetzt.
attr coronaSpreadCounties oldreadings .*_cases7_per_100k

ist gesetzt und funktioniert grundsätzlich auch. Manchmal ist der Wert dennoch leer und dann kann die Abarbeitung in einem Userreading nicht gemacht werden.
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: OdfFhem am 13 April 2021, 05:31:40
Bei vereinzelten Devices nutze ich timestamp-on-change-reading; das Wiki sagt dazu:
Zitat
Ist nur event-on-change-reading für ein Reading spezifiziert, entfällt zunächst einmal nur der Trigger, der Zeitstempel wird weiter aktualisiert. Benötigt man jedoch den Zeitstempel der letzten Änderung (z.B. die Ein- oder Ausschaltzeit eines Relais), kann man mithilfe von timestamp-on-change-reading auch die Aktualisierung des Zeitstempels unterbinden, falls der Wert sich nicht geändert hat.
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: Damian am 25 April 2021, 15:15:59
Falls jemand die Inzidenz seiner Region visualisieren möchte:

defmod di_corona DOIF ##
attr di_corona uiTable {package ui_Table}\
card([RKI7:Duren:col],"Düren","coronavirus",0,200,120,0,"Fälle")|\
card([RKI7:Heinsberg:col],"Heinsberg","coronavirus",0,200,120,0,"Fälle")|\
card([RKI7:Stadteregion_Aachen:col],"Aachen","coronavirus",0,200,120,0,"Fälle")


PS. Die Definition ist ganz frisch, daher sieht man noch keinen Verlauf
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: raiderxxl am 26 April 2021, 15:10:00
Super Sache das...

kann mir jemand eventuell bei den Impfzahlen für BW helfen?

https://rki-vaccination-data.vercel.app/api

Ist das überhaupt json was da zurückkommt?

Grüßle

Pascal
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: jkriegl am 26 April 2021, 16:19:17
Ja, ist JSON
Muster

Edit: Muster gelöscht, da HTTPMOD - hat hier nichts zu suchen. Sorry
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: raiderxxl am 26 April 2021, 16:56:53
Supi Danke Perfekt ... werde heute Abend mal für BW anpassen :-)

Grüßle

Pascal
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: raiderxxl am 26 April 2021, 19:41:28
Hmpff und was mach ich wenn im Namen ein Sonderzeichen ist?

attr Impfen reading01JSON states_Baden-W\u00fcrttemberg_quote

Hau ich das in extra Klammern oder Anführungszeichen?

Grüßle

Pascal
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: yersinia am 27 April 2021, 09:10:52
Lustig den JsonMod Thread für eine HTTPMOD-Lösung zu kapern. ;) Aber, zugegebenermaßen, die Strukur der Json-Quelle ist nicht gerade die Beste - Umlaute in den Attributen, wtf?

Anbei ein Vorschlag für JsonMod für BaWü:
defmod coronaVaxRKI JsonMod https://rki-vaccination-data.vercel.app/api
attr coronaVaxRKI interval 0 */3 * * *
attr coronaVaxRKI readingList single(jsonPath('$.states.Baden-Württemberg.total'), 'BW_total', '-?-');;\
single(jsonPath('$.states.Baden-Württemberg.vaccinated'), 'BW_vaccinated_1st_dose', '-?-');;\
single(jsonPath('$.states.Baden-Württemberg.vaccinated_by_accine.biontech'), 'BW_vaccinated_1st_dose_nr_biontech', '-?-');;\
single(jsonPath('$.states.Baden-Württemberg.vaccinated_by_accine.moderna'), 'BW_vaccinated_1st_dose_nr_moderna', '-?-');;\
single(jsonPath('$.states.Baden-Württemberg.vaccinated_by_accine.astrazeneca'), 'BW_vaccinated_1st_dose_nr_astrazeneca', '-?-');;\
single(jsonPath('$.states.Baden-Württemberg.difference_to_the_previous_day'), 'BW_vaccination_1st_dose_diff_to_the_previous_day', '-?-');;\
single(jsonPath('$.states.Baden-Württemberg.vaccinations_per_1000_inhabitants'), 'BW_vaccinations_per_1000_inhabitants', '-?-');;\
single(jsonPath('$.states.Baden-Württemberg.quote'), 'BW_vaccination_1st_dose_quote', '-?-');;\
single(jsonPath('$.states.Baden-Württemberg.2nd_vaccination.vaccinated'), 'BW_vaccinated_2nd_dose', '-?-');;\
single(jsonPath('$.states.Baden-Württemberg.2nd_vaccination.vaccinated_by_accine.biontech'), 'BW_vaccinated_2nd_dose_nr_biontech', '-?-');;\
single(jsonPath('$.states.Baden-Württemberg.2nd_vaccination.vaccinated_by_accine.moderna'), 'BW_vaccinated_2nd_dose_nr_moderna', '-?-');;\
single(jsonPath('$.states.Baden-Württemberg.2nd_vaccination.vaccinated_by_accine.astrazeneca'), 'BW_vaccinated_2nd_dose_nr_astrazeneca', '-?-');;\
single(jsonPath('$.states.Baden-Württemberg.2nd_vaccination.difference_to_the_previous_day'), 'BW_vaccination_2nd_dose_diff_to_the_previous_day', '-?-');;\
single(jsonPath('$.states.Baden-Württemberg.2nd_vaccination.quote'), 'BW_vaccination_2nd_dose_quote', '-?-');;\
single(jsonPath('$.sum_vaccine_doses'), 'sum_vaccine_doses', '-?-');;\
single(jsonPath('$.total'), 'total', '-?-');;\
single(jsonPath('$.vaccinated'), 'vaccinated', '-?-');;\
single(jsonPath('$.vaccinations_per_1000_inhabitants'), 'vaccinations_per_1000_inhabitants', '-?-');;\
single(jsonPath('$.lastUpdate'), 'lastUpdate', '-?-');;
attr coronaVaxRKI update-on-start 0
attr coronaVaxRKI webCmd reread

Die Daten werden alle 3 Stunden aktualisiert.
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: raiderxxl am 27 April 2021, 10:42:25
Danke!
Du bist der Beschde!  :-*

Grüßle

Pascal
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: sylvester am 27 April 2021, 12:08:07
Hallo,

ich habe jetzt schon eine Weile im Netz gesucht ...  habe ich irgendwo die Möglichkeit, auch die Inzidenzwerte für die vergangenen Tage zu bekommen?

Hier gibt es zwar ein schönes Diagramm dazu: https://www.corona-in-zahlen.de . Dort kann ich auch meinen Wohnort auswählen, aber ich komme nicht an die Rohdaten :( .

Viele Grüße

Stephan
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: raiderxxl am 27 April 2021, 12:12:16
Hi,
ich schreibe meine Inzidenzen in ne Datenbank und kann dann mit Grafana die letzten Tage schön darstellen...

Du hast ja die Aktuellen Zahlen wieso logst du sie nicht? :-)

Grüßle

Pascal
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: sylvester am 27 April 2021, 12:14:08
Ja, die aktuellen Zahlen habe ich. Ich wollte nur gerne die alten noch ergänzen .... die werden auf der oben genannten Homepage auch angezeigt, aber ich will die jetzt nicht abschreiben ... runterladen wäre schön ;) vielleicht hat wer eine Quelle ...
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: raiderxxl am 27 April 2021, 12:15:44
Ja wenn du die aktuellen hast log diese in einem file.log dann hast du "ältere Daten " und kannst diese auch anzeigen...
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: khk123 am 27 April 2021, 15:02:39
Hier mal meine Definitionen für Inzidenzwerte aktuell und Vortag sowie Todesfaelle. Die Daten werden nur einmal am Tag um 08:05 Uhr geholt und geloggt.


defmod coronaRM JsonMod https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=1%3D1&outFields=GEN,cases,deaths,last_update,cases7_per_100k,recovered,cases_per_100k,death_rate,cases_per_population,EWZ_BL,cases7_bl_per_100k,cases7_bl,death7_bl,cases7_lk,death7_lk&returnGeometry=false&outSR=4326&f=json
attr coronaRM DbLogExclude .*
attr coronaRM DbLogInclude .*_Inzidenz,.*_Todesfaelle
attr coronaRM event-on-update-reading .*
attr coronaRM interval 5 8 * * *
attr coronaRM oldreadings Frankfurt_am_Main_Inzidenz,Offenbach_Inzidenz,Offenbach_am_Main_Inzidenz
attr coronaRM readingList multi(jsonPath("\$.features[?(\@.attributes.GEN in ['Frankfurt am Main', 'Offenbach am Main','Offenbach'])]"), concat(property('attributes.GEN'),'_Faelle'), property('attributes.cases'));;\
multi(jsonPath("\$.features[?(\@.attributes.GEN in ['Frankfurt am Main', 'Offenbach am Main','Offenbach'])]"), concat(property('attributes.GEN'),'_Todesfaelle'), property('attributes.deaths'));;\
multi(jsonPath("\$.features[?(\@.attributes.GEN in ['Frankfurt am Main', 'Offenbach am Main','Offenbach'])]"), concat(property('attributes.GEN'),'_Inzidenz'), propertyf('attributes.cases7_per_100k','', '%.02f'));;\
multi(jsonPath("\$.features[?(\@.attributes.GEN in ['Frankfurt am Main', 'Offenbach am Main','Offenbach'])]"), concat(property('attributes.GEN'),'_Aktualisierung'), property('attributes.last_update'))
attr coronaRM room Corona
attr coronaRM stateFormat {strftime("%d-%m-%Y %H:%M:%S",localtime(time_str2num(ReadingsTimestamp($name,".computedReadings",""))))}
attr coronaRM userReadings Frankfurt_am_Main_Inzidenz_alt {OldReadingsVal($name, "Frankfurt_am_Main_Inzidenz", ReadingsVal($name, "Frankfurt_am_Main_Inzidenz", 0))},\
Offenbach_Inzidenz_alt {OldReadingsVal($name, "Offenbach_Inzidenz", ReadingsVal($name, "Offenbach_Inzidenz", 0))},\
Offenbach_am_Main_Inzidenz_alt {OldReadingsVal($name, "Offenbach_am_Main_Inzidenz", ReadingsVal($name, "Offenbach_am_Main_Inzidenz", 0))}
attr coronaRM verbose 0


VG
Karlheinz
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: Wolle02 am 27 April 2021, 19:15:15
Wie müsste ich das intervall Attribut eigentlich setzen, dass gar nicht aktualisiert wird, sondern immer manuell ein reread gemacht werden müsste? Wenn ich die CommandRef richtig verstanden habe wird jede Stunde neu eingelesen, wenn ich das Intervall Attribut gar nicht setze.
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: herrmannj am 27 April 2021, 19:25:30
so was ist nicht vorgesehen. Setz doch mal auf 29.Februar, ist fast "nie" :D
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: yersinia am 28 April 2021, 08:32:43
Zitat von: herrmannj am 27 April 2021, 19:25:30so was ist nicht vorgesehen.
Apropos nicht vorgesehen:
Zitat von: Wolle02 am 27 April 2021, 19:15:15Wie müsste ich das intervall Attribut eigentlich setzen, dass gar nicht aktualisiert wird, sondern immer manuell ein reread gemacht werden müsste?
Gar nicht. Du setzt Attribut disable auf 1 und führst das reread manuell aus (pro-tipp: setze Attribut webCmd auf reread). 8)
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: majorshark am 28 April 2021, 14:18:04
Mal eine Frage am Rande.
Weiß einer wo man die Inzidenzwerte der letzten 1,5 Jahre als *.csv oder ähnlichen her bekommt?
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: sylvester am 28 April 2021, 14:33:13
Hallo,

das war ja auch meine Frage ... Siehe #52

Die Werte seit November sind beim RKI in Excel zu finden: https://www.rki.de/DE/Content/InfAZ/N/Neuartiges_Coronavirus/Fallzahlen.html

Die Werte davor habe ich noch nicht gefunden ...

Viele Grüße
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: yersinia am 28 April 2021, 14:52:02
https://www.rki.de/DE/Content/InfAZ/N/Neuartiges_Coronavirus/Daten/Fallzahlen_Kum_Tab.html (https://www.rki.de/DE/Content/InfAZ/N/Neuartiges_Coronavirus/Daten/Fallzahlen_Kum_Tab.html)
CSV mit den aktuellen Covid-19 Infektionen pro Tag (Zeitreihe) (https://www.arcgis.com/home/item.html?id=f10774f1c63e40168479a1feb6c7ca74)

Aber auch: https://api.corona-zahlen.org/docs/ (https://api.corona-zahlen.org/docs/) (aber keine csv) ->
API mit Incidence für Deutschland seit dem 31.01.2020 (https://api.corona-zahlen.org/docs/endpoints/germany.html#germany-history-incidence) => JSON: https://api.corona-zahlen.org/germany/history/incidence (https://api.corona-zahlen.org/germany/history/incidence)
API mit Incidence für Bundesländer (Bundesland-Code benötigt) seit dem 31.01.2020 (https://api.corona-zahlen.org/docs/endpoints/states.html#states-state-history-incidence) => JSON: https://api.corona-zahlen.org/states/NI/history/incidence (https://api.corona-zahlen.org/states/NI/history/incidence) (Bundesland-Code (https://api.corona-zahlen.org/states))
API mit Incidence für Gemeinden Kreise (AGS benötigt) seit dem 31.01.2020 (https://api.corona-zahlen.org/docs/endpoints/districts.html#districts-ags-history-incidence) => JSON: https://api.corona-zahlen.org/districts/08115/history/incidence (https://api.corona-zahlen.org/districts/08115/history/incidence) (AGS Schlüssel (https://api.corona-zahlen.org/districts))
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: bickerdyke am 28 April 2021, 16:50:50
Zitat von: yersinia am 28 April 2021, 14:52:02
API mit Incidence für Gemeinden (AGS benötigt) seit dem 31.01.2020 (https://api.corona-zahlen.org/docs/endpoints/districts.html#districts-ags-history-incidence) => JSON: https://api.corona-zahlen.org/districts/08115/history/incidence (https://api.corona-zahlen.org/districts/08115/history/incidence) (AGS Schlüssel (https://api.corona-zahlen.org/districts))

Kann es sein dass dieser Dienst nicht für Gemeinden gilt sondern ebenfalls auf die Landkreisdaten zugreift? Das Beispiel Böblingen geht dann wohl nur weil es eine kreisfreie Stadt ist. Mit dem Gemeindeschlüssel meiner Gemeinde (sowohl aus Wikipedia als auch aus dem Rhein-Neckar.Kreis-Dashboard) bekomme ich keine Daten.

Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: yersinia am 28 April 2021, 17:05:02
Wahrscheinlich, warum dies dann allgemeiner Gemeinde Schlüssel (https://api.corona-zahlen.org/docs/endpoints/districts.html#request-2) heißt, kA.
Laut (https://api.corona-zahlen.org/districts) hat der Rhein-Kreis-Neckar den ags 08226 (https://api.corona-zahlen.org/districts/08226/history/incidence).
Steht aber auch hier: https://api.corona-zahlen.org/docs/#%F0%9F%87%A9%F0%9F%87%AA-ubersicht (https://api.corona-zahlen.org/docs/#%F0%9F%87%A9%F0%9F%87%AA-ubersicht)
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: hankyzoolander am 04 Mai 2021, 11:36:26
Hallo,
hab da einen kleinen Hänger.
Bekomme einfach keine readings für Saarbrücken,Saar-Pfalz-kreis,Sankt-Wendel.

Sieht da jemand vielleicht den Fehler??
defmod 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
attr rki7 interval */15 * * * *
attr rki7 readingList multi(jsonPath("\$.features[?(\@.attributes.GEN in ['Saarbrücken'])]"), property('attributes.GEN'), sprintf('%.1f', property('attributes.cases7_per_100k')));;\
multi(jsonPath("\$.features[?(\@.attributes.GEN in ['Saarlouis'])]"), property('attributes.GEN'), sprintf('%.1f', property('attributes.cases7_per_100k')));;\
multi(jsonPath("\$.features[?(\@.attributes.GEN in ['Merzig-Wadern'])]"), property('attributes.GEN'), sprintf('%.1f', property('attributes.cases7_per_100k')));;\
multi(jsonPath("\$.features[?(\@.attributes.GEN in ['Neunkirchen'])]"), property('attributes.GEN'), sprintf('%.1f', property('attributes.cases7_per_100k')));;\
multi(jsonPath("\$.features[?(\@.attributes.GEN in ['Sankt Wendel'])]"), property('attributes.GEN'), sprintf('%.1f', property('attributes.cases7_per_100k')));;\
multi(jsonPath("\$.features[?(\@.attributes.GEN in ['Saar-Pfalz-Kreis'])]"), property('attributes.GEN'), sprintf('%.1f', property('attributes.cases7_per_100k')));;\

attr rki7 room Corona

setstate rki7 2021-05-04 11:30:00 .computedReadings Merzig-Wadern,Saarlouis,Neunkirchen
setstate rki7 2021-05-04 11:30:00 Merzig-Wadern 105.6
setstate rki7 2021-05-04 11:30:00 Neunkirchen 147.6
setstate rki7 2021-05-04 11:30:00 Saarlouis 138.9


Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: yersinia am 04 Mai 2021, 12:19:04
Textsuche ist immer driss. Zumal die Kreise/Städte nicht unbedingt so heißen. Aber man kann über die OBJECTID gehen:
defmod rki7 JsonMod https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=1%3D1&outFields=death_rate,cases,deaths,cases7_lk,cases7_per_100k,county,BL,cases7_bl_per_100k,cases7_bl,death7_bl,OBJECTID&returnGeometry=false&outSR=4326&f=json
attr rki7 interval */15 * * * *
attr rki7 webCmd reread
attr rki7 room Corona
attr rki7 readingList multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['319', '320', '321', '322', '323', 324'])]"), concat(property('attributes.OBJECTID'),'_name'), property('attributes.county'));;\
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['319', '320', '321', '322', '323', 324'])]"), concat(property('attributes.OBJECTID'),'_cases7_per_100k'), property('attributes.cases7_per_100k'));;

ergibt dann sowas:
    READINGS:
     2021-05-04 12:31:14   .computedReadings 320_name,321_cases7_per_100k,319_cases7_per_100k,324_name,323_cases7_per_100k,322_name,323_name,322_cases7_per_100k,324_cases7_per_100k,320_cases7_per_100k,321_name,319_name
     2021-05-04 12:31:14   319_cases7_per_100k 160.930170300018
     2021-05-04 12:31:14   319_name        LK Stadtverband Saarbrücken
     2021-05-04 12:31:14   320_cases7_per_100k 105.576164970022
     2021-05-04 12:31:14   320_name        LK Merzig-Wadern
     2021-05-04 12:31:14   321_cases7_per_100k 147.631803238768
     2021-05-04 12:31:14   321_name        LK Neunkirchen
     2021-05-04 12:31:14   322_cases7_per_100k 138.946783381965
     2021-05-04 12:31:14   322_name        LK Saarlouis
     2021-05-04 12:31:14   323_cases7_per_100k 106.19145404934
     2021-05-04 12:31:14   323_name        LK Saar-Pfalz-Kreis
     2021-05-04 12:31:14   324_cases7_per_100k 110.335949981036
     2021-05-04 12:31:14   324_name        LK Sankt Wendel

Darüberhinaus würde ich die Daten nicht viertelstündlich abziehen, eher deutlich seltener weil sie in der Datenquelle auch deutlich seltener aktualisiert werden (ich vermute eher einmal täglich).
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: hankyzoolander am 05 Mai 2021, 10:44:33
Hallo,
danke für die schnelle Antwort.
Soweit war ich schonmal, Problem ist das ich als readings nur die Namen bekomme.
Die Zahlen kommen gar nicht.
Hab jetzt die Zeile mit den Namen einfach weg gelassen.
Dann bekomme ich auch die Zahlen. Danke für deine Hilfe.
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: yersinia am 05 Mai 2021, 10:49:29
Der Screenshot ist aber ein DOIF Device. :o
Wo ist die Verbindung zu JsonMod?
Darüber hinaus sprichst du für mich in Rätseln. Welche Zeilen mit Namen? Welche Zahlen kommen gar nicht? Device list pls.
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: hankyzoolander am 05 Mai 2021, 10:58:19
Hallo,
achso, sorry.
Das Device ist folgendes
defmod rki7 JsonMod https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=1%3D1&outFields=death_rate,cases,deaths,cases7_lk,cases7_per_100k,county,BL,cases7_bl_per_100k,cases7_bl,death7_bl,OBJECTID&returnGeometry=false&outSR=4326&f=json
attr rki7 interval 0 */1 * * *
attr rki7 readingList multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['319', '320', '321', '322', '323', 324'])]"), concat(property('attributes.OBJECTID'),'_cases7_per_100k'), property('attributes.cases7_per_100k'));;;;
attr rki7 room Corona
attr rki7 webCmd reread

setstate rki7 2021-05-05 10:50:00 .computedReadings 324_cases7_per_100k,322_cases7_per_100k,321_cases7_per_100k,320_cases7_per_100k,319_cases7_per_100k,323_cases7_per_100k
setstate rki7 2021-05-05 10:50:00 319_cases7_per_100k 148.457321562209
setstate rki7 2021-05-05 10:50:00 320_cases7_per_100k 100.733221622773
setstate rki7 2021-05-05 10:50:00 321_cases7_per_100k 129.368075003044
setstate rki7 2021-05-05 10:50:00 322_cases7_per_100k 129.169046773604
setstate rki7 2021-05-05 10:50:00 323_cases7_per_100k 101.97192607387
setstate rki7 2021-05-05 10:50:00 324_cases7_per_100k 102.290620294919


Dieses holt die Daten von der Seite, welche ich dann in einem doif darstelle.
defmod di_corona DOIF ##
attr di_corona room Corona
attr di_corona uiTable {package ui_Table}\\
|card([rki7:319_cases7_per_100k:col],"Saarbrücken","coronavirus",0,200,120,0,"Fälle")|\
|card([rki7:320_cases7_per_100k:col],"Merzig-Wadern","coronavirus",0,200,120,0,"Fälle")|\
|card([rki7:321_cases7_per_100k:col],"Neunkirchen","coronavirus",0,200,120,0,"Fälle")|\\
|card([rki7:322_cases7_per_100k:col],"Saarlouis","coronavirus",0,200,120,0,"Fälle")|\
|card([rki7:324_cases7_per_100k:col],"Sankt Wendel","coronavirus",0,200,120,0,"Fälle")|\
|card([rki7:323_cases7_per_100k:col],"Saar-Pfalz-Kreis","coronavirus",0,200,120,0,"Fälle")|\
\


setstate di_corona initialized
setstate di_corona 2021-04-26 17:10:13 cmd 0
setstate di_corona 2021-04-26 17:10:13 mode enabled
setstate di_corona 2021-04-26 17:10:13 state initialized



Dein Beispiel von gestern,
attr rki7 readingList multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['319', '320', '321', '322', '323', 324'])]"), concat(property('attributes.OBJECTID'),'_name'), property('attributes.county'));;\
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['319', '320', '321', '322', '323', 324'])]"), concat(property('attributes.OBJECTID'),'_cases7_per_100k'), property('attributes.cases7_per_100k'));;

Da kommen nur die readings von den Städten(Saarbrücken,Saarlouis,usw.) nicht aber von den Fallzahlen.
Habe die erste Zeile bei setreading weg gelassen und nur die mit cases7_per_100K eingebaut.
Hab mir dann über die ID das doif zugeordnet.
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: yersinia am 05 Mai 2021, 12:11:32
Kurios, ich habe dein Device-raw bei mir 1:1 kopiert und wenn ich dem Attribut readingsList
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['319', '320', '321', '322', '323', 324'])]"), concat(property('attributes.OBJECTID'),'_name'), property('attributes.county'));
hinzufüge, ein reread ausführe (!) (und ggf das Device-Seite aktualisiere), erhalte ich auch die dazugehörigen Beschreibungen der Kreise (Datenelement county), anbei das List
Internals:
   API_LAST_RES 1620208800.14418
   API__LAST_MSG 200
   CFGFN     
   DEF        https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=1%3D1&outFields=death_rate,cases,deaths,cases7_lk,cases7_per_100k,county,BL,cases7_bl_per_100k,cases7_bl,death7_bl,OBJECTID&returnGeometry=false&outSR=4326&f=json
   FUUID      60926bcd-f33f-3151-3947-51a2813a6c73ae41
   NAME       rki7
   NEXT       2021-05-05 13:00:00
   NR         1815
   SOURCE     https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=1%3D1&outFields=death_rate,cases,deaths,cases7_lk,cases7_per_100k,county,BL,cases7_bl_per_100k,cases7_bl,death7_bl,OBJECTID&returnGeometry=false&outSR=4326&f=json (200)
   STATE      ???
   SVN        24360 2021-04-29 21:17:23 UTC
   TYPE       JsonMod
   .attraggr:
   .attrminint:
   CONFIG:
     IN_REQUEST 0
     SOURCE     https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=1%3D1&outFields=death_rate,cases,deaths,cases7_lk,cases7_per_100k,county,BL,cases7_bl_per_100k,cases7_bl,death7_bl,OBJECTID&returnGeometry=false&outSR=4326&f=json
     SECRET:
   READINGS:
     2021-05-05 12:00:00   .computedReadings 323_name,322_name,320_name,324_cases7_per_100k,321_cases7_per_100k,319_name,320_cases7_per_100k,322_cases7_per_100k,323_cases7_per_100k,324_name,321_name,319_cases7_per_100k
     2021-05-05 12:00:00   319_cases7_per_100k 148.457321562209
     2021-05-05 12:00:00   319_name        LK Stadtverband Saarbrücken
     2021-05-05 12:00:00   320_cases7_per_100k 100.733221622773
     2021-05-05 12:00:00   320_name        LK Merzig-Wadern
     2021-05-05 12:00:00   321_cases7_per_100k 129.368075003044
     2021-05-05 12:00:00   321_name        LK Neunkirchen
     2021-05-05 12:00:00   322_cases7_per_100k 129.169046773604
     2021-05-05 12:00:00   322_name        LK Saarlouis
     2021-05-05 12:00:00   323_cases7_per_100k 101.97192607387
     2021-05-05 12:00:00   323_name        LK Saar-Pfalz-Kreis
     2021-05-05 12:00:00   324_cases7_per_100k 102.290620294919
     2021-05-05 12:00:00   324_name        LK Sankt Wendel
Attributes:
   interval   0 */1 * * *
   readingList multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['319', '320', '321', '322', '323', 324'])]"), concat(property('attributes.OBJECTID'),'_cases7_per_100k'), property('attributes.cases7_per_100k'));
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['319', '320', '321', '322', '323', 324'])]"), concat(property('attributes.OBJECTID'),'_name'), property('attributes.county'));
   room       Corona
   webCmd     reread

und das raw dazu:
defmod rki7 JsonMod https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=1%3D1&outFields=death_rate,cases,deaths,cases7_lk,cases7_per_100k,county,BL,cases7_bl_per_100k,cases7_bl,death7_bl,OBJECTID&returnGeometry=false&outSR=4326&f=json
attr rki7 interval 0 */1 * * *
attr rki7 readingList multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['319', '320', '321', '322', '323', 324'])]"), concat(property('attributes.OBJECTID'),'_cases7_per_100k'), property('attributes.cases7_per_100k'));;\
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['319', '320', '321', '322', '323', 324'])]"), concat(property('attributes.OBJECTID'),'_name'), property('attributes.county'));;
attr rki7 room Corona
attr rki7 webCmd reread


Du hast hier auch Semikola zuviel:
attr rki7 readingList multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['319', '320', '321', '322', '323', 324'])]"), concat(property('attributes.OBJECTID'),'_cases7_per_100k'), property('attributes.cases7_per_100k'));;;;
Im GUI reicht ein Semikolon, wenn du das Attribut readingList aufrufst; in der RAW Notation benötigt man zwei Semikola.
Zusätzlich gibt es in der RAW Notation noch einen Zeilenumbruch, daher die erste Zeile mit ;;\ am Ende:
attr rki7 readingList multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['319', '320', '321', '322', '323', 324'])]"), concat(property('attributes.OBJECTID'),'_cases7_per_100k'), property('attributes.cases7_per_100k'));;\
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['319', '320', '321', '322', '323', 324'])]"), concat(property('attributes.OBJECTID'),'_name'), property('attributes.county'));;


Im Übrigen sind dies nicht die Fallzahlen, sondern 'nur' neue Fälle auf 100k Einwohner in den letzten sieben Tagen. Fallzahlen (Zahl der Infizierten und nicht Genesene) müsste cases (gesamt) oder cases7_lk (der letzten sieben Tage) sein. Als Ergänzung zu deinem readingList Attribut wäre dies (hinzufügen via GUI):
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['319', '320', '321', '322', '323', 324'])]"), concat(property('attributes.OBJECTID'),'_cases'), property('attributes.cases'));
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['319', '320', '321', '322', '323', 324'])]"), concat(property('attributes.OBJECTID'),'_cases7_lk'), property('attributes.cases7_lk'));
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: olvis am 11 Mai 2021, 10:09:14
Hallo zusammen,

hat sich etwas an der Abfrage mit Umlauten geändert ?
Bis dato hatte ich diese Abfrage:
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,OBJECTID,county&returnGeometry=false&outSR=4326&f=json
Mit dieser Readinglist:
multi(jsonPath("\$.features[?(\@.attributes.GEN in ['Muenchen', 'München', 'Frankfurt am Main', 'Bonn', 'Koln', 'Köln', 'Koeln', 'Rheinisch-Bergischer Kreis', 'Rhein-Sieg-Kreis', 'Leverkusen'])]"), property('attributes.GEN'), sprintf('%.1f', property('attributes.cases7_per_100k')));
Die Orte mit Umlauten werden seit ein paar Tagen nicht mehr in den Readings gefunden bzw ausgelesen.
Bis dato hat es mit dem COde oben geklappt.
Hier die aktuellen Readings:
RKI7:Bonn 109.2
RKI7:Frankfurt_am_Main 132.3
RKI7:Leverkusen 243.1
RKI7:Rhein-Sieg-Kreis 89.9
RKI7:Rheinisch-Bergischer_Kreis 109.1

Ich habe auch schon diverse Schreibweisen der Orte mit Umlaut eingebaut, wie ihr seht.
Was mache ich falsch ?
(Ich möchte ungerne auf OBJECTID wechseln, weil das spontane ändern eines Ortes dann etwas zeitaufwendiger ist.)
Vielleicht kann mir ja jemand von euch helfen. Wäre klasse.
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: herrmannj am 11 Mai 2021, 10:12:16
Poste mal bitte ein komplettes list. Danke
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: olvis am 11 Mai 2021, 10:35:01
Gerne, hier das "list RKI7":
Internals:
   API_LAST_RES 1620720000.28898
   API__LAST_MSG 200
   DEF        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,OBJECTID,county&returnGeometry=false&outSR=4326&f=json
   FUUID      5f589ef7-f33f-beea-5ef4-6ed143b3ec96d266
   NAME       RKI7
   NEXT       2021-05-11 11:00:00
   NR         243
   SOURCE     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,OBJECTID,county&returnGeometry=false&outSR=4326&f=json (200)
   STATE      ???
   SVN        24360 2021-04-29 21:17:23 UTC
   TYPE       JsonMod
   CONFIG:
     IN_REQUEST 0
     SOURCE     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,OBJECTID,county&returnGeometry=false&outSR=4326&f=json
     SECRET:
   READINGS:
     2021-05-11 10:00:00   Bonn            109.2
     2021-05-11 10:00:00   Frankfurt_am_Main 132.3
     2021-05-11 10:00:00   Leverkusen      243.1
     2021-05-11 10:00:00   Rhein-Sieg-Kreis 89.9
     2021-05-11 10:00:00   Rheinisch-Bergischer_Kreis 109.1
Attributes:
   alias      RKI7
   group      COVID
   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 ['Muenchen', 'München', 'Frankfurt am Main', 'Bonn', 'Koln', 'Köln', 'Koeln', 'Rheinisch-Bergischer Kreis', 'Rhein-Sieg-Kreis', 'Leverkusen'])]"), property('attributes.GEN'), sprintf('%.1f', property('attributes.cases7_per_100k')));
multi(jsonPath("\$.features[?(\@.attributes.county in ['Köln', 'Koln', 'Koeln'])]"), property('attributes.county'), sprintf('%.1f', property('attributes.cases7_per_100k')));
   room       CCU2_Zentrale,Wettervorhersage
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: herrmannj am 11 Mai 2021, 11:21:07
Ich schaue mir das an. Thnx
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: yersinia am 11 Mai 2021, 11:26:26
Ich denke, dass die Suche mit Umlauten (derzeit) nicht funktioniert. Ich persönlich finde eine Textsuche immer unschön - und wenn es sich vermeiden lässt weil man zB eine ID nehmen kann, dann ist dies mMn zu bevorzugen.
Internals:
   API_LAST_RES 1620724855.72828
   API__LAST_MSG 200
   CFGFN     
   DEF        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,OBJECTID,county&returnGeometry=false&outSR=4326&f=json
   FUUID      609a484a-f33f-3151-b182-387ca5a91fa491e2
   NAME       rki7
   NEXT       2021-05-11 12:00:00
   NR         12335
   SOURCE     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,OBJECTID,county&returnGeometry=false&outSR=4326&f=json (200)
   STATE      ???
   SVN        24360 2021-04-29 21:17:23 UTC
   TYPE       JsonMod
   .attraggr:
   .attrminint:
   CONFIG:
     IN_REQUEST 0
     SOURCE     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,OBJECTID,county&returnGeometry=false&outSR=4326&f=json
     SECRET:
   READINGS:
     2021-05-11 11:20:55   .computedReadings 79_name,81_name,88_name,89_name,80_name,118_cases7_per_100k,224_cases7_per_100k,118_name,80_cases7_per_100k,224_name,89_cases7_per_100k,88_cases7_per_100k,81_cases7_per_100k,79_cases7_per_100k
     2021-05-11 11:20:55   118_cases7_per_100k 132.3
     2021-05-11 11:20:55   118_name        Frankfurt am Main
     2021-05-11 11:20:55   224_cases7_per_100k 78.0
     2021-05-11 11:20:55   224_name        München
     2021-05-11 11:20:55   79_cases7_per_100k 109.2
     2021-05-11 11:20:55   79_name         Bonn
     2021-05-11 11:20:55   80_cases7_per_100k 140.3
     2021-05-11 11:20:55   80_name         Köln
     2021-05-11 11:20:55   81_cases7_per_100k 243.1
     2021-05-11 11:20:55   81_name         Leverkusen
     2021-05-11 11:20:55   88_cases7_per_100k 109.1
     2021-05-11 11:20:55   88_name         Rheinisch-Bergischer Kreis
     2021-05-11 11:20:55   89_cases7_per_100k 89.9
     2021-05-11 11:20:55   89_name         Rhein-Sieg-Kreis
Attributes:
   interval   0 */1 * * *
   readingList multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['224', '118', '79', '80', '88', '89', '81'])]"), concat(property('attributes.OBJECTID'),'_cases7_per_100k'), sprintf('%.1f', property('attributes.cases7_per_100k')));
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['224', '118', '79', '80', '88', '89', '81'])]"), concat(property('attributes.OBJECTID'),'_name'), property('attributes.GEN'));
   room       Corona
   webCmd     reread


raw:
defmod 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,OBJECTID,county&returnGeometry=false&outSR=4326&f=json
attr rki7 interval 0 */1 * * *
attr rki7 readingList multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['224', '118', '79', '80', '88', '89', '81'])]"), concat(property('attributes.OBJECTID'),'_cases7_per_100k'), sprintf('%.1f', property('attributes.cases7_per_100k')));;\
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['224', '118', '79', '80', '88', '89', '81'])]"), concat(property('attributes.OBJECTID'),'_name'), property('attributes.GEN'));;
attr rki7 room Corona
attr rki7 webCmd reread



[sOT]
@herrmannj: was denkst du, ist performanter/effizienter:
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['224', '118', '79', '80', '88', '89', '81'])]"), concat(property('attributes.OBJECTID'),'_cases7_per_100k'), sprintf('%.1f', property('attributes.cases7_per_100k')));
oder
multi(jsonPath("\$.features.attributes[?(\@.OBJECTID in ['224', '118', '79', '80', '88', '89', '81'])]"), concat(property('OBJECTID'),'_cases7_per_100k'), sprintf('%.1f', property('cases7_per_100k')));
?
[/sOT]
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: tomster am 11 Mai 2021, 13:28:01
Zitat von: yersinia am 11 Mai 2021, 11:26:26
Ich denke, dass die Suche mit Umlauten (derzeit) nicht funktioniert.

Ja, irgendwas in dieser Richtung scheint es zu sein. Ich hab diesen Thread vor ein paar Tagen entdeckt und während ich es bei mir eingebaut/ daran gebastelt habe, wurden plötzlich die Readings von München LK & SK nicht mehr angezeigt. Ich dachte erst an einen Config-Fehler auf meiner Seite, aber ich hab es auch durch Neuanlegen nicht mehr hinbekommen. Allerdings haben andere Orte mit Umlaut problemlos funktioniert.
Egal, bin dann eben auch auf die ID umgestiegen.
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: olvis am 11 Mai 2021, 14:53:09
Alles klar, danke euch.
Dann schwenke ich doch mal auf die Object IDs.
Ist einfach stabiler.
Danke an yersinia für die Suche meiner genutzten IDs :-)
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: herrmannj am 11 Mai 2021, 15:33:52
Unabhängig davon bewerte ich das als Bug sollte das so sein (Suche/Umlaut) der beseitigt wird.

Was mich wundert ist, dass dies erst vor einigen Tagen aufgetreten ist. Da hätte ich die Umstellung auf Cpanel::JSON .. im verdacht. Nun gut, wird sich zeigen und dann werde ich das beseitigen.

@yersinia
Zitatwas denkst du, ist performanter/effizienter:
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['224', '118', '79', '80', '88', '89', '81'])]"), concat(property('attributes.OBJECTID'),'_cases7_per_100k'), sprintf('%.1f', property('attributes.cases7_per_100k')));
vs
multi(jsonPath("\$.features.attributes[?(\@.OBJECTID in ['224', '118', '79', '80', '88', '89', '81'])]"), concat(property('OBJECTID'),'_cases7_per_100k'), sprintf('%.1f', property('cases7_per_100k')));

vmtl die zweite Variante. Müsste man aber messen. Vmtl aber so oder so nur wenige ms bei "normalen" Dateien.
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: olvis am 11 Mai 2021, 16:48:38
Ich hatte ein paar Wochen kein Update mehr gemacht.
Am 08.05. habe ich das nachgezogen. Und danach kam kein Wert mehr für die SOnderlaut-Orte an.
Falls es was hilft hier die Liste aus dem Logfile zum Update:
2021.05.08 13:49:29 1: New entries in the CHANGED file:
2021.05.08 13:49:29 1:  - bugfix:  98_serviced: interval not starting after FHEM start
2021.05.08 13:49:29 1:  - feature: 98_serviced: add attr disabledForIntervals
2021.05.08 13:49:29 1:  - change:  98_serviced: adapt new help format for commandref
2021.05.08 13:49:29 1:  - feature: 98_todoist: added title="<item>" option for addTask
2021.05.08 13:49:29 1:  - bugfix:  10_WS980: v1.3.0 - fix invalid values like 0xffff
2021.05.08 13:49:29 1:  - bugfix:  73_AutoShuttersControl: roolback fix #1149463
2021.05.08 13:49:29 1:  - bugfix:  73_AutoShuttersControl: fix logic error in EventProcessing
2021.05.08 13:49:29 1:                          Forum #1149463
2021.05.08 13:49:29 1:  - bugfix:  74_GardenaSmartDevice: fix uninitialized value in concatenation
2021.05.08 13:49:29 1:  - feature: 98_backup: split modul code in to two files. add code for
2021.05.08 13:49:29 1:                        error handling
2021.05.08 13:49:29 1:  - bugfix:  lib/FHEM/Core/Authentication/Passwords.pm:
2021.05.08 13:49:29 1:             fix rename bug, new method to create object
2021.05.08 13:49:29 1:           You musst pass a instance TYPE to the function if you create a objekt
2021.05.08 13:49:29 1:  - change:  move lib/FHEM/Core/Password/Utils.pm to
2021.05.08 13:49:29 1:             lib/FHEM/Core/Authentication/Passwords.pm
2021.05.08 13:49:29 1:  - feature: 30_HUEBridge: enable autocreation of sensors for deconz
2021.05.08 13:49:29 1:  - new:     lib/FHEM/Core/Password/Utils.pm: new modul for developer to save
2021.05.08 13:49:29 1:             passwords or passphrase in fhem keystore
2021.05.08 13:49:29 1:  - bugfix:  98_WeekdayTimer: don't enable disabled WDT in group par. setting
2021.05.08 13:49:29 1:  - feature: 49_IPCAM: attrs unknownFormatRetryCount, unknownFormatRetryDelay
2021.05.08 13:49:29 1:                       and handleAnyXmlAsSvg
2021.05.08 13:49:29 1:  - change:  74_GardenaDevice: add new API for mower
2021.05.08 13:49:29 1:  - bugfix:  70_BOTVAC: transient map cache
2021.05.08 13:49:29 1:  - bugfix:  73_DoorBird: Event Video Routine
2021.05.08 13:49:29 1:  - bugfix:  73_ElectricityCalculator: Bugfix - Midnight-Crash
2021.05.08 13:49:29 1: ... rest of lines skipped.

Mit den ObjectIDs läuft es natürlich. Habe "name" noch mit der ID verbunden im Reading, damit ich weiss, welche Zahl welcher Ort ist. Im Name tauchen aber auch keine Sonderzeichen auf:
RKI7:118_SK_Frankfurt_am_Main 132.3
RKI7:224_SK_MAnchen 78.0
RKI7:79_SK_Bonn 109.2
RKI7:80_SK_KAln 140.3
RKI7:81_SK_Leverkusen 243.1
RKI7:88_LK_Rheinisch-Bergischer_Kreis 109.1
RKI7:89_LK_Rhein-Sieg-Kreis 89.9

Musste aber dadurch auch Anpassungen am Auslesen des Readings vornehmen, weil ich die Daten für einen ORt in ein Logfile schreibe, um es dann grafisch darzustellen
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: herrmannj am 11 Mai 2021, 21:51:01
die Tatsache dass der Fehler bei mir nicht auftritt, wird dir wenig helfen :)

Gib mal bitte dies in der fhem cmdline ein:
{$Cpanel::JSON::XS::VERSION}
(bei mir 4.19):
Internals:
   API_LAST_RES 1620762482.25521
   API__LAST_MSG 200
   CFGFN     
   DEF        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,OBJECTID,county&returnGeometry=false&outSR=4326&f=json
   FUUID      609ad863-f33f-aa36-2412-cbc6cad08c2eb894
   NAME       RKI7
   NEXT       2021-05-11 22:00:00
   NR         25
   SOURCE     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,OBJECTID,county&returnGeometry=false&outSR=4326&f=json (200)
   STATE      ???
   SVN        24360 2021-04-29 21:17:23 UTC
   TYPE       JsonMod
   CONFIG:
     IN_REQUEST 0
     SOURCE     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,OBJECTID,county&returnGeometry=false&outSR=4326&f=json
     SECRET:
   READINGS:
     2021-05-11 21:48:02   Bonn            109.2
     2021-05-11 21:48:02   Frankfurt_am_Main 132.3
     2021-05-11 21:48:02   Koln            140.3
     2021-05-11 21:48:02   Leverkusen      243.1
     2021-05-11 21:48:02   Munchen         69.0
     2021-05-11 21:48:02   Rhein-Sieg-Kreis 89.9
     2021-05-11 21:48:02   Rheinisch-Bergischer_Kreis 109.1
Attributes:
   readingList multi(jsonPath("\$.features[?(\@.attributes.GEN in ['München', 'Frankfurt am Main', 'Bonn', 'Köln', 'Rheinisch-Bergischer Kreis', 'Rhein-Sieg-Kreis', 'Leverkusen'])]"), property('attributes.GEN'), sprintf('%.1f', property('attributes.cases7_per_100k')));


edit: kommando zurück - ich habe verstanden was bei dir nicht geht
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: RockFan am 11 Mai 2021, 23:00:03
Hallo,

ich bin hier gerade reingestolpert und vielleicht hilft meine Beobachtung weiter:

Ich habe folgende Definition für readingList:

multi(jsonPath('$.features[?(@.attributes.cases7_per_100k > 34)]'), property('attributes.county'), sprintf('%.1f', property('attributes.cases7_per_100k')));
multi(jsonPath("\$.features[?(\@.attributes.county in ['SK Augsburg', 'LK Augsburg', 'LK Aichach-Friedberg', 'SK München'])]"), property('attributes.county'), sprintf('%.1f', property('attributes.cases7_per_100k')));


Mir ist vor ein paar Tagen aufgefallen, dass in meiner Ergebnismenge (Readings) die Umlaute plötzlich alle in "A" umgewandelt werden. Vorher haben einfach nur die Pünktchen gefehlt.

Beispiel
Vorher:
SK_Munchen

Nachher:
SK_MAnchen

Viele Grüße
Dieter
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: herrmannj am 11 Mai 2021, 23:27:03
und neu: "Muenchen" :)

Ab morgen im update. Alle die davon betroffen waren, wissen jetzt dass Cpanel::JSON::XS nicht installiert ist. Was immerhin zur Entdeckung des Bugs geführt hat, aber die performance ist noch besser wenn man das installiert.

Internals:
   API_LAST_MSG 200
   API_LAST_RES 1620768464.46626
   DEF        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,OBJECTID,county&returnGeometry=false&outSR=4326&f=json
   FUUID      609ad863-f33f-aa36-2412-cbc6cad08c2eb894
   NAME       RKI7
   NEXT       2021-05-12 01:00:00
   NR         15
   SOURCE     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,OBJECTID,county&returnGeometry=false&outSR=4326&f=json (200)
   STATE      ???
   SVN        24360 2021-04-29 21:17:23 UTC
   TYPE       JsonMod
   CONFIG:
     IN_REQUEST 0
     SOURCE     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,OBJECTID,county&returnGeometry=false&outSR=4326&f=json
     SECRET:
   READINGS:
     2021-05-11 23:27:44   Bonn            109.2
     2021-05-11 23:27:44   Frankfurt_am_Main 132.3
     2021-05-11 23:27:44   Hamburg         72.9
     2021-05-11 23:27:44   Koeln           140.3
     2021-05-11 23:27:44   Leverkusen      243.1
     2021-05-11 23:27:44   Muenchen        69.0
     2021-05-11 23:27:44   Rhein-Sieg-Kreis 89.9
     2021-05-11 23:27:44   Rheinisch-Bergischer_Kreis 109.1
Attributes:
   readingList multi(jsonPath("\$.features[?(\@.attributes.GEN in ['Hamburg', 'München', 'Frankfurt am Main', 'Bonn', 'Köln', 'Rheinisch-Bergischer Kreis', 'Rhein-Sieg-Kreis', 'Leverkusen'])]"), property('attributes.GEN'), sprintf('%.1f', property('attributes.cases7_per_100k')))
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: yersinia am 12 Mai 2021, 08:23:01
Zitat von: herrmannj am 11 Mai 2021, 23:27:03Alle die davon betroffen waren, wissen jetzt dass Cpanel::JSON::XS nicht installiert ist. Was immerhin zur Entdeckung des Bugs geführt hat, aber die performance ist noch besser wenn man das installiert.
Zitat von: yersinia am 30 April 2021, 08:57:38Wäre eigtl JSON::MaybeXS (https://metacpan.org/pod/JSON::MaybeXS) eine Option für dich gewesen?
scnr ;)

btw, als zusätzliche info:
Zitat von: herrmannj am 30 April 2021, 09:16:33(sudo apt-get install libcpanel-json-xs-perl)
für die Debian-Derivate wie RaspiOS:
sudo apt update && sudo apt install libcpanel-json-xs-perl
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: olvis am 12 Mai 2021, 08:55:13
Man lernt nie aus :-)
Also Umlaute werden jetzt mit Vokal plus e dargestellt ? Klasse.

ZitatAlle die davon betroffen waren, wissen jetzt dass Cpanel::JSON::XS nicht installiert ist. Was immerhin zur Entdeckung des Bugs geführt hat, aber die performance ist noch besser wenn man das installiert.
Was genau muss ich tun, um das zu installieren ?
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: yersinia am 12 Mai 2021, 09:04:01
Zitat von: olvis am 12 Mai 2021, 08:55:13Was genau muss ich tun, um das zu installieren ?
Zitat von: yersinia am 12 Mai 2021, 08:23:01für die Debian-Derivate wie RaspiOS:
sudo apt update && sudo apt install libcpanel-json-xs-perl
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: olvis am 12 Mai 2021, 09:47:08
Danke Dir. Ein FHEM Update hat die Umlaute auch schon gebracht.
Habe jetzt beides gemacht :-)

Viele Grüße,
olvis
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: Romoker am 18 Mai 2021, 09:56:26
Ich habe mit meinem 7-Tage-Inzidenz-Objekt ein Problem mit der interval-Abfrage. Das Intervall wird nach der Definition nur einmalig zum definiertem Zeitpunkt korrekt ausgeführt. In den Folgeperioden werden nur die Reading Timestamps aktualisiert, aber nicht die Werte.

Hier das List meines JsonMod-Objektes von heute:
Internals:
   API_LAST_MSG 200
   API_LAST_RES 1621293300.24328
   CFGFN     
   DEF        https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=GEN%20%3D%20'HAMBURG'&outFields=GEN,EWZ,death_rate,cases,deaths,cases_per_100k,cases_per_population,last_update,cases7_per_100k,recovered,cases7_per_100k_txt,OBJECTID&outSR=4326&f=json
   FUUID      60a219f1-f33f-df6c-8b0f-ba9e0c443c2b8323
   NAME       jm_CoronaMonitorHH
   NEXT       2021-05-19 01:15:00
   NR         5706
   SOURCE     https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=GEN%20%3D%20'HAMBURG'&outFields=GEN,EWZ,death_rate,cases,deaths,cases_per_100k,cases_per_population,last_update,cases7_per_100k,recovered,cases7_per_100k_txt,OBJECTID&outSR=4326&f=json (200)
   STATE      ???
   SVN        24420 2021-05-11 21:25:20 UTC
   TYPE       JsonMod
   CONFIG:
     IN_REQUEST 0
     SOURCE     https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=GEN%20%3D%20'HAMBURG'&outFields=GEN,EWZ,death_rate,cases,deaths,cases_per_100k,cases_per_population,last_update,cases7_per_100k,recovered,cases7_per_100k_txt,OBJECTID&outSR=4326&f=json
     SECRET:
   READINGS:
     2021-05-18 01:15:01   16_EWZ          1847253
     2021-05-18 01:15:01   16_GEN          Hamburg
     2021-05-18 01:15:01   16_cases        74991
     2021-05-18 01:15:01   16_cases7_per_100k 45.2563888108451
     2021-05-18 01:15:01   16_cases_per_100k 4059.59551831828
     2021-05-18 01:15:01   16_cases_per_population 4.05959551831828
     2021-05-18 01:15:01   16_death_rate   2.04424530943713
     2021-05-18 01:15:01   16_deaths       1533
     2021-05-18 01:15:01   16_last_update  17.05.2021, 00:00 Uhr
Attributes:
   interval   15 1 * * *
   readingList multi(jsonPath('$.features[*]'), concat(property('attributes.OBJECTID'),'_GEN'), property('attributes.GEN'));
multi(jsonPath('$.features[*]'), concat(property('attributes.OBJECTID'),'_EWZ'), property('attributes.EWZ'));
multi(jsonPath('$.features[*]'), concat(property('attributes.OBJECTID'),'_death_rate'), property('attributes.death_rate'));
multi(jsonPath('$.features[*]'), concat(property('attributes.OBJECTID'),'_cases'), property('attributes.cases'));
multi(jsonPath('$.features[*]'), concat(property('attributes.OBJECTID'),'_deaths'), property('attributes.deaths'));
multi(jsonPath('$.features[*]'), concat(property('attributes.OBJECTID'),'_cases_per_100k'), property('attributes.cases_per_100k'));
multi(jsonPath('$.features[*]'), concat(property('attributes.OBJECTID'),'_cases_per_population'), property('attributes.cases_per_population'));
multi(jsonPath('$.features[*]'), concat(property('attributes.OBJECTID'),'_last_update'), property('attributes.last_update'));
multi(jsonPath('$.features[*]'), concat(property('attributes.OBJECTID'),'_cases7_per_100k'), property('attributes.cases7_per_100k'))
   room       Test
   verbose    5


Wie man sieht, stimmen die Timestamps der Readings, aber die Werte sind noch die von gestern. Z.B. der korrekte "cases7_per_100k"-Wert für heute ist 42.495532555638. Wenn ich manuell ein reread ausführe, werden die Readings korrekt aktualisiert. Ist das ein Fehler oder habe ich in der Konfiguration etwas falsch gemacht?

Hier noch der verbose 5-Logauszug zur letzten Abfrage:
2021.05.18 01:15:00.000 4: [jm_CoronaMonitorHH] start request
2021.05.18 01:15:00.003 4: [jm_CoronaMonitorHH] next request: 2021.05.19 01:15:00
2021.05.18 01:15:00.004 5: HttpUtils url=https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=GEN%20%3D%20'HAMBURG'&outFields=GEN,EWZ,death_rate,cases,deaths,cases_per_100k,cases_per_population,last_update,cases7_per_100k,recovered,cases7_per_100k_txt,OBJECTID&outSR=4326&f=json NonBlocking
2021.05.18 01:15:00.031 4: IP: services7.arcgis.com -> 65.9.84.96
2021.05.18 01:15:00.067 5: HttpUtils request header:
GET /mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=GEN%20%3D%20'HAMBURG'&outFields=GEN,EWZ,death_rate,cases,deaths,cases_per_100k,cases_per_population,last_update,cases7_per_100k,recovered,cases7_per_100k_txt,OBJECTID&outSR=4326&f=json HTTP/1.0
Host: services7.arcgis.com
User-Agent: fhem
Accept-Encoding: gzip,deflate

Accept: application/json
Accept-Charset: utf-8, iso-8859-1

2021.05.18 01:15:00.242 4: https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=GEN%20%3D%20'HAMBURG'&outFields=GEN,EWZ,death_rate,cases,deaths,cases_per_100k,cases_per_population,last_update,cases7_per_100k,recovered,cases7_per_100k_txt,OBJECTID&outSR=4326&f=json: HTTP response code 200
2021.05.18 01:15:00.242 5: HttpUtils https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=GEN%20%3D%20'HAMBURG'&outFields=GEN,EWZ,death_rate,cases,deaths,cases_per_100k,cases_per_population,last_update,cases7_per_100k,recovered,cases7_per_100k_txt,OBJECTID&outSR=4326&f=json: Got data, length: 57649
2021.05.18 01:15:00.243 5: HttpUtils response header:
HTTP/1.1 200 OK
Content-Type: text/plain; charset=utf-8
Content-Length: 57649
Connection: close
Cache-Control: public, max-age=3600, s-maxage=3600
Last-Modified: Mon, 17 May 2021 01:42:33 GMT
ETag: sd140_39448021
Server: Microsoft-IIS/10.0
X-ArcGIS-Trace-Id: c72a935492c89c4c8f39c7ccff7f996c
x-esri-query-request-units: 2
x-esri-tiles-basic-query-mode: true
x-esri-tiles-basic-query-type: Basic
X-ArcGIS-Correlation-Id: 00-c72a935492c89c4c8f39c7ccff7f996c-55b7a3bc6c7d9948-00
X-ArcGIS-Instance: MTSDS_Web_IN_0
Strict-Transport-Security: max-age=63072000
Access-Control-Allow-Origin: *
Date: Mon, 17 May 2021 23:14:59 GMT
X-Cache: RefreshHit from cloudfront
Via: 1.1 bdbb0d922c29917c00cfed799f55e7c2.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: AMS1-C1
X-Amz-Cf-Id: WpN9SWapwE0WnzDvxm1n6g-KnjK-9IifPIqM16B7myWpSSZnOVmn7g==
2021.05.18 01:15:00.243 4: [jm_CoronaMonitorHH] api encoding is utf-8, designated encoder is utf-8-strict


Viele Grüße
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: JoWiemann am 18 Mai 2021, 10:09:41
[quote author=Romoker link=topic=113798.msg1157202#msg1157202 date=1621324586]
Ich habe mit meinem 7-Tage-Inzidenz-Objekt ein Problem mit der interval-Abfrage. Das Intervall wird nach der Definition nur einmalig zum definiertem Zeitpunkt korrekt ausgeführt. In den Folgeperioden werden nur die Reading Timestamps aktualisiert, aber nicht die Werte.

Attributes:
   interval   15 1 * * *

[/quote]

interval   15 1 * * * bedeutet ja eigentlich: jeden Tag um 01:15

andererseits gibt crontab guru: 15 1 */1 * * als At 01:15 on every day-of-month aus.

Grüße Jörg
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: Romoker am 18 Mai 2021, 10:34:17
Zitatinterval   15 1 * * * bedeutet ja eigentlich: jeden Tag um 01:15

andererseits gibt crontab guru: 15 1 */1 * * als At 01:15 on every day-of-month aus.

Dann wäre die Frage, wie die crontab funktion in JsonMod internal implementiert ist. Aber die Timestamps in meinen Readings deuten darauf hin, dass etwas zur definierten Zeit ausgeführt wurde, nur die Werte wurden nicht aktualisiert. Ich werde mal die zweite Variante ausprobieren.

Viele Grüße
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: Christoph Morrison am 18 Mai 2021, 10:38:02
Zitat von: JoWiemann am 18 Mai 2021, 10:09:41

interval   15 1 * * * bedeutet ja eigentlich: jeden Tag um 01:15

andererseits gibt crontab guru: 15 1 */1 * * als At 01:15 on every day-of-month aus.

DoM * und DoM */1 definieren den gleichen Zeitpunkt. Gibt es um 01:15 vielleicht einfach noch keine Daten für den aktuellen Tag? Ich glaube die werden jeweils etwa gegen 08:00 aktualisiert.

https://www.rki.de/DE/Content/InfAZ/N/Neuartiges_Coronavirus/Fallzahlen.html
ZitatFallzahlen in Deutschland
Stand: Dienstag, 18.5.2021, 00:00 Uhr (online aktualisiert um 07:55 Uhr)
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: yersinia am 18 Mai 2021, 10:40:52
15 1 * * *
und
15 1 */1 * *
ergeben das Gleiche: täglich um 01:15 Uhr (und nur dann!) werden die Daten aktualisiert.

Wenn ich mich recht entsinne, werden die Daten auch in der Quelle nicht so häufig aktualisiert. Allerdings sollten sich die Inhalte der Readings über die Tage (!) schon verändern.

Ich würde das Interval mal auf
0 9 * * *
setzen. Entspricht täglich um 9:00 Uhr.



EDIT: ich weiß gar nicht, ob die Wochentag/Monatsfunktion überhaupt schon implementiert ist (https://forum.fhem.de/index.php/topic,111487.0.html).
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: Romoker am 18 Mai 2021, 11:30:19
Danke für die Hinweise. Ich habe angenommen, die 7-Tage-Inzidenzwerte werden nur einmal am Tag um Mitternacht aktualisiert. Dann habe ich wohl
2021-05-18 01:15:01   16_last_update  17.05.2021, 00:00 Uhr
vom RKI falsch interpretiert.

Ich versuche es dann mal mit dem Update morgens um 9 Uhr.

Vielel Grüße
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: Ainadilion am 20 Juni 2021, 13:49:54
Hallo,

eine Frage zu #21, wie erreiche ich, dass die UserReadings der Anzahl nicht selbst mitgezählt werden? Wie kann ich die UserReadings die mit _Anzahl beginnen von der Zählung ausschließen?

Gruß
Ainadilion
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: Gisbert am 20 Juni 2021, 17:55:03
Hallo Ainadilion,

es war mir auch schon aufgefallen, dass in 2 Landkreisen der 7-Tage-Inzidenzwert hartnäckig bei > 250 liegen sollte.

Ich hab diese Lösung (raw-Format !!) gefunden, aber frag nicht nach großen Erklärungen:

attr RKI7 userReadings _Anzahl {my $anz = grep(!/_Anzahl/, (keys %{$hash->{READINGS}}));; return $anz;;},\
_Anzahl_35 {my $anz = grep {!/_Anzahl/ && ReadingsNum($NAME,$_,0) < 35;;} (keys %{$hash->{READINGS}});; return $anz;;},\
_Anzahl_50 {my $anz = grep {!/_Anzahl/ && ReadingsNum($NAME,$_,0) >= 35 && ReadingsNum($NAME,$_,0) < 50;;} (keys %{$hash->{READINGS}});; return $anz;;},\
_Anzahl_100 {my $anz = grep {!/_Anzahl/ && ReadingsNum($NAME,$_,0) >= 50 && ReadingsNum($NAME,$_,0) < 100;;} (keys %{$hash->{READINGS}});; return $anz;;},\
_Anzahl_150 {my $anz = grep {!/_Anzahl/ && ReadingsNum($NAME,$_,0) >= 100 && ReadingsNum($NAME,$_,0) < 150;;} (keys %{$hash->{READINGS}});; return $anz;;},\
_Anzahl_200 {my $anz = grep {!/_Anzahl/ && ReadingsNum($NAME,$_,0) >= 150 && ReadingsNum($NAME,$_,0) < 200;;} (keys %{$hash->{READINGS}});; return $anz;;},\
_Anzahl_250 {my $anz = grep {!/_Anzahl/ && ReadingsNum($NAME,$_,0) >= 200 && ReadingsNum($NAME,$_,0) < 250;;} (keys %{$hash->{READINGS}});; return $anz;;},\
_Anzahl_u250 {my $anz = grep {!/_Anzahl/ && ReadingsNum($NAME,$_,0) >= 250;;} (keys %{$hash->{READINGS}});; return $anz;;}


Die Anzahl der Landkreise/Städte liegt bei 391, stimmt das?

Viele​ Grüße​ Gisbert​
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: Ainadilion am 20 Juni 2021, 19:14:46
Hi, die 391 stimmt nicht, es sind grundsätzlich 401. Da aber Berlins Bezirke auch als Stadtkreise zählen, ist die Summe 413. Dies erreicht man, indem man nicht auf "GEN", sondern auf "county" abfragt. So werden gleichlautende Land- und Stadtkreise berücksichtigt, die fehlen mit GEN.

attr RKI7 readingList multi(jsonPath('$.features..attributes'), property('county'), sprintf('%.1f', property('cases7_per_100k')));;


Im Augenblick wertet das Programm alle Readings aus, somit zählt er auch die UserReadings zu den Zahlen mit zu, daher eine Zahl über 250, weil mehr als 250 Kreise unter 35 sind.

Mit deinem Code passt jetzt die Gesamtsumme (413 Stadt- und Landkreise), {!/_Anzahl/ && zieht die UserReadings ab. Danke hierfür.

Hier noch meine Raw-Definition:

defmod 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
attr RKI7 interval 19 19 * * *
attr RKI7 readingList multi(jsonPath('$.features..attributes'), property('county'), sprintf('%.1f', property('cases7_per_100k')));;
attr RKI7 room Corona
attr RKI7 stateFormat { my $ret = "<div style=\"text-align:left;;\">Zahl der Landkreise/Städte<br />";;\
$ret .= "mit 7-Tage-Inzidenz == 0: <font style=\"color:blue;;font-weight:bold;;\">".ReadingsVal($name,'_Anzahl_0','-')."</font><br />";;\
        $ret .= "mit 7-Tage-Inzidenz < 35: <font style=\"color:green;;font-weight:bold;;\">".ReadingsVal($name,'_Anzahl_35','-')."</font><br />";;\
$ret .= "mit 7-Tage-Inzidenz > 35 & < 50: <font style=\"color:orange;;font-weight:bold;;\">".ReadingsVal($name,'_Anzahl_50','-')."</font><br />";;\
$ret .= "mit 7-Tage-Inzidenz > 50 & < 100: <font style=\"color:red;;font-weight:bold;;\">".ReadingsVal($name,'_Anzahl_100','-')."</font><br />";;\
$ret .= "mit 7-Tage-Inzidenz > 100 & < 200: <font style=\"color:red;;font-weight:bold;;\">".ReadingsVal($name,'_Anzahl_200','-')."</font><br />";;\
$ret .= "mit 7-Tage-Inzidenz > 200: <font style=\"color:hotpink;;font-weight:bold;;\">".ReadingsVal($name,'_Anzahl_u200','-')."</font></div>";;\
return $ret;;\
}
attr RKI7 userReadings _Anzahl_0 { my $anz = grep {!/_Anzahl/ && ReadingsNum($NAME,$_,"") == 0;;} (keys %{$hash->{READINGS}});;\
return $anz;;\
},\
_Anzahl_35 { my $anz = grep {!/_Anzahl/ && ReadingsNum($NAME,$_,"") >0 && ReadingsNum($NAME,$_,"") < 35.1;;} (keys %{$hash->{READINGS}});;\
return $anz;;\
},\
_Anzahl_50 { my $anz = grep {!/_Anzahl/ && ReadingsNum($NAME,$_,"") > 35 && ReadingsNum($NAME,$_,"") < 50.1;;} (keys %{$hash->{READINGS}});;\
return $anz;;\
},\
_Anzahl_100 { my $anz = grep {!/_Anzahl/ && ReadingsNum($NAME,$_,"") > 50 && ReadingsNum($NAME,$_,"") < 100.1;;} (keys %{$hash->{READINGS}});;\
return $anz;;\
},\
_Anzahl_200 { my $anz = grep {!/_Anzahl/ && ReadingsNum($NAME,$_,"") > 100 && ReadingsNum($NAME,$_,"") < 200.1;;} (keys %{$hash->{READINGS}});;\
return $anz;;\
},\
_Anzahl_u200 { my $anz = grep {!/_Anzahl/ && ReadingsNum($NAME,$_,"") > 200;;} (keys %{$hash->{READINGS}});;\
return $anz;;\
}
attr RKI7 verbose 0


Gruß
Ainadilion
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: Ainadilion am 21 Juni 2021, 15:47:33
Hallo, irgendetwas passt immer noch nicht, beim Inzidenzwert 0.0 wird immer einer zuviel gezählt, woran kann das liegen?

Hier mal meine Raws zu Meck-Pomm und Brandenburg:


defmod RKIMV JsonMod https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=BL_ID%20%3D%20'13'&outFields=OBJECTID,AGS,GEN,BEZ,death_rate,cases,deaths,cases_per_100k,cases_per_population,BL,BL_ID,county,last_update,cases7_per_100k,recovered,EWZ_BL,cases7_bl_per_100k,cases7_bl,death7_bl,cases7_lk,death7_lk,cases7_per_100k_txt&returnGeometry=false&outSR=4326&f=json
attr RKIMV interval 6 15 * * *
attr RKIMV readingList multi(jsonPath('$.features..attributes'), property('county'), sprintf('%.1f', property('cases7_per_100k')));;
attr RKIMV room Corona
attr RKIMV stateFormat { my $ret = "<div style=\"text-align:left;;\">Zahl der Landkreise/Städte<br />";;\
$ret .= "mit 7-Tage-Inzidenz = 0: <font style=\"color:blue;;font-weight:bold;;\">".ReadingsVal($name,'_Anzahl_0','-')."</font><br />";;\
        $ret .= "mit 7-Tage-Inzidenz < 35: <font style=\"color:green;;font-weight:bold;;\">".ReadingsVal($name,'_Anzahl_35','-')."</font><br />";;\
$ret .= "mit 7-Tage-Inzidenz > 35 & < 50: <font style=\"color:orange;;font-weight:bold;;\">".ReadingsVal($name,'_Anzahl_50','-')."</font><br />";;\
$ret .= "mit 7-Tage-Inzidenz > 50 & < 100: <font style=\"color:red;;font-weight:bold;;\">".ReadingsVal($name,'_Anzahl_100','-')."</font><br />";;\
$ret .= "mit 7-Tage-Inzidenz > 100 & < 200: <font style=\"color:red;;font-weight:bold;;\">".ReadingsVal($name,'_Anzahl_200','-')."</font><br />";;\
$ret .= "mit 7-Tage-Inzidenz > 200: <font style=\"color:hotpink;;font-weight:bold;;\">".ReadingsVal($name,'_Anzahl_u200','-')."</font></div>";;\
return $ret;;\
}
attr RKIMV userReadings _Anzahl_0 { my $anz = grep {!/_Anzahl/ && ReadingsNum($NAME,$_,0) == 0;;} (keys %{$hash->{READINGS}});;\
return $anz;;\
},\
_Anzahl_35 { my $anz = grep {!/_Anzahl/ && ReadingsNum($NAME,$_,0) >0 && ReadingsNum($NAME,$_,0) < 35.1;;} (keys %{$hash->{READINGS}});;\
return $anz;;\
},\
_Anzahl_50 { my $anz = grep {!/_Anzahl/ && ReadingsNum($NAME,$_,0) > 35 && ReadingsNum($NAME,$_,0) < 50.1;;} (keys %{$hash->{READINGS}});;\
return $anz;;\
},\
_Anzahl_100 { my $anz = grep {!/_Anzahl/ && ReadingsNum($NAME,$_,0) > 50 && ReadingsNum($NAME,$_,0) < 100.1;;} (keys %{$hash->{READINGS}});;\
return $anz;;\
},\
_Anzahl_200 { my $anz = grep {!/_Anzahl/ && ReadingsNum($NAME,$_,0) > 100 && ReadingsNum($NAME,$_,0) < 200.1;;} (keys %{$hash->{READINGS}});;\
return $anz;;\
},\
_Anzahl_u200 { my $anz = grep {!/_Anzahl/ && ReadingsNum($NAME,$_,0) > 200;;} (keys %{$hash->{READINGS}});;\
return $anz;;\
}
attr RKIMV verbose 5



defmod RKIBB JsonMod https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=BL_ID%20%3D%20'12'&outFields=OBJECTID,AGS,GEN,BEZ,death_rate,cases,deaths,cases_per_100k,cases_per_population,BL,BL_ID,county,last_update,cases7_per_100k,recovered,EWZ_BL,cases7_bl_per_100k,cases7_bl,death7_bl,cases7_lk,death7_lk,cases7_per_100k_txt&returnGeometry=false&outSR=4326&f=json
attr RKIBB interval 49 14 * * *
attr RKIBB readingList multi(jsonPath('$.features..attributes'), property('county'), sprintf('%.1f', property('cases7_per_100k')));;
attr RKIBB room Corona
attr RKIBB stateFormat { my $ret = "<div style=\"text-align:left;;\">Zahl der Landkreise/Städte<br />";;\
$ret .= "mit 7-Tage-Inzidenz == 0: <font style=\"color:blue;;font-weight:bold;;\">".ReadingsVal($name,'_Anzahl_0','-')."</font><br />";;\
        $ret .= "mit 7-Tage-Inzidenz < 35: <font style=\"color:green;;font-weight:bold;;\">".ReadingsVal($name,'_Anzahl_35','-')."</font><br />";;\
$ret .= "mit 7-Tage-Inzidenz > 35 & < 50: <font style=\"color:orange;;font-weight:bold;;\">".ReadingsVal($name,'_Anzahl_50','-')."</font><br />";;\
$ret .= "mit 7-Tage-Inzidenz > 50 & < 100: <font style=\"color:red;;font-weight:bold;;\">".ReadingsVal($name,'_Anzahl_100','-')."</font><br />";;\
$ret .= "mit 7-Tage-Inzidenz > 100 & < 200: <font style=\"color:red;;font-weight:bold;;\">".ReadingsVal($name,'_Anzahl_200','-')."</font><br />";;\
$ret .= "mit 7-Tage-Inzidenz > 200: <font style=\"color:hotpink;;font-weight:bold;;\">".ReadingsVal($name,'_Anzahl_u200','-')."</font></div>";;\
return $ret;;\
}
attr RKIBB userReadings _Anzahl_0 { my $anz = grep {!/_Anzahl/ && ReadingsNum($NAME,$_,0) == 0;;} (keys %{$hash->{READINGS}});;\
return $anz;;\
},\
_Anzahl_35 { my $anz = grep {!/_Anzahl/ && ReadingsNum($NAME,$_,0) >0 && ReadingsNum($NAME,$_,0) < 35.1;;} (keys %{$hash->{READINGS}});;\
return $anz;;\
},\
_Anzahl_50 { my $anz = grep {!/_Anzahl/ && ReadingsNum($NAME,$_,0) > 35 && ReadingsNum($NAME,$_,0) < 50.1;;} (keys %{$hash->{READINGS}});;\
return $anz;;\
},\
_Anzahl_100 { my $anz = grep {!/_Anzahl/ && ReadingsNum($NAME,$_,0) > 50 && ReadingsNum($NAME,$_,0) < 100.1;;} (keys %{$hash->{READINGS}});;\
return $anz;;\
},\
_Anzahl_200 { my $anz = grep {!/_Anzahl/ && ReadingsNum($NAME,$_,0) > 100 && ReadingsNum($NAME,$_,0) < 200.1;;} (keys %{$hash->{READINGS}});;\
return $anz;;\
},\
_Anzahl_u200 { my $anz = grep {!/_Anzahl/ && ReadingsNum($NAME,$_,0) > 200;;} (keys %{$hash->{READINGS}});;\
return $anz;;\
}
attr RKIBB verbose 5


Gruß
Ainadilion
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: Gisbert am 21 Juni 2021, 22:06:33
Hallo Ainadilion,

derzeit sind 10 Landkreise/Städte bundesweit mit einem Inzidenzwert von 0.0 vorhanden.
Gleichzeitig sind 410 Kreise unter 35, 3 Kreise zwischen 35 und 50, und insgesamt gibt es 413 Kreise, das scheint also zu passen.

Ich hab die Lösung durch googlen (grep perl) und durch Ausprobieren gefunden. Da ich nur ansatzweise verstehe, wie grep in Perl funktioniert, kann ich nicht behaupten, dass es richtig ist, oder dass es keine Nebenwirkungen gibt.

Viele​ Grüße​ Gisbert​
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: Ainadilion am 22 Juni 2021, 06:14:57
Hallo, habe inzwischen auch ein bisschen rumprobiert. Den Code habe ich an folgenden Stellen geändert, nun sollten die Zahlen auch bei meinen Bundesländern passen:


_Anzahl_u200 { my $anz = grep {!/_Anzahl/ && ReadingsNum($NAME,$_,9999) > 200 && ReadingsNum($NAME,$_,9999) < 9999;;} (keys %{$hash->{READINGS}});;\
return $anz;;\


Durch die 9999 wird ein überflüssiger Datensatz nicht mehr mitgezählt, vorher stand eine 0 , damit war immer ein Kreis zu viel ohne Infektionen. Die Anpassung habe ich in jeder Zeile des Attributes userReadings vorgenommen.

Gruß
Ainadilion
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: Gisbert am 22 Juni 2021, 14:31:28
Zitat von: Ainadilion am 22 Juni 2021, 06:14:57
Durch die 9999 wird ein überflüssiger Datensatz nicht mehr mitgezählt, vorher stand eine 0 , damit war immer ein Kreis zu viel ohne Infektionen. Die Anpassung habe ich in jeder Zeile des Attributes userReadings vorgenommen.

Gruß
Ainadilion

Hallo Ainadilion,

der Ersatzwert (ich glaube, dass dies die Funktion des dritten Argumentes ist) liefert bei meiner Definition falsche Werte, allerdings warum? Wenn ich es auf nichts ändere (zwei einfache Anführungszeichen, dann stimmt es wieder.

Viele​ Grüße​ Gisbert​
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: Ainadilion am 22 Juni 2021, 14:58:59
Hallo, dann sollte es bei dir passen. Bei mir kamen mit "" Fehlermeldungen im Log.

Gruß
Ainadilion
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: yersinia am 24 Juni 2021, 15:49:50
Kleines Update zu den RKI Impfzahlen, welche von https://rki-vaccination-data.vercel.app/ (https://rki-vaccination-data.vercel.app/) als JSON zur Verfügung gestellt werden, und dem damit verbundenen Beispiel aus #48 (https://forum.fhem.de/index.php/topic,113798.msg1152629.html#msg1152629): es gibt einen  neuen Endpoint (https://rki-vaccination-data.vercel.app/api/v2) und damit eine Änderung in der JSON Struktur. Wer es haben möchte, hier die raw:
defmod coronaVaxRKIv2 JsonMod https://rki-vaccination-data.vercel.app/api/v2
attr coronaVaxRKIv2 interval 0 12 * * *
attr coronaVaxRKIv2 readingList single(jsonPath('$.lastUpdate'), 'lastUpdate', '-?-');;\
multi(jsonPath("\$.data[?(\@.rs in ['08', '07'])]"), concat(property('rs'),'_name'), property('name'));;\
multi(jsonPath("\$.data[?(\@.rs in ['08', '07'])]"), concat(property('rs'),'_inhabitants'), property('inhabitants'));;\
multi(jsonPath("\$.data[?(\@.rs in ['08', '07'])]"), concat(property('rs'),'_1st_dose_abs'), property('vaccinatedAtLeastOnce.doses'));;\
multi(jsonPath("\$.data[?(\@.rs in ['08', '07'])]"), concat(property('rs'),'_1st_dose_quote'), property('vaccinatedAtLeastOnce.quote'));;\
multi(jsonPath("\$.data[?(\@.rs in ['08', '07'])]"), concat(property('rs'),'_1st_dose_diff'), property('vaccinatedAtLeastOnce.differenceToThePreviousDay'));;\
multi(jsonPath("\$.data[?(\@.rs in ['08', '07'])]"), concat(property('rs'),'_1st_dose_vax_0_name'), property('vaccinatedAtLeastOnce.vaccine[0].name'));;\
multi(jsonPath("\$.data[?(\@.rs in ['08', '07'])]"), concat(property('rs'),'_1st_dose_vax_0_doses'), property('vaccinatedAtLeastOnce.vaccine[0].doses'));;\
multi(jsonPath("\$.data[?(\@.rs in ['08', '07'])]"), concat(property('rs'),'_1st_dose_vax_1_name'), property('vaccinatedAtLeastOnce.vaccine[1].name'));;\
multi(jsonPath("\$.data[?(\@.rs in ['08', '07'])]"), concat(property('rs'),'_1st_dose_vax_1_doses'), property('vaccinatedAtLeastOnce.vaccine[1].doses'));;\
multi(jsonPath("\$.data[?(\@.rs in ['08', '07'])]"), concat(property('rs'),'_1st_dose_vax_2_name'), property('vaccinatedAtLeastOnce.vaccine[2].name'));;\
multi(jsonPath("\$.data[?(\@.rs in ['08', '07'])]"), concat(property('rs'),'_1st_dose_vax_2_doses'), property('vaccinatedAtLeastOnce.vaccine[2].doses'));;\
multi(jsonPath("\$.data[?(\@.rs in ['08', '07'])]"), concat(property('rs'),'_1st_dose_vax_3_name'), property('vaccinatedAtLeastOnce.vaccine[3].name'));;\
multi(jsonPath("\$.data[?(\@.rs in ['08', '07'])]"), concat(property('rs'),'_1st_dose_vax_3_doses'), property('vaccinatedAtLeastOnce.vaccine[3].doses'));;\
multi(jsonPath("\$.data[?(\@.rs in ['08', '07'])]"), concat(property('rs'),'_2nd_dose_abs'), property('fullyVaccinated.doses'));;\
multi(jsonPath("\$.data[?(\@.rs in ['08', '07'])]"), concat(property('rs'),'_2nd_dose_quote'), property('fullyVaccinated.quote'));;\
multi(jsonPath("\$.data[?(\@.rs in ['08', '07'])]"), concat(property('rs'),'_2nd_dose_diff'), property('fullyVaccinated.differenceToThePreviousDay'));;\
multi(jsonPath("\$.data[?(\@.rs in ['08', '07'])]"), concat(property('rs'),'_2nd_dose_vax_0_name'), property('fullyVaccinated.vaccine[0].name'));;\
multi(jsonPath("\$.data[?(\@.rs in ['08', '07'])]"), concat(property('rs'),'_2nd_dose_vax_0_doses'), property('fullyVaccinated.vaccine[0].doses'));;\
multi(jsonPath("\$.data[?(\@.rs in ['08', '07'])]"), concat(property('rs'),'_2nd_dose_vax_1_name'), property('fullyVaccinated.vaccine[1].name'));;\
multi(jsonPath("\$.data[?(\@.rs in ['08', '07'])]"), concat(property('rs'),'_2nd_dose_vax_1_doses'), property('fullyVaccinated.vaccine[1].doses'));;\
multi(jsonPath("\$.data[?(\@.rs in ['08', '07'])]"), concat(property('rs'),'_2nd_dose_vax_2_name'), property('fullyVaccinated.vaccine[2].name'));;\
multi(jsonPath("\$.data[?(\@.rs in ['08', '07'])]"), concat(property('rs'),'_2nd_dose_vax_2_doses'), property('fullyVaccinated.vaccine[2].doses'));;\
multi(jsonPath("\$.data[?(\@.rs in ['08', '07'])]"), concat(property('rs'),'_2nd_dose_vax_3_name'), property('fullyVaccinated.vaccine[3].name'));;\
multi(jsonPath("\$.data[?(\@.rs in ['08', '07'])]"), concat(property('rs'),'_2nd_dose_vax_3_doses'), property('fullyVaccinated.vaccine[3].doses'));;\
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_name'), property('name'));;\
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_inhabitants'), property('inhabitants'));;\
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_1st_dose_abs'), property('vaccinatedAtLeastOnce.doses'));;\
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_1st_dose_quote'), property('vaccinatedAtLeastOnce.quote'));;\
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_1st_dose_diff'), property('vaccinatedAtLeastOnce.differenceToThePreviousDay'));;\
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_1st_dose_vax_0_name'), property('vaccinatedAtLeastOnce.vaccine[0].name'));;\
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_1st_dose_vax_0_doses'), property('vaccinatedAtLeastOnce.vaccine[0].doses'));;\
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_1st_dose_vax_1_name'), property('vaccinatedAtLeastOnce.vaccine[1].name'));;\
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_1st_dose_vax_1_doses'), property('vaccinatedAtLeastOnce.vaccine[1].doses'));;\
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_1st_dose_vax_2_name'), property('vaccinatedAtLeastOnce.vaccine[2].name'));;\
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_1st_dose_vax_2_doses'), property('vaccinatedAtLeastOnce.vaccine[2].doses'));;\
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_1st_dose_vax_3_name'), property('vaccinatedAtLeastOnce.vaccine[3].name'));;\
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_1st_dose_vax_3_doses'), property('vaccinatedAtLeastOnce.vaccine[3].doses'));;\
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_2nd_dose_abs'), property('fullyVaccinated.doses'));;\
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_2nd_dose_quote'), property('fullyVaccinated.quote'));;\
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_2nd_dose_diff'), property('fullyVaccinated.differenceToThePreviousDay'));;\
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_2nd_dose_vax_0_name'), property('fullyVaccinated.vaccine[0].name'));;\
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_2nd_dose_vax_0_doses'), property('fullyVaccinated.vaccine[0].doses'));;\
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_2nd_dose_vax_1_name'), property('fullyVaccinated.vaccine[1].name'));;\
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_2nd_dose_vax_1_doses'), property('fullyVaccinated.vaccine[1].doses'));;\
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_2nd_dose_vax_2_name'), property('fullyVaccinated.vaccine[2].name'));;\
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_2nd_dose_vax_2_doses'), property('fullyVaccinated.vaccine[2].doses'));;\
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_2nd_dose_vax_3_name'), property('fullyVaccinated.vaccine[3].name'));;\
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_2nd_dose_vax_3_doses'), property('fullyVaccinated.vaccine[3].doses'));;
attr coronaVaxRKIv2 update-on-start 0
attr coronaVaxRKIv2 webCmd reread

Es wird jetzt nach dem rs Wert gesucht und die Readings danach benannt. Einfach den rs Wert für das interessierte Bundesland einfügen:
01=Schleswig-Holstein
02=Hamburg
03=Niedersachsen
04=Bremen
05=Nordrhein-Westfalen
06=Hessen
07=Rheinland-Pfalz
08=Baden-Württemberg
09=Bayern
10=Saarland
11=Berlin
12=Brandenburg
13=Mecklenburg-Vorpommern
14=Sachsen
15=Sachsen-Anhalt
16=Thüringen

Der Endpoint liefert noch Daten für Bundesressorts (data[16]) sowie Deutschland (data[17]) welche keinen rs Wert haben - diese sind im readingList unten angehängt.

Alternativ kann man auch eine Textsuche durchführen, was das Attribut readingList in Anzahl der Zeilen kürzen würde - aber suchen nach Text, insb mit Umlauten, finde ich persönlich immer schwierig:
attr coronaVaxRKIv2 readingList single(jsonPath('$.lastUpdate'), 'lastUpdate', '-?-');;\
multi(jsonPath("\$.data[?(\@.name in ['Baden-Württemberg', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_name'), property('name'));;\
multi(jsonPath("\$.data[?(\@.name in ['Baden-Württemberg', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_inhabitants'), property('inhabitants'));;\
multi(jsonPath("\$.data[?(\@.name in ['Baden-Württemberg', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_1st_dose_abs'), property('vaccinatedAtLeastOnce.doses'));;\
multi(jsonPath("\$.data[?(\@.name in ['Baden-Württemberg', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_1st_dose_quote'), property('vaccinatedAtLeastOnce.quote'));;\
multi(jsonPath("\$.data[?(\@.name in ['Baden-Württemberg', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_1st_dose_diff'), property('vaccinatedAtLeastOnce.differenceToThePreviousDay'));;\
multi(jsonPath("\$.data[?(\@.name in ['Baden-Württemberg', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_1st_dose_vax_0_name'), property('vaccinatedAtLeastOnce.vaccine[0].name'));;\
multi(jsonPath("\$.data[?(\@.name in ['Baden-Württemberg', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_1st_dose_vax_0_doses'), property('vaccinatedAtLeastOnce.vaccine[0].doses'));;\
multi(jsonPath("\$.data[?(\@.name in ['Baden-Württemberg', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_1st_dose_vax_1_name'), property('vaccinatedAtLeastOnce.vaccine[1].name'));;\
multi(jsonPath("\$.data[?(\@.name in ['Baden-Württemberg', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_1st_dose_vax_1_doses'), property('vaccinatedAtLeastOnce.vaccine[1].doses'));;\
multi(jsonPath("\$.data[?(\@.name in ['Baden-Württemberg', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_1st_dose_vax_2_name'), property('vaccinatedAtLeastOnce.vaccine[2].name'));;\
multi(jsonPath("\$.data[?(\@.name in ['Baden-Württemberg', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_1st_dose_vax_2_doses'), property('vaccinatedAtLeastOnce.vaccine[2].doses'));;\
multi(jsonPath("\$.data[?(\@.name in ['Baden-Württemberg', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_1st_dose_vax_3_name'), property('vaccinatedAtLeastOnce.vaccine[3].name'));;\
multi(jsonPath("\$.data[?(\@.name in ['Baden-Württemberg', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_1st_dose_vax_3_doses'), property('vaccinatedAtLeastOnce.vaccine[3].doses'));;\
multi(jsonPath("\$.data[?(\@.name in ['Baden-Württemberg', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_2nd_dose_abs'), property('fullyVaccinated.doses'));;\
multi(jsonPath("\$.data[?(\@.name in ['Baden-Württemberg', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_2nd_dose_quote'), property('fullyVaccinated.quote'));;\
multi(jsonPath("\$.data[?(\@.name in ['Baden-Württemberg', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_2nd_dose_diff'), property('fullyVaccinated.differenceToThePreviousDay'));;\
multi(jsonPath("\$.data[?(\@.name in ['Baden-Württemberg', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_2nd_dose_vax_0_name'), property('fullyVaccinated.vaccine[0].name'));;\
multi(jsonPath("\$.data[?(\@.name in ['Baden-Württemberg', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_2nd_dose_vax_0_doses'), property('fullyVaccinated.vaccine[0].doses'));;\
multi(jsonPath("\$.data[?(\@.name in ['Baden-Württemberg', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_2nd_dose_vax_1_name'), property('fullyVaccinated.vaccine[1].name'));;\
multi(jsonPath("\$.data[?(\@.name in ['Baden-Württemberg', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_2nd_dose_vax_1_doses'), property('fullyVaccinated.vaccine[1].doses'));;\
multi(jsonPath("\$.data[?(\@.name in ['Baden-Württemberg', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_2nd_dose_vax_2_name'), property('fullyVaccinated.vaccine[2].name'));;\
multi(jsonPath("\$.data[?(\@.name in ['Baden-Württemberg', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_2nd_dose_vax_2_doses'), property('fullyVaccinated.vaccine[2].doses'));;\
multi(jsonPath("\$.data[?(\@.name in ['Baden-Württemberg', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_2nd_dose_vax_3_name'), property('fullyVaccinated.vaccine[3].name'));;\
multi(jsonPath("\$.data[?(\@.name in ['Baden-Württemberg', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_2nd_dose_vax_3_doses'), property('fullyVaccinated.vaccine[3].doses'));;




Edit: was natürlich immer geht ist
attr coronaVaxRKIv2 readingList complete();;
damit hat man dann auch einfach alles aus dem JsonString als Readings.
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: Gisbert am 26 Juni 2021, 21:33:54
Hallo yersinia,

ich hab deine Definition nachgestellt, hier die ganze raw-Definition:
defmod coronaVaxRKIv2 JsonMod https://rki-vaccination-data.vercel.app/api/v2
attr coronaVaxRKIv2 interval 0 12 * * *
attr coronaVaxRKIv2 readingList single(jsonPath('$.lastUpdate'), 'lastUpdate', '-?-');;\
multi(jsonPath("\$.data[?(\@.name in ['Nordrhein-Westfalen', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_name'), property('name'));;\
multi(jsonPath("\$.data[?(\@.name in ['Nordrhein-Westfalen', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_inhabitants'), property('inhabitants'));;\
multi(jsonPath("\$.data[?(\@.name in ['Nordrhein-Westfalen', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_1st_dose_abs'), property('vaccinatedAtLeastOnce.doses'));;\
multi(jsonPath("\$.data[?(\@.name in ['Nordrhein-Westfalen', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_1st_dose_quote'), property('vaccinatedAtLeastOnce.quote'));;\
multi(jsonPath("\$.data[?(\@.name in ['Nordrhein-Westfalen', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_1st_dose_diff'), property('vaccinatedAtLeastOnce.differenceToThePreviousDay'));;\
multi(jsonPath("\$.data[?(\@.name in ['Nordrhein-Westfalen', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_1st_dose_vax_0_name'), property('vaccinatedAtLeastOnce.vaccine[0].name'));;\
multi(jsonPath("\$.data[?(\@.name in ['Nordrhein-Westfalen', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_1st_dose_vax_0_doses'), property('vaccinatedAtLeastOnce.vaccine[0].doses'));;\
multi(jsonPath("\$.data[?(\@.name in ['Nordrhein-Westfalen', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_1st_dose_vax_1_name'), property('vaccinatedAtLeastOnce.vaccine[1].name'));;\
multi(jsonPath("\$.data[?(\@.name in ['Nordrhein-Westfalen', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_1st_dose_vax_1_doses'), property('vaccinatedAtLeastOnce.vaccine[1].doses'));;\
multi(jsonPath("\$.data[?(\@.name in ['Nordrhein-Westfalen', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_1st_dose_vax_2_name'), property('vaccinatedAtLeastOnce.vaccine[2].name'));;\
multi(jsonPath("\$.data[?(\@.name in ['Nordrhein-Westfalen', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_1st_dose_vax_2_doses'), property('vaccinatedAtLeastOnce.vaccine[2].doses'));;\
multi(jsonPath("\$.data[?(\@.name in ['Nordrhein-Westfalen', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_1st_dose_vax_3_name'), property('vaccinatedAtLeastOnce.vaccine[3].name'));;\
multi(jsonPath("\$.data[?(\@.name in ['Nordrhein-Westfalen', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_1st_dose_vax_3_doses'), property('vaccinatedAtLeastOnce.vaccine[3].doses'));;\
multi(jsonPath("\$.data[?(\@.name in ['Nordrhein-Westfalen', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_2nd_dose_abs'), property('fullyVaccinated.doses'));;\
multi(jsonPath("\$.data[?(\@.name in ['Nordrhein-Westfalen', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_2nd_dose_quote'), property('fullyVaccinated.quote'));;\
multi(jsonPath("\$.data[?(\@.name in ['Nordrhein-Westfalen', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_2nd_dose_diff'), property('fullyVaccinated.differenceToThePreviousDay'));;\
multi(jsonPath("\$.data[?(\@.name in ['Nordrhein-Westfalen', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_2nd_dose_vax_0_name'), property('fullyVaccinated.vaccine[0].name'));;\
multi(jsonPath("\$.data[?(\@.name in ['Nordrhein-Westfalen', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_2nd_dose_vax_0_doses'), property('fullyVaccinated.vaccine[0].doses'));;\
multi(jsonPath("\$.data[?(\@.name in ['Nordrhein-Westfalen', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_2nd_dose_vax_1_name'), property('fullyVaccinated.vaccine[1].name'));;\
multi(jsonPath("\$.data[?(\@.name in ['Nordrhein-Westfalen', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_2nd_dose_vax_1_doses'), property('fullyVaccinated.vaccine[1].doses'));;\
multi(jsonPath("\$.data[?(\@.name in ['Nordrhein-Westfalen', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_2nd_dose_vax_2_name'), property('fullyVaccinated.vaccine[2].name'));;\
multi(jsonPath("\$.data[?(\@.name in ['Nordrhein-Westfalen', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_2nd_dose_vax_2_doses'), property('fullyVaccinated.vaccine[2].doses'));;\
multi(jsonPath("\$.data[?(\@.name in ['Nordrhein-Westfalen', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_2nd_dose_vax_3_name'), property('fullyVaccinated.vaccine[3].name'));;\
multi(jsonPath("\$.data[?(\@.name in ['Nordrhein-Westfalen', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_2nd_dose_vax_3_doses'), property('fullyVaccinated.vaccine[3].doses'));;
attr coronaVaxRKIv2 room Corona
attr coronaVaxRKIv2 update-on-start 0
attr coronaVaxRKIv2 webCmd reread

setstate coronaVaxRKIv2 2021-06-26 21:25:23 .computedReadings 3_1st_dose_vax_2_name,0_name,3_2nd_dose_vax_3_name,3_2nd_dose_abs,1_name,3_1st_dose_diff,1_2nd_dose_vax_3_name,1_1st_dose_diff,3_name,2_1st_dose_vax_1_name,1_2nd_dose_abs,0_1st_dose_vax_2_name,2_1st_dose_vax_0_doses,0_2nd_dose_vax_3_name,0_1st_dose_diff,0_2nd_dose_abs,1_1st_dose_vax_2_name,0_1st_dose_vax_1_doses,2_1st_dose_vax_2_doses,1_1st_dose_vax_0_name,1_2nd_dose_quote,1_1st_dose_vax_1_doses,0_1st_dose_vax_0_name,0_2nd_dose_quote,2_2nd_dose_vax_3_doses,3_1st_dose_vax_1_doses,3_2nd_dose_quote,3_1st_dose_vax_0_name,2_2nd_dose_vax_0_doses,0_inhabitants,0_1st_dose_vax_3_name,0_2nd_dose_diff,1_2nd_dose_vax_2_name,0_1st_dose_abs,1_inhabitants,1_1st_dose_vax_3_name,1_2nd_dose_diff,0_2nd_dose_vax_2_name,1_1st_dose_abs,2_2nd_dose_vax_1_name,3_1st_dose_vax_3_name,3_inhabitants,3_1st_dose_abs,3_2nd_dose_diff,3_2nd_dose_vax_2_name,3_1st_dose_quote,3_2nd_dose_vax_0_name,3_2nd_dose_vax_1_doses,1_2nd_dose_vax_1_doses,0_2nd_dose_vax_0_name,2_1st_dose_vax_3_doses,0_1st_dose_quote,2_2nd_dose_vax_2_doses,0_2nd_dose_vax_1_doses,1_2nd_dose_vax_0_name,1_1st_dose_quote,3_2nd_dose_vax_3_doses,3_1st_dose_vax_2_doses,1_1st_dose_vax_2_doses,2_2nd_dose_quote,0_2nd_dose_vax_3_doses,lastUpdate,2_1st_dose_vax_0_name,2_1st_dose_vax_1_doses,0_1st_dose_vax_2_doses,1_2nd_dose_vax_3_doses,2_2nd_dose_vax_3_name,0_1st_dose_vax_0_doses,2_2nd_dose_abs,1_1st_dose_vax_1_name,2_1st_dose_diff,1_1st_dose_vax_0_doses,0_1st_dose_vax_1_name,2_1st_dose_vax_2_name,3_1st_dose_vax_0_doses,2_name,3_1st_dose_vax_1_name,0_2nd_dose_vax_2_doses,2_2nd_dose_vax_1_doses,1_1st_dose_vax_3_doses,1_2nd_dose_vax_2_doses,0_1st_dose_vax_3_doses,2_1st_dose_quote,2_2nd_dose_vax_0_name,3_2nd_dose_vax_2_doses,3_1st_dose_vax_3_doses,3_2nd_dose_vax_1_name,3_2nd_dose_vax_0_doses,1_2nd_dose_vax_0_doses,2_2nd_dose_vax_2_name,0_2nd_dose_vax_1_name,2_1st_dose_vax_3_name,2_inhabitants,0_2nd_dose_vax_0_doses,1_2nd_dose_vax_1_name,2_1st_dose_abs,2_2nd_dose_diff
setstate coronaVaxRKIv2 2021-06-26 21:25:23 0_1st_dose_abs 9970117
setstate coronaVaxRKIv2 2021-06-26 21:25:23 0_1st_dose_diff 81315
setstate coronaVaxRKIv2 2021-06-26 21:25:23 0_1st_dose_quote 55.55
setstate coronaVaxRKIv2 2021-06-26 21:25:23 0_1st_dose_vax_0_doses 6602788
setstate coronaVaxRKIv2 2021-06-26 21:25:23 0_1st_dose_vax_0_name biontech
setstate coronaVaxRKIv2 2021-06-26 21:25:23 0_1st_dose_vax_1_doses 668683
setstate coronaVaxRKIv2 2021-06-26 21:25:23 0_1st_dose_vax_1_name moderna
setstate coronaVaxRKIv2 2021-06-26 21:25:23 0_1st_dose_vax_2_doses 2220528
setstate coronaVaxRKIv2 2021-06-26 21:25:23 0_1st_dose_vax_2_name astrazeneca
setstate coronaVaxRKIv2 2021-06-26 21:25:23 0_1st_dose_vax_3_doses 478118
setstate coronaVaxRKIv2 2021-06-26 21:25:23 0_1st_dose_vax_3_name janssen
setstate coronaVaxRKIv2 2021-06-26 21:25:23 0_2nd_dose_abs 6649295
setstate coronaVaxRKIv2 2021-06-26 21:25:23 0_2nd_dose_diff 109936
setstate coronaVaxRKIv2 2021-06-26 21:25:23 0_2nd_dose_quote 37.05
setstate coronaVaxRKIv2 2021-06-26 21:25:23 0_2nd_dose_vax_0_doses 5246289
setstate coronaVaxRKIv2 2021-06-26 21:25:23 0_2nd_dose_vax_0_name biontech
setstate coronaVaxRKIv2 2021-06-26 21:25:23 0_2nd_dose_vax_1_doses 524831
setstate coronaVaxRKIv2 2021-06-26 21:25:23 0_2nd_dose_vax_1_name moderna
setstate coronaVaxRKIv2 2021-06-26 21:25:23 0_2nd_dose_vax_2_doses 400057


Ich bekomme aber außer 3 Fragezeichen keine andere Anzeige. Muss ich noch etwas berücksichtigen?

Viele​ Grüße​ Gisbert​
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: yersinia am 27 Juni 2021, 12:31:32
Zitat von: Gisbert am 26 Juni 2021, 21:33:54Ich bekomme aber außer 3 Fragezeichen keine andere Anzeige. Muss ich noch etwas berücksichtigen?
Meine raw enthält kein stateFormat, das müsstest du ergänzen. Hier ein allgemeingültiges stateFormat zu definieren, finde ich schwierig.

Anbei für deinen Fall ein raw Vorschlag:
attr coronaVaxRKIv2 stateFormat { my $ret = "<div style=\"text-align: left;;\">";;\
$ret .= "last 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,"0_name","-").": ";;\
$ret .= "<font style=\"color:orange;;\">1. Dosis:&nbsp;;".ReadingsVal($name,"0_1st_dose_abs","-");;\
$ret .= " (+".ReadingsVal($name,"0_1st_dose_diff","-");;\
$ret .= " / ".ReadingsVal($name,"0_1st_dose_quote","-")."%)</font>";;\
$ret .= " // <font style=\"color:green;;\">2. Dosis: ".ReadingsVal($name,"0_2nd_dose_abs","-");;\
$ret .= " (+".ReadingsVal($name,"0_2nd_dose_diff","-");;\
$ret .= " / ".ReadingsVal($name,"0_2nd_dose_quote","-")."%)</font><br \/>";;\
$ret .= ReadingsVal($name,"1_name","-").": ";;\
$ret .= "<font style=\"\">1. Dosis:&nbsp;;".ReadingsVal($name,"1_1st_dose_abs","-");;\
$ret .= " (+".ReadingsVal($name,"1_1st_dose_diff","-");;\
$ret .= " / ".ReadingsVal($name,"1_1st_dose_quote","-")."%)</font>";;\
$ret .= " // <font style=\"\">2. Dosis: ".ReadingsVal($name,"1_2nd_dose_abs","-");;\
$ret .= " (+".ReadingsVal($name,"1_2nd_dose_diff","-");;\
$ret .= " / ".ReadingsVal($name,"1_2nd_dose_quote","-")."%)</font><br \/>";;\
$ret .= ReadingsVal($name,"2_name","-").": ";;\
$ret .= "<font style=\"\">1. Dosis:&nbsp;;".ReadingsVal($name,"2_1st_dose_abs","-");;\
$ret .= " (+".ReadingsVal($name,"2_1st_dose_diff","-");;\
$ret .= " / ".ReadingsVal($name,"2_1st_dose_quote","-")."%)</font>";;\
$ret .= " // <font style=\"\">2. Dosis: ".ReadingsVal($name,"2_2nd_dose_abs","-");;\
$ret .= " (+".ReadingsVal($name,"2_2nd_dose_diff","-");;\
$ret .= " / ".ReadingsVal($name,"2_2nd_dose_quote","-")."%)</font><br \/>";;\
$ret .= ReadingsVal($name,"3_name","-").": ";;\
$ret .= "<font style=\"\">1. Dosis:&nbsp;;".ReadingsVal($name,"3_1st_dose_abs","-");;\
$ret .= " (+".ReadingsVal($name,"3_1st_dose_diff","-");;\
$ret .= " / ".ReadingsVal($name,"3_1st_dose_quote","-")."%)</font>";;\
$ret .= " // <font style=\"\">2. Dosis: ".ReadingsVal($name,"3_2nd_dose_abs","-");;\
$ret .= " (+".ReadingsVal($name,"3_2nd_dose_diff","-");;\
$ret .= " / ".ReadingsVal($name,"3_2nd_dose_quote","-")."%)</font><br \/>";;\
$ret .= "Letzter API-Update-Check: ";;\
$ret .= ReadingsVal($name,"lastUpdate","-");;\
$ret .= "</div>";;\
return $ret;;}


Man könnte sich überlegen, ob man es generischer gestaltet (Schleife) und es vlt sogar Tabellarisch darstellt. aber ob sich der Aufwand lohnt glaube ich nicht....
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: Gisbert am 27 Juni 2021, 13:19:43
Hallo yersinia,

nachdem ich mich etwas mit den Readings auseinander gesetzt hatte, habe ich verstanden, welche Daten vorliegen. Ich habe dann für meinen Fall ein passendes stateFormat "zu Fuß" definiert.

Aus Interesse habe ich deine Definition an meine angehängt, erhalte dann aber folgenden Fehler in der Ausgabe (statt der erwarteten Daten):
Error evaluating coronaVaxRKIv2 stateFormat: Undefined subroutine &main::tausender called at (eval 1884717) line 9.

Ich glaube, dass ich keinen Fehler beim Anhängen deiner Definition an meine gemacht habe, zumindest hat Fhem nicht gemeckert.

Viele​ Grüße​ Gisbert​
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: yersinia am 27 Juni 2021, 13:52:52
Hallo Gisbert,
nein, du hast keinen Fehler gemacht - in meiner Vorlage war noch die Routine für den tausender-Punkt drin.  ::) Ich habe es jetzt korrigiert. Danke fürs Feedback.  :)
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: enno am 31 August 2021, 15:23:30
Moin zusammen,

jetzt wo wir nicht mehr (nur) die 7-Tage-Inzidenz brauchen sondern die Hospitalisierungsrate. Frage in die Runde: Gibt es da schon was vergleichbares? Ich habe keine vergleichbare Datenbasis gefunden.

Gruss
  Enno
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: Gisbert am 31 August 2021, 18:57:03
Hallo Enno,

hier (https://www.intensivregister.de/#/aktuelle-lage/laendertabelle) gibt es Daten, wieviele Intensivbetten mit Coronapatienten belegt sind. Die Zahl hat sich seit vor einigen Wochen verdoppelt bis verdreifacht.
Ich weiß aber nicht wirklich, wie ich diese Zahlen von dieser Seite extrahieren kann.

Viele​ Grüße​ Gisbert​
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: herrmannj am 31 August 2021, 19:21:34
nur auf die Schnelle geprüft, da liegt ein json dahinter - das geht also.

https://www.intensivregister.de/api/public/reporting/laendertabelle?format=json&onlyErwachsenenBetten=true&onlyHaupversorgerCovid19=false

Freiwillige vor :)

Edit: bin offensichtlich nicht up-to-date:) Das ist der neue 7 Tage Inzidenz?
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: Gisbert am 01 September 2021, 07:02:56
Zitatbin offensichtlich nicht up-to-date:) Das ist der neue 7 Tage Inzidenz?

Hallo hermannj,

Coronaverordnungen sind ja wahrscheinlich (auch) auf Landesebene geregelt. Was denn da wo genau drin steht und was gilt, weiß ich auch nicht genau.
Da die Hospitalisierung ja jetzt das Maß der Dinge ist, finde ich die Wert bei den Intensivbetten hilfreich.

Viele​ Grüße​ Gisbert​
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: enno am 01 September 2021, 07:29:36
Moin hermannj,

ich hatte naiv angenommen, es gibt schon eine Seite, auf der die Daten aufbereitet sind. Für Niedersachsen gilt ja jetzt nicht nur die Inzidenz, sondern auch die Auslastung der Intensivbetten für die Einstufung in Warnstufen.

https://www.ndr.de/nachrichten/niedersachsen/warnampel104_backId-corona1458.html#content

https://www.bundesregierung.de/breg-de/themen/coronavirus/corona-bundeslaender-1745198

Wenn bei mir im Haushalt alle geimpft werden könnten, wäre mir das ganze ziemlich egal. Leider habe ich aber noch schulpflichtige, die zu jung für eine Impfung sind. Da muss ich leider immer ein Auge auf die Entwicklung haben, um nicht überrascht zu werden.

Gruss
  Enno
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: yersinia am 06 September 2021, 16:55:46
Zitat von: herrmannj am 31 August 2021, 19:21:34Freiwillige vor :)
defmod Intensivregister JsonMod https://www.intensivregister.de/api/public/reporting/laendertabelle?format=json&onlyErwachsenenBetten=true&onlyHaupversorgerCovid19=false
attr Intensivregister interval 10 */3 * * *
attr Intensivregister readingList multi(jsonPath("\$.data[?(\@.bundesland in ['HAMBURG', 'BERLIN'])]"), concat(property('bundesland'),'_meldebereichAnz'), property('meldebereichAnz'));;\
multi(jsonPath("\$.data[?(\@.bundesland in ['HAMBURG', 'BERLIN'])]"), concat(property('bundesland'),'_standortAnzahl'), property('standortAnzahl'));;\
multi(jsonPath("\$.data[?(\@.bundesland in ['HAMBURG', 'BERLIN'])]"), concat(property('bundesland'),'_faelleCovidAktuell'), property('faelleCovidAktuell'));;\
multi(jsonPath("\$.data[?(\@.bundesland in ['HAMBURG', 'BERLIN'])]"), concat(property('bundesland'),'_faelleCovidAktuellBeatmet'), property('faelleCovidAktuellBeatmet'));;\
multi(jsonPath("\$.data[?(\@.bundesland in ['HAMBURG', 'BERLIN'])]"), concat(property('bundesland'),'_intensivBettenBelegt'), property('intensivBettenBelegt'));;\
multi(jsonPath("\$.data[?(\@.bundesland in ['HAMBURG', 'BERLIN'])]"), concat(property('bundesland'),'_intensivBettenFrei'), property('intensivBettenFrei'));;\
multi(jsonPath("\$.data[?(\@.bundesland in ['HAMBURG', 'BERLIN'])]"), concat(property('bundesland'),'_intensivBettenFreiProStandort'), property('intensivBettenFreiProStandort'));;\
multi(jsonPath("\$.data[?(\@.bundesland in ['HAMBURG', 'BERLIN'])]"), concat(property('bundesland'),'_intensivBettenGesamt'), property('intensivBettenGesamt'));;\
multi(jsonPath("\$.data[?(\@.bundesland in ['HAMBURG', 'BERLIN'])]"), concat(property('bundesland'),'_intensivBettenNotfall7d'), property('intensivBettenNotfall7d'));;\
multi(jsonPath("\$.data[?(\@.bundesland in ['HAMBURG', 'BERLIN'])]"), concat(property('bundesland'),'_covidKapazitaetFrei'), property('covidKapazitaetFrei'));;\
multi(jsonPath("\$.data[?(\@.bundesland in ['HAMBURG', 'BERLIN'])]"), concat(property('bundesland'),'_covidToIntensivBettenPercent'), property('covidToIntensivBettenPercent'));;\
multi(jsonPath("\$.data[?(\@.bundesland in ['HAMBURG', 'BERLIN'])]"), concat(property('bundesland'),'_faelleCovidAktuellBeatmetToCovidAktuellPercent'), property('faelleCovidAktuellBeatmetToCovidAktuellPercent'));;\
multi(jsonPath("\$.data[?(\@.bundesland in ['HAMBURG', 'BERLIN'])]"), concat(property('bundesland'),'_bettenBelegtToBettenGesamtPercent'), property('bettenBelegtToBettenGesamtPercent'));;\
multi(jsonPath("\$.data[?(\@.bundesland in ['HAMBURG', 'BERLIN'])]"), concat(property('bundesland'),'_bettenFreiToBettenGesamtPercent'), property('bettenFreiToBettenGesamtPercent'));;\
single(jsonPath('$.overallSum.meldebereichAnz'), 'overallSum_meldebereichAnz', '-?-');;\
single(jsonPath('$.overallSum.standortAnzahl'), 'overallSum_standortAnzahl', '-?-');;\
single(jsonPath('$.overallSum.faelleCovidAktuell'), 'overallSum_faelleCovidAktuell', '-?-');;\
single(jsonPath('$.overallSum.faelleCovidAktuellBeatmet'), 'overallSum_faelleCovidAktuellBeatmet', '-?-');;\
single(jsonPath('$.overallSum.intensivBettenBelegt'), 'overallSum_intensivBettenBelegt', '-?-');;\
single(jsonPath('$.overallSum.intensivBettenFrei'), 'overallSum_intensivBettenFrei', '-?-');;\
single(jsonPath('$.overallSum.intensivBettenFreiProStandort'), 'overallSum_intensivBettenFreiProStandort', '-?-');;\
single(jsonPath('$.overallSum.intensivBettenGesamt'), 'overallSum_intensivBettenGesamt', '-?-');;\
single(jsonPath('$.overallSum.intensivBettenNotfall7d'), 'overallSum_intensivBettenNotfall7d', '-?-');;\
single(jsonPath('$.overallSum.covidKapazitaetFrei'), 'overallSum_covidKapazitaetFrei', '-?-');;\
single(jsonPath('$.overallSum.covidToIntensivBettenPercent'), 'overallSum_covidToIntensivBettenPercent', '-?-');;\
single(jsonPath('$.overallSum.faelleCovidAktuellBeatmetToCovidAktuellPercent'), 'overallSum_faelleCovidAktuellBeatmetToCovidAktuellPercent', '-?-');;\
single(jsonPath('$.overallSum.bettenBelegtToBettenGesamtPercent'), 'overallSum_bettenBelegtToBettenGesamtPercent', '-?-');;\
single(jsonPath('$.overallSum.bettenFreiToBettenGesamtPercent'), 'overallSum_bettenFreiToBettenGesamtPercent', '-?-');;\
single(jsonPath('$.creationTimestamp'), 'creationTimestamp', '-?-');;
attr Intensivregister webCmd reread
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: yersinia am 07 September 2021, 08:18:46
Update/alternativer Vorschlag (kürzere Readings, name des BL als Reading):
defmod Intensivregister JsonMod https://www.intensivregister.de/api/public/reporting/laendertabelle?format=json&onlyErwachsenenBetten=true&onlyHaupversorgerCovid19=false
attr Intensivregister interval 25 */3 * * *
attr Intensivregister readingList multi(jsonPath("\$.data[?(\@.bundesland in ['HAMBURG', 'BERLIN'])]"), concat(count(),'_name'), ucfirst(lc(property('bundesland'))));;\
multi(jsonPath("\$.data[?(\@.bundesland in ['HAMBURG', 'BERLIN'])]"), concat(count(),'_meldebereichAnz'), property('meldebereichAnz'));;\
multi(jsonPath("\$.data[?(\@.bundesland in ['HAMBURG', 'BERLIN'])]"), concat(count(),'_standortAnzahl'), property('standortAnzahl'));;\
multi(jsonPath("\$.data[?(\@.bundesland in ['HAMBURG', 'BERLIN'])]"), concat(count(),'_faelleCovidAktuell'), property('faelleCovidAktuell'));;\
multi(jsonPath("\$.data[?(\@.bundesland in ['HAMBURG', 'BERLIN'])]"), concat(count(),'_faelleCovidAktuellBeatmet'), property('faelleCovidAktuellBeatmet'));;\
multi(jsonPath("\$.data[?(\@.bundesland in ['HAMBURG', 'BERLIN'])]"), concat(count(),'_intensivBettenBelegt'), property('intensivBettenBelegt'));;\
multi(jsonPath("\$.data[?(\@.bundesland in ['HAMBURG', 'BERLIN'])]"), concat(count(),'_intensivBettenFrei'), property('intensivBettenFrei'));;\
multi(jsonPath("\$.data[?(\@.bundesland in ['HAMBURG', 'BERLIN'])]"), concat(count(),'_intensivBettenFreiProStandort'), property('intensivBettenFreiProStandort'));;\
multi(jsonPath("\$.data[?(\@.bundesland in ['HAMBURG', 'BERLIN'])]"), concat(count(),'_intensivBettenGesamt'), property('intensivBettenGesamt'));;\
multi(jsonPath("\$.data[?(\@.bundesland in ['HAMBURG', 'BERLIN'])]"), concat(count(),'_intensivBettenNotfall7d'), property('intensivBettenNotfall7d'));;\
multi(jsonPath("\$.data[?(\@.bundesland in ['HAMBURG', 'BERLIN'])]"), concat(count(),'_covidKapazitaetFrei'), property('covidKapazitaetFrei'));;\
multi(jsonPath("\$.data[?(\@.bundesland in ['HAMBURG', 'BERLIN'])]"), concat(count(),'_covidToIntensivBettenPercent'), property('covidToIntensivBettenPercent'));;\
multi(jsonPath("\$.data[?(\@.bundesland in ['HAMBURG', 'BERLIN'])]"), concat(count(),'_faelleCovidAktuellBeatmetToCovidAktuellPercent'), property('faelleCovidAktuellBeatmetToCovidAktuellPercent'));;\
multi(jsonPath("\$.data[?(\@.bundesland in ['HAMBURG', 'BERLIN'])]"), concat(count(),'_bettenBelegtToBettenGesamtPercent'), property('bettenBelegtToBettenGesamtPercent'));;\
multi(jsonPath("\$.data[?(\@.bundesland in ['HAMBURG', 'BERLIN'])]"), concat(count(),'_bettenFreiToBettenGesamtPercent'), property('bettenFreiToBettenGesamtPercent'));;\
single(jsonPath('$.overallSum.name'), 'overallSum_name', 'Deutschland');;\
single(jsonPath('$.overallSum.meldebereichAnz'), 'overallSum_meldebereichAnz', '-?-');;\
single(jsonPath('$.overallSum.standortAnzahl'), 'overallSum_standortAnzahl', '-?-');;\
single(jsonPath('$.overallSum.faelleCovidAktuell'), 'overallSum_faelleCovidAktuell', '-?-');;\
single(jsonPath('$.overallSum.faelleCovidAktuellBeatmet'), 'overallSum_faelleCovidAktuellBeatmet', '-?-');;\
single(jsonPath('$.overallSum.intensivBettenBelegt'), 'overallSum_intensivBettenBelegt', '-?-');;\
single(jsonPath('$.overallSum.intensivBettenFrei'), 'overallSum_intensivBettenFrei', '-?-');;\
single(jsonPath('$.overallSum.intensivBettenFreiProStandort'), 'overallSum_intensivBettenFreiProStandort', '-?-');;\
single(jsonPath('$.overallSum.intensivBettenGesamt'), 'overallSum_intensivBettenGesamt', '-?-');;\
single(jsonPath('$.overallSum.intensivBettenNotfall7d'), 'overallSum_intensivBettenNotfall7d', '-?-');;\
single(jsonPath('$.overallSum.covidKapazitaetFrei'), 'overallSum_covidKapazitaetFrei', '-?-');;\
single(jsonPath('$.overallSum.covidToIntensivBettenPercent'), 'overallSum_covidToIntensivBettenPercent', '-?-');;\
single(jsonPath('$.overallSum.faelleCovidAktuellBeatmetToCovidAktuellPercent'), 'overallSum_faelleCovidAktuellBeatmetToCovidAktuellPercent', '-?-');;\
single(jsonPath('$.overallSum.bettenBelegtToBettenGesamtPercent'), 'overallSum_bettenBelegtToBettenGesamtPercent', '-?-');;\
single(jsonPath('$.overallSum.bettenFreiToBettenGesamtPercent'), 'overallSum_bettenFreiToBettenGesamtPercent', '-?-');;\
single(jsonPath('$.creationTimestamp'), 'creationTimestamp', '-?-');;
attr Intensivregister webCmd reread


Vorschlag für stateFormat mit tabellarischer Darstellung (erste Zeile bei @objects entsprechend der Anzahl der BL anpassen):
attr Intensivregister stateFormat { my @objects = ("0","1","overallSum");;\
my $cellstyle = "padding:3pt;;border-bottom:1px dotted lightgray;;text-align: right;;";;\
my $highlightcolor = "DarkSlateGray";; #DodgerBlue";;\
my $ret = "<div style=\"text-align: left;;\">";;\
$ret .= "last check => ";;\
$ret .= POSIX::strftime("%d.%m. %H:%M",localtime(time_str2num(ReadingsTimestamp($name,".computedReadings","2000-01-01 00:00:00"))));;\
$ret .= "<br \/>";;\
$ret .= '<div style="display:table;;width:80%;;">';;\
$ret .= '<div style="display:table-row;;">';;\
  $ret .= '<div style="display:table-cell;;'.$cellstyle.'width:35%;;font-weight:bold;;">&nbsp;;</div>';;\
  $ret .= '<div style="display:table-cell;;'.$cellstyle.'width:15%;;font-weight:bold;;">Covid</div>';;\
  $ret .= '<div style="display:table-cell;;'.$cellstyle.'width:10%;;font-weight:bold;;">&nbsp;;</div>';;\
  $ret .= '<div style="display:table-cell;;'.$cellstyle.'width:15%;;font-weight:bold;;">davon beatmet</div>';;\
  $ret .= '<div style="display:table-cell;;'.$cellstyle.'width:10%;;font-weight:bold;;">&nbsp;;</div>';;\
  $ret .= '<div style="display:table-cell;;'.$cellstyle.'width:15%;;font-weight:bold;;">freie Kapazit&auml;;ten</div>';;\
$ret .= '</div>';; #header\
for my $obj (@objects) {\
$ret .= '<div style="display:table-row;;" onmouseover="this.style.background=\''.$highlightcolor.'\';;" onmouseout="this.style.background=\'transparent\';;">';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:35%;;">';;\
$ret .= ReadingsVal($name,$obj."_name","-");;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:15%;;">';;\
$ret .= ReadingsVal($name,$obj."_faelleCovidAktuell","-");;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:10%;;">';;\
$ret .= ReadingsVal($name,$obj."_covidToIntensivBettenPercent","-")."%";;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:15%;;">';;\
$ret .= ReadingsVal($name,$obj."_faelleCovidAktuellBeatmet","-");;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:10%;;">';;\
$ret .= ReadingsVal($name,$obj."_faelleCovidAktuellBeatmetToCovidAktuellPercent","-")."%";;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:15%;;">';;\
$ret .= ReadingsVal($name,$obj."_covidKapazitaetFrei","-");;\
$ret .= '</div>';;\
$ret .= '</div>';;\
}\
$ret .= '</div><br />';; #table\
$ret .= "Letzter API-Update-Check: ";;\
$ret .= ReadingsVal($name,"creationTimestamp","-");;\
$ret .= "</div>";;\
return $ret;;}
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: JoWiemann am 07 September 2021, 13:21:58
[quote author=yersinia link=topic=113798.msg1173502#msg1173502 date=1630995526]
$ret .= tausender(ReadingsVal($name,$obj."_faelleCovidAktuell","-"));;\

[/quote]

Wie sieht die sub tausender aus?

Grüße Jörg
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: yersinia am 07 September 2021, 13:31:23
Danke für den Hinweis auf den C&P Fehler. ::) Ist korrigiert im post #110.

Die tausender sub in myUtils:
sub tausender {
  my $zahl = shift;
  my $text = reverse $zahl;
  $text =~ s/\./\,/g;  #replace decimal point by decimal comma
  $text =~ s/(\d\d\d)(?=\d)(?!\d*\,)/$1./g;
  return scalar reverse $text;
}
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: somansch am 07 September 2021, 22:59:05
Zitat von: yersinia am 24 Juni 2021, 15:49:50
Kleines Update zu den RKI Impfzahlen, welche von https://rki-vaccination-data.vercel.app/ (https://rki-vaccination-data.vercel.app/) als JSON zur Verfügung gestellt werden, und dem damit verbundenen Beispiel aus #48 (https://forum.fhem.de/index.php/topic,113798.msg1152629.html#msg1152629): es gibt einen  neuen Endpoint (https://rki-vaccination-data.vercel.app/api/v2) und damit eine Änderung in der JSON Struktur. Wer es haben möchte, hier die raw:
defmod coronaVaxRKIv2 JsonMod https://rki-vaccination-data.vercel.app/api/v2
attr coronaVaxRKIv2 interval 0 12 * * *
attr coronaVaxRKIv2 readingList single(jsonPath('$.lastUpdate'), 'lastUpdate', '-?-');;\
multi(jsonPath("\$.data[?(\@.rs in ['08', '07'])]"), concat(property('rs'),'_name'), property('name'));;\
multi(jsonPath("\$.data[?(\@.rs in ['08', '07'])]"), concat(property('rs'),'_inhabitants'), property('inhabitants'));;\
multi(jsonPath("\$.data[?(\@.rs in ['08', '07'])]"), concat(property('rs'),'_1st_dose_abs'), property('vaccinatedAtLeastOnce.doses'));;\
multi(jsonPath("\$.data[?(\@.rs in ['08', '07'])]"), concat(property('rs'),'_1st_dose_quote'), property('vaccinatedAtLeastOnce.quote'));;\
multi(jsonPath("\$.data[?(\@.rs in ['08', '07'])]"), concat(property('rs'),'_1st_dose_diff'), property('vaccinatedAtLeastOnce.differenceToThePreviousDay'));;\
multi(jsonPath("\$.data[?(\@.rs in ['08', '07'])]"), concat(property('rs'),'_1st_dose_vax_0_name'), property('vaccinatedAtLeastOnce.vaccine[0].name'));;\
multi(jsonPath("\$.data[?(\@.rs in ['08', '07'])]"), concat(property('rs'),'_1st_dose_vax_0_doses'), property('vaccinatedAtLeastOnce.vaccine[0].doses'));;\
multi(jsonPath("\$.data[?(\@.rs in ['08', '07'])]"), concat(property('rs'),'_1st_dose_vax_1_name'), property('vaccinatedAtLeastOnce.vaccine[1].name'));;\
multi(jsonPath("\$.data[?(\@.rs in ['08', '07'])]"), concat(property('rs'),'_1st_dose_vax_1_doses'), property('vaccinatedAtLeastOnce.vaccine[1].doses'));;\
multi(jsonPath("\$.data[?(\@.rs in ['08', '07'])]"), concat(property('rs'),'_1st_dose_vax_2_name'), property('vaccinatedAtLeastOnce.vaccine[2].name'));;\
multi(jsonPath("\$.data[?(\@.rs in ['08', '07'])]"), concat(property('rs'),'_1st_dose_vax_2_doses'), property('vaccinatedAtLeastOnce.vaccine[2].doses'));;\
multi(jsonPath("\$.data[?(\@.rs in ['08', '07'])]"), concat(property('rs'),'_1st_dose_vax_3_name'), property('vaccinatedAtLeastOnce.vaccine[3].name'));;\
multi(jsonPath("\$.data[?(\@.rs in ['08', '07'])]"), concat(property('rs'),'_1st_dose_vax_3_doses'), property('vaccinatedAtLeastOnce.vaccine[3].doses'));;\
multi(jsonPath("\$.data[?(\@.rs in ['08', '07'])]"), concat(property('rs'),'_2nd_dose_abs'), property('fullyVaccinated.doses'));;\
multi(jsonPath("\$.data[?(\@.rs in ['08', '07'])]"), concat(property('rs'),'_2nd_dose_quote'), property('fullyVaccinated.quote'));;\
multi(jsonPath("\$.data[?(\@.rs in ['08', '07'])]"), concat(property('rs'),'_2nd_dose_diff'), property('fullyVaccinated.differenceToThePreviousDay'));;\
multi(jsonPath("\$.data[?(\@.rs in ['08', '07'])]"), concat(property('rs'),'_2nd_dose_vax_0_name'), property('fullyVaccinated.vaccine[0].name'));;\
multi(jsonPath("\$.data[?(\@.rs in ['08', '07'])]"), concat(property('rs'),'_2nd_dose_vax_0_doses'), property('fullyVaccinated.vaccine[0].doses'));;\
multi(jsonPath("\$.data[?(\@.rs in ['08', '07'])]"), concat(property('rs'),'_2nd_dose_vax_1_name'), property('fullyVaccinated.vaccine[1].name'));;\
multi(jsonPath("\$.data[?(\@.rs in ['08', '07'])]"), concat(property('rs'),'_2nd_dose_vax_1_doses'), property('fullyVaccinated.vaccine[1].doses'));;\
multi(jsonPath("\$.data[?(\@.rs in ['08', '07'])]"), concat(property('rs'),'_2nd_dose_vax_2_name'), property('fullyVaccinated.vaccine[2].name'));;\
multi(jsonPath("\$.data[?(\@.rs in ['08', '07'])]"), concat(property('rs'),'_2nd_dose_vax_2_doses'), property('fullyVaccinated.vaccine[2].doses'));;\
multi(jsonPath("\$.data[?(\@.rs in ['08', '07'])]"), concat(property('rs'),'_2nd_dose_vax_3_name'), property('fullyVaccinated.vaccine[3].name'));;\
multi(jsonPath("\$.data[?(\@.rs in ['08', '07'])]"), concat(property('rs'),'_2nd_dose_vax_3_doses'), property('fullyVaccinated.vaccine[3].doses'));;\
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_name'), property('name'));;\
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_inhabitants'), property('inhabitants'));;\
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_1st_dose_abs'), property('vaccinatedAtLeastOnce.doses'));;\
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_1st_dose_quote'), property('vaccinatedAtLeastOnce.quote'));;\
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_1st_dose_diff'), property('vaccinatedAtLeastOnce.differenceToThePreviousDay'));;\
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_1st_dose_vax_0_name'), property('vaccinatedAtLeastOnce.vaccine[0].name'));;\
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_1st_dose_vax_0_doses'), property('vaccinatedAtLeastOnce.vaccine[0].doses'));;\
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_1st_dose_vax_1_name'), property('vaccinatedAtLeastOnce.vaccine[1].name'));;\
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_1st_dose_vax_1_doses'), property('vaccinatedAtLeastOnce.vaccine[1].doses'));;\
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_1st_dose_vax_2_name'), property('vaccinatedAtLeastOnce.vaccine[2].name'));;\
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_1st_dose_vax_2_doses'), property('vaccinatedAtLeastOnce.vaccine[2].doses'));;\
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_1st_dose_vax_3_name'), property('vaccinatedAtLeastOnce.vaccine[3].name'));;\
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_1st_dose_vax_3_doses'), property('vaccinatedAtLeastOnce.vaccine[3].doses'));;\
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_2nd_dose_abs'), property('fullyVaccinated.doses'));;\
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_2nd_dose_quote'), property('fullyVaccinated.quote'));;\
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_2nd_dose_diff'), property('fullyVaccinated.differenceToThePreviousDay'));;\
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_2nd_dose_vax_0_name'), property('fullyVaccinated.vaccine[0].name'));;\
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_2nd_dose_vax_0_doses'), property('fullyVaccinated.vaccine[0].doses'));;\
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_2nd_dose_vax_1_name'), property('fullyVaccinated.vaccine[1].name'));;\
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_2nd_dose_vax_1_doses'), property('fullyVaccinated.vaccine[1].doses'));;\
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_2nd_dose_vax_2_name'), property('fullyVaccinated.vaccine[2].name'));;\
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_2nd_dose_vax_2_doses'), property('fullyVaccinated.vaccine[2].doses'));;\
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_2nd_dose_vax_3_name'), property('fullyVaccinated.vaccine[3].name'));;\
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_2nd_dose_vax_3_doses'), property('fullyVaccinated.vaccine[3].doses'));;
attr coronaVaxRKIv2 update-on-start 0
attr coronaVaxRKIv2 webCmd reread

Es wird jetzt nach dem rs Wert gesucht und die Readings danach benannt. Einfach den rs Wert für das interessierte Bundesland einfügen:
01=Schleswig-Holstein
02=Hamburg
03=Niedersachsen
04=Bremen
05=Nordrhein-Westfalen
06=Hessen
07=Rheinland-Pfalz
08=Baden-Württemberg
09=Bayern
10=Saarland
11=Berlin
12=Brandenburg
13=Mecklenburg-Vorpommern
14=Sachsen
15=Sachsen-Anhalt
16=Thüringen

Der Endpoint liefert noch Daten für Bundesressorts (data[16]) sowie Deutschland (data[17]) welche keinen rs Wert haben - diese sind im readingList unten angehängt.

Alternativ kann man auch eine Textsuche durchführen, was das Attribut readingList in Anzahl der Zeilen kürzen würde - aber suchen nach Text, insb mit Umlauten, finde ich persönlich immer schwierig:
attr coronaVaxRKIv2 readingList single(jsonPath('$.lastUpdate'), 'lastUpdate', '-?-');;\
multi(jsonPath("\$.data[?(\@.name in ['Baden-Württemberg', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_name'), property('name'));;\
multi(jsonPath("\$.data[?(\@.name in ['Baden-Württemberg', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_inhabitants'), property('inhabitants'));;\
multi(jsonPath("\$.data[?(\@.name in ['Baden-Württemberg', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_1st_dose_abs'), property('vaccinatedAtLeastOnce.doses'));;\
multi(jsonPath("\$.data[?(\@.name in ['Baden-Württemberg', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_1st_dose_quote'), property('vaccinatedAtLeastOnce.quote'));;\
multi(jsonPath("\$.data[?(\@.name in ['Baden-Württemberg', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_1st_dose_diff'), property('vaccinatedAtLeastOnce.differenceToThePreviousDay'));;\
multi(jsonPath("\$.data[?(\@.name in ['Baden-Württemberg', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_1st_dose_vax_0_name'), property('vaccinatedAtLeastOnce.vaccine[0].name'));;\
multi(jsonPath("\$.data[?(\@.name in ['Baden-Württemberg', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_1st_dose_vax_0_doses'), property('vaccinatedAtLeastOnce.vaccine[0].doses'));;\
multi(jsonPath("\$.data[?(\@.name in ['Baden-Württemberg', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_1st_dose_vax_1_name'), property('vaccinatedAtLeastOnce.vaccine[1].name'));;\
multi(jsonPath("\$.data[?(\@.name in ['Baden-Württemberg', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_1st_dose_vax_1_doses'), property('vaccinatedAtLeastOnce.vaccine[1].doses'));;\
multi(jsonPath("\$.data[?(\@.name in ['Baden-Württemberg', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_1st_dose_vax_2_name'), property('vaccinatedAtLeastOnce.vaccine[2].name'));;\
multi(jsonPath("\$.data[?(\@.name in ['Baden-Württemberg', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_1st_dose_vax_2_doses'), property('vaccinatedAtLeastOnce.vaccine[2].doses'));;\
multi(jsonPath("\$.data[?(\@.name in ['Baden-Württemberg', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_1st_dose_vax_3_name'), property('vaccinatedAtLeastOnce.vaccine[3].name'));;\
multi(jsonPath("\$.data[?(\@.name in ['Baden-Württemberg', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_1st_dose_vax_3_doses'), property('vaccinatedAtLeastOnce.vaccine[3].doses'));;\
multi(jsonPath("\$.data[?(\@.name in ['Baden-Württemberg', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_2nd_dose_abs'), property('fullyVaccinated.doses'));;\
multi(jsonPath("\$.data[?(\@.name in ['Baden-Württemberg', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_2nd_dose_quote'), property('fullyVaccinated.quote'));;\
multi(jsonPath("\$.data[?(\@.name in ['Baden-Württemberg', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_2nd_dose_diff'), property('fullyVaccinated.differenceToThePreviousDay'));;\
multi(jsonPath("\$.data[?(\@.name in ['Baden-Württemberg', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_2nd_dose_vax_0_name'), property('fullyVaccinated.vaccine[0].name'));;\
multi(jsonPath("\$.data[?(\@.name in ['Baden-Württemberg', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_2nd_dose_vax_0_doses'), property('fullyVaccinated.vaccine[0].doses'));;\
multi(jsonPath("\$.data[?(\@.name in ['Baden-Württemberg', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_2nd_dose_vax_1_name'), property('fullyVaccinated.vaccine[1].name'));;\
multi(jsonPath("\$.data[?(\@.name in ['Baden-Württemberg', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_2nd_dose_vax_1_doses'), property('fullyVaccinated.vaccine[1].doses'));;\
multi(jsonPath("\$.data[?(\@.name in ['Baden-Württemberg', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_2nd_dose_vax_2_name'), property('fullyVaccinated.vaccine[2].name'));;\
multi(jsonPath("\$.data[?(\@.name in ['Baden-Württemberg', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_2nd_dose_vax_2_doses'), property('fullyVaccinated.vaccine[2].doses'));;\
multi(jsonPath("\$.data[?(\@.name in ['Baden-Württemberg', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_2nd_dose_vax_3_name'), property('fullyVaccinated.vaccine[3].name'));;\
multi(jsonPath("\$.data[?(\@.name in ['Baden-Württemberg', 'Rheinland-Pfalz', 'Deutschland', 'Bundesressorts'])]"), concat(count(),'_2nd_dose_vax_3_doses'), property('fullyVaccinated.vaccine[3].doses'));;




Edit: was natürlich immer geht ist
attr coronaVaxRKIv2 readingList complete();;
damit hat man dann auch einfach alles aus dem JsonString als Readings.

Hi yersina,

habe gerade deinen Post entdeckt und möchte meine "v1" umstellen. Leider bekomme ich immer als API_LAST_MSG "invalid server response". habe daher die Konfig mal minimiert, komme aber trotzdem nicht weiter?!

defmod coronaVaxRKI JsonMod https://rki-vaccination-data.vercel.app/api/v2
attr coronaVaxRKI interval 0 */1 * * *
attr coronaVaxRKI readingList single(jsonPath('$.lastUpdate'), 'lastUpdate', '-?-');;
attr coronaVaxRKI room 097_News
attr coronaVaxRKI update-on-start 0
attr coronaVaxRKI webCmd reread


Hast du eine Idee?

Viele Grüße
Andreas

UPDATE: Fehler gefunden  :). Ich hatte das "JSON:XS" Paket nicht installiert...
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: majorshark am 08 September 2021, 10:35:47
Das ist bei mir auch so. Obwohl der Server entgegen der Meldung "API_LAST_MSG invalid server response" einen Status 200 liefert.
Verbose 5 liefert auch keine wirklichen Fehler.



2021.09.08 09:57:18 5: HttpUtils url=https://rki-vaccination-data.vercel.app/api/v2 NonBlocking via https
2021.09.08 09:57:18 4: IP: rki-vaccination-data.vercel.app -> 76.76.21.21
2021.09.08 09:57:18 5: HttpUtils request header:
GET /api/v2 HTTP/1.0
Host: rki-vaccination-data.vercel.app
User-Agent: fhem
Accept-Encoding: gzip,deflate

Accept: application/json
Accept-Charset: utf-8, iso-8859-1

2021.09.08 09:57:18 4: https://rki-vaccination-data.vercel.app/api/v2: HTTP response code 200
2021.09.08 09:57:18 5: HttpUtils https://rki-vaccination-data.vercel.app/api/v2: Got data, length: 10941
2021.09.08 09:57:18 5: HttpUtils response header:
HTTP/1.1 200 OK
Content-Type: application/json
Connection: close
cache-control: public, max-age=0, must-revalidate
date: Wed, 08 Sep 2021 07:11:56 GMT
server: Vercel
access-control-allow-origin: *
content-length: 10941
x-cache-timestamp: 2021-09-08T07:11:56.584294+02:00
x-vercel-cache: HIT
age: 2721
x-vercel-id: fra1::sfo1::wc9nd-1631087838629-6aaed7628bdc
strict-transport-security: max-age=63072000; includeSubDomains; preload
2021.09.08 09:57:18 4: [coronaVaxRKIv2] api encoding is , designated encoder is utf-8-strict
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: yersinia am 08 September 2021, 10:38:32
Zitat von: majorshark am 08 September 2021, 10:35:47Das ist bei mir auch so. Obwohl der Server entgegen der Meldung "API_LAST_MSG invalid server response" einen Status 200 liefert.
=>
Zitat von: somansch am 07 September 2021, 22:59:05UPDATE: Fehler gefunden  :). Ich hatte das "JSON:XS" Paket nicht installiert...
?
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: majorshark am 08 September 2021, 11:24:55
JSON:XS ist nun drauf. ???
Geht aber trotz alledem nicht. Gleiche Meldung.
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: herrmannj am 08 September 2021, 12:03:32
Cpanel::JSON::XS
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: majorshark am 08 September 2021, 13:31:10
Das war's: Grazie mille.  :)
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: Gisbert am 08 September 2021, 20:50:30
Zitat von: yersinia am 07 September 2021, 13:31:23
Danke für den Hinweis auf den C&P Fehler. ::) Ist korrigiert im post #110.

Die tausender sub in myUtils:
sub tausender {
  my $zahl = shift;
  my $text = reverse $zahl;
  $text =~ s/\./\,/g;  #replace decimal point by decimal comma
  $text =~ s/(\d\d\d)(?=\d)(?!\d*\,)/$1./g;
  return scalar reverse $text;
}


Hallo yersinia,

vielen Dank für deine Programmierung.
Ich bin nur ein wenig verwirrt wegen der sub Tausender, die im Betrag #110 gar nicht vorkommt.

Viele​ Grüße​ Gisbert​
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: yersinia am 09 September 2021, 07:31:17
Ich nutze die tausender sub um mir Zahlen entsprechend in der deutschen Notation (m.nnn,nnn) anzeigen zu lassen - übergib der Funktion ein Zahlenwert und diese gibt den umgewandelten Wert zurück. Wenn ich aber selbst dies im stateFormat nutze und es zur Verfügung stelle, kann ich nicht davon ausgehen, dass andere user die tausender sub haben bzw. haben möchten - daher gibt es in #110 das ganze ohne die sub.

Mit tausender sub wäre der stateFormat:
attr Intensivregister stateFormat { my @objects = ("0","1","overallSum");;\
my $cellstyle = "padding:3pt;;border-bottom:1px dotted lightgray;;text-align: right;;";;\
my $highlightcolor = "DarkSlateGray";; #DodgerBlue";;\
my $ret = "<div style=\"text-align: left;;\">";;\
$ret .= "last check => ";;\
$ret .= POSIX::strftime("%d.%m. %H:%M",localtime(time_str2num(ReadingsTimestamp($name,".computedReadings","2000-01-01 00:00:00"))));;\
$ret .= "<br \/>";;\
$ret .= '<div style="display:table;;width:80%;;">';;\
$ret .= '<div style="display:table-row;;">';;\
  $ret .= '<div style="display:table-cell;;'.$cellstyle.'width:35%;;font-weight:bold;;">&nbsp;;</div>';;\
  $ret .= '<div style="display:table-cell;;'.$cellstyle.'width:15%;;font-weight:bold;;">Covid</div>';;\
  $ret .= '<div style="display:table-cell;;'.$cellstyle.'width:10%;;font-weight:bold;;">&nbsp;;</div>';;\
  $ret .= '<div style="display:table-cell;;'.$cellstyle.'width:15%;;font-weight:bold;;">davon beatmet</div>';;\
  $ret .= '<div style="display:table-cell;;'.$cellstyle.'width:10%;;font-weight:bold;;">&nbsp;;</div>';;\
  $ret .= '<div style="display:table-cell;;'.$cellstyle.'width:15%;;font-weight:bold;;">freie Kapazit&auml;;ten</div>';;\
$ret .= '</div>';; #header\
for my $obj (@objects) {\
$ret .= '<div style="display:table-row;;" onmouseover="this.style.background=\''.$highlightcolor.'\';;" onmouseout="this.style.background=\'transparent\';;">';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:35%;;">';;\
$ret .= ReadingsVal($name,$obj."_name","-");;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:15%;;">';;\
$ret .= tausender(ReadingsVal($name,$obj."_faelleCovidAktuell","-"));;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:10%;;">';;\
$ret .= ReadingsVal($name,$obj."_covidToIntensivBettenPercent","-")."%";;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:15%;;">';;\
$ret .= tausender(ReadingsVal($name,$obj."_faelleCovidAktuellBeatmet","-"));;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:10%;;">';;\
$ret .= ReadingsVal($name,$obj."_faelleCovidAktuellBeatmetToCovidAktuellPercent","-")."%";;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:15%;;">';;\
$ret .= tausender(ReadingsVal($name,$obj."_covidKapazitaetFrei","-"));;\
$ret .= '</div>';;\
$ret .= '</div>';;\
}\
$ret .= '</div><br />';; #table\
$ret .= "Letzter API-Update-Check: ";;\
$ret .= ReadingsVal($name,"creationTimestamp","-");;\
$ret .= "</div>";;\
return $ret;;}
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: Wasserwerk33 am 13 September 2021, 21:56:16
@yersinia
Du hast in einem Beitrag geschrieben das man die erste Zeile ändern muss wenn man mehrere Bundesländer Abfragen möchte.

Mein Angepassteste:
{ my @objects = ("NORDRHEIN_WESTFALEN","NIEDERSACHSEN","overallSum");

Leider stehen bei mir keine Bundesländer in Tabelle davor sondern nur Striche, habe ich etwas vergessen einzugeben?

Danke für deine Hilfe, und die coole Arbeite
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: yersinia am 14 September 2021, 08:00:43
Das hängt davon ab, wie deine Readings gebaut werden.
Wenn mit BL als Schlüsselteil (wie in #109 (https://forum.fhem.de/index.php/topic,113798.msg1173410.html#msg1173410) beschrieben) via (zB)
multi(jsonPath("\$.data[?(\@.bundesland in ['NORDRHEIN_WESTFALEN','NIEDERSACHSEN'])]"), concat(property('bundesland'),'_standortAnzahl'), property('standortAnzahl'));;\
##-------------------------siehe----hier--------------------------------------------------------^

sollten alle Readings auch mit NORDRHEIN_WESTFALEN_ bzw. NIEDERSACHSEN_ (und overallSum_) beginnen, dann sollte
{ my @objects = ("NORDRHEIN_WESTFALEN","NIEDERSACHSEN","overallSum");
funktionieren.

Wenn count anstelle des BL verwendet wird (weil die Readings dann wesentlich kürzer sind - wie in #110 beschrieben (https://forum.fhem.de/index.php/topic,113798.msg1173502.html#msg1173502)) via (zB)
multi(jsonPath("\$.data[?(\@.bundesland in ['NORDRHEIN_WESTFALEN','NIEDERSACHSEN'])]"), concat(count(),'_meldebereichAnz'), property('meldebereichAnz'));;\
##-------------------------siehe----hier--------------------------------------------------------^

sollten alle Readings auch mit 0_ bzw. 1_ (und overallSum_) beginnen, dann sollte
{ my @objects = ("0","1","overallSum");
funktionieren.

Wichtig ist, dass du ein Reading mit _name erzeugst, sonst hast du keine Beschreibung für das BL:
multi(jsonPath("\$.data[?(\@.bundesland in ['NORDRHEIN_WESTFALEN','NIEDERSACHSEN'])]"), concat(count(),'_name'), ucfirst(lc(property('bundesland'))));;\
Das ist aber in #110 (https://forum.fhem.de/index.php/topic,113798.msg1173502.html#msg1173502) enthalten.

Nach den Änderungen ein reread ausführen - und auch mal prüfen, ob die JSON-Quelle auch zur Verfügung steht. ;)

Ansonsten zeig' mal ein list des Devices. ;)
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: Wasserwerk33 am 15 September 2021, 20:30:30
Hi

Ich habe es nach dem wie im Beitrag #110 umgebaut. Nun geht es. Dort wird auch der Name als Reading angezeigt. So wie unter overallSum.

Jetzt mit dem Klappt alles und ist so wie es sollte.
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: khk123 am 27 Oktober 2021, 11:46:37
Hi yersinia,

ich hab deine Definitionen für das Intensivregister seit Wochen am Laufen. Funktionierte auch bis zum 22.10 ganz gut. Nur plötzlich hatte ich am 23.10., 26.10. und auch heute (27.10.) nach der Abfrage der Website um 03:25 Uhr einen Hänger von FHEM. FHEM läuft zwar noch, es sind aber keinerlei Events mehr zu sehen und es werden auch keine Befehle mehr ausgeführt. Die Abfrage des Intensivregister erfolgt generell nur um nachts um 03:25 Uhr. Meine Vermutung ist, das https://www.intensivregister.de/api/public/reporting/laendertabelle?format=json&onlyErwachsenenBetten=true&onlyHaupversorgerCovid19=false zwar erreichbar war, aber irgendetwas schiefgelaufen ist. Ist da etwas bekannt? Hab die Abfrage erstmal deaktiviert.

Hier die letzten Meldungen von 03:25 bis zum Restart von FHEM um 08:50 (global verbose 4 war gesetzt)

2021.10.27 03:25:03 4: monitoring (Batterie_Ueberwachung) triggered by "W_Hz_E battery: ok"
2021.10.27 03:25:04 4: https://www.intensivregister.de/api/public/reporting/laendertabelle?format=json&onlyErwachsenenBetten=true&onlyHaupversorgerCovid19=false: HTTP response code 200
2021.10.27 03:25:04 4: [Intensivregister] api encoding is , designated encoder is utf-8-strict
2021.10.27 08:50:37 1: PERL WARNING: "my" variable $out masks earlier declaration in same scope at ./FHEM/99_myUtils.pm line 420, <DATA> line 1.
2021.10.27 08:50:37 1: PERL WARNING: "my" variable $Stadtteil masks earlier declaration in same scope at ./FHEM/99_myUtils.pm line 487, <DATA> line 1.
2021.10.27 08:50:37 1: PERL WARNING: "my" variable $Stadt masks earlier declaration in same scope at ./FHEM/99_myUtils.pm line 500, <DATA> line 1.
2021.10.27 08:50:37 3: telnetPort: port 7072 opened


Hier meine Intensivregister-Definitionen:


defmod Intensivregister JsonMod https://www.intensivregister.de/api/public/reporting/laendertabelle?format=json&onlyErwachsenenBetten=true&onlyHaupversorgerCovid19=false
attr Intensivregister DbLogExclude .*
attr Intensivregister disable 0
attr Intensivregister interval 25 */3 * * *
attr Intensivregister readingList multi(jsonPath("\$.data[?(\@.bundesland in ['HESSEN','BAYERN'])]"), concat(count(),'_name'), ucfirst(lc(property('bundesland'))));;\
multi(jsonPath("\$.data[?(\@.bundesland in ['HESSEN','BAYERN'])]"), concat(count(),'_meldebereichAnz'), property('meldebereichAnz'));;\
multi(jsonPath("\$.data[?(\@.bundesland in ['HESSEN','BAYERN'])]"), concat(count(),'_standortAnzahl'), property('standortAnzahl'));;\
multi(jsonPath("\$.data[?(\@.bundesland in ['HESSEN','BAYERN'])]"), concat(count(),'_faelleCovidAktuell'), property('faelleCovidAktuell'));;\
multi(jsonPath("\$.data[?(\@.bundesland in ['HESSEN','BAYERN'])]"), concat(count(),'_faelleCovidAktuellBeatmet'), property('faelleCovidAktuellBeatmet'));;\
multi(jsonPath("\$.data[?(\@.bundesland in ['HESSEN','BAYERN'])]"), concat(count(),'_intensivBettenBelegt'), property('intensivBettenBelegt'));;\
multi(jsonPath("\$.data[?(\@.bundesland in ['HESSEN','BAYERN'])]"), concat(count(),'_intensivBettenFrei'), property('intensivBettenFrei'));;\
multi(jsonPath("\$.data[?(\@.bundesland in ['HESSEN','BAYERN'])]"), concat(count(),'_intensivBettenFreiProStandort'), property('intensivBettenFreiProStandort'));;\
multi(jsonPath("\$.data[?(\@.bundesland in ['HESSEN','BAYERN'])]"), concat(count(),'_intensivBettenGesamt'), property('intensivBettenGesamt'));;\
multi(jsonPath("\$.data[?(\@.bundesland in ['HESSEN','BAYERN'])]"), concat(count(),'_intensivBettenNotfall7d'), property('intensivBettenNotfall7d'));;\
multi(jsonPath("\$.data[?(\@.bundesland in ['HESSEN','BAYERN'])]"), concat(count(),'_covidKapazitaetFrei'), property('covidKapazitaetFrei'));;\
multi(jsonPath("\$.data[?(\@.bundesland in ['HESSEN','BAYERN'])]"), concat(count(),'_covidToIntensivBettenPercent'), property('covidToIntensivBettenPercent'));;\
multi(jsonPath("\$.data[?(\@.bundesland in ['HESSEN','BAYERN'])]"), concat(count(),'_faelleCovidAktuellBeatmetToCovidAktuellPercent'), property('faelleCovidAktuellBeatmetToCovidAktuellPercent'));;\
multi(jsonPath("\$.data[?(\@.bundesland in ['HESSEN','BAYERN'])]"), concat(count(),'_bettenBelegtToBettenGesamtPercent'), property('bettenBelegtToBettenGesamtPercent'));;\
multi(jsonPath("\$.data[?(\@.bundesland in ['HESSEN','BAYERN'])]"), concat(count(),'_bettenFreiToBettenGesamtPercent'), property('bettenFreiToBettenGesamtPercent'));;\
single(jsonPath('$.overallSum.name'), 'overallSum_name', 'Deutschland');;\
single(jsonPath('$.overallSum.meldebereichAnz'), 'overallSum_meldebereichAnz', '-?-');;\
single(jsonPath('$.overallSum.standortAnzahl'), 'overallSum_standortAnzahl', '-?-');;\
single(jsonPath('$.overallSum.faelleCovidAktuell'), 'overallSum_faelleCovidAktuell', '-?-');;\
single(jsonPath('$.overallSum.faelleCovidAktuellBeatmet'), 'overallSum_faelleCovidAktuellBeatmet', '-?-');;\
single(jsonPath('$.overallSum.intensivBettenBelegt'), 'overallSum_intensivBettenBelegt', '-?-');;\
single(jsonPath('$.overallSum.intensivBettenFrei'), 'overallSum_intensivBettenFrei', '-?-');;\
single(jsonPath('$.overallSum.intensivBettenFreiProStandort'), 'overallSum_intensivBettenFreiProStandort', '-?-');;\
single(jsonPath('$.overallSum.intensivBettenGesamt'), 'overallSum_intensivBettenGesamt', '-?-');;\
single(jsonPath('$.overallSum.intensivBettenNotfall7d'), 'overallSum_intensivBettenNotfall7d', '-?-');;\
single(jsonPath('$.overallSum.covidKapazitaetFrei'), 'overallSum_covidKapazitaetFrei', '-?-');;\
single(jsonPath('$.overallSum.covidToIntensivBettenPercent'), 'overallSum_covidToIntensivBettenPercent', '-?-');;\
single(jsonPath('$.overallSum.faelleCovidAktuellBeatmetToCovidAktuellPercent'), 'overallSum_faelleCovidAktuellBeatmetToCovidAktuellPercent', '-?-');;\
single(jsonPath('$.overallSum.bettenBelegtToBettenGesamtPercent'), 'overallSum_bettenBelegtToBettenGesamtPercent', '-?-');;\
single(jsonPath('$.overallSum.bettenFreiToBettenGesamtPercent'), 'overallSum_bettenFreiToBettenGesamtPercent', '-?-');;\
single(jsonPath('$.creationTimestamp'), 'creationTimestamp', '-?-');;
attr Intensivregister room Corona
attr Intensivregister stateFormat { my @objects = ("0","1","overallSum");;\
my $cellstyle = "padding:3pt;;border-bottom:1px dotted lightgray;;text-align: right;;";;\
my $highlightcolor = "DarkSlateGray";; #DodgerBlue";;\
my $ret = "<div style=\"text-align: left;;\">";;\
$ret .= "last check => ";;\
$ret .= POSIX::strftime("%d.%m. %H:%M",localtime(time_str2num(ReadingsTimestamp($name,".computedReadings","2000-01-01 00:00:00"))));;\
$ret .= "<br \/>";;\
$ret .= '<div style="display:table;;width:80%;;">';;\
$ret .= '<div style="display:table-row;;">';;\
  $ret .= '<div style="display:table-cell;;'.$cellstyle.'width:35%;;font-weight:bold;;">&nbsp;;</div>';;\
  $ret .= '<div style="display:table-cell;;'.$cellstyle.'width:15%;;font-weight:bold;;">Covid</div>';;\
  $ret .= '<div style="display:table-cell;;'.$cellstyle.'width:10%;;font-weight:bold;;">&nbsp;;</div>';;\
  $ret .= '<div style="display:table-cell;;'.$cellstyle.'width:15%;;font-weight:bold;;">davon beatmet</div>';;\
  $ret .= '<div style="display:table-cell;;'.$cellstyle.'width:10%;;font-weight:bold;;">&nbsp;;</div>';;\
  $ret .= '<div style="display:table-cell;;'.$cellstyle.'width:15%;;font-weight:bold;;">freie Kapazit&auml;;ten</div>';;\
$ret .= '</div>';; #header\
for my $obj (@objects) {\
$ret .= '<div style="display:table-row;;" onmouseover="this.style.background=\''.$highlightcolor.'\';;" onmouseout="this.style.background=\'transparent\';;">';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:35%;;">';;\
$ret .= ReadingsVal($name,$obj."_name","-");;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:15%;;">';;\
$ret .= tausender(ReadingsVal($name,$obj."_faelleCovidAktuell","-"));;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:10%;;">';;\
$ret .= ReadingsVal($name,$obj."_covidToIntensivBettenPercent","-")."%";;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:15%;;">';;\
$ret .= tausender(ReadingsVal($name,$obj."_faelleCovidAktuellBeatmet","-"));;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:10%;;">';;\
$ret .= ReadingsVal($name,$obj."_faelleCovidAktuellBeatmetToCovidAktuellPercent","-")."%";;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:15%;;">';;\
$ret .= tausender(ReadingsVal($name,$obj."_covidKapazitaetFrei","-"));;\
$ret .= '</div>';;\
$ret .= '</div>';;\
}\
$ret .= '</div><br />';; #table\
$ret .= "Letzter API-Update-Check: ";;\
$ret .= ReadingsVal($name,"creationTimestamp","-");;\
$ret .= "</div>";;\
return $ret;;}
attr Intensivregister webCmd reread


VG
Karlheinz
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: yersinia am 27 Oktober 2021, 13:10:34
Ich hatte sporadisch, aber reproduzierbar, das Problem, dass bei mir (system siehe sig) das Intensivregister JSONmod Device zum FHEM-Absturz führte (gleiches Fehlerbild wie bei dem SEGV (https://forum.fhem.de/index.php/topic,119301.0.html)) - und da es mich eigentlich nur bedingt interessiert, habe ich es gelöscht. Seitdem ist Ruhe.

Ich weiss nicht wie dein Systemsetup ist, aber wenn FHEM bei dir auf Linux mit systemd läuft (Debian/Raspbian?), kannst du mal schauen, ob du was im Systemlog findest - gib mal in der Konsole dies ein:
journalctl --since="2021-10-27 03:24" --until="2021-10-27 03:30"
Möglicherweise stürzt dein FHEM ab und wird nicht automatisch neugestartet sodass du händisch eingreifen musst.

Ansonsten musst du den verbose level auf 5 setzen um es besser eingrenzen zu können. Und ein List des Devices, du hast "nur" die Raw-Definition geteilt.

herrmanj beschreibt weiter oben (https://forum.fhem.de/index.php/topic,113798.msg1173714.html#msg1173714) eine Lösungsoption
Zitat von: herrmannj am 08 September 2021, 12:03:32Cpanel::JSON::XS
bzw
Zitat von: yersinia am 12 Mai 2021, 08:23:01btw, als zusätzliche info:für die Debian-Derivate wie RaspiOS:
sudo apt update && sudo apt install libcpanel-json-xs-perl
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: khk123 am 27 Oktober 2021, 14:03:31
Vielen Dank für die schnelle Antwort.

FHEM lauf auf Rasbian.

PRETTY_NAME="Raspbian GNU/Linux 9 (stretch)"
NAME="Raspbian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"

FHEM läuft mit systemd, wird aber nicht automatisch restartet.

fhem.service - LSB: FHEM server
   Loaded: loaded (/etc/init.d/fhem; generated; vendor preset: enabled)
   Active: active (running) since Wed 2021-10-27 08:50:37 CEST; 4h 59min ago



journalctl --since="2021-10-27 03:21" --until="2021-10-27 03:30"

gibt keinen Eintrag aus.

Cpanel::JSON::XS ist installiert, aber nicht die aktuellste Version.

Name                       Current Version   Latest Version
Cpanel::JSON::XS     4.26                  4.27


Ich hab das Device jetzt erstmal disabled. Da ich in Kürze in Urlaub bin und erst wieder am 12.11. zurück bin, möchte ich momentan keinen Update machen. Werde ich nach dem Urlaub nachholen und auch vor dem Update mit Verbose 5 mal loggen. Ich melde mich dann hier wieder.

VG
Karlheinz
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: yersinia am 27 Oktober 2021, 15:03:57
Zitat von: khk123 am 27 Oktober 2021, 14:03:31FHEM lauf auf Rasbian.
PRETTY_NAME="Raspbian GNU/Linux 9 (stretch)"
NAME="Raspbian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
Uih, stretch ist EOL afaik, du solltest zumindest auf buster (10), besser gleich durch auf bullseye (11), aktualisieren.

Zitat von: khk123 am 27 Oktober 2021, 14:03:31FHEM läuft mit systemd, wird aber nicht automatisch restartet.
Dann solltest du dir überlegen, hier auf restart (https://forum.fhem.de/index.php/topic,93870.msg865903.html#msg865903) on error zu wechseln

Zitat von: khk123 am 27 Oktober 2021, 14:03:31journalctl --since="2021-10-27 03:21" --until="2021-10-27 03:30"
gibt keinen Eintrag aus.
Interessant, ich hätte da einen Eintrag vom FHEM service erwartet.

Zitat von: khk123 am 27 Oktober 2021, 14:03:31Cpanel::JSON::XS ist installiert, aber nicht die aktuellste Version.

Name                       Current Version   Latest Version
Cpanel::JSON::XS     4.26                  4.27


Ich hab das Device jetzt erstmal disabled. Da ich in Kürze in Urlaub bin und erst wieder am 12.11. zurück bin, möchte ich momentan keinen Update machen. Werde ich nach dem Urlaub nachholen und auch vor dem Update mit Verbose 5 mal loggen. Ich melde mich dann hier wieder.
Tja, da bin ich auch überfragt - vlt fällt hermannj hierzu etwas ein. Er wird aber definitiv mehr Informationen benötigen.
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: khk123 am 27 Oktober 2021, 15:39:53
Zitat von: yersinia am 27 Oktober 2021, 15:03:57
Uih, stretch ist EOL afaik, du solltest zumindest auf buster (10), besser gleich durch auf bullseye (11), aktualisieren.
Ja, ich weiss. Nur du kennst ja auch "Never touch a running system". Aber du hast schon recht. Ist auf der Todo-Liste für nach dem Urlaub. :)

Zitat von: yersinia am 27 Oktober 2021, 15:03:57
Dann solltest du dir überlegen, hier auf restart on error zu wechseln
Wäre eine Möglichkeit, nur in dem konkreten Fall ist FHEM ja nicht abgestürzt, sondern lief eigentlich weiter und hat nur noch Events von meinem NETATMO-Device und meiner Waage entgegengenommen. Von allen anderen Devices gabe es keine Events mehr und es wurden auch keine Befehle mehr abgesetzt.

Zitat von: yersinia am 27 Oktober 2021, 15:03:57
Interessant, ich hätte da einen Eintrag vom FHEM service erwartet.
Ging mir auch so. Ich hätte da auch mehr Infos in den Logs erwartet. Aber mal sehen was verbose 5 dann bringt.

Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: yersinia am 27 Oktober 2021, 15:49:50
[OT]
Zitat von: khk123 am 27 Oktober 2021, 15:39:53Ja, ich weiss. Nur du kennst ja auch "Never touch a running system". Aber du hast schon recht. Ist auf der Todo-Liste für nach dem Urlaub. :)
So einen Umstieg kann man gleich mit einer zweiten (neuen) SD Karte zum Restore-üben nutzen. Auf der neuen SD Karte RaspiOS Bullseye (11) aufsetzen und einrichten inkl. FHEM Installation und dann das FHEM-Backup vom Strech-FHEM auf das neue Bullseye-FHEM übertragen. Wenn es schief geht, hat man immer noch die alte, lauffähige SD Karte und dann maximal eine Stunde ohne FHEM. So übt man das Wiederherstellen eines Backups und kann seine Dokumentation der Installationsschritte nochmals gegenprüfen. Für den Fall der Fälle.
[/OT]

Zitat von: khk123 am 27 Oktober 2021, 15:39:53Wäre eine Möglichkeit, nur in dem konkreten Fall ist FHEM ja nicht abgestürzt, sondern lief eigentlich weiter und hat nur noch Events von meinem NETATMO-Device und meiner Waage entgegengenommen. Von allen anderen Devices gabe es keine Events mehr und es wurden auch keine Befehle mehr abgesetzt.
Ging mir auch so. Ich hätte da auch mehr Infos in den Logs erwartet. Aber mal sehen was verbose 5 dann bringt.
Ok, dann warten wir mal ab, was es nach (!) deinem Urlaub mit verbose 5 ergibt. Kurioses verhalten ist es allemal.
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: khk123 am 27 Oktober 2021, 16:07:52
Danke für die Tipps zum Update. Genau so ist es geplant. Das Backup auf einer 2. SD-Karte erstelle ich regelmäßig. Man weiß ja nie... ;)
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: herrmannj am 27 Oktober 2021, 17:39:21
Zitatsondern lief eigentlich weiter und hat nur noch Events von meinem NETATMO-Device und meiner Waage entgegengenommen. Von allen anderen Devices gabe es keine Events mehr und es wurden auch keine Befehle mehr abgesetzt.
man soll nie "nie" sagen, aber ich sehe nicht wie das durch einen Fehler im Zusammenhang mit json entstehen sollte. SEGV macht Sinn, Fehler in perl (lib). Absturz (SEGV), Neustart.

Aber halbtot, so wie beschrieben? Theoretisch wäre es denkbar das eine Schleife endlos läuft (vereinfacht while(1) {}). Dann müsste die CPU load auf 100% hochgehen, das sollte man per htop sehen. Das steht aber im Widerspruch zu den NETATMO events ..
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: khk123 am 27 Oktober 2021, 18:01:07
Eine Schleife hab ich auch vermutet. Aber wieso kommen dann Events von NETATMO? I BTW, es laufen noch weitere 9 JsonMod-Devices bisher ohne Probleme. Nur dieses eine, das https://www.intensivregister.de abfragt, verursacht dieses seltsame Verhalten. Könnte evtl. auch ein Problem mit den Daten sein. Aber wie dem auch sei, das Problem ist erstmal gebannt und auf Eis gelegt. Ich versuche nach meinem Urlaub dem Ganzen mit verbose 5 nochmal auf den Grund zu gehen und melde mich dann hier wieder.

Erstmal vielen Dank für eure Unterstützung.
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: herrmannj am 27 Oktober 2021, 19:24:07
Grundsätzlich rechnet das modul damit, dass der Server auch Murks zurück liefern kann (und handelt das). Wenn es sich reproduzieren lässt kann ich suchen, ansonsten fällt mir nichts theoretisches dazu ein.

Außer: perl selber (JSON::XS). Bitte schau mal das Du wirklich die aktuellste Version von JsonMod verwendest. Der Wechsel von JSON::XS auf CPANEL::JSON::XS war anlässlich der Meldung von yersinia, gefühlt noch nicht so lange her.
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: khk123 am 27 Oktober 2021, 23:17:25
Zitat von: herrmannj am 27 Oktober 2021, 19:24:07
Außer: perl selber (JSON::XS). Bitte schau mal das Du wirklich die aktuellste Version von JsonMod verwendest. Der Wechsel von JSON::XS auf CPANEL::JSON::XS war anlässlich der Meldung von yersinia, gefühlt noch nicht so lange her.

Folgende Version ist aktiv:

File                    Rev     Last Change
98_JsonMod.pm 24783 2021-07-21 22:37:12Z herrmannj


Ein update check ergab nichts neueres.

Ich hoffe, dass ich es nach meinem Urlaub mit verbose 5 reproduzieren kann und melde mich nach dem 12. November wieder.

Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: Mickey am 11 November 2021, 08:30:12
Guten Morgen,

ich schaffe es einfach nicht.
Wie bekomme ich den .json link für die aktuellen Daten
für Deutschland her?

https://experience.arcgis.com/experience/478220a4c454480e823b17327b2bf1d4 (https://experience.arcgis.com/experience/478220a4c454480e823b17327b2bf1d4)

7-Tage-Inzidenz
Coronafälle
Todesfälle

Danke für die Hilfe

/Michael
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: yersinia am 12 November 2021, 10:32:33
Ich nutze für die Inzidenz von Deutschland mittlerweile corona-zahlen.org (https://api.corona-zahlen.org/germany):
defmod coronaSpreadDE JsonMod https://api.corona-zahlen.org/germany
attr coronaSpreadDE interval 9 */3 * * *
attr coronaSpreadDE readingList complete();;
attr coronaSpreadDE stateFormat { my $ret = "<div style=\"text-align: left;;\">";;\
$ret .= "CoVid-19 Daten für Deutschland von ";;\
$ret .= ReadingsVal($name,"meta.lastUpdate","-");;\
$ret .= "<br \/>";;\
$ret .= "Inzidenz: <font style=\"font-weight:bold;;color:";;\
if(ReadingsNum($name,"weekIncidence",0) < 50) {\
$ret .= "green";;\
} elsif (ReadingsNum($name,"weekIncidence",0) < 100) {\
$ret .= "orange";;\
} else {\
$ret .= "red";;\
}\
$ret .= ";;\">".sprintf("%.1f", ReadingsNum($name,"weekIncidence",0))."</font><br \/>";;\
$ret .= "<font style=\"color:orange;;font-weight:bold;;\">".ReadingsVal($name,"ur_active","-")." aktive F&auml;;lle</font> \/ ";;\
$ret .= "<font style=\"\">".ReadingsVal($name,"cases","-")." Gesamt</font><br \/>";;\
$ret .= "<font style=\"color:green;;\">".ReadingsVal($name,"recovered","-")." Genesene</font> und ";;\
$ret .= "<font style=\"color:red;;font-weight:bold;;\">".ReadingsVal($name,"deaths","-")." Tote</font><br \/>";;\
$ret .= "Letzter API-Update-Check: ";;\
$ret .= ReadingsVal($name,"meta.lastCheckedForUpdate","-");;\
$ret .= "<br \/>";;\
$ret .= "Letzter Datenabruf: ";;\
$ret .= POSIX::strftime("%d.%m. %H:%M",localtime(time_str2num(ReadingsTimestamp($name,".computedReadings","2000-01-01 00:00:00"))));;\
$ret .= "</div>";;\
return $ret;;\
}
attr coronaSpreadDE update-on-start 0
attr coronaSpreadDE userReadings ur_active {return (ReadingsNum($name,"cases",0)-ReadingsNum($name,"recovered",0)-ReadingsNum($name,"deaths",0));;}
attr coronaSpreadDE webCmd reread


Ergibt sowas:
READINGS:
     2021-11-12 09:09:00   .computedReadings delta.recovered,delta.cases,hospitalization.cases7Days,r.rValue7Days.date,meta.source,r.value,r.rValue4Days.date,casesPer100k,hospitalization.lastUpdate,meta.lastUpdate,meta.contact,meta.info,recovered,hospitalization.date,delta.deaths,deaths,hospitalization.incidence7Days,meta.lastCheckedForUpdate,r.lastUpdate,weekIncidence,cases,casesPerWeek,r.rValue7Days.value,r.rValue4Days.value
     2021-11-12 09:09:00   cases           4942890
     2021-11-12 09:09:00   casesPer100k    5944.18634754643
     2021-11-12 09:09:00   casesPerWeek    219272
     2021-11-12 09:09:00   deaths          97389
     2021-11-12 09:09:00   delta.cases     48640
     2021-11-12 09:09:00   delta.deaths    191
     2021-11-12 09:09:00   delta.recovered 17563
     2021-11-12 09:09:00   hospitalization.cases7Days 3909
     2021-11-12 09:09:00   hospitalization.date 2021-11-12T00:00:00.000Z
     2021-11-12 09:09:00   hospitalization.incidence7Days 4.7
     2021-11-12 09:09:00   hospitalization.lastUpdate 2021-11-12T03:01:41.000Z
     2021-11-12 09:09:00   meta.contact    Marlon Lueckert (m.lueckert@me.com)
     2021-11-12 09:09:00   meta.info       https://github.com/marlon360/rki-covid-api
     2021-11-12 09:09:00   meta.lastCheckedForUpdate 2021-11-12T06:31:42.999Z
     2021-11-12 09:09:00   meta.lastUpdate 2021-11-12T00:00:00.000Z
     2021-11-12 09:09:00   meta.source     Robert Koch-Institut
     2021-11-12 09:09:00   r.lastUpdate    2021-11-11T00:57:33.000Z
     2021-11-12 09:09:00   r.rValue4Days.date 2021-11-07T00:00:00.000Z
     2021-11-12 09:09:00   r.rValue4Days.value 1.05
     2021-11-12 09:09:00   r.rValue7Days.date 2021-11-06T00:00:00.000Z
     2021-11-12 09:09:00   r.rValue7Days.value 1.16
     2021-11-12 09:09:00   r.value         1.05
     2021-11-12 09:09:00   recovered       4450174
     2021-11-12 09:09:00   ur_active       395327
     2021-11-12 09:09:00   weekIncidence   263.690599790649


Die Zahlen varrieren manchmal etwas im Verhältnis zum RKI.
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: Mickey am 12 November 2021, 10:41:04
Hallo yersinia,

das nutze ich auch, ist aber leider sehr unzuverlässig.
Der "Server" ist oft down oder der NGINX läuft nicht.

Deswegen wollte ich gerne eine alternative Lösung.

Grüße /Michael
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: yersinia am 12 November 2021, 10:47:50
Zitat von: Mickey am 12 November 2021, 10:41:04das nutze ich auch, ist aber leider sehr unzuverlässig.
Der "Server" ist oft down oder der NGINX läuft nicht.
Ja, den Eindruck habe ich auch. Aber ich empfinde das nicht als Problem, da es nur informativen Charakter hat. Für mich ist die Inzidenz meines Kreises/Stadt/Gemeinde/BL interessanter.

Darüberhinaus ist mir noch keine direkte RKI-Quelle für die Inzidenz untergekommen - habe aber auch schon lange nicht mehr danach gesucht.
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: Mickey am 12 November 2021, 12:50:02
Hi yersinia.

ich habe mir, wie beschrieben, mit Docker compose bei mir: Host "it yourself"

Mal sehen ob das stabiler läuft, ich brauche hier ja kein NGINX  ;D


version: "3.8"
networks:
  redis-net:
services:
  redis:
    image: redis
    container_name: cache
    expose:
      - 6379
    networks:
      - redis-net
  rki-api:
    image: marlon360/rki-covid-server:v2
    ports:
      - "8080:3000"
    depends_on:
      - redis
    environment:
      - REDISHOST=redis
    networks:
      - redis-net


defmod Germany_covid_home JsonMod http://192.168.0.129:8080/germany

Grüße /michael
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: Det20 am 21 November 2021, 14:44:10
Hallo,

ich nehme das Beispiel aus dem ersten Post, das klappt 1a für meinen Kreis (der ist irgendwie immer ordentlich im roten Bereich). Habe dann versucht, über die Abfrage (von services7.arcgis.com) sowohl die verstorbenen als auch die Gesamt-Inzidenz von Deutschland rauszubekommen; leider ohne Erfolg. Hat das jemand hinbekommen?

Viele Grüße
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: Mickey am 21 November 2021, 16:50:23
versuche es mal mit:

https://api.corona-zahlen.org/germany

Grüße
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: Mickey am 21 November 2021, 16:58:11
oder einfach:

defmod Germany_covid JsonMod https://api.corona-zahlen.org/germany
attr Germany_covid alias Germany covid online
attr Germany_covid group 0
attr Germany_covid interval 0 */1 * * *
attr Germany_covid readingList complete();;;;
attr Germany_covid room Corona
attr Germany_covid stateFormat Wocheninzidenz: <b>weekIncidence</b> - Fälle heute: <b>delta.cases</b>, Verstorben heute: <b>delta.deaths</b>\
<br>R-Wert <b>1.04</b> | 7-Tage R-Wert <b>1.1</b>\
<br>Hospitalisierungsrate gestern: <b>hospitalization.incidence7Days_gestern</b> - heute: <b>hospitalization.incidence7Days</b>
attr Germany_covid userReadings weekIncidence {sprintf("%.1f",ReadingsNum("Germany_covid","weekIncidence",0))*1;;},\
casesPer100k {sprintf("%.0f",ReadingsNum("Germany_covid","casesPer100k",0))*1;;},
attr Germany_covid verbose 1
attr Germany_covid webCmd reread



Grüsse
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: Det20 am 21 November 2021, 20:37:35
Mega, vielen Dank!!!
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: TWART016 am 23 November 2021, 12:55:20
Da die Anzahl der belegten Intensivbetten immer wichtiger werden habe ich mich mal nach einer Quelle umgesehen.

Hier gibt es die Daten für jeden Tag. Allerdings wird da nur der neue Wert vom Tag unten eingefügt.
https://europe-west3-brdata-corona.cloudfunctions.net/diviApi/query?area=BW&indicator=Patienten&filetype=json
https://github.com/br-data/corona-divi-api
https://www.intensivregister.de/#/aktuelle-lage/zeitreihen

Ist es möglich, dass der neue Wert automatisch in ein Reading geschrieben wird?
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: Mickey am 23 November 2021, 13:07:45
Als Bespiel:

defmod lk_goe_civi JsonMod https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/DIVI_Intensivregister_Landkreise/FeatureServer/0/query?where=county%20%3D%20%27LK%20G%C3%96TTINGEN%27&outFields=AGS,BL,BL_ID,county,anzahl_standorte,anzahl_meldebereiche,betten_frei,betten_belegt,betten_gesamt,Anteil_betten_frei,faelle_covid_aktuell,faelle_covid_aktuell_beatmet,Anteil_covid_beatmet,Anteil_COVID_betten&returnGeometry=false&outSR=4326&f=json
attr lk_goe_civi alias DIVI LK Göttingen
attr lk_goe_civi interval 0 */1 * * *
attr lk_goe_civi readingList single(jsonPath("\$.features[0].attributes.anzahl_standorte"), 'anzahl_standorte', '-no Data-');;\
single(jsonPath("\$.features[0].attributes.betten_frei"), 'betten_frei', '-no Data-');;\
single(jsonPath("\$.features[0].attributes.betten_belegt"), 'betten_belegt', '-no Data-');;\
single(jsonPath("\$.features[0].attributes.betten_gesamt"), 'betten_gesamt', '-no Data-');;\
single(jsonPath("\$.features[0].attributes.Anteil_betten_frei"), 'Anteil_betten_frei', '-no Data-');;\
single(jsonPath("\$.features[0].attributes.faelle_covid_aktuell"), 'faelle_covid_aktuell', '-no Data-');;\
single(jsonPath("\$.features[0].attributes.faelle_covid_aktuell_beatmet"), 'faelle_covid_aktuell_beatmet', '-no Data-');;
attr lk_goe_civi room Divi
attr lk_goe_civi sortby 1
attr lk_goe_civi stateFormat Standorte: <b>anzahl_standorte</b> - Betten gesamt: <b>betten_gesamt</b> - Betten belegt: <b>betten_belegt</b> - \
Betten frei: <b>betten_frei</b> = <b>Anteil_betten_frei</b> % , gestern Anteil_betten_frei_gestern %<br>Fälle covid aktuell: <b>faelle_covid_aktuell</b> -\
Fälle covid aktuell beatmet: <b>faelle_covid_aktuell_beatmet</b> - Covid belegt <b>Anteil_betten_covid</b> %
attr lk_goe_civi userReadings Anteil_betten_frei {sprintf("%.1f",ReadingsNum("lk_goe_civi","Anteil_betten_frei",0))*1;;},\
Anteil_betten_covid {sprintf("%.3f",ReadingsNum("lk_goe_civi","faelle_covid_aktuell",0)/ReadingsNum("lk_goe_civi","betten_gesamt",0))*100;;},



Grüsse
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: khk123 am 23 November 2021, 16:01:55
Hi yersinia,

Zitat von: yersinia am 27 Oktober 2021, 15:49:50
Ok, dann warten wir mal ab, was es nach (!) deinem Urlaub mit verbose 5 ergibt. Kurioses verhalten ist es allemal.

hab ja geschrieben, dass ich mich wg. des seltsamen FHEM-Stillstandes bei der JSON-Abfrage nochmal melde. Ich konnte bisher das Verhalten nicht nachstellen. Da die Abfrage aber im 3Std-Rhythmus
attr Intensivregister interval 25 */3 * * *
lief und der Effekt nur nachts um 3:25 Uhr auftrat, gehe ich davon aus, dass www.intensivregister.de zu dem Zeitpunkt keine korrekte Anwort geliefert hat. 

Ich lasse mein Testsystem mit der regelmäßigen Abfrage laufen. Mal sehen...

VG
Karlheinz
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: rcmcronny am 24 November 2021, 09:19:49
@Mickey

danke für den Codeschnipsel.

Fehlt da noch was, für den Wert von "Anteil_betten_frei_gestern" ?

Ronny
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: khk123 am 24 November 2021, 23:33:40
Zitat von: rcmcronny am 24 November 2021, 09:19:49
Fehlt da noch was, für den Wert von "Anteil_betten_frei_gestern" ?

Ist mir auch aufgefallen. Hab die Userreadings einfach ergänzt und etwas unabhängiger vom Device-Namen gemacht. Dann funktioniert auch ein rename des Devices.  Und  noch einen webCmd für reread angehängt.


attr lk_goe_civi userReadings Anteil_betten_frei {sprintf("%.1f",ReadingsNum($name,,"Anteil_betten_frei",0))*1;;},\
Anteil_betten_frei_gestern {OldReadingsVal($name, "Anteil_betten_frei", ReadingsVal($name, "Anteil_betten_frei", 0))},\
Anteil_betten_covid {sprintf("%.3f",ReadingsNum($name,"faelle_covid_aktuell",0)/ReadingsNum($name,"betten_gesamt",0))*100;;},
attr lk_goe_civi webCmd reread


VG
Karlheinz
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: rcmcronny am 25 November 2021, 06:44:24
Moin Karlheinz,

danke, habe das mal so übernommen, nun paßt es.

Ronny
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: khk123 am 25 November 2021, 16:43:31
Hi Ronny,

freut mich.  :)

Gruß
Karlheinz
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: yersinia am 26 November 2021, 13:59:18
Anbei ein readingsList Update um die Booster-Impfungen mit anzuzeigen (einfach in dem Attribut readingList reinkopieren). Vorher die Bundesländer entsprechend anpassen - ich hab hier 01 und 02 genutzt.
Zitat von: yersinia am 24 Juni 2021, 15:49:50Es wird jetzt nach dem rs Wert gesucht und die Readings danach benannt. Einfach den rs Wert für das interessierte Bundesland einfügen:
01=Schleswig-Holstein
02=Hamburg
03=Niedersachsen
04=Bremen
05=Nordrhein-Westfalen
06=Hessen
07=Rheinland-Pfalz
08=Baden-Württemberg
09=Bayern
10=Saarland
11=Berlin
12=Brandenburg
13=Mecklenburg-Vorpommern
14=Sachsen
15=Sachsen-Anhalt
16=Thüringen

Der Endpoint liefert noch Daten für Bundesressorts (data[16]) sowie Deutschland (data[17]) welche keinen rs Wert haben - diese sind im readingList unten angehängt.
single(jsonPath('$.lastUpdate'), 'lastUpdate', '-?-');
multi(jsonPath("\$.data[?(\@.rs in ['01', 02'])]"), concat(property('rs'),'_name'), property('name'));
multi(jsonPath("\$.data[?(\@.rs in ['01', 02'])]"), concat(property('rs'),'_inhabitants'), property('inhabitants'));
multi(jsonPath("\$.data[?(\@.rs in ['01', 02'])]"), concat(property('rs'),'_1st_dose_abs'), property('vaccinatedAtLeastOnce.doses'));
multi(jsonPath("\$.data[?(\@.rs in ['01', 02'])]"), concat(property('rs'),'_1st_dose_quote'), property('vaccinatedAtLeastOnce.quote'));
multi(jsonPath("\$.data[?(\@.rs in ['01', 02'])]"), concat(property('rs'),'_1st_dose_diff'), property('vaccinatedAtLeastOnce.differenceToThePreviousDay'));
multi(jsonPath("\$.data[?(\@.rs in ['01', 02'])]"), concat(property('rs'),'_1st_dose_vax_0_name'), property('fullyVaccinated.vaccine[0].name'));
multi(jsonPath("\$.data[?(\@.rs in ['01', 02'])]"), concat(property('rs'),'_1st_dose_vax_0_doses'), property('fullyVaccinated.vaccine[0].firstDoses'));
multi(jsonPath("\$.data[?(\@.rs in ['01', 02'])]"), concat(property('rs'),'_1st_dose_vax_1_name'), property('fullyVaccinated.vaccine[1].name'));
multi(jsonPath("\$.data[?(\@.rs in ['01', 02'])]"), concat(property('rs'),'_1st_dose_vax_1_doses'), property('fullyVaccinated.vaccine[1].firstDoses'));
multi(jsonPath("\$.data[?(\@.rs in ['01', 02'])]"), concat(property('rs'),'_1st_dose_vax_2_name'), property('fullyVaccinated.vaccine[2].name'));
multi(jsonPath("\$.data[?(\@.rs in ['01', 02'])]"), concat(property('rs'),'_1st_dose_vax_2_doses'), property('fullyVaccinated.vaccine[2].firstDoses'));
multi(jsonPath("\$.data[?(\@.rs in ['01', 02'])]"), concat(property('rs'),'_1st_dose_vax_3_name'), property('fullyVaccinated.vaccine[3].name'));
multi(jsonPath("\$.data[?(\@.rs in ['01', 02'])]"), concat(property('rs'),'_1st_dose_vax_3_doses'), property('fullyVaccinated.vaccine[3].firstDoses'));
multi(jsonPath("\$.data[?(\@.rs in ['01', 02'])]"), concat(property('rs'),'_2nd_dose_abs'), property('fullyVaccinated.doses'));
multi(jsonPath("\$.data[?(\@.rs in ['01', 02'])]"), concat(property('rs'),'_2nd_dose_quote'), property('fullyVaccinated.quote'));
multi(jsonPath("\$.data[?(\@.rs in ['01', 02'])]"), concat(property('rs'),'_2nd_dose_diff'), property('fullyVaccinated.differenceToThePreviousDay'));
multi(jsonPath("\$.data[?(\@.rs in ['01', 02'])]"), concat(property('rs'),'_2nd_dose_vax_0_name'), property('fullyVaccinated.vaccine[0].name'));
multi(jsonPath("\$.data[?(\@.rs in ['01', 02'])]"), concat(property('rs'),'_2nd_dose_vax_0_doses'), property('fullyVaccinated.vaccine[0].secondDoses'));
multi(jsonPath("\$.data[?(\@.rs in ['01', 02'])]"), concat(property('rs'),'_2nd_dose_vax_1_name'), property('fullyVaccinated.vaccine[1].name'));
multi(jsonPath("\$.data[?(\@.rs in ['01', 02'])]"), concat(property('rs'),'_2nd_dose_vax_1_doses'), property('fullyVaccinated.vaccine[1].secondDoses'));
multi(jsonPath("\$.data[?(\@.rs in ['01', 02'])]"), concat(property('rs'),'_2nd_dose_vax_2_name'), property('fullyVaccinated.vaccine[2].name'));
multi(jsonPath("\$.data[?(\@.rs in ['01', 02'])]"), concat(property('rs'),'_2nd_dose_vax_2_doses'), property('fullyVaccinated.vaccine[2].secondDoses'));
multi(jsonPath("\$.data[?(\@.rs in ['01', 02'])]"), concat(property('rs'),'_2nd_dose_vax_3_name'), property('fullyVaccinated.vaccine[3].name'));
multi(jsonPath("\$.data[?(\@.rs in ['01', 02'])]"), concat(property('rs'),'_2nd_dose_vax_3_doses'), property('fullyVaccinated.vaccine[3].secondDoses'));
multi(jsonPath("\$.data[?(\@.rs in ['01', 02'])]"), concat(property('rs'),'_3rd_dose_abs'), property('boosterVaccinated.doses'));
multi(jsonPath("\$.data[?(\@.rs in ['01', 02'])]"), concat(property('rs'),'_3rd_dose_quote'), property('boosterVaccinated.quote'));
multi(jsonPath("\$.data[?(\@.rs in ['01', 02'])]"), concat(property('rs'),'_3rd_dose_diff'), property('boosterVaccinated.differenceToThePreviousDay'));
multi(jsonPath("\$.data[?(\@.rs in ['01', 02'])]"), concat(property('rs'),'_3rd_dose_vax_0_name'), property('boosterVaccinated.vaccine[0].name'));
multi(jsonPath("\$.data[?(\@.rs in ['01', 02'])]"), concat(property('rs'),'_3rd_dose_vax_0_doses'), property('boosterVaccinated.vaccine[0].boosterDoses'));
multi(jsonPath("\$.data[?(\@.rs in ['01', 02'])]"), concat(property('rs'),'_3rd_dose_vax_1_name'), property('boosterVaccinated.vaccine[1].name'));
multi(jsonPath("\$.data[?(\@.rs in ['01', 02'])]"), concat(property('rs'),'_3rd_dose_vax_1_doses'), property('boosterVaccinated.vaccine[1].boosterDoses'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_name'), property('name'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_inhabitants'), property('inhabitants'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_1st_dose_abs'), property('vaccinatedAtLeastOnce.doses'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_1st_dose_quote'), property('vaccinatedAtLeastOnce.quote'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_1st_dose_diff'), property('vaccinatedAtLeastOnce.differenceToThePreviousDay'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_1st_dose_vax_0_name'), property('fullyVaccinated.vaccine[0].name'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_1st_dose_vax_0_doses'), property('fullyVaccinated.vaccine[0].firstDoses'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_1st_dose_vax_1_name'), property('bfullyVaccinated.vaccine[1].name'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_1st_dose_vax_1_doses'), property('fullyVaccinated.vaccine[1].firstDoses'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_1st_dose_vax_2_name'), property('fullyVaccinated.vaccine[2].name'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_1st_dose_vax_2_doses'), property('fullyVaccinated.vaccine[2].firstDoses'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_1st_dose_vax_3_name'), property('fullyVaccinated.vaccine[3].name'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_1st_dose_vax_3_doses'), property('fullyVaccinated.vaccine[3].firstDoses'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_2nd_dose_abs'), property('fullyVaccinated.doses'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_2nd_dose_quote'), property('fullyVaccinated.quote'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_2nd_dose_diff'), property('fullyVaccinated.differenceToThePreviousDay'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_2nd_dose_vax_0_name'), property('fullyVaccinated.vaccine[0].name'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_2nd_dose_vax_0_doses'), property('fullyVaccinated.vaccine[0].secondDoses'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_2nd_dose_vax_1_name'), property('fullyVaccinated.vaccine[1].name'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_2nd_dose_vax_1_doses'), property('fullyVaccinated.vaccine[1].secondDoses'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_2nd_dose_vax_2_name'), property('fullyVaccinated.vaccine[2].name'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_2nd_dose_vax_2_doses'), property('fullyVaccinated.vaccine[2].secondDoses'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_2nd_dose_vax_3_name'), property('fullyVaccinated.vaccine[3].name'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_2nd_dose_vax_3_doses'), property('fullyVaccinated.vaccine[3].secondDoses'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_3rd_dose_abs'), property('boosterVaccinated.doses'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_3rd_dose_quote'), property('boosterVaccinated.quote'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_3rd_dose_diff'), property('boosterVaccinated.differenceToThePreviousDay'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_3rd_dose_vax_0_name'), property('boosterVaccinated.vaccine[0].name'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_3rd_dose_vax_0_doses'), property('boosterVaccinated.vaccine[0].secondDoses'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_3rd_dose_vax_1_name'), property('boosterVaccinated.vaccine[1].name'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_3rd_dose_vax_1_doses'), property('boosterVaccinated.vaccine[1].secondDoses'));
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: yersinia am 02 Dezember 2021, 11:32:11
Aus einem anderen Thread (https://forum.fhem.de/index.php/topic,124494.0.html):
Zitat von: yersinia am 02 Dezember 2021, 11:26:04
Zitat von: JoWiemann am 01 Dezember 2021, 19:29:30warum neu erfinden, wenn schon da: https://forum.fhem.de/index.php/topic,113798.msg1188775.html#msg1188775 und folgende Posts.
Zitat von: TWART016 am 01 Dezember 2021, 23:56:25Das sind leider ganz andere Daten. Mit dem Format bekomme ich auch keine Werte.
Die sind doch nur nach Landkreis aufgesplittet, was viele Daten mit sich bringt. Daher ist die Query schon auf BW eingeschränkt. In dem Beispiel von Mickey (https://forum.fhem.de/index.php/topic,113798.msg1188775.html#msg1188775) sogar auf den LK Göttingen. Das macht das JSON wesentlich kleiner und ist einfacher zu verarbeiten. Man kann das auch auf BL einschränken.
Anbei ein RAW welches alle BL abruft, aber sich auf die BL einschränken lässt.
defmod IntensivRKI JsonMod https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/DIVI_Intensivregister_Landkreise/FeatureServer/0/query?where=BL_ID%3E0&outFields=AGS,BL,BL_ID,county,anzahl_standorte,anzahl_meldebereiche,betten_frei,betten_belegt,betten_gesamt,Anteil_betten_frei,faelle_covid_aktuell,faelle_covid_aktuell_beatmet,Anteil_covid_beatmet,Anteil_COVID_betten&returnGeometry=false&f=json
attr IntensivRKI readingList multi(jsonPath("\$.features.[?(\@.attributes.BL_ID in ['8'])]"), concat(property('.attributes.AGS'),'_county'), property('.attributes.county'));;\
multi(jsonPath("\$.features.[?(\@.attributes.BL_ID in ['8'])]"), concat(property('.attributes.AGS'),'_anzahl_standorte'), property('.attributes.anzahl_standorte'));;\
multi(jsonPath("\$.features.[?(\@.attributes.BL_ID in ['8'])]"), concat(property('.attributes.AGS'),'_anzahl_meldebereiche'), property('.attributes.anzahl_meldebereiche'));;\
multi(jsonPath("\$.features.[?(\@.attributes.BL_ID in ['8'])]"), concat(property('.attributes.AGS'),'_betten_frei'), property('.attributes.betten_frei'));;\
multi(jsonPath("\$.features.[?(\@.attributes.BL_ID in ['8'])]"), concat(property('.attributes.AGS'),'_betten_belegt'), property('.attributes.betten_belegt'));;\
multi(jsonPath("\$.features.[?(\@.attributes.BL_ID in ['8'])]"), concat(property('.attributes.AGS'),'_betten_gesamt'), property('.attributes.betten_gesamt'));;\
multi(jsonPath("\$.features.[?(\@.attributes.BL_ID in ['8'])]"), concat(property('.attributes.AGS'),'_Anteil_betten_frei'), property('.attributes.Anteil_betten_frei'));;\
multi(jsonPath("\$.features.[?(\@.attributes.BL_ID in ['8'])]"), concat(property('.attributes.AGS'),'_faelle_covid_aktuell'), property('.attributes.faelle_covid_aktuell'));;\
multi(jsonPath("\$.features.[?(\@.attributes.BL_ID in ['8'])]"), concat(property('.attributes.AGS'),'_faelle_covid_aktuell_beatmet'), property('.attributes.faelle_covid_aktuell_beatmet'));;\
multi(jsonPath("\$.features.[?(\@.attributes.BL_ID in ['8'])]"), concat(property('.attributes.AGS'),'_Anteil_covid_beatmet'), property('.attributes.Anteil_covid_beatmet'));;\
multi(jsonPath("\$.features.[?(\@.attributes.BL_ID in ['8'])]"), concat(property('.attributes.AGS'),'_Anteil_COVID_betten'), property('.attributes.Anteil_COVID_betten'));;
attr IntensivRKI update-on-start 0
attr IntensivRKI interval 0 12 * * *
attr IntensivRKI webCmd reread

Dabei sind die BL_IDs:
1 = Schleswig-Holstein
2 = Hamburg
3 = Niedersachsen
4 = Bremen
5 = Nordrhein-Westfalen
6 = Hessen
7 = Rheinland-Pfalz
8 = Baden-Württemberg
9 = Bayern
10 = Saarland
11 = Berlin
12 = Brandenburg
13 = Mecklenburg-Vorpommern
14 = Sachsen
15 = Sachsen-Anhalt
16 = Thüringen

Interessiert man sich nur für vereinzelte Landkreise, würde ich nach dem AGS suchen und filtern:
defmod IntensivRKI JsonMod https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/DIVI_Intensivregister_Landkreise/FeatureServer/0/query?where=BL_ID%3E0&outFields=AGS,BL,BL_ID,county,anzahl_standorte,anzahl_meldebereiche,betten_frei,betten_belegt,betten_gesamt,Anteil_betten_frei,faelle_covid_aktuell,faelle_covid_aktuell_beatmet,Anteil_covid_beatmet,Anteil_COVID_betten&returnGeometry=false&f=json
attr IntensivRKI interval 0 12 * * *
attr IntensivRKI readingList multi(jsonPath("\$.features.[?(\@.attributes.AGS in ['08117', '08118'])]"), concat(property('.attributes.AGS'),'_county'), property('.attributes.county'));;\
multi(jsonPath("\$.features.[?(\@.attributes.AGS in ['08117', '08118'])]"), concat(property('.attributes.AGS'),'_BL'), property('.attributes.BL'));;\
multi(jsonPath("\$.features.[?(\@.attributes.AGS in ['08117', '08118'])]"), concat(property('.attributes.AGS'),'_anzahl_standorte'), property('.attributes.anzahl_standorte'));;\
multi(jsonPath("\$.features.[?(\@.attributes.AGS in ['08117', '08118'])]"), concat(property('.attributes.AGS'),'_anzahl_meldebereiche'), property('.attributes.anzahl_meldebereiche'));;\
multi(jsonPath("\$.features.[?(\@.attributes.AGS in ['08117', '08118'])]"), concat(property('.attributes.AGS'),'_betten_frei'), property('.attributes.betten_frei'));;\
multi(jsonPath("\$.features.[?(\@.attributes.AGS in ['08117', '08118'])]"), concat(property('.attributes.AGS'),'_betten_belegt'), property('.attributes.betten_belegt'));;\
multi(jsonPath("\$.features.[?(\@.attributes.AGS in ['08117', '08118'])]"), concat(property('.attributes.AGS'),'_betten_gesamt'), property('.attributes.betten_gesamt'));;\
multi(jsonPath("\$.features.[?(\@.attributes.AGS in ['08117', '08118'])]"), concat(property('.attributes.AGS'),'_Anteil_betten_frei'), property('.attributes.Anteil_betten_frei'));;\
multi(jsonPath("\$.features.[?(\@.attributes.AGS in ['08117', '08118'])]"), concat(property('.attributes.AGS'),'_faelle_covid_aktuell'), property('.attributes.faelle_covid_aktuell'));;\
multi(jsonPath("\$.features.[?(\@.attributes.AGS in ['08117', '08118'])]"), concat(property('.attributes.AGS'),'_faelle_covid_aktuell_beatmet'), property('.attributes.faelle_covid_aktuell_beatmet'));;\
multi(jsonPath("\$.features.[?(\@.attributes.AGS in ['08117', '08118'])]"), concat(property('.attributes.AGS'),'_Anteil_covid_beatmet'), property('.attributes.Anteil_covid_beatmet'));;\
multi(jsonPath("\$.features.[?(\@.attributes.AGS in ['08117', '08118'])]"), concat(property('.attributes.AGS'),'_Anteil_COVID_betten'), property('.attributes.Anteil_COVID_betten'));;
attr IntensivRKI update-on-start 0
attr IntensivRKI webCmd reread

Die AGS müssen einmal mühsam aus der Quelle (https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/DIVI_Intensivregister_Landkreise/FeatureServer/0/query?where=BL_ID%3E0&outFields=AGS,BL,BL_ID,county,anzahl_standorte,anzahl_meldebereiche,betten_frei,betten_belegt,betten_gesamt,Anteil_betten_frei,faelle_covid_aktuell,faelle_covid_aktuell_beatmet,Anteil_covid_beatmet,Anteil_COVID_betten&returnGeometry=false&f=json) rausgesucht werden.
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: TWART016 am 04 Dezember 2021, 00:34:43
Zitat von: yersinia am 02 Dezember 2021, 11:32:11
Aus einem anderen Thread (https://forum.fhem.de/index.php/topic,124494.0.html):Die sind doch nur nach Landkreis aufgesplittet, was viele Daten mit sich bringt. Daher ist die Query schon auf BW eingeschränkt. In dem Beispiel von Mickey (https://forum.fhem.de/index.php/topic,113798.msg1188775.html#msg1188775) sogar auf den LK Göttingen. Das macht das JSON wesentlich kleiner und ist einfacher zu verarbeiten. Man kann das auch auf BL einschränken.
Das meine ich damit nicht. Die Datenquelle gibt die Anzahl nicht her, deshalb wollte ich eine andere nehmen.
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: yersinia am 05 Dezember 2021, 14:45:40
Zitat von: TWART016 am 04 Dezember 2021, 00:34:43Die Datenquelle gibt die Anzahl nicht her, deshalb wollte ich eine andere nehmen.
Die Anzahl von was? Deine Quelle (https://forum.fhem.de/index.php/topic,124494.msg1190523.html#msg1190523) gibt an - jds interpretiere ich das so - wieviel CoViD-Patienten in einem Bundesland auf der Intensivstation betreut werden. Aber detaillierter gibt es die Zahlen nicht.
Mickeys Quelle (https://forum.fhem.de/index.php/topic,113798.msg1188775.html#msg1188775) gibt die Auslastung der Intensivstationen der Landkreise aus - inklusive CoViD-Patienten und wieviel davon beatmet werden. Aber natürlich nicht aufaddiert.

Imho ist das Anwendungsfall abhängig, was man sehen möchte. Auf die Zahlen verlassen würde ich mich allerdings nicht - bei keinen der beiden Quellen.
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: TWART016 am 05 Dezember 2021, 14:58:46
Zitat von: yersinia am 05 Dezember 2021, 14:45:40
Die Anzahl von was? Deine Quelle (https://forum.fhem.de/index.php/topic,124494.msg1190523.html#msg1190523) gibt an - jds interpretiere ich das so - wieviel CoViD-Patienten in einem Bundesland auf der Intensivstation betreut werden. Aber detaillierter gibt es die Zahlen nicht.
Mickeys Quelle (https://forum.fhem.de/index.php/topic,113798.msg1188775.html#msg1188775) gibt die Auslastung der Intensivstationen der Landkreise aus - inklusive CoViD-Patienten und wieviel davon beatmet werden. Aber natürlich nicht aufaddiert.

Imho ist das Anwendungsfall abhängig, was man sehen möchte. Auf die Zahlen verlassen würde ich mich allerdings nicht - bei keinen der beiden Quellen.
Ich traue den Daten auch nicht. Nur werden nach den Zahlen die Regelungen gemacht.
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: Gueco315 am 23 Dezember 2021, 14:57:44
@Mickey: Wie bekomme ich die Daten für einen anderen Standort aus der URL?
https://services7.arcgis.com/.....

Dank und Gruß
Günter
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: Gisbert am 18 Januar 2022, 19:39:24
Hallo zusammen,

Diese Seite liefert keine Infos mehr:
https://rki-vaccination-data.vercel.app/api/v2 (https://rki-vaccination-data.vercel.app/api/v2)

Gibt es Alternativen oder sonstige Abhilfen?

Viele​ Grüße​ Gisbert​
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: yersinia am 19 Januar 2022, 07:22:08
Zitat von: Gisbert am 18 Januar 2022, 19:39:24Gibt es Alternativen oder sonstige Abhilfen?
Ich würd' mal ein paar Tage warten, weil
Zitat{"message": "scrapping data from RKI excel failed"}
https://rki-vaccination-data.vercel.app/api/v2 (https://rki-vaccination-data.vercel.app/api/v2)
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: yersinia am 03 Februar 2022, 10:58:31
Impfquoten-readingList-Update, da novavax als Impfstoff und Janssen als Booster hinzugekommen sind:
single(jsonPath('$.lastUpdate'), 'lastUpdate', '-?-');
multi(jsonPath("\$.data[?(\@.rs in ['07', '08'])]"), concat(property('rs'),'_name'), property('name'));
multi(jsonPath("\$.data[?(\@.rs in ['07', '08'])]"), concat(property('rs'),'_inhabitants'), property('inhabitants'));
multi(jsonPath("\$.data[?(\@.rs in ['07', '08'])]"), concat(property('rs'),'_1st_dose_abs'), property('vaccinatedAtLeastOnce.doses'));
multi(jsonPath("\$.data[?(\@.rs in ['07', '08'])]"), concat(property('rs'),'_1st_dose_quote'), property('vaccinatedAtLeastOnce.quote'));
multi(jsonPath("\$.data[?(\@.rs in ['07', '08'])]"), concat(property('rs'),'_1st_dose_diff'), property('vaccinatedAtLeastOnce.differenceToThePreviousDay'));
multi(jsonPath("\$.data[?(\@.rs in ['07', '08'])]"), concat(property('rs'),'_1st_dose_vax_0_name'), property('fullyVaccinated.vaccine[0].name'));
multi(jsonPath("\$.data[?(\@.rs in ['07', '08'])]"), concat(property('rs'),'_1st_dose_vax_0_doses'), property('fullyVaccinated.vaccine[0].firstDoses'));
multi(jsonPath("\$.data[?(\@.rs in ['07', '08'])]"), concat(property('rs'),'_1st_dose_vax_1_name'), property('fullyVaccinated.vaccine[1].name'));
multi(jsonPath("\$.data[?(\@.rs in ['07', '08'])]"), concat(property('rs'),'_1st_dose_vax_1_doses'), property('fullyVaccinated.vaccine[1].firstDoses'));
multi(jsonPath("\$.data[?(\@.rs in ['07', '08'])]"), concat(property('rs'),'_1st_dose_vax_2_name'), property('fullyVaccinated.vaccine[2].name'));
multi(jsonPath("\$.data[?(\@.rs in ['07', '08'])]"), concat(property('rs'),'_1st_dose_vax_2_doses'), property('fullyVaccinated.vaccine[2].firstDoses'));
multi(jsonPath("\$.data[?(\@.rs in ['07', '08'])]"), concat(property('rs'),'_1st_dose_vax_3_name'), property('fullyVaccinated.vaccine[3].name'));
multi(jsonPath("\$.data[?(\@.rs in ['07', '08'])]"), concat(property('rs'),'_1st_dose_vax_3_doses'), property('fullyVaccinated.vaccine[3].firstDoses'));
multi(jsonPath("\$.data[?(\@.rs in ['07', '08'])]"), concat(property('rs'),'_1st_dose_vax_4_name'), property('fullyVaccinated.vaccine[4].name'));
multi(jsonPath("\$.data[?(\@.rs in ['07', '08'])]"), concat(property('rs'),'_1st_dose_vax_4_doses'), property('fullyVaccinated.vaccine[4].firstDoses'));
multi(jsonPath("\$.data[?(\@.rs in ['07', '08'])]"), concat(property('rs'),'_2nd_dose_abs'), property('fullyVaccinated.doses'));
multi(jsonPath("\$.data[?(\@.rs in ['07', '08'])]"), concat(property('rs'),'_2nd_dose_quote'), property('fullyVaccinated.quote'));
multi(jsonPath("\$.data[?(\@.rs in ['07', '08'])]"), concat(property('rs'),'_2nd_dose_diff'), property('fullyVaccinated.differenceToThePreviousDay'));
multi(jsonPath("\$.data[?(\@.rs in ['07', '08'])]"), concat(property('rs'),'_2nd_dose_vax_0_name'), property('fullyVaccinated.vaccine[0].name'));
multi(jsonPath("\$.data[?(\@.rs in ['07', '08'])]"), concat(property('rs'),'_2nd_dose_vax_0_doses'), property('fullyVaccinated.vaccine[0].secondDoses'));
multi(jsonPath("\$.data[?(\@.rs in ['07', '08'])]"), concat(property('rs'),'_2nd_dose_vax_1_name'), property('fullyVaccinated.vaccine[1].name'));
multi(jsonPath("\$.data[?(\@.rs in ['07', '08'])]"), concat(property('rs'),'_2nd_dose_vax_1_doses'), property('fullyVaccinated.vaccine[1].secondDoses'));
multi(jsonPath("\$.data[?(\@.rs in ['07', '08'])]"), concat(property('rs'),'_2nd_dose_vax_2_name'), property('fullyVaccinated.vaccine[2].name'));
multi(jsonPath("\$.data[?(\@.rs in ['07', '08'])]"), concat(property('rs'),'_2nd_dose_vax_2_doses'), property('fullyVaccinated.vaccine[2].secondDoses'));
multi(jsonPath("\$.data[?(\@.rs in ['07', '08'])]"), concat(property('rs'),'_2nd_dose_vax_3_name'), property('fullyVaccinated.vaccine[3].name'));
multi(jsonPath("\$.data[?(\@.rs in ['07', '08'])]"), concat(property('rs'),'_2nd_dose_vax_3_doses'), property('fullyVaccinated.vaccine[3].secondDoses'));
multi(jsonPath("\$.data[?(\@.rs in ['07', '08'])]"), concat(property('rs'),'_2nd_dose_vax_4_name'), property('fullyVaccinated.vaccine[4].name'));
multi(jsonPath("\$.data[?(\@.rs in ['07', '08'])]"), concat(property('rs'),'_2nd_dose_vax_4_doses'), property('fullyVaccinated.vaccine[4].secondDoses'));
multi(jsonPath("\$.data[?(\@.rs in ['07', '08'])]"), concat(property('rs'),'_3rd_dose_abs'), property('boosterVaccinated.doses'));
multi(jsonPath("\$.data[?(\@.rs in ['07', '08'])]"), concat(property('rs'),'_3rd_dose_quote'), property('boosterVaccinated.quote'));
multi(jsonPath("\$.data[?(\@.rs in ['07', '08'])]"), concat(property('rs'),'_3rd_dose_diff'), property('boosterVaccinated.differenceToThePreviousDay'));
multi(jsonPath("\$.data[?(\@.rs in ['07', '08'])]"), concat(property('rs'),'_3rd_dose_vax_0_name'), property('boosterVaccinated.vaccine[0].name'));
multi(jsonPath("\$.data[?(\@.rs in ['07', '08'])]"), concat(property('rs'),'_3rd_dose_vax_0_doses'), property('boosterVaccinated.vaccine[0].boosterDoses'));
multi(jsonPath("\$.data[?(\@.rs in ['07', '08'])]"), concat(property('rs'),'_3rd_dose_vax_1_name'), property('boosterVaccinated.vaccine[1].name'));
multi(jsonPath("\$.data[?(\@.rs in ['07', '08'])]"), concat(property('rs'),'_3rd_dose_vax_1_doses'), property('boosterVaccinated.vaccine[1].boosterDoses'));
multi(jsonPath("\$.data[?(\@.rs in ['07', '08'])]"), concat(property('rs'),'_3rd_dose_vax_2_name'), property('boosterVaccinated.vaccine[2].name'));
multi(jsonPath("\$.data[?(\@.rs in ['07', '08'])]"), concat(property('rs'),'_3rd_dose_vax_2_doses'), property('boosterVaccinated.vaccine[2].boosterDoses'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_name'), property('name'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_inhabitants'), property('inhabitants'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_1st_dose_abs'), property('vaccinatedAtLeastOnce.doses'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_1st_dose_quote'), property('vaccinatedAtLeastOnce.quote'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_1st_dose_diff'), property('vaccinatedAtLeastOnce.differenceToThePreviousDay'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_1st_dose_vax_0_name'), property('fullyVaccinated.vaccine[0].name'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_1st_dose_vax_0_doses'), property('fullyVaccinated.vaccine[0].firstDoses'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_1st_dose_vax_1_name'), property('fullyVaccinated.vaccine[1].name'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_1st_dose_vax_1_doses'), property('fullyVaccinated.vaccine[1].firstDoses'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_1st_dose_vax_2_name'), property('fullyVaccinated.vaccine[2].name'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_1st_dose_vax_2_doses'), property('fullyVaccinated.vaccine[2].firstDoses'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_1st_dose_vax_3_name'), property('fullyVaccinated.vaccine[3].name'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_1st_dose_vax_3_doses'), property('fullyVaccinated.vaccine[3].firstDoses'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_1st_dose_vax_4_name'), property('fullyVaccinated.vaccine[4].name'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_1st_dose_vax_4_doses'), property('fullyVaccinated.vaccine[4].firstDoses'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_2nd_dose_abs'), property('fullyVaccinated.doses'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_2nd_dose_quote'), property('fullyVaccinated.quote'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_2nd_dose_diff'), property('fullyVaccinated.differenceToThePreviousDay'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_2nd_dose_vax_0_name'), property('fullyVaccinated.vaccine[0].name'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_2nd_dose_vax_0_doses'), property('fullyVaccinated.vaccine[0].secondDoses'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_2nd_dose_vax_1_name'), property('fullyVaccinated.vaccine[1].name'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_2nd_dose_vax_1_doses'), property('fullyVaccinated.vaccine[1].secondDoses'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_2nd_dose_vax_2_name'), property('fullyVaccinated.vaccine[2].name'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_2nd_dose_vax_2_doses'), property('fullyVaccinated.vaccine[2].secondDoses'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_2nd_dose_vax_3_name'), property('fullyVaccinated.vaccine[3].name'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_2nd_dose_vax_3_doses'), property('fullyVaccinated.vaccine[3].secondDoses'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_2nd_dose_vax_4_name'), property('fullyVaccinated.vaccine[4].name'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_2nd_dose_vax_4_doses'), property('fullyVaccinated.vaccine[4].secondDoses'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_3rd_dose_abs'), property('boosterVaccinated.doses'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_3rd_dose_quote'), property('boosterVaccinated.quote'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_3rd_dose_diff'), property('boosterVaccinated.differenceToThePreviousDay'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_3rd_dose_vax_0_name'), property('boosterVaccinated.vaccine[0].name'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_3rd_dose_vax_0_doses'), property('boosterVaccinated.vaccine[0].boosterDoses'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_3rd_dose_vax_1_name'), property('boosterVaccinated.vaccine[1].name'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_3rd_dose_vax_1_doses'), property('boosterVaccinated.vaccine[1].boosterDoses'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_3rd_dose_vax_2_name'), property('boosterVaccinated.vaccine[2].name'));
multi(jsonPath("\$.data[?(\@.name in ['Deutschland', 'Bundesressorts'])]"), concat(property('name'),'_3rd_dose_vax_2_doses'), property('boosterVaccinated.vaccine[2].boosterDoses'));

Siehe auch post #151 (https://forum.fhem.de/index.php/topic,113798.msg1189442.html#msg1189442) und post #99 (https://forum.fhem.de/index.php/topic,113798.msg1163862.html#msg1163862).

EDIT 2022-03-18: Typo gefixt und Impfdaten für die Booster hatten das falsche Reading  ::)
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: yersinia am 03 Mai 2022, 09:55:52
Es scheint so, als stände die API für die Impfdaten via vercel.app längerfristig nicht mehr zur Verfügung (https://rki-vaccination-data.vercel.app/api/v2):
Zitat404: NOT_FOUND
Code: DEPLOYMENT_NOT_FOUND

Dankenswerterweise stellt ein gewisser Marlon Lueckert (https://github.com/marlon360/rki-covid-api) eine api für die Impfdaten zur Verfügung (https://api.corona-zahlen.org/docs/endpoints/vaccinations.html). Diese Daten lassen sich dann via JsonMod in FHEM einbinden.

Im FHEMWEB nutze ich eine tabellarische Ansicht der Daten der Bundesländer (nur jene, die mich interessieren). Bei einem Klick auf die Zeile des Bundeslandes öffnet sich eine Detailansicht der dazugehörigen verabreichten Impfstoffe (ein weiterer Klick auf die Detailansicht schließt diese wieder).
Das JsonMod Device holt alle Daten, die Anzeige Bundesländer werden nur im stateFormat eingeschränkt:
my @objects = ("BB","HH");
Hier einfach die Codes der Bundesländer abändern/erweitern welche euch interessieren - valide Codes sind: SH, HH, NI, HB, NW, HE, RP, BW, BY, SL, BE, BB, MV, SN, ST, TH, Bund.
Die Werte für Deutschland gesamt werden als letzte Zeile einfach angehängt.

RAW-Def:
defmod coronaVaxRKIv3 JsonMod https://api.corona-zahlen.org/vaccinations
attr coronaVaxRKIv3 interval 12 12 * * *
attr coronaVaxRKIv3 readingList complete();;
attr coronaVaxRKIv3 stateFormat { my @objects = ("BB","HH");;\
my @vaxines = ("biontech","biontechBivalent","moderna","modernaBivalent","astraZeneca","janssen","novavax","valneva");;;\
my $cellstyle = "padding:3pt;;border-bottom:1px dotted lightgray;;text-align: right;;";;\
my $highlightcolor = "DarkSlateGray";; #DodgerBlue";;\
my $ret = "<div style=\"text-align: left;;\">";;\
$ret .= "<a href=\"https://impfdashboard.de\" target=\"blank\">ImpfDashboard</a> last check => ";;\
$ret .= POSIX::strftime("%d.%m. %H:%M",localtime(time_str2num(ReadingsTimestamp($name,".computedReadings","2000-01-01 00:00:00"))));;\
$ret .= "<br \/>";;\
$ret .= '<div style="display:table;;width:100%;;">';;\
$ret .= '<div style="display:table-row;;">';;\
  $ret .= '<div style="display:table-cell;;'.$cellstyle.'width:30%;;font-weight:bold;;">&nbsp;;</div>';;\
  $ret .= '<div style="display:table-cell;;'.$cellstyle.'width:12.5%;;font-weight:bold;;">1. Dosis</div>';;\
  $ret .= '<div style="display:table-cell;;'.$cellstyle.'width:2.5%;;font-weight:bold;;">&nbsp;;</div>';;\
  $ret .= '<div style="display:table-cell;;'.$cellstyle.'width:2.5%;;font-weight:bold;;">&nbsp;;</div>';;\
  $ret .= '<div style="display:table-cell;;'.$cellstyle.'width:12.5%;;font-weight:bold;;">2. Dosis</div>';;\
  $ret .= '<div style="display:table-cell;;'.$cellstyle.'width:2.5%;;font-weight:bold;;">&nbsp;;</div>';;\
  $ret .= '<div style="display:table-cell;;'.$cellstyle.'width:2.5%;;font-weight:bold;;">&nbsp;;</div>';;\
  $ret .= '<div style="display:table-cell;;'.$cellstyle.'width:12.5%;;font-weight:bold;;">3. Dosis</div>';;\
  $ret .= '<div style="display:table-cell;;'.$cellstyle.'width:2.5%;;font-weight:bold;;">&nbsp;;</div>';;\
  $ret .= '<div style="display:table-cell;;'.$cellstyle.'width:2.5%;;font-weight:bold;;">&nbsp;;</div>';;\
  $ret .= '<div style="display:table-cell;;'.$cellstyle.'width:12.5%;;font-weight:bold;;">4. Dosis</div>';;\
  $ret .= '<div style="display:table-cell;;'.$cellstyle.'width:2.5%;;font-weight:bold;;">&nbsp;;</div>';;\
  $ret .= '<div style="display:table-cell;;'.$cellstyle.'width:2.5%;;font-weight:bold;;">&nbsp;;</div>';;\
$ret .= '</div>';; #header\
foreach my $obj (@objects) {\
$ret .= '<div style="display:table-row;;" onmouseover="this.style.background=\''.$highlightcolor.'\';;" ';;\
$ret .= 'onmouseout="this.style.background=\'transparent\';;" ';;\
$ret .= 'onclick="document.getElementById(\''.$obj.'_vaxs\').style.display=\'table-row-group\';;">';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:30%;;">';;\
$ret .= ReadingsVal($name,"data.states.".$obj.".name","-");;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:12.5%;;">';;\
$ret .= ReadingsVal($name,"data.states.".$obj.".vaccinated","-");;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:2.5%;;">';;\
$ret .= (ReadingsNum($name,"data.states.".$obj.".quote",0) * 100)."%";;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:2.5%;;">';;\
$ret .= "+".ReadingsVal($name,"data.states.".$obj.".delta","-");;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:12.5%;;">';;\
$ret .= ReadingsVal($name,"data.states.".$obj.".secondVaccination.vaccinated","-");;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:2.5%;;">';;\
$ret .= (ReadingsNum($name,"data.states.".$obj.".secondVaccination.quote",0) * 100)."%";;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:2.5%;;">';;\
$ret .= "+".ReadingsVal($name,"data.states.".$obj.".secondVaccination.delta","-");;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:12.5%;;">';;\
$ret .= ReadingsVal($name,"data.states.".$obj.".boosterVaccination.vaccinated","-");;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:2.5%;;">';;\
$ret .= (ReadingsNum($name,"data.states.".$obj.".boosterVaccination.quote",0) * 100)."%";;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:2.5%;;">';;\
$ret .= "+".ReadingsVal($name,"data.states.".$obj.".boosterVaccination.delta","-");;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:12.5%;;">';;\
$ret .= ReadingsVal($name,"data.states.".$obj.".2ndBoosterVaccination.vaccinated","-");;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:2.5%;;">';;\
$ret .= (ReadingsNum($name,"data.states.".$obj.".2ndBoosterVaccination.quote",0) * 100)."%";;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:2.5%;;">';;\
$ret .= "+".ReadingsVal($name,"data.states.".$obj.".2ndBoosterVaccination.delta","-");;\
$ret .= '</div>';;\
$ret .= '</div>';;\
$ret .= '<span style="display: none;;" id="'.$obj.'_vaxs" ';;\
$ret .= 'onclick="document.getElementById(\''.$obj.'_vaxs\').style.display=\'none\';;">';;\
foreach my $vaxs (@vaxines) {\
$ret .= '<div style="display:table-row;; visibility: inherit;;" ';;\
$ret .= 'onmouseover="this.style.background=\'steelblue\';;" ';;\
$ret .= 'onmouseout="this.style.background=\'transparent\';;">';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:30%;;">';;\
$ret .= ucfirst($vaxs);;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:12.5%;;">';;\
$ret .= ReadingsVal($name,"data.states.".$obj.".vaccination.".$vaxs,"-");;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:2.5%;;">';;\
$ret .= "&nbsp;;";;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:2.5%;;">';;\
$ret .= "+".ReadingsVal($name,"data.states.".$obj.".vaccination.delta".ucfirst($vaxs),"-");;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:12.5%;;">';;\
$ret .= ReadingsVal($name,"data.states.".$obj.".secondVaccination.vaccination.".$vaxs,"-");;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:2.5%;;">';;\
$ret .= "&nbsp;;";;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:2.5%;;">';;\
$ret .= "+".ReadingsVal($name,"data.states.".$obj.".secondVaccination.vaccination.delta".ucfirst($vaxs),"-");;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:12.5%;;">';;\
$ret .= ReadingsVal($name,"data.states.".$obj.".boosterVaccination.vaccination.".$vaxs,"-");;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:2.5%;;">';;\
$ret .= "&nbsp;;";;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:2.5%;;">';;\
$ret .= "+".ReadingsVal($name,"data.states.".$obj.".boosterVaccination.vaccination.delta".ucfirst($vaxs),"-");;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:12.5%;;">';;\
$ret .= ReadingsVal($name,"data.states.".$obj.".2ndBoosterVaccination.vaccination.".$vaxs,"-");;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:2.5%;;">';;\
$ret .= "&nbsp;;";;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:2.5%;;">';;\
$ret .= "+".ReadingsVal($name,"data.states.".$obj.".2ndBoosterVaccination.vaccination.delta".ucfirst($vaxs),"-");;\
$ret .= '</div>';;\
$ret .= '</div>';;\
}\
$ret .= '</span>';;\
}\
    # Deutschland\
$ret .= '<div style="display:table-row;;" onmouseover="this.style.background=\''.$highlightcolor.'\';;" ';;\
$ret .= 'onmouseout="this.style.background=\'transparent\';;" ';;\
$ret .= 'onclick="document.getElementById(\'DE_vaxs\').style.display=\'table-row-group\';;">';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:30%;;">';;\
#$ret .= ReadingsVal($name,"data.states.".$obj.".name","-");;\
                $ret .= "Deutschland";;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:12.5%;;">';;\
$ret .= ReadingsVal($name,"data.vaccinated","-");;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:2.5%;;">';;\
$ret .= (ReadingsNum($name,"data.quote",0) * 100)."%";;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:2.5%;;">';;\
$ret .= "+".ReadingsVal($name,"data.delta","-");;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:12.5%;;">';;\
$ret .= ReadingsVal($name,"data.secondVaccination.vaccinated","-");;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:2.5%;;">';;\
$ret .= (ReadingsNum($name,"data.secondVaccination.quote",0) * 100)."%";;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:2.5%;;">';;\
$ret .= "+".ReadingsVal($name,"data.secondVaccination.delta","-");;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:12.5%;;">';;\
$ret .= ReadingsVal($name,"data.boosterVaccination.vaccinated","-");;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:2.5%;;">';;\
$ret .= (ReadingsNum($name,"data.boosterVaccination.quote",0) * 100)."%";;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:2.5%;;">';;\
$ret .= "+".ReadingsVal($name,"data.boosterVaccination.delta","-");;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:12.5%;;">';;\
$ret .= ReadingsVal($name,"data.2ndBoosterVaccination.vaccinated","-");;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:2.5%;;">';;\
$ret .= (ReadingsNum($name,"data.2ndBoosterVaccination.quote",0) * 100)."%";;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:2.5%;;">';;\
$ret .= "+".ReadingsVal($name,"data.2ndBoosterVaccination.delta","-");;\
$ret .= '</div>';;\
$ret .= '</div>';;\
$ret .= '<span style="display: none;;" id="DE_vaxs" ';;\
$ret .= 'onclick="document.getElementById(\'DE_vaxs\').style.display=\'none\';;">';;\
foreach my $vaxs (@vaxines) {\
$ret .= '<div style="display:table-row;; visibility: inherit;;" ';;\
$ret .= 'onmouseover="this.style.background=\'steelblue\';;" ';;\
$ret .= 'onmouseout="this.style.background=\'transparent\';;">';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:30%;;">';;\
$ret .= ucfirst($vaxs);;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:12.5%;;">';;\
$ret .= ReadingsVal($name,"data.vaccination.".$vaxs,"-");;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:2.5%;;">';;\
$ret .= "&nbsp;;";;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:2.5%;;">';;\
$ret .= "+".ReadingsVal($name,"data.vaccination.delta".ucfirst($vaxs),"-");;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:12.5%;;">';;\
$ret .= ReadingsVal($name,"data.secondVaccination.vaccination.".$vaxs,"-");;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:2.5%;;">';;\
$ret .= "&nbsp;;";;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:2.5%;;">';;\
$ret .= "+".ReadingsVal($name,"data.secondVaccination.vaccination.delta".ucfirst($vaxs),"-");;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:12.5%;;">';;\
$ret .= ReadingsVal($name,"data.boosterVaccination.vaccination.".$vaxs,"-");;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:2.5%;;">';;\
$ret .= "&nbsp;;";;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:2.5%;;">';;\
$ret .= "+".ReadingsVal($name,"data.boosterVaccination.vaccination.delta".ucfirst($vaxs),"-");;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:12.5%;;">';;\
$ret .= ReadingsVal($name,"data.2ndBoosterVaccination.vaccination.".$vaxs,"-");;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:2.5%;;">';;\
$ret .= "&nbsp;;";;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:2.5%;;">';;\
$ret .= "+".ReadingsVal($name,"data.2ndBoosterVaccination.vaccination.delta".ucfirst($vaxs),"-");;\
$ret .= '</div>';;\
$ret .= '</div>';;\
}\
$ret .= '</span>';;\
$ret .= '</div><br />';; #table\
$ret .= "Letzter API-Update-Check: ";;\
$ret .= ReadingsVal($name,"meta.lastUpdate","-");;\
$ret .= "</div>";;\
return $ret;;}
attr coronaVaxRKIv3 update-on-start 0
attr coronaVaxRKIv3 webCmd reread
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: Jamo am 30 Juli 2022, 15:00:21
Hier mal ein JsonMod für den Gasstand in Deutschland (im RAW format).

defmod GasDE JsonMod https://agsi.gie.eu/api?country=de&from=2022-03-01&size=300 [KEY]
attr GasDE httpHeader x-key: [KEY]
attr GasDE readingList single(jsonPath('$.data[0].injection'),          'injection',          'N/A');;\
single(jsonPath('$.data[0].withdrawal'),         'withdrawal',         'N/A');;\
single(jsonPath('$.data[0].injectionCapacity'),  'injectionCapacity',  'N/A');;\
single(jsonPath('$.data[0].withdrawalCapacity'), 'withdrawalCapacity', 'N/A');;\
single(jsonPath('$.data[0].trend'),              'trend',              'N/A');;\
single(jsonPath('$.data[0].full'),               'percent',            'N/A');;
attr GasDE interval  0 7 * * *
attr GasDE stateFormat Prozent: percent %


Die API ist hier beschrieben: https://www.gie.eu/transparency-platform/GIE_API_documentation_v006.pdf

Den API Key bekommt man unter agsi.gie.eu/account. Der Zugang ist kostenlos und steht jedem offen, ist in der API Dokumentation so vermerkt.
Einzutragen dann mit (Der KEY ist natürlich falsch) set GasDE secret KEY kjd3fu6wte4bdqp789keqrryo
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: Gisbert am 30 Juli 2022, 21:52:57
Hallo Jamo,

echt toll, dass du diese Abfrage hier zur Verfügung stellst. Die Definition und die Anmeldung haben geklappt. Vielleicht sollte ich kurz erwähnen, dass "[KEY]" genauso in die Definition reingehört; ich dachte zuerst, dass anstelle des "[KEY]" der key reinkommt, den man bei der Registrierung bekommt.

Noch eine Frage, in welchem Intervall werden Daten abgerufen?

Viele​ Grüße​ Gisbert​
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: Jamo am 30 Juli 2022, 22:42:29
Da hat Jörg verschiedene Beispiele hier im Thread, das wird wie bei Crontab eingestellt, habs oben ergänzt. Z.B. der Update immer morgens um 7:00:
attr GasDE interval  0 7 * * *
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: yersinia am 06 Oktober 2022, 13:41:17
Für die Impfdaten mit dem Beispiel von #160 (https://forum.fhem.de/index.php/topic,113798.msg1220332.html#msg1220332) gibt es nun mehr Impfstoffe (Valneva, Biontech (Bivalent) und Moderna (Bivalent) (https://www.pei.de/DE/arzneimittel/impfstoffe/covid-19/covid-19-node.html)); um diese im stateFormat auch anzeigen zu lassen einfach diese Zeile
my @vaxines = ("biontech","moderna","astraZeneca","janssen","novavax");
erweitern:
my @vaxines = ("biontech","moderna","astraZeneca","janssen","novavax","valneva","biontechBivalent","modernaBivalent");
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: khk123 am 30 November 2022, 11:22:11
Von https://api.corona-zahlen.org/vaccinations gibt es anscheinend seit dem 27.11. keine Zahlen mehr.


2022.11.27 15:12:44 2: [coronaVaxRKIv3] http request error: read from https://api.corona-zahlen.org:443 timed out

Bad gateway Error code 502
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: OdfFhem am 30 November 2022, 13:30:18
Zitat von: khk123 am 30 November 2022, 11:22:11
Von https://api.corona-zahlen.org/vaccinations gibt es anscheinend seit dem 27.11. keine Zahlen mehr.

API lieferte am späten Vormittag keine Antworten (u.U. Wartungsarbeiten), jetzt funktioniert es scheinbar wieder:

{"data":{"administeredVaccinations":190443861,"vaccinated":64821371, ...
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: khk123 am 30 November 2022, 16:02:18
Ja, geht wieder. Da war ich wohl zu ungeduldig.  :)
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: Gueco315 am 07 März 2023, 13:22:32
Hallo,

läuft seit Tagen bei mir nicht mehr, wurde was geändert?

Internals:
   API_LAST_MSG 200
   API_LAST_RES 1678190400.14593
   DEF        https://api.corona-zahlen.org/germany
   FUUID      61c477ee-f33f-940c-4764-77166884232fc7ab
   NAME       Germany_covid
   NEXT       2023-03-07 14:00:00
   NR         2183
   SOURCE     https://api.corona-zahlen.org/germany (200)
   STATE      <font size="2.0">7-Tage Inzidenz: <b><font size="2.0">0</b>(0) Diff: 0
<br> Fälle: <b><font size="2.0">delta.cases</b>([Germany_covid:delta.cases]) Diff: syntax error at (eval 10261940) line 1, near "Germany_covid:"

<br>Tote: <b><font size="2.0">delta.deaths</b>([Germany_covid:delta.deaths]) Diff: syntax error at (eval 10261946) line 1, near "Germany_covid:"

<br>R-Wert <b><font size="2.0">r.rValue7Days.value</b>([Germany_covid:r.rValue7Days.value]) Diff: 10261952
<br>KKhs: <b><font size="2.0">hospitalization.incidence7Days</b>([Germany_covid:hospitalization.incidence7Days]) Diff: 10261958
   SVN        24783 2021-07-21 22:37:12 UTC
   TYPE       JsonMod
   eventCount 1065
   CONFIG:
     IN_REQUEST 0
     SOURCE     https://api.corona-zahlen.org/germany
     SECRET:
   OLDREADINGS:
   READINGS:
     2023-03-07 13:00:00   casesPer100k    0
     2023-03-06 23:59:00   delta.cases_alt [Germany_covid:delta.cases]
     2023-03-07 06:19:50   delta.cases_diff syntax error at (eval 10261940) line 1, near "Germany_covid:"

     2023-03-06 23:59:00   delta.deaths_alt [Germany_covid:delta.deaths]
     2023-03-07 06:19:50   delta.deaths_diff syntax error at (eval 10261946) line 1, near "Germany_covid:"

     2023-03-07 13:00:00   error.message   There is a problem with the official RKI API.
     2023-03-07 13:00:00   error.rkiError.code 499
     2023-03-07 13:00:00   error.rkiError.details.0 Token Required
     2023-03-07 13:00:00   error.rkiError.message Token Required
     2023-03-07 13:00:00   error.rkiError.messageCode GWM_0003
     2023-03-07 13:00:00   error.url       https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/Covid19_hubv/FeatureServer/0/query?where=NeuGenesen IN(1,-1)&objectIds=&time=&resultType=standard&outFields=AnzahlGenesen,MeldeDatumDatenstand&returnIdsOnly=false&returnUniqueIdsOnly=false&returnCountOnly=false&returnDistinctValues=false&cacheHint=false&groupByFieldsForStatistics=Datenstand&outStatistics=[{statisticType:sum,onStatisticField:AnzahlGenesen,outStatisticFieldName:recovered},{statisticType:max,onStatisticField:MeldeDatum,outStatisticFieldName:date}]&having=&resultOffset=&resultRecordCount=&sqlFormat=none&f=json&token=
     2023-03-06 23:59:00   hospitalization.incidence7Days_alt [Germany_covid:hospitalization.incidence7Days]
     2023-03-07 13:00:00   hospitalization.incidence7Days_diff 10261958
     2023-03-06 23:59:00   r.rValue7Days.value_alt [Germany_covid:r.rValue7Days.value]
     2023-03-07 13:00:00   r.rValue7Days.value_diff 10261952
     2023-03-07 13:00:00   weekIncidence   0
     2023-03-06 23:59:00   weekIncidence_alt 0
     2023-03-07 13:00:00   weekIncidence_diff 0
Attributes:
   alias      Covid19
   fp_Covid19 161,437,1,Deutschland,
   group      Corona
   interval   0 */1 * * *
   readingList complete();;
   room       Büro
   stateFormat <font size="2.0">7-Tage Inzidenz: <b><font size="2.0">weekIncidence</b>(weekIncidence_alt) Diff: weekIncidence_diff
<br> Fälle: <b><font size="2.0">delta.cases</b>(delta.cases_alt) Diff: delta.cases_diff
<br>Tote: <b><font size="2.0">delta.deaths</b>(delta.deaths_alt) Diff: delta.deaths_diff
<br>R-Wert <b><font size="2.0">r.rValue7Days.value</b>(r.rValue7Days.value_alt) Diff: r.rValue7Days.value_diff
<br>KKhs: <b><font size="2.0">hospitalization.incidence7Days</b>(hospitalization.incidence7Days_alt) Diff: hospitalization.incidence7Days_diff
   userReadings weekIncidence {sprintf("%.1f",ReadingsNum("Germany_covid","weekIncidence",0))*1;},
casesPer100k {sprintf("%.0f",ReadingsNum("Germany_covid","casesPer100k",0))*1;},
weekIncidence_diff {sprintf("%.1f",ReadingsNum("Germany_covid","weekIncidence_diff",0))*1;},
r.rValue7Days.value_diff {sprintf("%.2f",ReadingsNum("Germany_covid","r.rValue7Days.value_diff",0))*1;},
hospitalization.incidence7Days_diff {sprintf("%.2f",ReadingsNum("Germany_covid","hospitalization.incidence7Days_diff",0))*1;},
   verbose    1
   webCmd     reread


Gruß Günter
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: yersinia am 07 März 2023, 13:26:48
Steht doch in den Device-Readings aus der Quelle:
Zitat von: Gueco315 am 07 März 2023, 13:22:32Internals:
     2023-03-07 13:00:00   error.message   There is a problem with the official RKI API.
     2023-03-07 13:00:00   error.rkiError.code 499
     2023-03-07 13:00:00   error.rkiError.details.0 Token Required
     2023-03-07 13:00:00   error.rkiError.message Token Required
     2023-03-07 13:00:00   error.rkiError.messageCode GWM_0003
     2023-03-07 13:00:00   error.url       https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/Covid19_hubv/FeatureServer/0/query?where=NeuGenesen IN(1,-1)&objectIds=&time=&resultType=standard&outFields=AnzahlGenesen,MeldeDatumDatenstand&returnIdsOnly=false&returnUniqueIdsOnly=false&returnCountOnly=false&returnDistinctValues=false&cacheHint=false&groupByFieldsForStatistics=Datenstand&outStatistics=[{statisticType:sum,onStatisticField:AnzahlGenesen,outStatisticFieldName:recovered},{statisticType:max,onStatisticField:MeldeDatum,outStatisticFieldName:date}]&having=&resultOffset=&resultRecordCount=&sqlFormat=none&f=json&token=
api.corona-zahlen.org/germany fehlt wohl ein (gültiger?) API token oä.

Dafür gibt es sogar schon ein issue: https://github.com/marlon360/rki-covid-api/issues/504
...und weiterführend: Bereitstellung der RKI Covid-19 Daten zum Download über den COVID-19 Datenhub endet (https://arcgis.esri.de/bereitstellung-der-rki-covid-19-daten-zum-download-ueber-den-covid-19-datenhub-endet/)
Titel: Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
Beitrag von: Gueco315 am 07 März 2023, 13:45:41
ok!