Anwendungsbeispiel JsonMod #2: CORONA Verbreitung

Begonnen von herrmannj, 22 März 2020, 21:11:18

Vorheriges Thema - Nächstes Thema

Sticks65

Zitat von: yersinia am 24 Mai 2020, 14:05:55
Vielleicht kann er aus SK Freiburg i.Breisgau oder LK Lörrach kein Reading mit _name generieren. Versuch mal, ob dir dieses readingList immerhin den county namen basierend auf der object ID liefert:

Hallo yersinia,

nein, dass funktioniert leider auch nicht.
Das Readings erhält zwar einen neuen Zeitstempel aber es bleibt bei " _name ".

yersinia

Zitat von: Sticks65 am 24 Mai 2020, 16:40:51Das Readings erhält zwar einen neuen Zeitstempel aber es bleibt bei " _name ".
Hast du das Device nochmals geöffnet (JsonMod Devices aktualisieren sich nicht immer sofort) oder die 15 Minuten deines Intervals abgewartet?

Dann muss es an deiner FHEM Installation oder an deiner Internet-Verbindung liegen. Ich kann es bei mir nachstellen und ich erhalte Ergebnisse.

Welche Version von JsonMod nutzt du? Ein list deines Devices hilft auch.
Kannst du den Link aus der DEF mit deinem Browser öffnen? Wenn ja, such mal nach "OBJECTID":204 und "OBJECTID":212 - kannst du diese finden?

Anbei ein RAW wie es bei mir funktioniert:
defmod corona 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 corona DbLogExclude .*
attr corona event-on-update-reading .computedReadings
attr corona interval */15 * * * *
attr corona readingList multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['204', '212'])]"), concat(property('attributes.OBJECTID'),'_name'), property('attributes.county'));;\
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['204', '212'])]"), concat(property('attributes.OBJECTID'),'_cases'), property('attributes.cases'));;\
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['204', '212'])]"), concat(property('attributes.OBJECTID'),'_deaths'), property('attributes.deaths'));;
attr corona room xx System
attr corona 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,"204_name","-").": <font style=\"color:orange;;font-weight:bold;;\">".ReadingsVal($name,"204_cases","-")." F&auml;;lle</font>&nbsp;;&amp;;&nbsp;;";;\
$ret .= "<font style=\"color:red;;font-weight:bold;;\">".ReadingsVal($name,"204_deaths","-")." Tote</font><br \/>";;\
$ret .= ReadingsVal($name,"212_name","-").": <font style=\"color:orange;;font-weight:bold;;\">".ReadingsVal($name,"212_cases","-")." F&auml;;lle</font>&nbsp;;&amp;;&nbsp;;";;\
$ret .= "<font style=\"color:red;;font-weight:bold;;\">".ReadingsVal($name,"212_deaths","-")." Tote</font>";;\
$ret .= "</div>";;\
return $ret;;}
attr corona update-on-start 1
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

Sticks65

Halllo yersinia,

vielen Dank für Deinen Einsatz  :)

Zitat von: yersinia am 24 Mai 2020, 19:30:31
Hast du das Device nochmals geöffnet (JsonMod Devices aktualisieren sich nicht immer sofort) oder die 15 Minuten deines Intervals abgewartet?

Ja, ich habe das Device nochmals geöffnet, und auch den Intervall abgewartet. Der Zeitstempel des Readings wird auch aktualisiert.

Zitat von: yersinia am 24 Mai 2020, 19:30:31
Welche Version von JsonMod nutzt du? Ein list deines Devices hilft auch.

list corona:
Internals:
   API_LAST_RES 1590427195.97553
   CFGFN     
   DEF        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
   FUUID      5ecbfde9-f33f-5b4a-1537-58e9ae13217c70a4
   NAME       corona
   NEXT       2020-05-25 19:30:00
   NR         61931
   NTFY_ORDER 50-corona
   SOURCE     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 (200)
   STATE      ???
   TYPE       JsonMod
   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,cases_per_100k,cases_per_population,cases7_per_100k,BL,BL_ID,county,OBJECTID&returnGeometry=false&outSR=4326&f=json
     SECRET:
   READINGS:
     2020-05-25 19:19:56   _name           
Attributes:
   DbLogExclude .*
   interval   */15 * * * *
   readingList multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['204', '212'])]"), concat(property('attributes.OBJECTID'),'_name'), property('attributes.county'));
   room       xx System


Zitat von: yersinia am 24 Mai 2020, 19:30:31
Kannst du den Link aus der DEF mit deinem Browser öffnen?
Ja, den kann ich öffnen und ich finde auch "OBJECTID":204 und "OBJECTID":212

Zitat von: yersinia am 24 Mai 2020, 19:30:31
Anbei ein RAW wie es bei mir funktioniert

Ich habe dein RAW bei mir versucht. Da erhalte ich auch nichts brauchbares.  :(

Das "attr corona update-on-start 1" musste ich entfernen, da es bei mir auf Fehler läuft.
"update-on-start" ist bei mir als Attribut nicht vorhanden... (Doch ein Versionsproblem?)

Hier das "list corona" mit deinem RAW:
Internals:
   API_LAST_RES 1590428472.36368
   CFGFN     
   CHANGED   
   DEF        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
   FUUID      5ecbfde9-f33f-5b4a-1537-58e9ae13217c70a4
   NAME       corona
   NEXT       2020-05-25 19:45:00
   NR         61931
   NTFY_ORDER 50-corona
   SOURCE     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 (200)
   STATE      <div style="text-align: left;">last <a href="https://corona.rki.de" title="RKI CoViD19" rel="noopener noreferrer" target="_blank">RKI CoViD-19</a> check => 01.01. 00:00<br />-: <font style="color:orange;font-weight:bold;">- F&auml;lle</font>&nbsp;&amp;&nbsp;<font style="color:red;font-weight:bold;">- Tote</font><br />-: <font style="color:orange;font-weight:bold;">- F&auml;lle</font>&nbsp;&amp;&nbsp;<font style="color:red;font-weight:bold;">- Tote</font></div>
   TYPE       JsonMod
   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,cases_per_100k,cases_per_population,cases7_per_100k,BL,BL_ID,county,OBJECTID&returnGeometry=false&outSR=4326&f=json
     SECRET:
   READINGS:
     2020-05-25 19:41:12   _cases         
     2020-05-25 19:41:12   _deaths         
     2020-05-25 19:41:12   _name           
Attributes:
   DbLogExclude .*
   event-on-update-reading .computedReadings
   interval   */15 * * * *
   readingList multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['204', '212'])]"), concat(property('attributes.OBJECTID'),'_name'), property('attributes.county'));
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['204', '212'])]"), concat(property('attributes.OBJECTID'),'_cases'), property('attributes.cases'));
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['204', '212'])]"), concat(property('attributes.OBJECTID'),'_deaths'), property('attributes.deaths'));
   room       xx System
   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,"204_name","-").": <font style=\"color:orange;font-weight:bold;\">".ReadingsVal($name,"204_cases","-")." F&auml;lle</font>&nbsp;&amp;&nbsp;";
$ret .= "<font style=\"color:red;font-weight:bold;\">".ReadingsVal($name,"204_deaths","-")." Tote</font><br \/>";
$ret .= ReadingsVal($name,"212_name","-").": <font style=\"color:orange;font-weight:bold;\">".ReadingsVal($name,"212_cases","-")." F&auml;lle</font>&nbsp;&amp;&nbsp;";
$ret .= "<font style=\"color:red;font-weight:bold;\">".ReadingsVal($name,"212_deaths","-")." Tote</font>";
$ret .= "</div>";
return $ret;}



Grüße Martin

herrmannj


yersinia

wie herrmannj sagt, zeig mal deine JsonMod Version.
version JsonMod

Aktuelle Version ist
Zitat98_JsonMod.pm 21711 2020-04-17 23:29:22Z herrmannj
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

Sticks65


... ist nicht die aktuellste   :(

File          Rev   Last Change

98_JsonMod.pm 21477 2020-03-22 03:57:31Z herrmannj

doif.js                    15546 2017-12-03 09:57:42Z Ellert
fhemweb.js                 21316 2020-02-29 20:24:41Z rudolfkoenig
fhemweb_readingsGroup.js   15189 2017-10-03 17:53:27Z justme1968


kann ich nur die 98_JsonMod.pm updaten, oder muss ich generell ein "Update" machen?

yersinia

Was spricht gegen ein komplettes Update? So hast du ein aktuelles FHEM.

Ansonsten:
update 98_JsonMod.pm
(nach commandref:
Zitatupdate [-noSSL] [<fileName>|all|check|checktime|force] [http://.../controlfile]
[...]
Falls man <fileName> spezifiziert werden nur die Dateien heruntergeladen, die diesem Regexp entsprechen.
)
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

Sticks65

 :D  vielen Dank !!

Ich habe das aktuelle Modul eingespielt.
Es funktioniert nun auch bei mir.
Nun komm ich auch weiter...

Vielen Dank yersinia und herrmannj für Eure Hilfe

Viele Grüße und einen schönen Abend

Hardy62

#128
Hallo,
Mir gelingt es nicht die Ergebnisse in ein Logfile zu schreiben!
Generiert JsonMod keine Events?

Modul JsonMod
98_JsonMod.pm 21711 2020-04-17 23:29:22Z herrmannj

FHEM-Version
System Info
ConfigType: configFile
SVN rev: 22178
OS: linux
Perl: 5.24.1
uniqueId: cbb...



list FileLog_CORONA
Internals:
   DEF        ./log/FileLog_CORONA-%Y-%m.log CORONA:.*|169_cases:.*|169_deaths:.*|169_name:.*
   FD         11
   FUUID      5edd1d95-f33f-1aca-d2aa-cad4f690b3d07848
   NAME       FileLog_CORONA
   NR         474
   NTFY_ORDER 50-FileLog_CORONA
   REGEXP     CORONA:.*|169_cases:.*|169_deaths:.*|169_name:.*
   STATE      active
   TYPE       FileLog
   currentlogfile ./log/CORONA-2020-06.log
   logfile    ./log/CORONA-%Y-%m.log
   READINGS:
     2020-06-25 23:07:33   linesInTheFile  0
Attributes:
   logtype    text
   room       xx System


Viele Grüße
Signalduino 433, Intertechno, ISK Zähler mit SML für Verrechnungszähler, Solarmax, ConfigFirmata, ARDMega&Nanos,DS18B20,DHT22,I2C, BME280,S0 Zählimpulse(Stro,Ga,Wa),SDS011 FeinstaubS,Sonoffs,Shellys,Text2Speech,UBA Luftd,Corona-Arc-GIS,RadonEye,CO2-Mess,Ecoflow D2,PV-Überschuß m PID-Regler Heizst

amenomade

Zitat von: Hardy62 am 26 Juni 2020, 16:53:07
Hallo,
Mir gelingt es nicht die Ergebnisse in ein Logfile zu schreiben!
Generiert JsonMod keine Events?

Doch, solange einige Readings aktualisiert werden. Wie sieht ein "list" deines CORONA Devices aus?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Hardy62

#130
Hallo
Internals:
   API_LAST_RES 1593259200.53522
   API__LAST_MSG 200
   DEF        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
   FUUID      5ef5feba-f33f-1aca-a624-6f396448490d8ae3
   NAME       CORONA
   NEXT       2020-06-27 14:59:00
   NOTIFYDEV  global
   NR         498
   NTFY_ORDER 50-CORONA
   SOURCE     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 (200)
   STATE      <div style="text-align: left;">last <a href="https://corona.rki.de" title="RKI CoViD19" rel="noopener noreferrer" target="_blank">RKI CoViD-19</a> check => 27.06. 14:00<br />SK Worms: <font style="color:orange;font-weight:bold;">224 F&auml;lle</font>&nbsp;&amp;&nbsp;<font style="color:red;font-weight:bold;">7 Tote</font><br />LK Alzey-Worms: <font style="color:orange;font-weight:bold;">271 F&auml;lle</font>&nbsp;&amp;&nbsp;<font style="color:red;font-weight:bold;">11 Tote</font></div>
   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=death_rate,cases,deaths,cases_per_100k,cases_per_population,cases7_per_100k,BL,BL_ID,county,OBJECTID&returnGeometry=false&outSR=4326&f=json
   READINGS:
     2020-06-27 14:00:00   167_cases       224
     2020-06-27 14:00:00   167_deaths      7
     2020-06-27 14:00:00   167_name        SK Worms
     2020-06-27 14:00:00   169_cases       271
     2020-06-27 14:00:00   169_deaths      11
     2020-06-27 14:00:00   169_name        LK Alzey-Worms
Attributes:
   event-on-update-reading .computedReadings
   interval   */59 * * * *
   readingList multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['167', '169'])]"), concat(property('attributes.OBJECTID'),'_name'), property('attributes.county'));
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['167', '169'])]"), concat(property('attributes.OBJECTID'),'_cases'), property('attributes.cases'));
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['167', '169'])]"), concat(property('attributes.OBJECTID'),'_deaths'), property('attributes.deaths'));
   room       xx System
   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,"167_name","-").": <font style=\"color:orange;font-weight:bold;\">".ReadingsVal($name,"167_cases","-")." F&auml;lle</font>&nbsp;&amp;&nbsp;";
$ret .= "<font style=\"color:red;font-weight:bold;\">".ReadingsVal($name,"167_deaths","-")." Tote</font><br \/>";
$ret .= ReadingsVal($name,"169_name","-").": <font style=\"color:orange;font-weight:bold;\">".ReadingsVal($name,"169_cases","-")." F&auml;lle</font>&nbsp;&amp;&nbsp;";
$ret .= "<font style=\"color:red;font-weight:bold;\">".ReadingsVal($name,"169_deaths","-")." Tote</font>";
$ret .= "</div>";
return $ret;}
   update-on-start 1
   verbose    5


Viele Grüße Hardy
Signalduino 433, Intertechno, ISK Zähler mit SML für Verrechnungszähler, Solarmax, ConfigFirmata, ARDMega&Nanos,DS18B20,DHT22,I2C, BME280,S0 Zählimpulse(Stro,Ga,Wa),SDS011 FeinstaubS,Sonoffs,Shellys,Text2Speech,UBA Luftd,Corona-Arc-GIS,RadonEye,CO2-Mess,Ecoflow D2,PV-Überschuß m PID-Regler Heizst

somansch

Hallo Hardy,

versuche mal:

event-on-update-reading .*

Viele Grüße
Andreas

Hardy62

Hallo Andreas,
Dank Dir!
Habs gleich ausprobiert - bei der Eingabe wurde im Webfrontend gleich vorgeschlagen "computedReadings"
Hab das mal gleich verwendet und beobachte!
Wenn sich nix tut verwende ich dann deinen Vorschlag mit ".*"
Viele Grüße Hardy
Signalduino 433, Intertechno, ISK Zähler mit SML für Verrechnungszähler, Solarmax, ConfigFirmata, ARDMega&Nanos,DS18B20,DHT22,I2C, BME280,S0 Zählimpulse(Stro,Ga,Wa),SDS011 FeinstaubS,Sonoffs,Shellys,Text2Speech,UBA Luftd,Corona-Arc-GIS,RadonEye,CO2-Mess,Ecoflow D2,PV-Überschuß m PID-Regler Heizst

Hardy62

#133
Hallo Andreas,
Du hattest ja soooo recht!
attr CORONA event-on-update-reading .*

hast das Problem bei mir gelöst.
Ich habe noch einen weiteren Landkreis in die Selektion mit hinzugekommen...
(Damit ich nicht warten muss, bis bei uns die Fallzahlen hochgehen)
Ein herzliches Dankeschön und ein schönes Wochenende
Viele Grüße Hardy
Signalduino 433, Intertechno, ISK Zähler mit SML für Verrechnungszähler, Solarmax, ConfigFirmata, ARDMega&Nanos,DS18B20,DHT22,I2C, BME280,S0 Zählimpulse(Stro,Ga,Wa),SDS011 FeinstaubS,Sonoffs,Shellys,Text2Speech,UBA Luftd,Corona-Arc-GIS,RadonEye,CO2-Mess,Ecoflow D2,PV-Überschuß m PID-Regler Heizst

All-Ex

Hi zusammen,

mit dem Feld cases7_per_100k komme ich am besten klar, es wird ja auch von den Regierungen zur Steuerung benutzt.

Für die hessischen Landkreise bekomme ich den Wert ziemlich einfach raus:
https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=BL_ID%3D6&outFields=cases7_per_100k,county,last_update,OBJECTID&returnGeometry=false&outSR=4326&f=json

Gibt es dieses Feld auch für ein ganzes Bundesland oder für ganz Deutschland?

Falls nicht, gibt es so etwas wie eine avg() Funktion wie in dieser Java-Implementierung? https://github.com/json-path/JsonPath
Dann könnte ich es recht einfach in dem Modul berechen...

VG,
Alex