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

Offline yersinia

  • Hero Member
  • *****
  • Beiträge: 1092
    • Cyanide & Happiness
Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
« Antwort #15 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?

Tipps kann man viele geben, warum es bei dir nicht gehen könnte.
Ein list des Devices und etwaige Log-Auszüge hilft.
viele Grüße, yersinia
----
FHEM 6.0 (SVN) on RPi 4B with RasPi OS Buster (perl 5.28.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@aculfw | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

Offline ErzGabriel

  • Full Member
  • ***
  • Beiträge: 315
Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
« Antwort #16 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.

Offline Gisbert

  • Hero Member
  • *****
  • Beiträge: 2312
  • Das Ziel ist das Ziel !
Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
« Antwort #17 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
« Letzte Änderung: 11 November 2020, 07:27:36 von Gisbert »
Aktuelles Fhem auf HP ThinClient T610 | Debian11 | UniFi-Controller, AP, USG-3 | Homematic, VCCU, HMUART | ESP8266, Platinen von Papa Romeo | Gas-, Wasser-, Stromzähler | Sonoff | 1-Wire-Temperatursensoren | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21RF

Offline Gisbert

  • Hero Member
  • *****
  • Beiträge: 2312
  • Das Ziel ist das Ziel !
Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
« Antwort #18 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​
Aktuelles Fhem auf HP ThinClient T610 | Debian11 | UniFi-Controller, AP, USG-3 | Homematic, VCCU, HMUART | ESP8266, Platinen von Papa Romeo | Gas-, Wasser-, Stromzähler | Sonoff | 1-Wire-Temperatursensoren | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21RF

Offline herrmannj

  • Global Moderator
  • Hero Member
  • ****
  • Beiträge: 5996
Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
« Antwort #19 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.
smartVisu mit fronthem, einiges an HM, RFXTRX, Oregon, CUL, Homeeasy, ganz viele LED + Diverse

Offline Gisbert

  • Hero Member
  • *****
  • Beiträge: 2312
  • Das Ziel ist das Ziel !
Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
« Antwort #20 am: 12 November 2020, 00:03: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​
Aktuelles Fhem auf HP ThinClient T610 | Debian11 | UniFi-Controller, AP, USG-3 | Homematic, VCCU, HMUART | ESP8266, Platinen von Papa Romeo | Gas-, Wasser-, Stromzähler | Sonoff | 1-Wire-Temperatursensoren | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21RF

Offline yersinia

  • Hero Member
  • *****
  • Beiträge: 1092
    • Cyanide & Happiness
Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
« Antwort #21 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.
« Letzte Änderung: 12 November 2020, 13:39:47 von yersinia »
viele Grüße, yersinia
----
FHEM 6.0 (SVN) on RPi 4B with RasPi OS Buster (perl 5.28.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@aculfw | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline Gisbert

  • Hero Member
  • *****
  • Beiträge: 2312
  • Das Ziel ist das Ziel !
Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
« Antwort #22 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
Aktuelles Fhem auf HP ThinClient T610 | Debian11 | UniFi-Controller, AP, USG-3 | Homematic, VCCU, HMUART | ESP8266, Platinen von Papa Romeo | Gas-, Wasser-, Stromzähler | Sonoff | 1-Wire-Temperatursensoren | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21RF

Offline yersinia

  • Hero Member
  • *****
  • Beiträge: 1092
    • Cyanide & Happiness
Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
« Antwort #23 am: 13 November 2020, 09:03:38 »
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 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, je mehr Zeit vergangen ist, umso -gefühlter- valider die Zahlen.
viele Grüße, yersinia
----
FHEM 6.0 (SVN) on RPi 4B with RasPi OS Buster (perl 5.28.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@aculfw | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

Offline wendeling

  • Full Member
  • ***
  • Beiträge: 375
Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
« Antwort #24 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
« Letzte Änderung: 15 November 2020, 20:11:22 von wendeling »

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 24505
Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
« Antwort #25 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
Gefällt mir Gefällt mir x 1 Informativ Informativ x 1 Liste anzeigen

Offline herrmannj

  • Global Moderator
  • Hero Member
  • ****
  • Beiträge: 5996
Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
« Antwort #26 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.
Zitat
ich 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).
« Letzte Änderung: 16 November 2020, 00:21:31 von herrmannj »
smartVisu mit fronthem, einiges an HM, RFXTRX, Oregon, CUL, Homeeasy, ganz viele LED + Diverse

Offline wendeling

  • Full Member
  • ***
  • Beiträge: 375
Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
« Antwort #27 am: 16 November 2020, 19:52:40 »
Hallo ,
vielen Dank rudolfKönig hat super funktioniert 😊

Offline Kitt

  • Jr. Member
  • **
  • Beiträge: 97
Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
« Antwort #28 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
« Letzte Änderung: 01 Dezember 2020, 19:25:17 von Kitt »

Offline jkriegl

  • Full Member
  • ***
  • Beiträge: 312
Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
« Antwort #29 am: 01 Dezember 2020, 19:58:33 »
Zeig ein list oder mind. Dein stateFormat. Ohne Info ist keine Hilfe möglich.
Rpi 3, Fhem, Cul 868, HM-CC-RT-DN, HM-Sec-Sco, HM-ES-PMSw1-Pl, ebus (Vaillant), ECMD, Telegram, HTTPMOD, Xiaomi, Shelly

 

decade-submarginal