Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz

Begonnen von herrmannj, 24 August 2020, 18:44:17

Vorheriges Thema - Nächstes Thema

Gisbert

Hallo Enno,

hier 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​
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

herrmannj

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?

Gisbert

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​
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

enno

#108
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
Einfacher FHEM Anwender auf Intel®NUC

yersinia

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
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

yersinia

#110
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;;}
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

JoWiemann

[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
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

yersinia

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;
}
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

somansch

#113
Zitat von: yersinia am 24 Juni 2021, 15:49:50
Kleines Update zu den RKI Impfzahlen, welche von https://rki-vaccination-data.vercel.app/ als JSON zur Verfügung gestellt werden, und dem damit verbundenen Beispiel aus #48: es gibt einen neuen Endpoint 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...

majorshark

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
Grüße aus Dewitz

VM auf Synology DS718+ mit FHEM 5.9 auf Debian 9.5/32-Bit (stretch)
Nächster Leipziger Stammtisch:

yersinia

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...
?
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

majorshark

JSON:XS ist nun drauf. ???
Geht aber trotz alledem nicht. Gleiche Meldung.
Grüße aus Dewitz

VM auf Synology DS718+ mit FHEM 5.9 auf Debian 9.5/32-Bit (stretch)
Nächster Leipziger Stammtisch:

herrmannj


majorshark

Grüße aus Dewitz

VM auf Synology DS718+ mit FHEM 5.9 auf Debian 9.5/32-Bit (stretch)
Nächster Leipziger Stammtisch:

Gisbert

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​
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY