Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz

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

Vorheriges Thema - Nächstes Thema

Romoker

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
BeagleBoneBlack & Raspberry Pi 4; FB7490; div. Homematic Komponenten; CUL433: CUL_TX, Conbee II, SOMFY, 1-Wire, Z-Wave, Zigbee, SmartPlugs von Sonoff und Shelly mit MQTT

Ainadilion

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

Gisbert

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​
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

Ainadilion

#93
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

Ainadilion

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

Gisbert

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​
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

Ainadilion

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

Gisbert

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​
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

Ainadilion

Hallo, dann sollte es bei dir passen. Bei mir kamen mit "" Fehlermeldungen im Log.

Gruß
Ainadilion

yersinia

#99
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.
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

Gisbert

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​
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

yersinia

#101
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....
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

Gisbert

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​
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

yersinia

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.  :)
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

enno

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