FHEM Forum

FHEM => Automatisierung => Thema gestartet von: herrmannj am 22 März 2020, 21:11:18

Titel: Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: herrmannj am 22 März 2020, 21:11:18
Ab heute ist 98_JsonMod.pm verfügber. Das Modul lädt und verarbeitet JSON files zu Readings.
https://forum.fhem.de/index.php/topic,109398.0.html

Um die Verwendung zu beschreiben und nachvollziehbar zu gestalten liefere ich Anwendungsbeispiele.

Aktuell ist die Verbreitung des CORONA Virus alles bestimmend. Mit JsonMod lässt sich schnell ein FHEM Device erstellen um Daten zur Verbreitung des Virus anzuzeigen, auszuwerten und zu loggen.

Erster Schritt ist die Auswahl einer geeigneten Quelle. Es gibt einige, ich habe mich für https://corona.lmao.ninja/countries entschieden. Das genaue Format der JSON Datei hat sich in den vergangenen Tage einige Male geändert, aber der Trick an JsonMod ist hier das man das sehr schnell anpassen kann.

Im ersten Schritt wird ein Device erstellt:
define coronaSpread JsonMod https://corona.lmao.ninja/countries

Die Daten werden kontinuierlich aktualisiert. Ich wähle ein Aktualisierungsintervall von 15 Minuten.
attr coronaSpread interval */15 * * * *

Die Daten werden als Liste von Objekten geliefert. Ich möchte mich, der Übersicht halber, auf die Anzeige von 'cases', 'todayCases' und 'active' aus einer Liste von ausgewählten Ländern beschränken. Das Atrribut readingList wird daher wie folgt aufgebaut:

multi(jsonPath("\$.[?(\@.country in ['Germany', 'Italy', 'Spain', 'France', 'USA'])]"), concat(property('country'), '_cases'), property('cases'));
multi(...); erzeugt aus einer Liste eine variable Anzahl von Readings.
jsonPath("\$.[?(\@.country in ['Germany', 'Italy', 'Spain', 'France', 'USA'])]") jsonPath(..) beschreibt via JSONPath Expression die Elemente in der JSON. Die JSONPath Anweisung verwendet den Listen Filter 'in' mit den Strings der gesuchten Länder. Strings müssen in ein einfaches Hochkomma gesetzt werden. Der Filter ist Teil der gesamten JSONPath Anweisung die ebenfalls in Hochkommas stehen muss. Daher muss die JSONPath Anweisung in doppelte Hochkommas gesetzt werden und '$' und '@' müssen maskiert werden. (Filter gehören zu den seltenen Fällen bei denen die JSONPath in doppelten Hochkommas angegeben werden muss. Wenn das nicht zutrifft kann man zwar beide Varianten verwenden. Um das escapen zu vermeiden nimmt man ohne Zwang daher immer das einfache Hochkomma.)
concat(property('country'), '_cases'), erstellt den Reading Namen. Hier wird an das Land der String '_cases' gehängt. Aus 'Germany' wird das Reading 'Germany_cases'.
property('cases')beschreibt den Inhalt des Readings. In diesem Fall also das Element 'cases' (per Country)

Auf die gleiche Art werden die beiden anderen Felder weiter ergänzt zu:

multi(jsonPath("\$.[?(\@.country in ['Germany', 'Italy', 'Spain', 'France', 'USA'])]"), concat(property('country'), '_cases'), property('cases'));
multi(jsonPath("\$.[?(\@.country in ['Germany', 'Italy', 'Spain', 'France', 'USA'])]"), concat(property('country'), '_todayCases'), property('todayCases'));
multi(jsonPath("\$.[?(\@.country in ['Germany', 'Italy', 'Spain', 'France', 'USA'])]"), concat(property('country'), '_active'), property('active'));


Auf diese Art lassen sich sowohl die Länder als auch die angezeigten Felder einfach anpassen.

Hier das komplette list inklusive der erzeugten Readings.
Internals:
   API_LAST_RES 1584907536.70367
   CFGFN     
   DEF        https://corona.lmao.ninja/countries
   FUUID      5e77c01a-f33f-a6e8-0786-252df26331a76472
   NAME       coronaSpread
   NEXT       2020-03-22 21:15:00
   NR         107
   NTFY_ORDER 50-coronaSpread
   SOURCE     https://corona.lmao.ninja/countries (200)
   STATE      ???
   TYPE       JsonMod
   CONFIG:
     IN_REQUEST 0
     SOURCE     https://corona.lmao.ninja/countries
     SECRET:
   READINGS:
     2020-03-22 21:05:36   France_active   13144
     2020-03-22 21:05:36   France_cases    16018
     2020-03-22 21:05:36   France_todayCases 1559
     2020-03-22 21:05:36   Germany_active  24492
     2020-03-22 21:05:36   Germany_cases   24852
     2020-03-22 21:05:36   Germany_todayCases 2488
     2020-03-22 21:05:36   Italy_active    46638
     2020-03-22 21:05:36   Italy_cases     59138
     2020-03-22 21:05:36   Italy_todayCases 5560
     2020-03-22 21:05:36   Spain_active    24722
     2020-03-22 21:05:36   Spain_cases     28603
     2020-03-22 21:05:36   Spain_todayCases 3107
     2020-03-22 21:05:36   USA_active      31764
     2020-03-22 21:05:36   USA_cases       32356
     2020-03-22 21:05:36   USA_todayCases  8149
Attributes:
   interval   */15 * * * *
   readingList multi(jsonPath("\$.[?(\@.country in ['Germany', 'Italy', 'Spain', 'France', 'USA'])]"), concat(property('country'), '_cases'), property('cases'));
multi(jsonPath("\$.[?(\@.country in ['Germany', 'Italy', 'Spain', 'France', 'USA'])]"), concat(property('country'), '_todayCases'), property('todayCases'));
multi(jsonPath("\$.[?(\@.country in ['Germany', 'Italy', 'Spain', 'France', 'USA'])]"), concat(property('country'), '_active'), property('active'));
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: sash.sc am 22 März 2020, 23:03:35
Respekt !

Besteht die Möglichkeit von den folgenden URL´s die Daten abzugreifen, über das Modiul

https://experience.arcgis.com/experience/478220a4c454480e823b17327b2bf1d4/page/page_0/

https://gisanddata.maps.arcgis.com/apps/opsdashboard/index.html#/bda7594740fd40299423467b48e9ecf6
(https://experience.arcgis.com/experience/478220a4c454480e823b17327b2bf1d4/page/page_0/%3Cbr%20/%3E%3Cbr%20/%3Ehttps://gisanddata.maps.arcgis.com/apps/opsdashboard/index.html#/bda7594740fd40299423467b48e9ecf6)

Danke für deine Arbeit !

Gruß
Sascha
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: Otto123 am 22 März 2020, 23:18:09
Hallo Jörg,

ich habe mal versucht das Beispiel "nachzukochen"
Ich habe update gemacht und mir die Datei 98_JsonMod.pm aus dem SVN geholt.

Ich scheitere dann sofort beim define:
2020.03.22 23:13:51 0: Unknown warnings category 'redundant' at ./FHEM/98_JsonMod.pm line 274.
BEGIN failed--compilation aborted at ./FHEM/98_JsonMod.pm line 274.

Fehlt was?

Gruß Otto
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: herrmannj am 22 März 2020, 23:24:03
Zitat von: Otto123 am 22 März 2020, 23:18:09
Hallo Jörg,

ich habe mal versucht das Beispiel "nachzukochen"
Ich habe update gemacht und mir die Datei 98_JsonMod.pm aus dem SVN geholt.

Ich scheitere dann sofort beim define:
2020.03.22 23:13:51 0: Unknown warnings category 'redundant' at ./FHEM/98_JsonMod.pm line 274.
BEGIN failed--compilation aborted at ./FHEM/98_JsonMod.pm line 274.

Fehlt was?

Gruß Otto
Ja, das richtige perl ;)
Kannst die Zeile problemlos auskommentieren.
Welches perl hast Du? (Ich lass mir was einfallen)
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: herrmannj am 22 März 2020, 23:33:02
Zitat von: sash.sc am 22 März 2020, 23:03:35
Respekt !

Besteht die Möglichkeit von den folgenden URL´s die Daten abzugreifen, über das Modiul

https://experience.arcgis.com/experience/478220a4c454480e823b17327b2bf1d4/page/page_0/

https://gisanddata.maps.arcgis.com/apps/opsdashboard/index.html#/bda7594740fd40299423467b48e9ecf6
(https://experience.arcgis.com/experience/478220a4c454480e823b17327b2bf1d4/page/page_0/%3Cbr%20/%3E%3Cbr%20/%3Ehttps://gisanddata.maps.arcgis.com/apps/opsdashboard/index.html#/bda7594740fd40299423467b48e9ecf6)

Danke für deine Arbeit !

Gruß
Sascha
Die beiden links liefern bei mir keine Daten, was soll das sein?
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: sash.sc am 22 März 2020, 23:37:30
Ein dashboard für die Übersicht mit dem ganzen Corona Kram.

Aber ich denke, da muss ich dann mit httpmod dran.

Gesendet von meinem MI 9 mit Tapatalk

Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: herrmannj am 23 März 2020, 00:20:17
Zitat von: Otto123 am 22 März 2020, 23:18:09
Hallo Jörg,

ich habe mal versucht das Beispiel "nachzukochen"
Ich habe update gemacht und mir die Datei 98_JsonMod.pm aus dem SVN geholt.

Ich scheitere dann sofort beim define:
2020.03.22 23:13:51 0: Unknown warnings category 'redundant' at ./FHEM/98_JsonMod.pm line 274.
BEGIN failed--compilation aborted at ./FHEM/98_JsonMod.pm line 274.

Fehlt was?

Gruß Otto
Der Fehler sollte nur perl 5.18 und 5.20 betreffen. Ich habe ein update eingecheckt und würde mich über die Bestätigung freuen.
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: somansch am 23 März 2020, 09:20:45
Hallo Herrmann,

erstmal vielen Dank für das Modul und dein Beispiel. Ich konnte es erfolgreich umsetzen und möchte Statistics erzeugen. Leider ohne Erfolg: "monitoredDevicesUnsupported". Hier meine Definition:
defmod coronaSpread_statistic statistics coronaSpread
attr coronaSpread_statistic room 097_News

setstate coronaSpread_statistic Waiting for notifications
setstate coronaSpread_statistic 2020-03-23 09:11:51 monitoredDevicesUnsupported coronaSpread#JsonMod
setstate coronaSpread_statistic 2020-03-23 09:11:51 nextPeriodChangeCalc 2020-03-23 09:59:55


Ich vermute, dass da etwas im Modul fehlt, oder?

Danke und Gruß
Andreas
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: Otto123 am 23 März 2020, 10:07:25
Hallo Jörg,

mein versuch gestern mit Fehlermeldung war 5.20.2 
Mein Versuch gerade mit 5.28.1 funktioniert das define ohne Fehler. (Vorher normales Update)
Nach dem Update (direkt SVN) gerade eben funktioniert es auch unter 5.20.2 - ok sehe gerade Du hattest das Update ja gestern Abend gemacht. :)

Liebe Grüße
Otto
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: herrmannj am 23 März 2020, 10:26:08
Zitat von: Otto123 am 23 März 2020, 10:07:25
Hallo Jörg,

mein versuch gestern mit Fehlermeldung war 5.20.2 
Mein Versuch gerade mit 5.28.1 funktioniert das define ohne Fehler. (Vorher normales Update)
Nach dem Update (direkt SVN) gerade eben funktioniert es auch unter 5.20.2 - ok sehe gerade Du hattest das Update ja gestern Abend gemacht. :)

Liebe Grüße
Otto
perfekt passt. das es an einem 5.20 liegen muss habe ich mir gedacht. Fix dafür (5.18 und 5.20) ist eingebaut und von Dir getestet. Danke!
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: herrmannj am 23 März 2020, 10:34:47
Zitat von: somansch am 23 März 2020, 09:20:45
Hallo Herrmann,

erstmal vielen Dank für das Modul und dein Beispiel. Ich konnte es erfolgreich umsetzen und möchte Statistics erzeugen. Leider ohne Erfolg: "monitoredDevicesUnsupported". Hier meine Definition:
defmod coronaSpread_statistic statistics coronaSpread
attr coronaSpread_statistic room 097_News

setstate coronaSpread_statistic Waiting for notifications
setstate coronaSpread_statistic 2020-03-23 09:11:51 monitoredDevicesUnsupported coronaSpread#JsonMod
setstate coronaSpread_statistic 2020-03-23 09:11:51 nextPeriodChangeCalc 2020-03-23 09:59:55


Ich vermute, dass da etwas im Modul fehlt, oder?

Danke und Gruß
Andreas
Moin,

das liegt dann an 'statistic', da kann ich leider nichts zu sagen. Nach wirklich ganz schnellem check in der source von statistic würde ich vermuten dass der Fehler von statistic geworfen wird weil state in diesem Beispiel nicht gesetzt ist.

Das ist ok (works as designed). Sinn des Modules ist ja dass das eine user action ist. Du kannst also testweise stateFormat mit einem reading besetzen.

Aber ich frage mich ob hier statistic on top überhaupt sinnvoll eingesetzt ist? Der JSON in diesem Beispiel liefert das doch hier sowieso schon. (?)

Im Zweifel kannst Du aber "bei statiistic" (siehe maintainer) nachfragen und mir den link zum thread schicken. Wenn ich dafür bei mir was einbauen muss kann ich das gern machen.
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: JoWiemann am 23 März 2020, 11:20:24
Zitat von: herrmannj am 23 März 2020, 10:34:47
Moin,

Das ist ok (works as designed). Sinn des Modules ist ja dass das eine user action ist. Du kannst also testweise stateFormat mit einem reading besetzen.


stateFormat beeinflusst STATE und nicht state. state wird mit dem Attribut setState beeinflusst.

Grüße Jörg
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: herrmannj am 23 März 2020, 11:31:30
Hast Recht!

Ändert aber nichts an meiner Vermutung dass statistic den Fehler wirft weil es kein state reading findet. Das muss verifiziert werden. Wenn ja dann muss man (jeder für sich) überlegen "was" in diesem Beispiel der "state" ist und dann kann man den aktivieren. Wenn man statistic möchte.
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: somansch am 23 März 2020, 22:21:29
Zitat von: herrmannj am 23 März 2020, 10:34:47
Aber ich frage mich ob hier statistic on top überhaupt sinnvoll eingesetzt ist? Der JSON in diesem Beispiel liefert das doch hier sowieso schon. (?)

Ich habe die jetzigen Readings in mein FTUI eingebaut. Die Statistics sind sinnvoll, um einen Trend der täglichen Veränderung darzustellen (wie im Beispiel Temperaturtrend - siehe Anhang). Darum geht es ja letzendlich, wenn man bewerten möchte, in welchen Ländern es hoffentlich bald bergauf geht.
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: herrmannj am 23 März 2020, 22:38:55
Auch wenn der Anlass mehr als unerfreulich ist, die Umsetzung gefällt mir bei Dir sehr.

Sollte sich die Theorie bestätigen dass der fehlende state das statistics verwirrt: mittelfristig wollte ich ohnehin Aggregatfunktionen einbauen. Dann könnte man etwas in der Art sum() dafür nehmen um. Alle Länder addiert, hier dann Weltweit. Aber Corona ist eben auch _nur ein_ Anwendungsfall für das modul und Corona ist hoffentlich schnell obsolet.

Die 'normale' Anwendung sind Webdienste wie Wetter, Umwelt, Ölpreis, Spritpreis, IOT Device mit Json Interface. Alles was Json kann und mal fix rein in FHEM soll.
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: Icinger am 24 März 2020, 04:47:02
Zitatdefmod coronaSpread_statistic statistics coronaSpread
attr coronaSpread_statistic room 097_News

setstate coronaSpread_statistic Waiting for notifications
setstate coronaSpread_statistic 2020-03-23 09:11:51 monitoredDevicesUnsupported coronaSpread#JsonMod
setstate coronaSpread_statistic 2020-03-23 09:11:51 nextPeriodChangeCalc 2020-03-23 09:59:55

Was - ungeachtet des state-readings - auf jeden Fall fehlt, sind die Attribute.

Zitat
deltaReadings <Gerätewerte>
Durch Kommas getrennte Liste von weiteren Gerätewerten, für welche die Differenz zwischen den Werten am Anfang und Ende einer Periode (Stunde/Tag/Monat/Jahr) bestimmt wird.

durationReadings <Gerätewerte>
Durch Kommas getrennte Liste von weiteren Gerätewerten, für welche die Dauer einzelner Gerätewerte innerhalb bestimmte Zeiträume (Stunde/Tag/Monat/Jahr) erfasst wird.

minAvgMaxReadings <Gerätewerte>
Durch Kommas getrennte Liste von Gerätewerten, für die in bestimmten Zeiträumen (Tag, Monat, Jahr) Minimum, Mittelwert und Maximum erfasst werden.

tendencyReadings <Gerätewerte>
Durch Kommas getrennte Liste von weiteren Gerätewerten, für die innerhalb bestimmter Zeiträume (1h, 2h, 3h, 6h) die Differenz zwischen Anfangs- und Endwert ermittelt wird.

statistics kennt grundsätzlich einige readings-Namen (zB temperature, humidity etc.), aber kann halt mit den Readings deines Devices nichts anfangen.
Wenn du dem Modul mit den obigen Attributen ein wenig auf die Sprünge hilfst und sagst, WAS du genau auswerten willst, sollte es aber auf jeden Fall klappen.

lg, Stefan
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: bjoernbo am 24 März 2020, 07:42:18
@somansch: Würdest Du deien FTUI Code zur Verfügung stellen? Die Darstellungsweise gefällt mir und würde diese gerne übernehmen. Danke.
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: bjoernbo am 24 März 2020, 10:22:43
anbei meine Lösung für das FTUI

<table border="0" width="95%">
<tr>
    <th>Land</th>
    <th>Gesamt</th>
    <th>best. Infektionen<br></th>
    <th>Neuinfektionen</th>
    <th>geheilte</th>
    <th>✝</th>
    <th>heute ✝<br></th>
  </tr>
  <tr>
    <td>DEUTSCHLAND</td>
    <td><div data-type = "7segment" data-get-value = "coronaSpread:Germany_cases" data-decimals ="0"
data-digits ="8" data-color-fg="orange" ></div></td>
    <td><div data-type = "7segment" data-get-value = "coronaSpread:Germany_active" data-decimals ="0"
data-digits ="8" data-color-fg="lightblue" ></div></td>
    <td><div data-type = "7segment" data-get-value = "coronaSpread:Germany_todayCases" data-decimals ="0"
data-digits ="8" data-color-fg="lightblue" ></div></td>
    <td><div data-type = "7segment" data-get-value = "coronaSpread:Germany_recovered" data-decimals ="0"
data-digits ="8" data-color-fg="green" class="normal"></div></td>
    <td><div data-type = "7segment" data-get-value = "coronaSpread:Germany_deaths" data-decimals ="0"
data-digits ="6" data-color-fg="red" > </div></td>
    <td><div data-type = "7segment" data-get-value = "coronaSpread:Germany_todayDeaths" data-decimals ="0"
data-digits ="4" data-color-fg="red" ></div></td>
  </tr>
  <tr>
    <td>ITALIEN</td>
    <td><div data-type = "7segment" data-get-value = "coronaSpread:Italy_cases" data-decimals ="0"
data-digits ="8" data-color-fg="orange" ></div></td>
    <td><div data-type = "7segment" data-get-value = "coronaSpread:Italy_active" data-decimals ="0"
data-digits ="8" data-color-fg="lightblue" ></div></td>
    <td><div data-type = "7segment" data-get-value = "coronaSpread:Italy_todayCases" data-decimals ="0"
data-digits ="8" data-color-fg="lightblue" ></div></td>
    <td><div data-type = "7segment" data-get-value = "coronaSpread:Italy_recovered" data-decimals ="0"
data-digits ="8" data-color-fg="green" class="normal"></div></td>
    <td><div data-type = "7segment" data-get-value = "coronaSpread:Italy_deaths" data-decimals ="0"
data-digits ="6" data-color-fg="red" > </div></td>
    <td><div data-type = "7segment" data-get-value = "coronaSpread:Italy_todayDeaths" data-decimals ="0"
data-digits ="4" data-color-fg="red" ></div></td>
  </tr>
  <tr>
    <td>SPANIEN</td>
    <td><div data-type = "7segment" data-get-value = "coronaSpread:Spain_cases" data-decimals ="0"
data-digits ="8" data-color-fg="orange" ></div></td>
    <td><div data-type = "7segment" data-get-value = "coronaSpread:Spain_active" data-decimals ="0"
data-digits ="8" data-color-fg="lightblue" ></div></td>
    <td><div data-type = "7segment" data-get-value = "coronaSpread:Spain_todayCases" data-decimals ="0"
data-digits ="8" data-color-fg="lightblue" ></div></td>
    <td><div data-type = "7segment" data-get-value = "coronaSpread:Spain_recovered" data-decimals ="0"
data-digits ="8" data-color-fg="green" class="normal"></div></td>
    <td><div data-type = "7segment" data-get-value = "coronaSpread:Spain_deaths" data-decimals ="0"
data-digits ="6" data-color-fg="red" > </div></td>
    <td><div data-type = "7segment" data-get-value = "coronaSpread:Spain_todayDeaths" data-decimals ="0"
data-digits ="4" data-color-fg="red" ></div></td>
  </tr>
  <tr>
    <td>FRANKREICH</td>
    <td><div data-type = "7segment" data-get-value = "coronaSpread:France_cases" data-decimals ="0"
data-digits ="8" data-color-fg="orange" ></div></td>
    <td><div data-type = "7segment" data-get-value = "coronaSpread:France_active" data-decimals ="0"
data-digits ="8" data-color-fg="lightblue" ></div></td>
    <td><div data-type = "7segment" data-get-value = "coronaSpread:France_todayCases" data-decimals ="0"
data-digits ="8" data-color-fg="lightblue" ></div></td>
    <td><div data-type = "7segment" data-get-value = "coronaSpread:France_recovered" data-decimals ="0"
data-digits ="8" data-color-fg="green" class="normal"></div></td>
    <td><div data-type = "7segment" data-get-value = "coronaSpread:France_deaths" data-decimals ="0"
data-digits ="6" data-color-fg="red" > </div></td>
    <td><div data-type = "7segment" data-get-value = "coronaSpread:France_todayDeaths" data-decimals ="0"
data-digits ="4" data-color-fg="red" ></div></td>
  </tr>
  <tr>
    <td>USA</td>
    <td><div data-type = "7segment" data-get-value = "coronaSpread:USA_cases" data-decimals ="0"
data-digits ="8" data-color-fg="orange" ></div></td>
    <td><div data-type = "7segment" data-get-value = "coronaSpread:USA_active" data-decimals ="0"
data-digits ="8" data-color-fg="lightblue" ></div></td>
    <td><div data-type = "7segment" data-get-value = "coronaSpread:USA_todayCases" data-decimals ="0"
data-digits ="8" data-color-fg="lightblue" ></div></td>
    <td><div data-type = "7segment" data-get-value = "coronaSpread:USA_recovered" data-decimals ="0"
data-digits ="8" data-color-fg="green" class="normal"></div></td>
    <td><div data-type = "7segment" data-get-value = "coronaSpread:USA_deaths" data-decimals ="0"
data-digits ="6" data-color-fg="red" > </div></td>
    <td><div data-type = "7segment" data-get-value = "coronaSpread:USA_todayDeaths" data-decimals ="0"
data-digits ="4" data-color-fg="red" ></div></td>
  </tr>
</table>
</center>


Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: RichardCZ am 24 März 2020, 19:20:56
Zitat von: herrmannj am 23 März 2020, 00:20:17
Der Fehler sollte nur perl 5.18 und 5.20 betreffen. Ich habe ein update eingecheckt und würde mich über die Bestätigung freuen.

Erstmal ein wenig aufräumen.

my sub jsonPathf {
    eval 'no warnings qw( redundant missing )' if ($] >= 5.22);   # Hmm... :-/

    my $jsonPathExpression = shift;
    my $format             = shift // '%s';

    my $value = $path->get($jsonPathExpression)->getResultValue();

    $value = $value->[0] if (ref $value eq 'ARRAY' && @{$value});

    return sprintf($format, $value) if (defined $value);
    return;
}


Und dann sich überlegen warum die Warnings kommen. Offensichtlich ist irgendwas im sprintf kaputt.

Redundant argument in sprintf at

kommt dann, wenn in $format nicht alle Werte verarbeitet werden. Wäre ich jetzt spontan dafür das Problem zu beheben, bevor man mit dem Morphium Pflaster "no warnings ..." an die Sache rangeht. Noch dazu im eval, noch dazu Perl version-bedingt. Technical Debt 9000.

Lobende Erwähnung fände zwar die Verwendung von defined-or, weil "alle anderen" machen || (und in 99% der Fälle falsch), aber ohne jetzt den Code ausgeführt zu haben:

Die einzigen Situationen wann der Sprintf bei perl 5.22+ besagte Warnung generieren kann, sind, wenn

a) $format ein leerer String ist. (weil man ihn bereits so übergeben hat und defined-or in diesem 1%-Fall doch ein || hätte sein sollen)
b) $value ... hmm ... mehr als ein Skalar ist.
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: herrmannj am 24 März 2020, 19:37:10
Yepp. $format ist User property und der User macht das manchmal falsch. Deswegen machen wir, nett wie wir sind, die Warnung weg die im Log eher nicht wahrgenommen wird oder sogar verunsichert. Der User wiederum sieht direkt dass das Ergebnis (seines Formatstring) nicht den Erwartungen entspricht.  :)

Das eval nehme ich weil es der einzige mir bekannte Weg für ein bedingtes use ist. Das geht vielleicht besser, aber mir ist kein Nachteil bewusst.

Nachtrag: nein. Die Warnung wird auch geworfen wenn das Format mehr und andere Parameter hat als value. Geht ganz fix
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: RichardCZ am 24 März 2020, 20:10:12
Zitat von: herrmannj am 24 März 2020, 19:37:10
Yepp. $format ist User property und der User macht das manchmal falsch. Deswegen machen wir, nett wie wir sind, die Warnung weg die im Log eher nicht wahrgenommen wird oder sogar verunsichert. Der User wiederum sieht direkt dass das Ergebnis (seines Formatstring) nicht den Erwartungen entspricht.  :)

Kann natürlich sein, dass mir der Draht zu den Schneeflocken-Generationen X, Y. Z fehlt - aber Ist eine Warnung im Log nicht eher eine Hilfe wenn der User sieht, dass sein Formatstring irgendwie nicht tut?
Wenn es im Log "eher nicht wahrgenommen wird" - schont das nicht zusätzlich des Users Psyche?


Also gut, beheben wir die weiteren Probleme mit dem Code, bis Du zur Einsicht kommst. Bei mir:

say $];

5.030001


Ich habe 5.30.1

if ($] >= 5.22); schlägt folglich bei mir nicht an, weil das ist Perl 5.220.0 - da dauert das noch eine Weile bis wir dort angekommen sind.

Mai 2105 dann irgendwann.  ;)

Also if ($] >= 5.022) wennschon.

Unabhängig davon funktioniert auch

    eval ' no warnings qw( redundant missing ) ' if ($] >= 5.022);


bei mir nicht. Die Warnung kommt trotzdem.

Zitat
Nachtrag: nein. Die Warnung wird auch geworfen wenn das Format mehr und andere Parameter hat als value. Geht ganz fix

Jo mei, Sollen doch die Leute wissen, dass sie FHEM Müll vorwerfen, dann wird auch schneller gefixt.

Aber zurück zum Thema:

Zitat
Das eval nehme ich weil es der einzige mir bekannte Weg für ein bedingtes use ist. Das geht vielleicht besser, aber mir ist kein Nachteil bewusst.

Schon mal mit

no if ($] >= 5.022), 'warnings' => 'redundant';

probiert? Zumindest startet man dann nicht zur Laufzeit eine Instanz der Perl Interpreters zur Evaluierung des String evals. Das soll der Performance zugute kommen - habe ich gehört.
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: herrmannj am 24 März 2020, 21:11:22
Zitat von: RichardCZ am 24 März 2020, 20:10:12
Kann natürlich sein, dass mir der Draht zu den Schneeflocken-Generationen X, Y. Z fehlt
Zu dieser, allen vergangenen und einer vermutlich nicht unerheblichen Anzahl zukünftiger   :D :D :D
Zitat
Jo mei, Sollen doch die Leute wissen, dass sie FHEM Müll vorwerfen, dann wird auch schneller gefixt.
No! Hier gibt es genau zwei Möglichkeiten: der user füttert das Attribut mit "Müll" (wie Du es nennst) und es funktioniert nicht. Dann sucht der user Hilfe hier im forum und/oder fixt es. Oder es funktioniert (trotz Warnung weil eine Warnung ist kein Fehler  ;) ) dann können wir uns die Warnung schenken, was wir auch tun.

Aber wenn, dem stimme ich zu, dann richtig. Habe Deine Anregung abgewandelt übernommen. Danke.

@Otto: wenn es nach dem nächsten Update nicht mehr funktioniert dann wende Dich an Richard (nur Spaß)
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: Otto123 am 24 März 2020, 22:05:25
Zitat98_JsonMod.pm       21502 2020-03-24 20:02:32Z herrmannj
:)
Jörg, Dich kenne ich persönlich, Du bist ein netter Typ, der Richard ist mir momentan etwas forsch - ich wende mich erstmal weiter an Dich ;)

Ich bekomme jetzt:
ZitatAPI__LAST_MSG invalid server response
???

Das Internal gab es mit SVN 21497 2020-03-23 20:44:04 nicht? Habe extra nochmal zurück gespult :)
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: herrmannj am 24 März 2020, 22:09:37
vielen Dank, (& ich habe soweit möglich vor dem einchecken getestet ;) )

Das mit der Server response ist mir heute auch bei einem anderen user aufgefallen. Doch das gab es schon. Weil die Daten ja offensichtlich ankommen ist es es unkritisch. Ich schau mal was da los ist. Danke.
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: Otto123 am 24 März 2020, 22:22:36
Also ich sehe es nicht, auch nicht nach dem automatischen Lauf? Oder tritt das erst bei Fehler auf?
Internals:
   API_LAST_RES 1585084500.89939
   DEF        https://corona.lmao.ninja/countries
   FUUID      5e787b9f-f33f-27f7-a449-3b78ef2b5532dfa8
   NAME       coronaSpread
   NEXT       2020-03-24 22:30:00
   NR         180
   NTFY_ORDER 50-coronaSpread
   SOURCE     https://corona.lmao.ninja/countries (200)
   STATE      ???
   SVN        21497 2020-03-23 20:44:04
   TYPE       JsonMod
   CONFIG:
     IN_REQUEST 0
     SOURCE     https://corona.lmao.ninja/countries
     SECRET:
   READINGS:
     2020-03-24 22:15:03   France_active   17923
     2020-03-24 22:15:03   France_cases    22304
     2020-03-24 22:15:03   France_todayCases 2448
     2020-03-24 22:15:03   Germany_active  29586
     2020-03-24 22:15:03   Germany_cases   32986
     2020-03-24 22:15:03   Germany_todayCases 3930
     2020-03-24 22:15:03   Italy_active    54030
     2020-03-24 22:15:03   Italy_cases     69176
     2020-03-24 22:15:03   Italy_todayCases 5249
     2020-03-24 22:15:03   Spain_active    33283
     2020-03-24 22:15:03   Spain_cases     39885
     2020-03-24 22:15:03   Spain_todayCases 4749
     2020-03-24 22:15:03   USA_active      51867
     2020-03-24 22:15:03   USA_cases       52921
     2020-03-24 22:15:03   USA_todayCases  9187
Attributes:
   interval   */15 * * * *
   readingList multi(jsonPath("\$.[?(\@.country in ['Germany', 'Italy', 'Spain', 'France', 'USA'])]"), concat(property('country'), '_cases'), property('cases'));
multi(jsonPath("\$.[?(\@.country in ['Germany', 'Italy', 'Spain', 'France', 'USA'])]"), concat(property('country'), '_todayCases'), property('todayCases'));
multi(jsonPath("\$.[?(\@.country in ['Germany', 'Italy', 'Spain', 'France', 'USA'])]"), concat(property('country'), '_active'), property('active'));
   room       Corona
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: herrmannj am 24 März 2020, 22:27:40
fix ist oben (Revision 21503). Ja das Internal wurde erst bei ersten Fehler angelegt und dann (falsch) bei Erfolg nicht wieder zurückgesetzt. Jetzt steht da der http code (200) oder eben ein Fehler wenn der remote Server was falsch macht. Dies ist glücklicherweise gerade bei checkmx so:
API__LAST_MSG read from https://api.checkwx.com:443 timed out
DEF https://api.checkwx.com/metar/EDDH/decoded

während die anderen laufen
API__LAST_MSG 200
DEF https://app.hydrawise.com/api/v1/statusschedule.php?api_key=[KEY]

Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: Otto123 am 24 März 2020, 22:38:55
Frage am Rande SVN Zeit ist UTC?
Zitat98_JsonMod.pm       21503 2020-03-24 21:21:00Z herrmannj

Weisst Du was ich irgendwie "ungünstig" finde? Das Modul läuft nicht sofort erstmal los. Man muss immer bist zum nächsten zyklischen Start warten. reread oder so was wäre für solche "hektischen" Dialoge wie jetzt doch gut :)

Also Du musst noch 7 min auf das Update warten. Ich aktualisiere hier :)

Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: herrmannj am 24 März 2020, 22:49:11
ja, SVN ist UTC, Ich kürz das 'Z' charmant weg, die Rev ist ja eindeutig.

reread ist evtl ne gute Idee. Der läuft aber auch nach einem restart direkt einmal los. Zum testen drück ich immer kurz im Editor auf "def" dann "modify.." was für das modul ja ein Neustart ist...

edit: ne 'Z' ist dran. 'ZULU' ... :)
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: Otto123 am 24 März 2020, 23:00:41
Komisch: ich SVN Update gemacht, kein kompletter Neustart nur reload 98_JsonMod.pm
Warum werden die Infos nicht aktualisiert? Version zeigt er 21503

Internals:
   API_LAST_RES 1585086300.84121
   API__LAST_MSG 200
   DEF        https://corona.lmao.ninja/countries
   FUUID      5e787b9f-f33f-27f7-a449-3b78ef2b5532dfa8
   NAME       coronaSpread
   NEXT       2020-03-24 23:00:00
   NR         180
   NTFY_ORDER 50-coronaSpread
   SOURCE     https://corona.lmao.ninja/countries (200)
   STATE      ???
   SVN        21497 2020-03-23 20:44:04
   TYPE       JsonMod
   CONFIG:
     IN_REQUEST 0
     SOURCE     https://corona.lmao.ninja/countries
     SECRET:
   READINGS:
     2020-03-24 22:45:03   France_active   17923
     2020-03-24 22:45:03   France_cases    22304
     2020-03-24 22:45:03   France_todayCases 2448
     2020-03-24 22:45:03   Germany_active  29586
     2020-03-24 22:45:03   Germany_cases   32986
     2020-03-24 22:45:03   Germany_todayCases 3930
     2020-03-24 22:45:03   Italy_active    54030
     2020-03-24 22:45:03   Italy_cases     69176
     2020-03-24 22:45:03   Italy_todayCases 5249
     2020-03-24 22:45:03   Spain_active    33283
     2020-03-24 22:45:03   Spain_cases     39885
     2020-03-24 22:45:03   Spain_todayCases 4749
     2020-03-24 22:45:03   USA_active      51928
     2020-03-24 22:45:03   USA_cases       52983
     2020-03-24 22:45:03   USA_todayCases  9249
Attributes:
   interval   */15 * * * *
   readingList multi(jsonPath("\$.[?(\@.country in ['Germany', 'Italy', 'Spain', 'France', 'USA'])]"), concat(property('country'), '_cases'), property('cases'));
multi(jsonPath("\$.[?(\@.country in ['Germany', 'Italy', 'Spain', 'France', 'USA'])]"), concat(property('country'), '_todayCases'), property('todayCases'));
multi(jsonPath("\$.[?(\@.country in ['Germany', 'Italy', 'Spain', 'France', 'USA'])]"), concat(property('country'), '_active'), property('active'));
   room       Corona


ZitatZulu Time Zone gilt in der Schiff- und Luftfahrt sowie im Militär als alternativer Name für UTC +0.
FHEM SVN ist höchster Standard sozusagen 👍
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: somansch am 24 März 2020, 23:10:34
Zitat von: bjoernbo am 24 März 2020, 07:42:18
@somansch: Würdest Du deien FTUI Code zur Verfügung stellen? Die Darstellungsweise gefällt mir und würde diese gerne übernehmen. Danke.

@bjoernbo,
habe meine Konfig im FTUI Forum gepostet:https://forum.fhem.de/index.php/topic,109490.0.html (https://forum.fhem.de/index.php/topic,109490.0.html)
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: herrmannj am 24 März 2020, 23:10:53
der ts passt zu den readings (22:45). Allerdings stimmt die angezeigte svn (21497) nicht mit dem Verhalten überein (API__LAST_MSG 200). Wenn möglich mach doch einen Neustart. Ansonsten passt ja alles, sprich die LAST_MSG mit 200. Oder übersehe ich was?
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: somansch am 24 März 2020, 23:13:36
Zitat von: Icinger am 24 März 2020, 04:47:02
Was - ungeachtet des state-readings - auf jeden Fall fehlt, sind die Attribute.

statistics kennt grundsätzlich einige readings-Namen (zB temperature, humidity etc.), aber kann halt mit den Readings deines Devices nichts anfangen.
Wenn du dem Modul mit den obigen Attributen ein wenig auf die Sprünge hilfst und sagst, WAS du genau auswerten willst, sollte es aber auf jeden Fall klappen.

lg, Stefan

@Icinger,
danke für deinen Tip. Manchmal muss man nur genauer die Hilfe lesen  ;) (RTFM)
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: frank am 24 März 2020, 23:16:00
Zitat von: Otto123 am 24 März 2020, 22:38:55
Frage am Rande SVN Zeit ist UTC?

die zeitzone könnt ihr umstellen.
https://forum.fhem.de/index.php/topic,84181.msg764572.html#msg764572 (https://forum.fhem.de/index.php/topic,84181.msg764572.html#msg764572)
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: herrmannj am 24 März 2020, 23:25:39
Danke. Das gilt aber nur im Trac. Ich zeige die Revision als Internals des Device. Wenn jemand einen list postet weil was nicht funktioniert sehe ich dadurch welche Version (des Moduls). Das ist dann eben Zulu. Könnte man auf lokale Zeit anpassen, aber nun .. glaube das passt so auch.
SVN 21503 2020-03-24 21:21:00
Jetzt sehe ich auch gerade das ich das Z doch wegkürze. Mir war doch so :) Na - dann hänge ich das mal wieder dran damit Ordnung herrscht. :)

Edit:
SVN 21504 2020-03-24 22:27:59 UTC
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: Otto123 am 24 März 2020, 23:27:23
Nach einem boot ...
Internals:
   API_LAST_RES 1585088100.76317
   API__LAST_MSG 200
   DEF        https://corona.lmao.ninja/countries
   FUUID      5e787b9f-f33f-27f7-a449-3b78ef2b5532dfa8
   NAME       coronaSpread
   NEXT       2020-03-24 23:30:00
   NR         180
   NTFY_ORDER 50-coronaSpread
   SOURCE     https://corona.lmao.ninja/countries (200)
   STATE      ???
   SVN        21503 2020-03-24 21:21:00
   TYPE       JsonMod
   CONFIG:
     IN_REQUEST 0
     SOURCE     https://corona.lmao.ninja/countries
     SECRET:
   READINGS:
     2020-03-24 23:15:02   France_active   17923
     2020-03-24 23:15:02   France_cases    22304
     2020-03-24 23:15:02   France_todayCases 2448
     2020-03-24 23:15:02   Germany_active  29586
     2020-03-24 23:15:02   Germany_cases   32986
     2020-03-24 23:15:02   Germany_todayCases 3930
     2020-03-24 23:15:02   Italy_active    54030
     2020-03-24 23:15:02   Italy_cases     69176
     2020-03-24 23:15:02   Italy_todayCases 5249
     2020-03-24 23:15:02   Spain_active    33283
     2020-03-24 23:15:02   Spain_cases     39885
     2020-03-24 23:15:02   Spain_todayCases 4749
     2020-03-24 23:15:02   USA_active      51941
     2020-03-24 23:15:02   USA_cases       52996
     2020-03-24 23:15:02   USA_todayCases  9262
Attributes:
   interval   */15 * * * *
   readingList multi(jsonPath("\$.[?(\@.country in ['Germany', 'Italy', 'Spain', 'France', 'USA'])]"), concat(property('country'), '_cases'), property('cases'));
multi(jsonPath("\$.[?(\@.country in ['Germany', 'Italy', 'Spain', 'France', 'USA'])]"), concat(property('country'), '_todayCases'), property('todayCases'));
multi(jsonPath("\$.[?(\@.country in ['Germany', 'Italy', 'Spain', 'France', 'USA'])]"), concat(property('country'), '_active'), property('active'));
   room       Corona
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: herrmannj am 24 März 2020, 23:31:04
Sieht gut aus. Also ... bis auf UTC -> rev 21504  :)  8)
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: Jamo am 25 März 2020, 11:39:11
Hallo Hermann,
danke für das klasse Modul. Ich habe mir damit sofort eine eigene Tabelle eingerichtet,
mir ist aber aufgefallen, das angelegte eigene readings mit jedem Lauf wieder gelöscht werden. Ich wollte mir eingene readings anlegen, wo ich mir die 'neuen' Coronafälle für gestern und vorgestern in einem Reading merke.
Aber es wird alles gelöscht und wieder neu angelegt.
Kann man evtl auch nur die vom Modul erzeugten Readings neu anlegen?

Danke, und bleib gesund!
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: Andy89 am 25 März 2020, 11:49:14
Hallo,
weil ich das Thema gerade auch sehr stark verfolge, wollte ich mir die Anzahl nach Bundesländern anzeigen lassen.

Die Adresse zum Erstellen von JSON-Urls gibt es auf der RKI Seitehttps://npgeo-corona-npgeo-de.hub.arcgis.com/datasets/ef4b445a53c1406892257fe63129a8ea_0/geoservice?geometry=-23.183%2C46.270%2C39.439%2C55.886&selectedAttribute=Aktualisierung
Ich hab die Geometrie und alles "unwichtige" weggelassen.

Leider bekomme ich es nicht hin, aus dem JSON die Daten zu extrahieren. Was mache ich falsch?
defmod coronaSpreadDe JsonMod https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/Coronaf%C3%A4lle_in_den_Bundesl%C3%A4ndern/FeatureServer/0/query?where=1%3D1&outFields=LAN_ew_GEN,Fallzahl,Aktualisierung,faelle_100000_EW,Death&returnGeometry=false&outSR=4326&f=json
attr coronaSpreadDe interval */1 * * * *
attr coronaSpreadDe readingList multi(jsonPath("$.[?(\@.LAN_ew_GEN in ['Hamburg','Bremen'])]"), concat(property('LAN_ew_GEN'), '_Death'), property('Death'));;


verbose 5 hilft mir in dem Fall leider nicht weiter.

Beste Grüße
Andy
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: herrmannj am 25 März 2020, 12:22:59
Zitat von: Jamo am 25 März 2020, 11:39:11
Hallo Hermann,
danke für das klasse Modul. Ich habe mir damit sofort eine eigene Tabelle eingerichtet,
mir ist aber aufgefallen, das angelegte eigene readings mit jedem Lauf wieder gelöscht werden. Ich wollte mir eingene readings anlegen, wo ich mir die 'neuen' Coronafälle für gestern und vorgestern in einem Reading merke.
Aber es wird alles gelöscht und wieder neu angelegt.
Kann man evtl auch nur die vom Modul erzeugten Readings neu anlegen?

Danke, und bleib gesund!
Moin Jamo,

hmm, ok ich verstehe. Eigentlich ja, die Herausforderung ist da shutdown/restart. Stell mal bitte ein komplettes List ein

vg, &bleib auch gesund!
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: herrmannj am 25 März 2020, 12:48:16
Zitat von: Andy89 am 25 März 2020, 11:49:14
Hallo,
weil ich das Thema gerade auch sehr stark verfolge, wollte ich mir die Anzahl nach Bundesländern anzeigen lassen.

Die Adresse zum Erstellen von JSON-Urls gibt es auf der RKI Seitehttps://npgeo-corona-npgeo-de.hub.arcgis.com/datasets/ef4b445a53c1406892257fe63129a8ea_0/geoservice?geometry=-23.183%2C46.270%2C39.439%2C55.886&selectedAttribute=Aktualisierung
Ich hab die Geometrie und alles "unwichtige" weggelassen.

Leider bekomme ich es nicht hin, aus dem JSON die Daten zu extrahieren. Was mache ich falsch?
defmod coronaSpreadDe JsonMod https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/Coronaf%C3%A4lle_in_den_Bundesl%C3%A4ndern/FeatureServer/0/query?where=1%3D1&outFields=LAN_ew_GEN,Fallzahl,Aktualisierung,faelle_100000_EW,Death&returnGeometry=false&outSR=4326&f=json
attr coronaSpreadDe interval */1 * * * *
attr coronaSpreadDe readingList multi(jsonPath("$.[?(\@.LAN_ew_GEN in ['Hamburg','Bremen'])]"), concat(property('LAN_ew_GEN'), '_Death'), property('Death'));;


verbose 5 hilft mir in dem Fall leider nicht weiter.

Beste Grüße
Andy
Offensichtlich ein Nachbar: Moin!

so wie das List unten sollte das aussehen, ich befürchte aber Du hast einen Bug gefunden. Das muss ich mir heute Abend in Ruhe anschauen. Als Tip: querys testen geht dort sehr gut: https://jsonpath.herokuapp.com/

Internals:
   API_LAST_RES 1585136426.14901
   API__LAST_MSG 200
   CFGFN     
   DEF        https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/Coronaf%C3%A4lle_in_den_Bundesl%C3%A4ndern/FeatureServer/0/query?where=1%3D1&outFields=LAN_ew_GEN,Fallzahl,Aktualisierung,faelle_100000_EW,Death&returnGeometry=false&outSR=4326&f=json
   FUUID      5e7b4174-f33f-a6e8-dea1-1ac51dcf4db92252
   NAME       rki
   NEXT       2020-03-25 13:00:00
   NR         82
   NTFY_ORDER 50-rki
   SOURCE     https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/Coronaf%C3%A4lle_in_den_Bundesl%C3%A4ndern/FeatureServer/0/query?where=1%3D1&outFields=LAN_ew_GEN,Fallzahl,Aktualisierung,faelle_100000_EW,Death&returnGeometry=false&outSR=4326&f=json (200)
   STATE      ???
   SVN        21504 2020-03-24 22:27:59 UTC
   TYPE       JsonMod
   CONFIG:
     IN_REQUEST 0
     SOURCE     https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/Coronaf%C3%A4lle_in_den_Bundesl%C3%A4ndern/FeatureServer/0/query?where=1%3D1&outFields=LAN_ew_GEN,Fallzahl,Aktualisierung,faelle_100000_EW,Death&returnGeometry=false&outSR=4326&f=json
     SECRET:
   READINGS:
     2020-03-25 12:40:26                   
Attributes:
   readingList multi(jsonPath("\$.features[?(\@.attributes.LAN_ew_GEN in ['Hamburg'])]"), property('attributes.LAN_ew_GEN'), property('attributes.Fallzahl'));
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: Andy89 am 25 März 2020, 13:15:27
Zitat von: herrmannj am 25 März 2020, 12:48:16
Offensichtlich ein Nachbar: Moin!

so wie das List unten sollte das aussehen, ich befürchte aber Du hast einen Bug gefunden. Das muss ich mir heute Abend in Ruhe anschauen. Als Tip: querys testen geht dort sehr gut: https://jsonpath.herokuapp.com/
Moin,
tatsächlich komme ich aus Bonn  ;) Aber weil ich dachte, dass es wegen der Bindestriche in den Bundesländern nicht geht, habe ich mir zwei Einfache rausgesucht.

Ich habe gefühlt 30 verschiedene Dinge ausprobiert, wie das Query Aussehen könnte, bin aber leider immer wieder gescheitert. Vielleich lag es ja am Bug.

Danke für Anschauen. Hat keine Eile ;)
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: herrmannj am 25 März 2020, 13:39:35
Aus Bonn ? Ne dann mach ich das nicht ;D

Doch, bin ja daran interessiert das es läuft. Ich komme aber erst heute Abend dazu. Wie schnell das fixen gelingt hängt dann vom Aufwand ab.
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: Andy89 am 25 März 2020, 17:20:55
Zitat von: herrmannj am 25 März 2020, 13:39:35
Doch, bin ja daran interessiert das es läuft. Ich komme aber erst heute Abend dazu. Wie schnell das fixen gelingt hängt dann vom Aufwand ab.
ich hab diesmal wieder was anderes versucht, aber auch daran scheitere ich. Ich habe zum Testen "recovered" und "cases" mal weggelassen.
defmod coronaSpreadWorld JsonMod https://corona.lmao.ninja/all
attr coronaSpreadWorld event-on-change-reading .*
attr coronaSpreadWorld interval */1 * * * *
attr coronaSpreadWorld readingList single(jsonPathf('$.deaths', '%s'), 'world_deaths', 'N/A');;


ich habe auch die von "https://jsonpath.herokuapp.com/" vorgeschlagene normalisierte Pfad Angabe versucht:"$['deaths']" leider auch ohne Erfolg.

auch das ging nicht:
single(jsonPath('$.deaths'), 'world_deaths', 'N/A');

Ist das derselbe Bug wie schon vorhin?  Oder mache ich hier noch einen anderen Fehler?

Beste Grüße
Andy
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: Otto123 am 25 März 2020, 18:40:36
Hallo Andy,

ich würde mich nicht wundern, wenn Dir einer das Internet löscht ;)
"Oder mache ich hier noch einen anderen Fehler?" - JA -> */1

Die Daten dort ändern sich irgendwie am Nachmittag 2 mal die Stunde, ansonsten kaum. 1 min Abfrage zyklus. :o :o :o

Gruß Otto
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: Andy89 am 25 März 2020, 19:04:56
Jedes Mal, wenn ich die readinglist ändere, möchte ich nicht bis zur nächsten 10er Minute warten. oder werden die Daten automatisch direkt einmalig geladen, sobald man etwas an der readinglist ändert?

Dass das Schwachsinn ist, minütlich abzurufen, weiß ich selbst bei den RKI Daten.
Die globalen Daten werden tatsächlich recht häufig aktualisiert ;) da sind 10 Minuten sinnvoll.

aber auch wenn es bei einer Minute bliebe, ist es ein kleines JSON, was abgerufen wird, und nicht irgendwelche videos.


Gesendet von iPhone mit Tapatalk
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: Otto123 am 25 März 2020, 19:38:29
Feature Request hat Jörg schon und er hat auch einen momentaner Workaround https://forum.fhem.de/index.php/topic,109413.msg1034742.html#msg1034742

Corona ist auch nur ein kleiner Virus - die Menge machts ;) - ok es wären selbst bei allen FHEM Usern nur 300 Anfragen pro sek.  8)
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: Andy89 am 25 März 2020, 19:48:11
Zitat von: Otto123 am 25 März 2020, 19:38:29
Feature Request hat Jörg schon und er hat auch einen momentaner Workaround https://forum.fhem.de/index.php/topic,109413.msg1034742.html#msg1034742

Corona ist auch nur ein kleiner Virus - die Menge machts ;) - ok es wären selbst bei allen FHEM Usern nur 300 Anfragen pro sek.  8)
danke dafür - ich habe das tatsächlich nicht gelesen/überlesen. Dann kann ich nun die Zeit locker hoch setzen.  :)

du hast Recht - die Menge machts. Ich hab ja nun einen besseren Weg, wo ich nicht mal bis zur nächsten vollen Minute warten muss.

Beste Grüße
Andy
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: Jamo am 25 März 2020, 20:07:37
Hallo Hermann,
ZitatMoin Jamo,
hmm, ok ich verstehe. Eigentlich ja, die Herausforderung ist da shutdown/restart. Stell mal bitte ein komplettes List ein
vg, &bleib auch gesund!

Das hat mit dem Shutdown/restart aber nichts zu tun. Anbei zwei listings, einmal um 19:44 mit den entsprechenden readings "_yesterday", und dann um 20:00 nach dem nächsten automatischen Update. Alle "_yesterday" readings sind verschwunden.

Internals:
   API_LAST_RES 1585161000.79775
   API__LAST_MSG invalid server response
   API__NEXT_REQ 1585115160.71333
   CFGFN     
   DEF        https://corona.lmao.ninja/countries
   FUUID      5e7a69e2-f33f-97bf-7b72-3a12da173d23c379
   NAME       coronaSpread
   NEXT       2020-03-25 20:00:00
   NR         38498
   NTFY_ORDER 50-coronaSpread
   SOURCE     https://corona.lmao.ninja/countries (200)
   SVN        21497 2020-03-23 20:44:04
   TYPE       JsonMod
   CONFIG:
     IN_REQUEST 0
     SOURCE     https://corona.lmao.ninja/countries
     SECRET:
   OLDREADINGS:
   READINGS:
     2020-03-25 19:30:00   Austria_active  5549
     2020-03-25 19:30:00   Austria_cases   5588
     2020-03-25 19:44:31   Austria_casesnewyesterday 305
     2020-03-25 19:30:00   Austria_casestoday 305
     2020-03-25 19:44:31   Austria_casesyesterday 5588
     2020-03-25 19:30:00   Austria_cpm     620
     2020-03-25 19:30:00   Austria_critical 28
     2020-03-25 19:30:00   Austria_deaths  30
     2020-03-25 19:30:00   Austria_deathstoday 2
     2020-03-25 19:44:31   Austria_deathsyesterday 2
     2020-03-25 19:30:00   Austria_recovered 9
     2020-03-25 19:30:00   France_active   20002
     2020-03-25 19:30:00   France_cases    25233
     2020-03-25 19:44:31   France_casesnewyesterday 2929
     2020-03-25 19:30:00   France_casestoday 2929
     2020-03-25 19:44:31   France_casesyesterday 25233
     2020-03-25 19:30:00   France_cpm      387
     2020-03-25 19:30:00   France_critical 2827
     2020-03-25 19:30:00   France_deaths   1331
     2020-03-25 19:30:00   France_deathstoday 231
     2020-03-25 19:44:31   France_deathsyesterday 231
     2020-03-25 19:30:00   France_recovered 3900
     2020-03-25 19:30:00   Germany_active  33346
     2020-03-25 19:30:00   Germany_cases   37098
     2020-03-25 19:44:31   Germany_casesnewyesterday 4107
     2020-03-25 19:30:00   Germany_casestoday 4107
     2020-03-25 19:44:31   Germany_casesyesterday 37098
     2020-03-25 19:30:00   Germany_cpm     443
     2020-03-25 19:30:00   Germany_critical 23
     2020-03-25 19:30:00   Germany_deaths  205
     2020-03-25 19:30:00   Germany_deathstoday 46
     2020-03-25 19:44:31   Germany_deathsyesterday 46
     2020-03-25 19:30:00   Germany_recovered 3547
     2020-03-25 19:30:00   Israel_active   2107
     2020-03-25 19:30:00   Israel_cases    2170
     2020-03-25 19:44:31   Israel_casesnewyesterday 240
     2020-03-25 19:30:00   Israel_casestoday 240
     2020-03-25 19:44:31   Israel_casesyesterday 2170
     2020-03-25 19:30:00   Israel_cpm      251
     2020-03-25 19:30:00   Israel_critical 37
     2020-03-25 19:30:00   Israel_deaths   5
     2020-03-25 19:30:00   Israel_deathstoday 2
     2020-03-25 19:44:31   Israel_deathsyesterday 2
     2020-03-25 19:30:00   Israel_recovered 58
     2020-03-25 19:30:00   Italy_active    57521
     2020-03-25 19:30:00   Italy_cases     74386
     2020-03-25 19:44:31   Italy_casesnewyesterday 5210
     2020-03-25 19:30:00   Italy_casestoday 5210
     2020-03-25 19:44:31   Italy_casesyesterday 74386
     2020-03-25 19:30:00   Italy_cpm       1230
     2020-03-25 19:30:00   Italy_critical  3489
     2020-03-25 19:30:00   Italy_deaths    7503
     2020-03-25 19:30:00   Italy_deathstoday 683
     2020-03-25 19:44:31   Italy_deathsyesterday 683
     2020-03-25 19:30:00   Italy_recovered 9362
     2020-03-25 19:30:00   Spain_active    38809
     2020-03-25 19:30:00   Spain_cases     47610
     2020-03-25 19:44:31   Spain_casesnewyesterday 5552
     2020-03-25 19:30:00   Spain_casestoday 5552
     2020-03-25 19:44:31   Spain_casesyesterday 47610
     2020-03-25 19:30:00   Spain_cpm       1018
     2020-03-25 19:30:00   Spain_critical  2636
     2020-03-25 19:30:00   Spain_deaths    3434
     2020-03-25 19:30:00   Spain_deathstoday 443
     2020-03-25 19:44:31   Spain_deathsyesterday 443
     2020-03-25 19:30:00   Spain_recovered 5367
     2020-03-25 19:30:00   UK_active       7694
     2020-03-25 19:30:00   UK_cases        8264
     2020-03-25 19:44:31   UK_casesnewyesterday 187
     2020-03-25 19:30:00   UK_casestoday   187
     2020-03-25 19:44:31   UK_casesyesterday 8264
     2020-03-25 19:30:00   UK_cpm          122
     2020-03-25 19:30:00   UK_critical     20
     2020-03-25 19:30:00   UK_deaths       435
     2020-03-25 19:30:00   UK_deathstoday  13
     2020-03-25 19:44:31   UK_deathsyesterday 13
     2020-03-25 19:30:00   UK_recovered    135
     2020-03-25 19:30:00   USA_active      59853
     2020-03-25 19:30:00   USA_cases       61081
     2020-03-25 19:44:31   USA_casesnewyesterday 6225
     2020-03-25 19:30:00   USA_casestoday  6225
     2020-03-25 19:44:31   USA_casesyesterday 61081
     2020-03-25 19:30:00   USA_cpm         185
     2020-03-25 19:30:00   USA_critical    1307
     2020-03-25 19:30:00   USA_deaths      841
     2020-03-25 19:30:00   USA_deathstoday 61
     2020-03-25 19:44:31   USA_deathsyesterday 61
     2020-03-25 19:30:00   USA_recovered   387
Attributes:
   interval   */30 * * * *
   readingList multi(jsonPath("\$.[?(\@.country in ['Austria', 'Germany', 'Italy', 'Spain', 'France', 'Israel', 'UK', 'USA'])]"), concat(property('country'), '_cases'), property('cases'));
multi(jsonPath("\$.[?(\@.country in ['Austria', 'Germany', 'Italy', 'Spain', 'France', 'Israel', 'UK', 'USA'])]"), concat(property('country'), '_casestoday'), property('todayCases'));
multi(jsonPath("\$.[?(\@.country in ['Austria', 'Germany', 'Italy', 'Spain', 'France', 'Israel', 'UK', 'USA'])]"), concat(property('country'), '_active'), property('active'));
multi(jsonPath("\$.[?(\@.country in ['Austria', 'Germany', 'Italy', 'Spain', 'France', 'Israel', 'UK', 'USA'])]"), concat(property('country'), '_deaths'), property('deaths'));
multi(jsonPath("\$.[?(\@.country in ['Austria', 'Germany', 'Italy', 'Spain', 'France', 'Israel', 'UK', 'USA'])]"), concat(property('country'), '_deathstoday'), property('todayDeaths'));
multi(jsonPath("\$.[?(\@.country in ['Austria', 'Germany', 'Italy', 'Spain', 'France', 'Israel', 'UK', 'USA'])]"), concat(property('country'), '_recovered'), property('recovered'));
multi(jsonPath("\$.[?(\@.country in ['Austria', 'Germany', 'Italy', 'Spain', 'France', 'Israel', 'UK', 'USA'])]"), concat(property('country'), '_critical'), property('critical'));
multi(jsonPath("\$.[?(\@.country in ['Austria', 'Germany', 'Italy', 'Spain', 'France', 'Israel', 'UK', 'USA'])]"), concat(property('country'), '_cpm'), property('casesPerOneMillion'));
   room       Info


Internals:
   API_LAST_RES 1585162800.6157
   API__LAST_MSG invalid server response
   API__NEXT_REQ 1585115160.71333
   CFGFN     
   DEF        https://corona.lmao.ninja/countries
   FUUID      5e7a69e2-f33f-97bf-7b72-3a12da173d23c379
   NAME       coronaSpread
   NEXT       2020-03-25 20:30:00
   NR         38498
   NTFY_ORDER 50-coronaSpread
   SOURCE     https://corona.lmao.ninja/countries (200)
   STATE     
   SVN        21497 2020-03-23 20:44:04
   TYPE       JsonMod
   CONFIG:
     IN_REQUEST 0
     SOURCE     https://corona.lmao.ninja/countries
     SECRET:
   OLDREADINGS:
   READINGS:
     2020-03-25 20:00:00   Austria_active  5549
     2020-03-25 20:00:00   Austria_cases   5588
     2020-03-25 20:00:00   Austria_casestoday 305
     2020-03-25 20:00:00   Austria_cpm     620
     2020-03-25 20:00:00   Austria_critical 28
     2020-03-25 20:00:00   Austria_deaths  30
     2020-03-25 20:00:00   Austria_deathstoday 2
     2020-03-25 20:00:00   Austria_recovered 9
     2020-03-25 20:00:00   France_active   20002
     2020-03-25 20:00:00   France_cases    25233
     2020-03-25 20:00:00   France_casestoday 2929
     2020-03-25 20:00:00   France_cpm      387
     2020-03-25 20:00:00   France_critical 2827
     2020-03-25 20:00:00   France_deaths   1331
     2020-03-25 20:00:00   France_deathstoday 231
     2020-03-25 20:00:00   France_recovered 3900
     2020-03-25 20:00:00   Germany_active  33345
     2020-03-25 20:00:00   Germany_cases   37098
     2020-03-25 20:00:00   Germany_casestoday 4107
     2020-03-25 20:00:00   Germany_cpm     443
     2020-03-25 20:00:00   Germany_critical 23
     2020-03-25 20:00:00   Germany_deaths  206
     2020-03-25 20:00:00   Germany_deathstoday 47
     2020-03-25 20:00:00   Germany_recovered 3547
     2020-03-25 20:00:00   Israel_active   2306
     2020-03-25 20:00:00   Israel_cases    2369
     2020-03-25 20:00:00   Israel_casestoday 439
     2020-03-25 20:00:00   Israel_cpm      274
     2020-03-25 20:00:00   Israel_critical 37
     2020-03-25 20:00:00   Israel_deaths   5
     2020-03-25 20:00:00   Israel_deathstoday 2
     2020-03-25 20:00:00   Israel_recovered 58
     2020-03-25 20:00:00   Italy_active    57521
     2020-03-25 20:00:00   Italy_cases     74386
     2020-03-25 20:00:00   Italy_casestoday 5210
     2020-03-25 20:00:00   Italy_cpm       1230
     2020-03-25 20:00:00   Italy_critical  3489
     2020-03-25 20:00:00   Italy_deaths    7503
     2020-03-25 20:00:00   Italy_deathstoday 683
     2020-03-25 20:00:00   Italy_recovered 9362
     2020-03-25 20:00:00   Spain_active    38809
     2020-03-25 20:00:00   Spain_cases     47610
     2020-03-25 20:00:00   Spain_casestoday 5552
     2020-03-25 20:00:00   Spain_cpm       1018
     2020-03-25 20:00:00   Spain_critical  2636
     2020-03-25 20:00:00   Spain_deaths    3434
     2020-03-25 20:00:00   Spain_deathstoday 443
     2020-03-25 20:00:00   Spain_recovered 5367
     2020-03-25 20:00:00   UK_active       7694
     2020-03-25 20:00:00   UK_cases        8264
     2020-03-25 20:00:00   UK_casestoday   187
     2020-03-25 20:00:00   UK_cpm          122
     2020-03-25 20:00:00   UK_critical     20
     2020-03-25 20:00:00   UK_deaths       435
     2020-03-25 20:00:00   UK_deathstoday  13
     2020-03-25 20:00:00   UK_recovered    135
     2020-03-25 20:00:00   USA_active      61238
     2020-03-25 20:00:00   USA_cases       62505
     2020-03-25 20:00:00   USA_casestoday  7649
     2020-03-25 20:00:00   USA_cpm         189
     2020-03-25 20:00:00   USA_critical    1382
     2020-03-25 20:00:00   USA_deaths      880
     2020-03-25 20:00:00   USA_deathstoday 100
     2020-03-25 20:00:00   USA_recovered   387
Attributes:
   interval   */30 * * * *
   readingList multi(jsonPath("\$.[?(\@.country in ['Austria', 'Germany', 'Italy', 'Spain', 'France', 'Israel', 'UK', 'USA'])]"), concat(property('country'), '_cases'), property('cases'));
multi(jsonPath("\$.[?(\@.country in ['Austria', 'Germany', 'Italy', 'Spain', 'France', 'Israel', 'UK', 'USA'])]"), concat(property('country'), '_casestoday'), property('todayCases'));
multi(jsonPath("\$.[?(\@.country in ['Austria', 'Germany', 'Italy', 'Spain', 'France', 'Israel', 'UK', 'USA'])]"), concat(property('country'), '_active'), property('active'));
multi(jsonPath("\$.[?(\@.country in ['Austria', 'Germany', 'Italy', 'Spain', 'France', 'Israel', 'UK', 'USA'])]"), concat(property('country'), '_deaths'), property('deaths'));
multi(jsonPath("\$.[?(\@.country in ['Austria', 'Germany', 'Italy', 'Spain', 'France', 'Israel', 'UK', 'USA'])]"), concat(property('country'), '_deathstoday'), property('todayDeaths'));
multi(jsonPath("\$.[?(\@.country in ['Austria', 'Germany', 'Italy', 'Spain', 'France', 'Israel', 'UK', 'USA'])]"), concat(property('country'), '_recovered'), property('recovered'));
multi(jsonPath("\$.[?(\@.country in ['Austria', 'Germany', 'Italy', 'Spain', 'France', 'Israel', 'UK', 'USA'])]"), concat(property('country'), '_critical'), property('critical'));
multi(jsonPath("\$.[?(\@.country in ['Austria', 'Germany', 'Italy', 'Spain', 'France', 'Israel', 'UK', 'USA'])]"), concat(property('country'), '_cpm'), property('casesPerOneMillion'));
   room       Info
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: herrmannj am 25 März 2020, 20:56:39
So, dann mal der Reihe nach ;)

RKI: ich weiß nicht was die rauchen um so 'n JSON zum machen. (Wobei es sehr gut ist, dass die die Daten bereitstellen)
Der JSON ist gleich dreifach spannend, ein sehr guter TestCase. Fix im svn, ab morgen per update, rev 21515

Unten das list zum device mit 2 Ausdrücken (einer davon auskommentiert).

#1: alle Fallzahlen. Der kann jetzt für andere Felder (macht nur für faelle_100000_EW und Death Sinn) multipliziert werden. Wenn es nur die Fallzahlen sind kann man concat weglassen.
readingList multi(jsonPath('$.features[*]'), concat(property('attributes.LAN_ew_GEN'),'_cases'), property('attributes.Fallzahl'));

#2 mit Filter. Weil beim Filter die Länder (String) in ein Hochkomma müssen, muss der gesamte Ausdruck in doppelte Hochkommas und daher müssen @ und $ escaped werden. Das @Andy: das war bei Dir nicht aber daran lags auch nicht. Nur Hinweis. Wenn jetzt nur ein Land angezeigt werden soll würde anstelle des 'in' auch " == 'Hamburg'" gehen. Groß- Kleinschreibung macht einen Unterschied!
multi(jsonPath("\$.features[?(\@.attributes.LAN_ew_GEN in ['Hamburg', 'Berlin', 'Bremen'])]"), property('attributes.LAN_ew_GEN'), property('attributes.Fallzahl'));

Läuft also soweit. Bis auf... wieder mal Sonderzeichen Murks. :( Das wird erfahrungsgemäß hässlich ... Aber: So weit. so gut

Internals:
   API_LAST_RES 1585164937.82149
   API__LAST_MSG 200
   DEF        https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/Coronaf%C3%A4lle_in_den_Bundesl%C3%A4ndern/FeatureServer/0/query?where=1%3D1&outFields=LAN_ew_GEN,Fallzahl,Aktualisierung,faelle_100000_EW,Death&returnGeometry=false&outSR=4326&f=json
   FUUID      5e7b4174-f33f-a6e8-dea1-1ac51dcf4db92252
   NAME       rki
   NEXT       2020-03-25 21:00:00
   NR         28
   NTFY_ORDER 50-rki
   SOURCE     https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/Coronaf%C3%A4lle_in_den_Bundesl%C3%A4ndern/FeatureServer/0/query?where=1%3D1&outFields=LAN_ew_GEN,Fallzahl,Aktualisierung,faelle_100000_EW,Death&returnGeometry=false&outSR=4326&f=json (200)
   STATE      ???
   SVN        21504 2020-03-24 22:27:59 UTC
   TYPE       JsonMod
   CONFIG:
     IN_REQUEST 0
     SOURCE     https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/Coronaf%C3%A4lle_in_den_Bundesl%C3%A4ndern/FeatureServer/0/query?where=1%3D1&outFields=LAN_ew_GEN,Fallzahl,Aktualisierung,faelle_100000_EW,Death&returnGeometry=false&outSR=4326&f=json
     SECRET:
   OLDREADINGS:
   READINGS:
     2020-03-25 20:35:37   Baden-W�rttemberg_cases 6069
     2020-03-25 20:35:37   Bayern_cases    6558
     2020-03-25 20:35:37   Berlin_cases    1428
     2020-03-25 20:35:37   Brandenburg_cases 429
     2020-03-25 20:35:37   Bremen_cases    200
     2020-03-25 20:35:37   Hamburg_cases   1262
     2020-03-25 20:35:37   Hessen_cases    1754
     2020-03-25 20:35:37   Mecklenburg-Vorpommern_cases 218
     2020-03-25 20:35:37   Niedersachsen_cases 2140
     2020-03-25 20:35:37   Nordrhein-Westfalen_cases 7197
     2020-03-25 20:35:37   Rheinland-Pfalz_cases 1591
     2020-03-25 20:35:37   Saarland_cases  403
     2020-03-25 20:35:37   Sachsen-Anhalt_cases 375
     2020-03-25 20:35:37   Sachsen_cases   959
     2020-03-25 20:35:37   Schleswig-Holstein_cases 577
     2020-03-25 20:35:37   Th�ringen_cases 394
Attributes:
   readingList multi(jsonPath('$.features[*]'), concat(property('attributes.LAN_ew_GEN'),'_cases'), property('attributes.Fallzahl'));
#multi(jsonPath("\$.features[?(\@.attributes.LAN_ew_GEN in ['Hamburg', 'Berlin', 'Bremen'])]"), property('attributes.LAN_ew_GEN'), property('attributes.Fallzahl'));
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: herrmannj am 25 März 2020, 21:00:35
Zitat von: Jamo am 25 März 2020, 20:07:37
Hallo Hermann,
Das hat mit dem Shutdown/restart aber nichts zu tun. Anbei zwei listings, einmal um 19:44 mit den entsprechenden readings "_yesterday", und dann um 20:00 nach dem nächsten automatischen Update. Alle "_yesterday" readings sind verschwunden.

Jo, Thnx. Doch hat mit shutdown/restart was zu tun, nur anders als Du denkst ;)

Wie bekommst Du denn die readings dazu ?
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: Jamo am 25 März 2020, 21:11:07
Hallo Herrmann,
ZitatWie bekommst Du denn die readings dazu ?

Ich habe eine Sub "myCoronaStoreOld", die ich um 23:59 anstosse, und die die heutigen Werte nach "_yesterday" kopiert.

Um das ganze dann als Tabelle in FHEMWEB darzustellen, gibts die "sub CoronaStateFormat2($name)" die aus dem ganzen eine HTML tabelle generiert.
Sieht dann so wie im Bild aus. Die Tabelle stimmt natürlich nicht, weil wie gesagt die Readings überschrieben werden.

Das "attr stateformat CoronaStateFormat2($name)" hatte ich im vorherigen listing weggelassen, war ja auch nicht von Bedeutung. Ausserdem habe ich im vergleich zu vorher, auch schon das array der Länderliste erweitert (will sagen passst nicht mehr zu der readinglist von den vorherigen listings.

my @countryList  = ("Italy", "USA", "Spain", "Germany", "France", "Switzerland", "UK", "Austria", "Sweden", "Israel", "Russia");


sub myCoronaStoreOld () {
  my $name2 = "coronaSpread";
  for my $countries (@countryList) {
    my $CasesAll      = ReadingsNum($name2, $countries."_cases",0);
    my $CasesTdy      = ReadingsNum($name2, $countries."_casestoday",0);
    my $DeathTdy      = ReadingsNum($name2, $countries."_deathstoday",0);
    my $readingAllYtd = $countries."_casesyesterday";
    my $readingNewYtd = $countries."_casesnewyesterday";
    my $readingDthYtd = $countries."_deathsyesterday";
    fhem ("setreading $name2 $readingAllYtd $CasesAll;setreading $name2 $readingNewYtd $CasesTdy;setreading $name2 $readingDthYtd $DeathTdy");
  }
}


sub CoronaStateFormat2($) {
  my ($name) = @_;
  my $sub    = "CoronaStateFormat";
  my $state  = "<style type=\"text/css\">                                                                                                                                           
</style>                                                                                                                                                                             
<table width=\"100\" border=\"1\">                                                                                                                                                   
  <tr>
    <th align=\"left\">Land  </th>
    <th style=\"text-align:right\"> Cases</th>
    <th style=\"text-align:right\"> Old</th>
    <th style=\"text-align:right\"> NewTdy</th>
    <th style=\"text-align:right\"> NewYdy</th>
    <th style=\"text-align:right\"> Crit</th>
    <th style=\"text-align:right\"> Recov</th>
    <th style=\"text-align:right\"> Growth</th>
    <th style=\"text-align:right\"> Death</th>
    <th style=\"text-align:right\"> NewTdy</th>
    <th style=\"text-align:right\"> NewYtd</th>
    <th style=\"text-align:right\"> Rate</th>
  </tr>";
    #print("@CCList\n");
    for my $CC (@countryList) {
        #print("$CC\n");
        my $CasesAll       = ReadingsNum($name, $CC."_cases",1);
        my $CasesNew       = ReadingsNum($name, $CC."_casestoday",0);
        my $CasesNewOld    = ReadingsNum($name, $CC."_casesnewyesterday",0);
        my $Casescrt       = ReadingsNum($name, $CC."_critical",0);
        my $DeathAll       = ReadingsNum($name, $CC."_deaths",0);
        my $DeathNew       = ReadingsNum($name, $CC."_deathstoday",0);
        my $DeathNewOld    = ReadingsNum($name, $CC."_deathsyesterday",0);
        my $Recovered      = ReadingsNum($name, $CC."_recovered",0);
        my $CasesAllOld    = ReadingsNum($name, $CC."_casesyesterday",1);
        my $CasesPct       = (($CasesAll/$CasesAllOld)-1)*100;
        my $DeathPct       = ($DeathAll/$CasesAll)*100;
        my $DeathRte       = sprintf("%.1f"."%",$DeathPct);
        my $CasesRte       = sprintf("%.1f"."%",$CasesPct);
        #Log 3, "[$sub] CasesAlln=$CasesAlln, CasesAllOld=CasesAllOld, CasesRte=$CasesRte";
        $state = $state . "<tr>
    <td align=\"left\">$CC</td>
    <td align=\"right\"> $CasesAll</td>
    <td align=\"right\"> $CasesAllOld</td>
    <td align=\"right\"> $CasesNew</td>
    <td align=\"right\"> $CasesNewOld</td>
    <td align=\"right\"> $Casescrt</td>
    <td align=\"right\"> $Recovered</td>
    <td align=\"right\"> $CasesRte</td>
    <td align=\"right\"> $DeathAll</td>
    <td align=\"right\"> $DeathNew</td>
    <td align=\"right\"> $DeathNewOld</td>
    <td align=\"right\"> $DeathRte</td>
  </tr>"

    }
    $state = $state ."</table>                                                                                                                                                       
      <span ></a></span>";

    return $state;

}

Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: herrmannj am 25 März 2020, 21:30:52
mit setreading also. Ich hab mir das so gedacht aber hilft ja auch mal drüber zu sprechen. :) 

Ich muss da mal drüber nachdenken. Klar kann ich mir merken welche readings ich setze, ergo auch löschen kann.
Problem: ich bekomme die Info nicht über einen shutdown/restart gerettet. Beim restart schreibt fhem alle ("Deine" und "Meine") readings via setreading in das device zurück und ab da ist alles gemischt.

Was mir dazu einfällt wäre readings per regex vom löschen auszunehmen oder das per attribut ganz optional zu machen. Ist aber beides eher suboptimal .. readings sind halt eigentlich nicht als "user-storage" vorgesehen. Kannste das nicht anders lösen?

edit. Wenn Du das eh schon ausgelagert hast - schreib die Daten doch in einen dummy und führe die beim table machen wieder zusammen. Ginge doch, oder?
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: Jamo am 25 März 2020, 21:46:18
edit. Wenn Du das eh schon ausgelagert hast - schreib die Daten doch in einen dummy und führe die beim table machen wieder zusammen. Ginge doch, oder?

Yep, das kann ich machen, kein Problem. Aber hat mich halt gewundert, beim normalen HTTPMOD modul überleben meine eigene readings (wie auch eigentlich bei allen anderen Modulen) jeden shutdown/restart. Und man hat halt gerne alles in einem Modul.

Und dann muss ich alle meine subs anpassen  :(  :)

PS: Habs jetzt in mein anderes HTTPMOD device geschrieben, funktioniert erstmal.
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: herrmannj am 25 März 2020, 21:58:23
ja, verständlich. Aber das ist eher "form follows function", normalerweise gibts ja auch für einen Autor keinen Grund readings zu löschen. Hier ist das anders weil die Listen (im JSON) wachsen oder schrumpfen. Wenn ich die nicht lösche (n lasse) dann bleiben alte readings bis zum st Nimmerleinstag im device. Siehr Metar und Wolken schichten. Das sind 1..3. Strahlend blauer Himmel aber FHEM meldet dicke Suppe. ;) Daher halt hier angebracht
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: Andy89 am 25 März 2020, 22:05:24
wäre es vielleicht sinnvoll ein Attribut anzulegen, was der User selbst pflegen kann/muss, zB userReadingList. Alle Komma-getrennten Werte der userReadingList werden von dir einfach nicht gelöscht. So ist der User zum Teil selbst verantwortlich, wenn etwas für immer da bleibt?
Ich habe nämlich auch gerne alle zusammengehörenden Daten in einem Device - vor allem, wenn sie dann noch in die Datenbank geschrieben werden sollen.
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: TomLee am 25 März 2020, 22:10:06
Zitat...(wie auch eigentlich bei allen anderen Modulen)...

Einfach mal so als Mitlesender und ohne genau zu wissen was die Hintergründe sind, hast du mal ausprobiert ob bei einem AT (https://forum.fhem.de/index.php/topic,109430.msg1034185.html#msg1034185) deine alten Readings erhalten bleiben.

Gruß

Thomas
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: Jamo am 25 März 2020, 22:11:06
ZitatIch habe nämlich auch gerne alle zusammengehörenden Daten in einem Device - vor allem, wenn sie dann noch in die Datenbank geschrieben werden sollen.
stimmt, einen dblog kann man dann schlecht machen wenn man die Readings in verschiedenen Devices hat. Wie macht HTTPMOD das denn? Da muss es doch das gleiche Problem geben... Und der user ist ja selber verantwortlich, wenn seine eigenen Readings stehenbleiben und er darum dicke Suppe sieht. Das die Modulreadings gelöscht & neu angelegt werden, verstehe ich ja.
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: herrmannj am 25 März 2020, 22:18:49
Zitat von: Andy89 am 25 März 2020, 22:05:24
wäre es vielleicht sinnvoll ein Attribut anzulegen, was der User selbst pflegen kann/muss, zB userReadingList. Alle Komma-getrennten Werte der userReadingList werden von dir einfach nicht gelöscht. So ist der User zum Teil selbst verantwortlich, wenn etwas für immer da bleibt?
Ich habe nämlich auch gerne alle zusammengehörenden Daten in einem Device - vor allem, wenn sie dann noch in die Datenbank geschrieben werden sollen.
ja, das wäre quasi die regex variante. So richtig glücklich macht mich der Gedanke aber nicht.
ZitatWas mir dazu einfällt wäre readings per regex vom löschen auszunehmen oder das per attribut ganz optional zu machen. Ist aber beides eher suboptimal .. readings sind halt eigentlich nicht als "user-storage" vorgesehen. Kannste das nicht anders lösen?
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: Andy89 am 25 März 2020, 22:21:28
Wie löst du sowas denn, wenn du die readings auch loggen willst?
Oder nutzt du dann dafür Datenbankabfragen? Ich meine, mit grafana wäre das sicherlich lösbar, mit dem dblog und den svg-Plots eher schwieriger (zumindest für mich)
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: herrmannj am 25 März 2020, 22:32:32
war die Frage an mich?
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: Andy89 am 25 März 2020, 22:35:22
Ja :)
Userreadings fallen doch eigentlich in die gleiche Kategorie, wie das Problem mit den Vortageszahlen jetzt, oder nicht?


Gesendet von iPhone mit Tapatalk
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: herrmannj am 25 März 2020, 22:46:12
ich steh gerade auf dem Schlauch. Loggen, notify usw: einfach regex anlegen und dann passt das. Übersehe ich was?
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: herrmannj am 25 März 2020, 23:34:15
Umlaute erledigt. Das hatte noch einen Rattenschwanz weil die automatisch erzeugten reading namen auf der einen Seite den fhem rules entsprehcen müsen (a-zA_Z0-9 usw), im JSON aber auch Hindu sein kann. Aus "Baden-Württemberg" wird daher "Baden-Wurttemberg", das RKI Beispiel ist damit komplett in Ordnung.
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: herrmannj am 26 März 2020, 00:17:59
Zitat von: Jamo am 25 März 2020, 11:39:11
Hallo Hermann,
danke für das klasse Modul. Ich habe mir damit sofort eine eigene Tabelle eingerichtet,
mir ist aber aufgefallen, das angelegte eigene readings mit jedem Lauf wieder gelöscht werden. Ich wollte mir eingene readings anlegen, wo ich mir die 'neuen' Coronafälle für gestern und vorgestern in einem Reading merke.
Aber es wird alles gelöscht und wieder neu angelegt.
Kann man evtl auch nur die vom Modul erzeugten Readings neu anlegen?

Danke, und bleib gesund!
Done, rev 21517. UserReadings sollten damit ab jetzt bestehen bleiben. Bitte testen und berichten.
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: TWART016 am 26 März 2020, 00:22:53
Gibt es eine Möglichkeit herauszufinden von wann die Daten sind, also der Zeitstempel der Daten?
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: herrmannj am 26 März 2020, 00:25:25
rki hat einen Zeitstempel drin.
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: Hauswart am 26 März 2020, 08:44:52
Zitat von: herrmannj am 25 März 2020, 20:56:39
So, dann mal der Reihe nach ;)

RKI: ich weiß nicht was die rauchen um so 'n JSON zum machen. (Wobei es sehr gut ist, dass die die Daten bereitstellen)
Der JSON ist gleich dreifach spannend, ein sehr guter TestCase. Fix im svn, ab morgen per update, rev 21515
[...]

Danke. Mein List nun so aus:



Internals: API_LAST_RES 1585208602.29452 API__LAST_MSG 200 DEF        https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/Coronaf%C3%A4lle_in_den_Bundesl%C3%A4ndern/FeatureServer/0/query?where=1%3D1&outFields=LAN_ew_GEN,Fallzahl,Aktualisierung,faelle_100000_EW,Death&outSR=4326&f=json FUUID      5e7b0e56-f33f-9177-bee2-7cc8eb4143a27a56 NAME       corona NEXT       2020-03-26 09:00:00 NR         320 NTFY_ORDER 50-corona SOURCE     https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/Coronaf%C3%A4lle_in_den_Bundesl%C3%A4ndern/FeatureServer/0/query?where=1%3D1&outFields=LAN_ew_GEN,Fallzahl,Aktualisierung,faelle_100000_EW,Death&outSR=4326&f=json (200) STATE      ??? SVN        21517 2020-03-25 23:14:35 UTC TYPE       JsonMod CONFIG: IN_REQUEST 0 SOURCE     https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/Coronaf%C3%A4lle_in_den_Bundesl%C3%A4ndern/FeatureServer/0/query?where=1%3D1&outFields=LAN_ew_GEN,Fallzahl,Aktualisierung,faelle_100000_EW,Death&outSR=4326&f=json SECRET: OLDREADINGS: READINGS: 2020-03-26 08:43:50   Baden-Wurttemberg_aktualisierung 1585177200000 2020-03-26 08:43:50   Baden-Wurttemberg_death 56 2020-03-26 08:43:50   Baden-Wurttemberg_faelle_100000_EW 66.0683952582795 2020-03-26 08:43:50   Baden-Wurttemberg_fallzahl 7283 2020-03-26 08:43:50   Bayern_aktualisierung 1585177200000 2020-03-26 08:43:50   Bayern_death    47 2020-03-26 08:43:50   Bayern_faelle_100000_EW 61.4978421512812 2020-03-26 08:43:50   Bayern_fallzahl 7993 2020-03-26 08:43:50   Berlin_aktualisierung 1585177200000 2020-03-26 08:43:50   Berlin_death    4 2020-03-26 08:43:50   Berlin_faelle_100000_EW 45.8282078707733 2020-03-26 08:43:50   Berlin_fallzahl 1656 2020-03-26 08:43:50   Brandenburg_aktualisierung 1585177200000 2020-03-26 08:43:50   Brandenburg_death 1 2020-03-26 08:43:50   Brandenburg_faelle_100000_EW 19.0492164661906 2020-03-26 08:43:50   Brandenburg_fallzahl 477 2020-03-26 08:43:50   Bremen_aktualisierung 1585177200000 2020-03-26 08:43:50   Bremen_death    1 2020-03-26 08:43:50   Bremen_faelle_100000_EW 30.9823914294776 2020-03-26 08:43:50   Bremen_fallzahl 211 2020-03-26 08:43:50   Hamburg_aktualisierung 1585177200000 2020-03-26 08:43:50   Hamburg_death   0 2020-03-26 08:43:50   Hamburg_faelle_100000_EW 69.1036303168825 2020-03-26 08:43:50   Hamburg_fallzahl 1265 2020-03-26 08:43:50   Hessen_aktualisierung 1585177200000 2020-03-26 08:43:50   Hessen_death    6 2020-03-26 08:43:50   Hessen_faelle_100000_EW 34.5492468520463 2020-03-26 08:43:50   Hessen_fallzahl 2157 2020-03-26 08:43:50   Mecklenburg-Vorpommern_aktualisierung 1585177200000 2020-03-26 08:43:50   Mecklenburg-Vorpommern_death 0 2020-03-26 08:43:50   Mecklenburg-Vorpommern_faelle_100000_EW 15.1447534291384 2020-03-26 08:43:50   Mecklenburg-Vorpommern_fallzahl 244 2020-03-26 08:43:50   Niedersachsen_aktualisierung 1585177200000 2020-03-26 08:43:50   Niedersachsen_death 8 2020-03-26 08:43:50   Niedersachsen_faelle_100000_EW 29.4746492271852 2020-03-26 08:43:50   Niedersachsen_fallzahl 2347 2020-03-26 08:43:50   Nordrhein-Westfalen_aktualisierung 1585177200000 2020-03-26 08:43:50   Nordrhein-Westfalen_death 53 2020-03-26 08:43:50   Nordrhein-Westfalen_faelle_100000_EW 44.2381683835103 2020-03-26 08:43:50   Nordrhein-Westfalen_fallzahl 7924 2020-03-26 08:43:50   Rheinland-Pfalz_aktualisierung 1585177200000 2020-03-26 08:43:50   Rheinland-Pfalz_death 6 2020-03-26 08:43:50   Rheinland-Pfalz_faelle_100000_EW 44.5788683889919 2020-03-26 08:43:50   Rheinland-Pfalz_fallzahl 1816 2020-03-26 08:43:50   Saarland_aktualisierung 1585177200000 2020-03-26 08:43:50   Saarland_death  2 2020-03-26 08:43:50   Saarland_faelle_100000_EW 43.5531746039729 2020-03-26 08:43:50   Saarland_fallzahl 433 2020-03-26 08:43:50   Sachsen-Anhalt_aktualisierung 1585177200000 2020-03-26 08:43:50   Sachsen-Anhalt_death 1 2020-03-26 08:43:50   Sachsen-Anhalt_faelle_100000_EW 18.802733683568 2020-03-26 08:43:50   Sachsen-Anhalt_fallzahl 418 2020-03-26 08:43:50   Sachsen_aktualisierung 1585177200000 2020-03-26 08:43:50   Sachsen_death   7 2020-03-26 08:43:50   Sachsen_faelle_100000_EW 27.9567236778013 2020-03-26 08:43:50   Sachsen_fallzahl 1141 2020-03-26 08:43:50   Schleswig-Holstein_aktualisierung 1585177200000 2020-03-26 08:43:50   Schleswig-Holstein_death 3 2020-03-26 08:43:50   Schleswig-Holstein_faelle_100000_EW 23.3578481158522 2020-03-26 08:43:50   Schleswig-Holstein_fallzahl 675 2020-03-26 08:43:50   Thuringen_aktualisierung 1585177200000 2020-03-26 08:43:50   Thuringen_death 3 2020-03-26 08:43:50   Thuringen_faelle_100000_EW 21.7552488024154 2020-03-26 08:43:50   Thuringen_fallzahl 468 Attributes: readingList multi(jsonPath('$.features[*]'), concat(property('attributes.LAN_ew_GEN'),'_fallzahl'), property('attributes.Fallzahl')); multi(jsonPath('$.features[*]'), concat(property('attributes.LAN_ew_GEN'),'_aktualisierung'), property('attributes.Aktualisierung')); multi(jsonPath('$.features[*]'), concat(property('attributes.LAN_ew_GEN'),'_faelle_100000_EW'), property('attributes.faelle_100000_EW')); multi(jsonPath('$.features[*]'), concat(property('attributes.LAN_ew_GEN'),'_death'), property('attributes.Death'));
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: Andy89 am 26 März 2020, 08:49:18
Zitat von: herrmannj am 26 März 2020, 00:25:25
rki hat einen Zeitstempel drin.
danke es funktioniert nun =)


defmod coronaSpreadDe JsonMod https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/Coronaf%C3%A4lle_in_den_Bundesl%C3%A4ndern/FeatureServer/0/query?where=1%3D1&outFields=LAN_ew_GEN,Fallzahl,Aktualisierung,faelle_100000_EW,Death&returnGeometry=false&outSR=4326&f=json
attr coronaSpreadDe interval */10 * * * *
attr coronaSpreadDe readingList multi(jsonPath('$.features[*]'), concat(property('attributes.LAN_ew_GEN'),'_cases'), property('attributes.Fallzahl'));;\
multi(jsonPath('$.features[*]'), concat(property('attributes.LAN_ew_GEN'),'_deaths'), property('attributes.Death'));;\
multi(jsonPath('$.features[*]'), concat(property('attributes.LAN_ew_GEN'),'_lastUpdate'), property('attributes.Aktualisierung'));;\
multi(jsonPath('$.features[*]'), concat(property('attributes.LAN_ew_GEN'),'_cp100k'), property('attributes.faelle_100000_EW'));;
attr coronaSpreadDe room Status
attr coronaSpreadDe stateFormat Nordrhein-Westfalen_Death
attr coronaSpreadDe userReadings updated_human {POSIX::strftime ("%d.%m.%Y %H:%M", localtime(ReadingsVal("coronaSpreadDe","Nordrhein-Westfalen_lastUpdate",0)/1000))}

ich habe ein userreading hinzugefügt, damit man den Timestamp auch lesen kann. Nachher muss ich mich noch kurz googlen, wie ich täglich um 5 nach 0 die Daten abrufe. Ich glaube, dass das RKI, die nur einmal am Tag bereitstellt.

Hier noch meine Welt Zahlen:
defmod coronaSpreadWorld JsonMod https://corona.lmao.ninja/all
attr coronaSpreadWorld event-on-change-reading .*
attr coronaSpreadWorld interval */10 * * * *
attr coronaSpreadWorld readingList single(jsonPathf('$.deaths', '%s'), 'world_deaths', 'N/A');;\
single(jsonPathf('$.cases', '%s'), 'world_cases', 'N/A');;\
single(jsonPathf('$.recovered', '%s'), 'world_recovered', 'N/A');;\
single(jsonPathf('$.updated', '%s'), 'world_updated', 'N/A');;
attr coronaSpreadWorld room Status
attr coronaSpreadWorld userReadings updated_human  {setlocale(LC_TIME,"de_DE.utf8");; POSIX::strftime ("%a %d.%m.%Y %H:%M", localtime(ReadingsVal("coronaSpreadWorld","world_updated",0)/1000))}

Diese Daten werden auf jeden Fall häufiger aktualisiert. Ich gaube alle 10 Minuten.

Danke für deine Bug Fixes  :) :) :)
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: Jamo am 26 März 2020, 09:07:40
ZitatDone, rev 21517. UserReadings sollten damit ab jetzt bestehen bleiben. Bitte testen und berichten.
Getested, ich berichte: UserReadings bleiben jetzt bestehen!. :)

DANKE!
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: herrmannj am 26 März 2020, 09:38:29
sehr gern!

timestamp: hatte ich gestern Abend auch geschaut. Theoretisch könnte man das auch aktuell im multi() mit machen. Das wird aber furchtbar kryptischer code den keine Sau mehr versteht. UserReadings sind da deutlich "angenehmer".

Cron: https://crontab.guru/#0_5_*_*_* (https://crontab.guru/#0_5_*_*_*)
Auf der Seite kann man fix testen. Achtung, ich habe im JsonMod Cron noch keine Wochentage implementiert. (Nicht wundern. ...falls  ;) )
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: Dracolein am 26 März 2020, 09:43:15
Zitat von: Andy89 am 26 März 2020, 08:49:18

defmod coronaSpreadDe JsonMod https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/Coronaf%C3%A4lle_in_den_Bundesl%C3%A4ndern/FeatureServer/0/query?where=1%3D1&outFields=LAN_ew_GEN,Fallzahl,Aktualisierung,faelle_100000_EW,Death&returnGeometry=false&outSR=4326&f=json
attr coronaSpreadDe interval */10 * * * *
attr coronaSpreadDe readingList multi(jsonPath('$.features[*]'), concat(property('attributes.LAN_ew_GEN'),'_cases'), property('attributes.Fallzahl'));;\
multi(jsonPath('$.features[*]'), concat(property('attributes.LAN_ew_GEN'),'_deaths'), property('attributes.Death'));;\
multi(jsonPath('$.features[*]'), concat(property('attributes.LAN_ew_GEN'),'_lastUpdate'), property('attributes.Aktualisierung'));;\
multi(jsonPath('$.features[*]'), concat(property('attributes.LAN_ew_GEN'),'_cp100k'), property('attributes.faelle_100000_EW'));;
attr coronaSpreadDe room Status
attr coronaSpreadDe stateFormat Nordrhein-Westfalen_Death
attr coronaSpreadDe userReadings updated_human {POSIX::strftime ("%d.%m.%Y %H:%M", localtime(ReadingsVal("coronaSpreadDe","Nordrhein-Westfalen_lastUpdate",0)/1000))}

ich habe ein userreading hinzugefügt, damit man den Timestamp auch lesen kann. Nachher muss ich mich noch kurz googlen, wie ich täglich um 5 nach 0 die Daten abrufe. Ich glaube, dass das RKI, die nur einmal am Tag bereitstellt.

Habe ich 1:1 übernommen, funktioniert gut.

Eine Quick & Dirty Tabelle für FTUI habe ich schnell gemacht:

      <table cellpadding="0" cellspacing="0">
        <tr>
          <td width="250">
            <div class="bigger">Bundesland</div>
          </td>
          <td width="250">
            <div class="bigger">Fälle</div>
          </td>
          <td width="250">
            <div class="bigger">Fälle pro 100.000</div>
          </td>
          <td width="250">
            <div class="bigger">Verstorbene</div>
          </td>
        </tr>
        <tr>
          <td width="250">
            <div class="normal">Aktualisiert:</div>
          </td>
          <td width="250">
            <div class="normal" data-type="label" data-device="coronaSpreadDe" data-get="updated_human"></div>
          </td>
          <td width="250">
           
          </td>
          <td width="250">
           
          </td>
        </tr>
        <tr>
          <td>
            <div class="bigger">Nordrhein-Westfalen</div>
          </td>
          <td>
            <div class="bigger" data-type="label" data-device="coronaSpreadDe" data-get="Nordrhein-Westfalen_cases"></div>
          </td>
          <td>
            <div class="bigger" data-type="label" data-device="coronaSpreadDe" data-fix="1" data-get="Nordrhein-Westfalen_cp100k"></div>
          </td>
          <td>
            <div class="bigger" data-type="label" data-device="coronaSpreadDe" data-get="Nordrhein-Westfalen_deaths"></div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="bigger">Baden-Württemberg</div>
          </td>
          <td>
            <div class="bigger" data-type="label" data-device="coronaSpreadDe" data-get="Baden-Wurttemberg_cases"></div>
          </td>
          <td>
            <div class="bigger" data-type="label" data-device="coronaSpreadDe" data-fix="1" data-get="Baden-Wurttemberg_cp100k"></div>
          </td>
          <td>
            <div class="bigger" data-type="label" data-device="coronaSpreadDe" data-get="Baden-Wurttemberg_deaths"></div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="bigger">Bayern</div>
          </td>
          <td>
            <div class="bigger" data-type="label" data-device="coronaSpreadDe" data-get="Bayern_cases"></div>
          </td>
          <td>
            <div class="bigger" data-type="label" data-device="coronaSpreadDe" data-fix="1" data-get="Bayern_cp100k"></div>
          </td>
          <td>
            <div class="bigger" data-type="label" data-device="coronaSpreadDe" data-get="Bayern_deaths"></div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="bigger">Berlin</div>
          </td>
          <td>
            <div class="bigger" data-type="label" data-device="coronaSpreadDe" data-get="Berlin_cases"></div>
          </td>
          <td>
            <div class="bigger" data-type="label" data-device="coronaSpreadDe" data-fix="1" data-get="Berlin_cp100k"></div>
          </td>
          <td>
            <div class="bigger" data-type="label" data-device="coronaSpreadDe" data-get="Berlin_deaths"></div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="bigger">Brandenburg</div>
          </td>
          <td>
            <div class="bigger" data-type="label" data-device="coronaSpreadDe" data-get="Brandenburg_cases"></div>
          </td>
          <td>
            <div class="bigger" data-type="label" data-device="coronaSpreadDe" data-fix="1" data-get="Brandenburg_cp100k"></div>
          </td>
          <td>
            <div class="bigger" data-type="label" data-device="coronaSpreadDe" data-get="Brandenburg_deaths"></div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="bigger">Bremen</div>
          </td>
          <td>
            <div class="bigger" data-type="label" data-device="coronaSpreadDe" data-get="Bremen_cases"></div>
          </td>
          <td>
            <div class="bigger" data-type="label" data-device="coronaSpreadDe" data-fix="1" data-get="Bremen_cp100k"></div>
          </td>
          <td>
            <div class="bigger" data-type="label" data-device="coronaSpreadDe" data-get="Bremen_deaths"></div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="bigger">Hamburg</div>
          </td>
          <td>
            <div class="bigger" data-type="label" data-device="coronaSpreadDe" data-get="Hamburg_cases"></div>
          </td>
          <td>
            <div class="bigger" data-type="label" data-device="coronaSpreadDe" data-fix="1" data-get="Hamburg_cp100k"></div>
          </td>
          <td>
            <div class="bigger" data-type="label" data-device="coronaSpreadDe" data-get="Hamburg_deaths"></div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="bigger">Hessen</div>
          </td>
          <td>
            <div class="bigger" data-type="label" data-device="coronaSpreadDe" data-get="Hessen_cases"></div>
          </td>
          <td>
            <div class="bigger" data-type="label" data-device="coronaSpreadDe" data-fix="1" data-get="Hessen_cp100k"></div>
          </td>
          <td>
            <div class="bigger" data-type="label" data-device="coronaSpreadDe" data-get="Hessen_deaths"></div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="bigger">Mecklenburg-Vorpommern</div>
          </td>
          <td>
            <div class="bigger" data-type="label" data-device="coronaSpreadDe" data-get="Mecklenburg-Vorpommern_cases"></div>
          </td>
          <td>
            <div class="bigger" data-type="label" data-device="coronaSpreadDe" data-fix="1" data-get="Mecklenburg-Vorpommern_cp100k"></div>
          </td>
          <td>
            <div class="bigger" data-type="label" data-device="coronaSpreadDe" data-get="Mecklenburg-Vorpommern_deaths"></div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="bigger">Niedersachsen</div>
          </td>
          <td>
            <div class="bigger" data-type="label" data-device="coronaSpreadDe" data-get="Niedersachsen_cases"></div>
          </td>
          <td>
            <div class="bigger" data-type="label" data-device="coronaSpreadDe" data-fix="1" data-get="Niedersachsen_cp100k"></div>
          </td>
          <td>
            <div class="bigger" data-type="label" data-device="coronaSpreadDe" data-get="Niedersachsen_deaths"></div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="bigger">Rheinland-Pfalz</div>
          </td>
          <td>
            <div class="bigger" data-type="label" data-device="coronaSpreadDe" data-get="Rheinland-Pfalz_cases"></div>
          </td>
          <td>
            <div class="bigger" data-type="label" data-device="coronaSpreadDe" data-fix="1" data-get="Rheinland-Pfalz_cp100k"></div>
          </td>
          <td>
            <div class="bigger" data-type="label" data-device="coronaSpreadDe" data-get="Rheinland-Pfalz_deaths"></div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="bigger">Saarland</div>
          </td>
          <td>
            <div class="bigger" data-type="label" data-device="coronaSpreadDe" data-get="Saarland_cases"></div>
          </td>
          <td>
            <div class="bigger" data-type="label" data-device="coronaSpreadDe" data-fix="1" data-get="Saarland_cp100k"></div>
          </td>
          <td>
            <div class="bigger" data-type="label" data-device="coronaSpreadDe" data-get="Saarland_deaths"></div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="bigger">Sachsen-Anhalt</div>
          </td>
          <td>
            <div class="bigger" data-type="label" data-device="coronaSpreadDe" data-get="Sachsen-Anhalt_cases"></div>
          </td>
          <td>
            <div class="bigger" data-type="label" data-device="coronaSpreadDe" data-fix="1" data-get="Sachsen-Anhalt_cp100k"></div>
          </td>
          <td>
            <div class="bigger" data-type="label" data-device="coronaSpreadDe" data-get="Sachsen-Anhalt_deaths"></div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="bigger">Sachsen</div>
          </td>
          <td>
            <div class="bigger" data-type="label" data-device="coronaSpreadDe" data-get="Sachsen_cases"></div>
          </td>
          <td>
            <div class="bigger" data-type="label" data-device="coronaSpreadDe" data-fix="1" data-get="Sachsen_cp100k"></div>
          </td>
          <td>
            <div class="bigger" data-type="label" data-device="coronaSpreadDe" data-get="Sachsen_deaths"></div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="bigger">Schleswig-Holstein</div>
          </td>
          <td>
            <div class="bigger" data-type="label" data-device="coronaSpreadDe" data-get="Schleswig-Holstein_cases"></div>
          </td>
          <td>
            <div class="bigger" data-type="label" data-device="coronaSpreadDe" data-fix="1" data-get="Schleswig-Holstein_cp100k"></div>
          </td>
          <td>
            <div class="bigger" data-type="label" data-device="coronaSpreadDe" data-get="Schleswig-Holstein_deaths"></div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="bigger">Thüringen</div>
          </td>
          <td>
            <div class="bigger" data-type="label" data-device="coronaSpreadDe" data-get="Thuringen_cases"></div>
          </td>
          <td>
            <div class="bigger" data-type="label" data-device="coronaSpreadDe" data-fix="1" data-get="Thuringen_cp100k"></div>
          </td>
          <td>
            <div class="bigger" data-type="label" data-device="coronaSpreadDe" data-get="Thuringen_deaths"></div>
          </td>
        </tr>
      </table>
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: herrmannj am 26 März 2020, 09:44:26
Bild :)
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: Dracolein am 26 März 2020, 10:13:10
Sehe gerade, dass mein Log voller Einträge wie diesem ist:
Zitat
2020.03.26 06:01:00 3: IP: corona.lmao.ninja -> 104.18.36.204
2020.03.26 06:01:00 3: https://corona.lmao.ninja/countries: HTTP response code 200
2020.03.26 06:01:00 1: PERL WARNING: Useless use of reference constructor in void context at (eval 12610) line 2.
2020.03.26 06:01:00 1: PERL WARNING: Useless use of reference constructor in void context at (eval 12610) line 3.
2020.03.26 06:01:00 1: PERL WARNING: Useless use of reference constructor in void context at (eval 12610) line 4.
2020.03.26 06:01:00 1: PERL WARNING: Useless use of reference constructor in void context at (eval 12610) line 5.
2020.03.26 06:01:00 1: PERL WARNING: Useless use of reference constructor in void context at (eval 12610) line 6.

Zitat
Internals:
   API_LAST_RES 1585213801.16946
   API__LAST_MSG 200
   DEF        https://corona.lmao.ninja/countries
   FUUID      5e7b1af7-f33f-4dec-2fe1-28ef6f59dd72f647
   NAME       coronaSpread
   NEXT       2020-03-26 10:20:00
   NR         100
   NTFY_ORDER 50-coronaSpread
   SOURCE     https://corona.lmao.ninja/countries (200)
   STATE      0
   SVN        21517 2020-03-25 23:14:35 UTC
   TYPE       JsonMod
   CONFIG:
     IN_REQUEST 0
     SOURCE     https://corona.lmao.ninja/countries
     SECRET:
   READINGS:
     2020-03-26 10:10:01   China_active    3947
     2020-03-26 10:10:01   China_cases     81285
     2020-03-26 10:10:01   China_casesPerOneMillion 56
     2020-03-26 10:10:01   China_deaths    3287
     2020-03-26 10:10:01   China_recovered 74051
     2020-03-26 10:10:01   China_todayCases 67
     2020-03-26 10:10:01   China_todayDeaths 6
     2020-03-26 10:10:01   Denmark_active  1816
     2020-03-26 10:10:01   Denmark_cases   1851
     2020-03-26 10:10:01   Denmark_casesPerOneMillion 320
     2020-03-26 10:10:01   Denmark_deaths  34
     2020-03-26 10:10:01   Denmark_recovered 1
     2020-03-26 10:10:01   Denmark_todayCases 127
     2020-03-26 10:10:01   Denmark_todayDeaths 0
     2020-03-26 10:10:01   France_active   20002
     2020-03-26 10:10:01   France_cases    25233
     2020-03-26 10:10:01   France_casesPerOneMillion 387
     2020-03-26 10:10:01   France_deaths   1331
     2020-03-26 10:10:01   France_recovered 3900
     2020-03-26 10:10:01   France_todayCases 0
     2020-03-26 10:10:01   France_todayDeaths 0
     2020-03-26 10:10:01   Germany_active  33570
     2020-03-26 10:10:01   Germany_cases   37323
     2020-03-26 10:10:01   Germany_casesPerOneMillion 445
     2020-03-26 10:10:01   Germany_deaths  206
     2020-03-26 09:00:03   Germany_procent_todayDeaths 0
     2020-03-26 10:10:01   Germany_recovered 3547
     2020-03-26 10:10:01   Germany_todayCases 0
     2020-03-26 10:10:01   Germany_todayDeaths 0
     2020-03-26 10:10:01   Italy_active    57521
     2020-03-26 10:10:01   Italy_cases     74386
     2020-03-26 10:10:01   Italy_casesPerOneMillion 1
     2020-03-26 10:10:01   Italy_deaths    7503
     2020-03-26 10:10:01   Italy_recovered 9362
     2020-03-26 10:10:01   Italy_todayCases 0
     2020-03-26 10:10:01   Italy_todayDeaths 0
     2020-03-26 10:10:01   Netherlands_active 6053
     2020-03-26 10:10:01   Netherlands_cases 6412
     2020-03-26 10:10:01   Netherlands_casesPerOneMillion 374
     2020-03-26 10:10:01   Netherlands_deaths 356
     2020-03-26 10:10:01   Netherlands_recovered 3
     2020-03-26 10:10:01   Netherlands_todayCases 0
     2020-03-26 10:10:01   Netherlands_todayDeaths 0
     2020-03-26 10:10:01   Spain_active    40501
     2020-03-26 10:10:01   Spain_cases     49515
     2020-03-26 10:10:01   Spain_casesPerOneMillion 1
     2020-03-26 10:10:01   Spain_deaths    3647
     2020-03-26 10:10:01   Spain_recovered 5367
     2020-03-26 10:10:01   Spain_todayCases 0
     2020-03-26 10:10:01   Spain_todayDeaths 0
     2020-03-26 10:10:01   UK_active       8929
     2020-03-26 10:10:01   UK_cases        9529
     2020-03-26 10:10:01   UK_casesPerOneMillion 140
     2020-03-26 10:10:01   UK_deaths       465
     2020-03-26 10:10:01   UK_recovered    135
     2020-03-26 10:10:01   UK_todayCases   0
     2020-03-26 10:10:01   UK_todayDeaths  0
     2020-03-26 10:10:01   USA_active      67063
     2020-03-26 10:10:01   USA_cases       68489
     2020-03-26 10:10:01   USA_casesPerOneMillion 207
     2020-03-26 10:10:01   USA_deaths      1032
     2020-03-26 10:10:01   USA_recovered   394
     2020-03-26 10:10:01   USA_todayCases  278
     2020-03-26 10:10:01   USA_todayDeaths 5
Attributes:
   interval   */10 * * * *
   readingList multi(jsonPath("\$.[?(\@.country in ['Germany', 'China', 'Netherlands', 'Denmark', 'UK', 'Italy', 'Spain', 'France', 'USA'])]"), concat(property('country'), '_cases'), property('cases'));;\
multi(jsonPath("\$.[?(\@.country in ['Germany', 'China', 'Netherlands', 'Denmark', 'UK', 'Italy', 'Spain', 'France', 'USA'])]"), concat(property('country'), '_todayCases'), property('todayCases'));;\
multi(jsonPath("\$.[?(\@.country in ['Germany', 'China', 'Netherlands', 'Denmark', 'UK', 'Italy', 'Spain', 'France', 'USA'])]"), concat(property('country'), '_active'), property('active'));;\
multi(jsonPath("\$.[?(\@.country in ['Germany', 'China', 'Netherlands', 'Denmark', 'UK', 'Italy', 'Spain', 'France', 'USA'])]"), concat(property('country'), '_deaths'), property('deaths'));;\
multi(jsonPath("\$.[?(\@.country in ['Germany', 'China', 'Netherlands', 'Denmark', 'UK', 'Italy', 'Spain', 'France', 'USA'])]"), concat(property('country'), '_todayDeaths'), property('todayDeaths'));;\
multi(jsonPath("\$.[?(\@.country in ['Germany', 'China', 'Netherlands', 'Denmark', 'UK', 'Italy', 'Spain', 'France', 'USA'])]"), concat(property('country'), '_recovered'), property('recovered'));;\
multi(jsonPath("\$.[?(\@.country in ['Germany', 'China', 'Netherlands', 'Denmark', 'UK', 'Italy', 'Spain', 'France', 'USA'])]"), concat(property('country'), '_casesPerOneMillion'), property('casesPerOneMillion'));;
   room       News
   stateFormat Germany_procent_todayDeaths


Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: Andy89 am 26 März 2020, 10:29:47
ich habe wieder Mal ein Problem...

aber erst einmal eine Frage:
das Internal "NEXT" ist Menschen-lesbar.
Könntest du das Internal "API_LAST_RES" auch Menschen-lesbar machen? Dann würde ich und vielleicht auch andere sehen, wann das letzte Mal Daten abgerufen wurden.

Nun zu meinem Problem. Die Quelle "https://corona.lmao.ninja/countries" hat das Land Iran umbenannt. Das heißt nun:
country "Iran, Islamic Republic of"
Ich vermute, dass das Problem hier das Komma oder evtl die Leerzeichen sind.

Beste Grüße
Andy
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: yersinia am 26 März 2020, 10:46:30
Zitat von: Andy89 am 26 März 2020, 10:29:47Nun zu meinem Problem. Die Quelle "https://corona.lmao.ninja/countries" hat das Land Iran umbenannt. Das heißt nun:
country "Iran, Islamic Republic of"
Kann man auf die Country-Codes (iso2, iso3) zurückgreifen?
Zitat{"country":"China","countryInfo":{"_id":156,"lat":35,"long":105,"flag":"https://raw.githubusercontent.com/NovelCOVID/API/master/assets/flags/cn.png","iso3":"CHN","iso2":"CN"},"cases":81285,"todayCases":67,"deaths":3287,"todayDeaths":6,"recovered":74051,"active":3947,"critical":1235,"casesPerOneMillion":56,"deathsPerOneMillion":2}
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: herrmannj am 26 März 2020, 11:20:41
Jetzt wünsche ich der look down würde mich auch betreffen  :) :)

@Dracolein:
wo kommen denn die Umlaute in Deinen pic her? sind die auch als reading name? Mit der neuesten Version sollte das nicht sein. FHEM wird beim start meckern weil das dann keine gültigen readingnamen "wären".

Zu den meldungen im log: kenn ich so nicht. Vermutung: das ist das ";;\" am Ende der Einträge. Die können da weg ein ";" reicht.

@Andy89
sollte natürlich nicht. Welcher Art ist der Fehler denn? Was passiert? Fehlermeldungen?
API_LAST_RES_HUMAN kann ich machen.

@yersinia
ja, würde als workaround funktionieren. Aber ich gehe dem Fehler bei Andy nach wenn ich den Fehler verstehe.


Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: Andy89 am 26 März 2020, 11:35:57
Zitat von: herrmannj am 26 März 2020, 11:20:41
@Andy89
sollte natürlich nicht. Welcher Art ist der Fehler denn? Was passiert? Fehlermeldungen?
der Fehler ist, dass überhaupt keine Readings für "Iran, " erzeugt werden. Es beschwert sich nur das Userreading, dass es nicht durch 0 teilen kann, weil es kein Reading findet.
Hier der Auszug aus dem Log (von unten nach oben lesen):
2020.03.26 11:29:47.622 5: [coronaSpread] event:[Iran_procent_todayCases: Error evaluating coronaSpread userReading Iran_procent_todayCases: Illegal division by zero at (eval 272275) line 1.
], device:[coronaSpread]
2020.03.26 11:29:47.622 5: [coronaSpread] event:[Iran_procent_todayDeaths: Error evaluating coronaSpread userReading Iran_procent_todayDeaths: Illegal division by zero at (eval 272266) line 1.
2020.03.26 11:29:47.622 5: [coronaSpread] event:[Germany_todayDeaths: 16], device:[coronaSpread]

2020.03.26 11:29:47.619 1: Error evaluating coronaSpread userReading Iran_procent_todayCases: Illegal division by zero at (eval 272275) line 1.
2020.03.26 11:29:47.619 3: eval: {ReadingsVal("coronaSpread","Iran_todayCases","")/ReadingsVal("coronaSpread","Iran_cases","")*100}
2020.03.26 11:29:47.619 1: PERL WARNING: Argument "" isn't numeric in division (/) at (eval 272275) line 1.

2020.03.26 11:29:47.617 1: Error evaluating coronaSpread userReading Iran_procent_todayDeaths: Illegal division by zero at (eval 272266) line 1.
2020.03.26 11:29:47.617 3: eval: {ReadingsVal("coronaSpread","Iran_todayDeaths","")/ReadingsVal("coronaSpread","Iran_deaths","")*100}
2020.03.26 11:29:47.617 1: PERL WARNING: Argument "" isn't numeric in division (/) at (eval 272266) line 1.
2020.03.26 11:29:47.217 4: [coronaSpread] next request: 2020.03.26 11:31:00


Wenn ich das Device auf verbose 5 Stelle, wird mein Log eh mit allem zugemüllt, weil JsonMod scheinbar auf alles reagiert. Nochmal ein Auszug aus dem Log
2020.03.26 11:29:47.693 5: [coronaSpread] event:[UptimeSec: 220844], device:[MQTT2_Gosund004]
2020.03.26 11:29:47.693 5: [coronaSpread] event:[Time: 2020-03-26T11:29:47], device:[MQTT2_Gosund004]
2020.03.26 11:29:47.682 5: [coronaSpread] event:[state: Updated stats for: MQTT2_Gosund004], device:[statistics_Strom_Gosund]
], device:[coronaSpread]

Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: TWART016 am 26 März 2020, 11:45:26
Zitat von: Andy89 am 26 März 2020, 08:49:18
Hier noch meine Welt Zahlen:
defmod coronaSpreadWorld JsonMod https://corona.lmao.ninja/all
attr coronaSpreadWorld event-on-change-reading .*
attr coronaSpreadWorld interval */10 * * * *
attr coronaSpreadWorld readingList single(jsonPathf('$.deaths', '%s'), 'world_deaths', 'N/A');;\
single(jsonPathf('$.cases', '%s'), 'world_cases', 'N/A');;\
single(jsonPathf('$.recovered', '%s'), 'world_recovered', 'N/A');;\
single(jsonPathf('$.updated', '%s'), 'world_updated', 'N/A');;
attr coronaSpreadWorld room Status
attr coronaSpreadWorld userReadings updated_human  {setlocale(LC_TIME,"de_DE.utf8");; POSIX::strftime ("%a %d.%m.%Y %H:%M", localtime(ReadingsVal("coronaSpreadWorld","world_updated",0)/1000))}

Bei mir werden hier keine Readings erstellt

defmod coronaSpreadWorld JsonMod https://corona.lmao.ninja/all
attr coronaSpreadWorld event-on-change-reading .*
attr coronaSpreadWorld interval */1 * * * *
attr coronaSpreadWorld readingList single(jsonPathf('$.deaths', '%s'), 'world_deaths', 'N/A');;\
single(jsonPathf('$.cases', '%s'), 'world_cases', 'N/A');;\
single(jsonPathf('$.recovered', '%s'), 'world_recovered', 'N/A');;\
single(jsonPathf('$.updated', '%s'), 'world_updated', 'N/A');;
attr coronaSpreadWorld userReadings updated_human  {setlocale(LC_TIME,"de_DE.utf8");; POSIX::strftime ("%a %d.%m.%Y %H:%M", localtime(ReadingsVal("coronaSpreadWorld","world_updated",0)/1000))}
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: herrmannj am 26 März 2020, 11:55:07
kannst Du mal testweise diesen Teil rausnehmen:
{ReadingsVal("coronaSpread","Iran_todayCases","")/ReadingsVal("coronaSpread","Iran_cases","")*100}
Also, wenn die das Land umbenennen dann ändert sich ja auch der Name des Readings. Das sollte problemlos funktionieren (Theorie). Der alte Name wird entfernt und das Land wird neu angelegt.

Dein ReadingsVal(... 'Iran',...) läuft dann ins nirvana. Bei default dort erst mal anstelle von "" eine 1 rein (gibt dann Division / 1). Oder | und erst mal ganz weg, weil bringt ja nix. (Das Komma im Land könnte trotzdem Probleme machen, da müsste ich dann ran. Theoretisch (tm) sollte es aber funktionieren)

Nachtrag. Ah, Iran wird auch nicht als "Iran Islamic Republic of" angelegt ? modifizier mal user reading, mal schauen was passiert. Sonst muss ich heute Abend schauen.

Nachtrag2: verbose 5 . Jo, das grenze ich mal ein.
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: Andy89 am 26 März 2020, 11:57:03
Zitat von: TWART016 am 26 März 2020, 11:45:26
Bei mir werden hier keine Readings erstellt
hast du heute schon ein FHEM Update gemacht? Das hat erst danach funktioniert.

Ich habe das Interval und die Userreadings nochmal angepasst, damit es zu den anderen Zahlen passt.
defmod coronaSpreadWorld JsonMod https://corona.lmao.ninja/all
attr coronaSpreadWorld event-on-change-reading .*
attr coronaSpreadWorld interval 1/10 * * * *
attr coronaSpreadWorld readingList single(jsonPathf('$.deaths', '%s'), 'world_deaths', 'N/A');;\
single(jsonPathf('$.cases', '%s'), 'world_cases', 'N/A');;\
single(jsonPathf('$.recovered', '%s'), 'world_recovered', 'N/A');;\
single(jsonPathf('$.updated', '%s'), 'world_updated', 'N/A');;
attr coronaSpreadWorld room Status
attr coronaSpreadWorld stateFormat Welt Fälle: world_active
attr coronaSpreadWorld userReadings updated_human  {setlocale(LC_TIME,"de_DE.utf8");; POSIX::strftime ("%Y-%m-%d %H:%M:00", localtime(ReadingsVal("coronaSpreadWorld","world_updated",0)/1000))},\
world_active {ReadingsVal("coronaSpreadWorld","world_cases",0)-ReadingsVal("coronaSpreadWorld","world_deaths",0)-ReadingsVal("coronaSpreadWorld","world_recovered",0)},\
world_casesPerOneMillion {ReadingsVal("coronaSpreadWorld","world_cases",0)/7773.452460}


Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: Andy89 am 26 März 2020, 12:02:30
Zitat von: herrmannj am 26 März 2020, 11:55:07
Nachtrag. Ah, Iran wird auch nicht als "Iran Islamic Republic of" angelegt ? modifizier mal user reading, mal schauen was passiert. Sonst muss ich heute Abend schauen.
genau. Das ist das Problem, dass das Reading nicht angelegt wird.
Das Userreading ist "mein" Problem. Wenn ich das lösche, gibt natürlich auch keinen Fehler im Log. Aber das Reading "Iran, Islamic Republic of_XXX" wird dennoch nicht angelegt. JsonMod ignoriert das einfach. Alle anderen Readings werden korrekt ausgeführt.

Ich versteh nicht, wieso die heute in ihrer API das Land umbennen mussten  ???

Nachtrag: falls du es überhaupt liest. Ich wollte gerade nochmal wegen verbose 5 nachfragen, aber das hast du ja schon in Nachtrag 2 erwähnt  ;D
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: herrmannj am 26 März 2020, 12:02:45
Noch'n Nachtrag. Klar, mindestens bei den Space im Land werde ich nochmal ran müssen. Aktuell sollten die gelöscht werden um einen ReadingNamen daraus zu generieren. Da ist es sicher besser space durch '_' zu ersetzen. Todo.
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: herrmannj am 26 März 2020, 12:04:43
Zitat von: Andy89 am 26 März 2020, 12:02:30
genau. Das ist das Problem, dass das Reading nicht angelegt wird.
Das Userreading ist "mein" Problem. Wenn ich das lösche, gibt natürlich auch keinen Fehler im Log. Aber das Reading "Iran, Islamic Republic of_XXX" wird dennoch nicht angelegt. JsonMod ignoriert das einfach. Alle anderen Readings werden korrekt ausgeführt.

Ich versteh nicht, wieso die heute in ihrer API das Land umbennen mussten  ???
ok, verstehe. Ja, das schau ich mir an. Also, ist nicht so schlimm, JsonMod soll ja als "Universal Maschine" eben auch mit den seltensten Konstellationen klar kommen, von daher ist es gut das die dass gemacht haben, dann kann ichs fixen.

Edit: Wegen der Api, die hat sich schon dutzende Male geändert. Aber das ist auch ok, gerade hier kann man das ja fix nachziehen. Ein "festes Modul" käme da garnicht hinterher. Ist halt eine "dynamische" Lage ;)

edit2: verbose. Klar ;)
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: TWART016 am 26 März 2020, 12:24:19
Zitat von: Andy89 am 26 März 2020, 11:57:03
hast du heute schon ein FHEM Update gemacht? Das hat erst danach funktioniert.

Ja, ein Update habe ich gemacht. Keine sind mehr verfügbar.
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: yersinia am 26 März 2020, 12:47:33
Zitat von: herrmannj am 26 März 2020, 11:20:41@yersinia
ja, würde als workaround funktionieren. Aber ich gehe dem Fehler bei Andy nach wenn ich den Fehler verstehe.
Hier der Workaround mit ISO3 Länderkürzel, wer weniger mag kann auch die ISO3 durch ISO2 ersetzen. Länderkürzel entsprechend abändern. es gibt ein weiteres Reading _country, welches das Land aufnimmt.
Als Eingabe für das Attribut ReadingsList:
multi(jsonPath("\$.[?(\@.['countryInfo'].['iso3'] in ['DEU', 'CHN', 'CAN', 'NLD', 'GBR', 'ITA', 'ESP', 'FRA', 'USA'])]"), concat(property('countryInfo.iso3'), '_country'), property('country'));
multi(jsonPath("\$.[?(\@.['countryInfo'].['iso3'] in ['DEU', 'CHN', 'CAN', 'NLD', 'GBR', 'ITA', 'ESP', 'FRA', 'USA'])]"), concat(property('countryInfo.iso3'), '_cases'), property('cases'));
multi(jsonPath("\$.[?(\@.['countryInfo'].['iso3'] in ['DEU', 'CHN', 'CAN', 'NLD', 'GBR', 'ITA', 'ESP', 'FRA', 'USA'])]"), concat(property('countryInfo.iso3'), '_todayCases'), property('todayCases'));
multi(jsonPath("\$.[?(\@.['countryInfo'].['iso3'] in ['DEU', 'CHN', 'CAN', 'NLD', 'GBR', 'ITA', 'ESP', 'FRA', 'USA'])]"), concat(property('countryInfo.iso3'), '_active'), property('active'));
multi(jsonPath("\$.[?(\@.['countryInfo'].['iso3'] in ['DEU', 'CHN', 'CAN', 'NLD', 'GBR', 'ITA', 'ESP', 'FRA', 'USA'])]"), concat(property('countryInfo.iso3'), '_deaths'), property('deaths'));
multi(jsonPath("\$.[?(\@.['countryInfo'].['iso3'] in ['DEU', 'CHN', 'CAN', 'NLD', 'GBR', 'ITA', 'ESP', 'FRA', 'USA'])]"), concat(property('countryInfo.iso3'), '_todayDeaths'), property('todayDeaths'));
multi(jsonPath("\$.[?(\@.['countryInfo'].['iso3'] in ['DEU', 'CHN', 'CAN', 'NLD', 'GBR', 'ITA', 'ESP', 'FRA', 'USA'])]"), concat(property('countryInfo.iso3'), '_recovered'), property('recovered'));
multi(jsonPath("\$.[?(\@.['countryInfo'].['iso3'] in ['DEU', 'CHN', 'CAN', 'NLD', 'GBR', 'ITA', 'ESP', 'FRA', 'USA'])]"), concat(property('countryInfo.iso3'), '_casesPerOneMillion'), property('casesPerOneMillion'));

oder als Raw:
attr coronaSpread readingList multi(jsonPath("\$.[?(\@.['countryInfo'].['iso3'] in ['DEU', 'CHN', 'CAN', 'NLD', 'GBR', 'ITA', 'ESP', 'FRA', 'USA'])]"), concat(property('countryInfo.iso3'), '_country'), property('country'));;\
multi(jsonPath("\$.[?(\@.['countryInfo'].['iso3'] in ['DEU', 'CHN', 'CAN', 'NLD', 'GBR', 'ITA', 'ESP', 'FRA', 'USA'])]"), concat(property('countryInfo.iso3'), '_cases'), property('cases'));;\
multi(jsonPath("\$.[?(\@.['countryInfo'].['iso3'] in ['DEU', 'CHN', 'CAN', 'NLD', 'GBR', 'ITA', 'ESP', 'FRA', 'USA'])]"), concat(property('countryInfo.iso3'), '_todayCases'), property('todayCases'));;\
multi(jsonPath("\$.[?(\@.['countryInfo'].['iso3'] in ['DEU', 'CHN', 'CAN', 'NLD', 'GBR', 'ITA', 'ESP', 'FRA', 'USA'])]"), concat(property('countryInfo.iso3'), '_active'), property('active'));;\
multi(jsonPath("\$.[?(\@.['countryInfo'].['iso3'] in ['DEU', 'CHN', 'CAN', 'NLD', 'GBR', 'ITA', 'ESP', 'FRA', 'USA'])]"), concat(property('countryInfo.iso3'), '_deaths'), property('deaths'));;\
multi(jsonPath("\$.[?(\@.['countryInfo'].['iso3'] in ['DEU', 'CHN', 'CAN', 'NLD', 'GBR', 'ITA', 'ESP', 'FRA', 'USA'])]"), concat(property('countryInfo.iso3'), '_todayDeaths'), property('todayDeaths'));;\
multi(jsonPath("\$.[?(\@.['countryInfo'].['iso3'] in ['DEU', 'CHN', 'CAN', 'NLD', 'GBR', 'ITA', 'ESP', 'FRA', 'USA'])]"), concat(property('countryInfo.iso3'), '_recovered'), property('recovered'));;\
multi(jsonPath("\$.[?(\@.['countryInfo'].['iso3'] in ['DEU', 'CHN', 'CAN', 'NLD', 'GBR', 'ITA', 'ESP', 'FRA', 'USA'])]"), concat(property('countryInfo.iso3'), '_casesPerOneMillion'), property('casesPerOneMillion'));;


Dann ist mir egal, ob es China oder PRC oder China, People Republic of ist. ;)

EDIT: ergibt Readings wie diese:
[...]
READINGS:
     2020-03-26 14:25:00   CAN_active      3188
     2020-03-26 14:25:00   CAN_cases       3409
     2020-03-26 14:25:00   CAN_casesPerOneMillion 90
     2020-03-26 14:25:00   CAN_country     Canada
     2020-03-26 14:25:00   CAN_deaths      36
     2020-03-26 14:25:00   CAN_recovered   185
     2020-03-26 14:25:00   CAN_todayCases  0
     2020-03-26 14:25:00   CAN_todayDeaths 0
     2020-03-26 14:25:00   CHN_active      3947
     2020-03-26 14:25:00   CHN_cases       81285
     2020-03-26 14:25:00   CHN_casesPerOneMillion 56
     2020-03-26 14:25:00   CHN_country     China
     2020-03-26 14:25:00   CHN_deaths      3287
     2020-03-26 14:25:00   CHN_recovered   74051
     2020-03-26 14:25:00   CHN_todayCases  67
     2020-03-26 14:25:00   CHN_todayDeaths 6
     2020-03-26 14:25:00   DEU_active      35389
     2020-03-26 14:25:00   DEU_cases       39572
     2020-03-26 14:25:00   DEU_casesPerOneMillion 472
     2020-03-26 14:25:00   DEU_country     Germany
     2020-03-26 14:25:00   DEU_deaths      224
     2020-03-26 14:25:00   DEU_recovered   3959
     2020-03-26 14:25:00   DEU_todayCases  2249
     2020-03-26 14:25:00   DEU_todayDeaths 18
[...]


ISO Codes kann man sich aus der Quelle raussuchen oder Wikipedia (https://de.wikipedia.org/wiki/ISO-3166-1-Kodierliste) bemühen.
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: fh168 am 26 März 2020, 22:27:33
Ich habe darüber 2 Blog-Beiträge geschrieben:

https://blog.moneybag.de/fhem-coronavirus-faelle-deutschland-nach-staedten-und-bundeslaender-anzeigen-lassen/

https://blog.moneybag.de/fhem-corona-faelle-coronavirus-cases-in-fhem-anzeigen/

liebe Grüsse
robin
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: herrmannj am 26 März 2020, 22:53:59
Hallo robin,

Gefällt mir. Aber schau mal den thread hier in Ruhe durch. Die hier erarbeitete Lösung ist vielseitiger, flexibler und umfangreicher.

vg
Joerg
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: Gisbert am 27 März 2020, 03:30:17
Hallo Jörg,

ich hatte gestern deine Defimition aus dem 1. Thread probiert, und das hat soweit funktioniert.

Dann habe ich die Definition erweitert (mehr Länder und weitere Abfragen), bekomme dann aber keine neuen Readings, stattdessen einen log-Eintrag.

Meine raw-Definition:

defmod coronaSpread JsonMod https://corona.lmao.ninja/countries
attr coronaSpread interval */30 * * * *
attr coronaSpread readingList multi(jsonPath("\$.[?(\@.country in ['Austria', 'Germany', 'Italy', 'Spain', 'France', UK', 'USA'])]"), concat(property('country'), '_cases'), property('cases'));;\
multi(jsonPath("\$.[?(\@.country in ['Austria', 'Germany', 'Italy', 'Spain', 'France', UK', 'USA'])]"), concat(property('country'), '_todayCases'), property('todayCases'));;\
multi(jsonPath("\$.[?(\@.country in ['Austria', 'Germany', 'Italy', 'Spain', 'France', UK', 'USA'])]"), concat(property('country'), '_active'), property('active'));;\
multi(jsonPath("\$.[?(\@.country in ['Austria', 'Germany', 'Italy', 'Spain', 'France', UK', 'USA'])]"), concat(property('country'), '_deaths'), property('deaths'));;\
multi(jsonPath("\$.[?(\@.country in ['Austria', 'Germany', 'Italy', 'Spain', 'France', UK', 'USA'])]"), concat(property('country'), '_deathstoday'), property('todayDeaths'));;\
multi(jsonPath("\$.[?(\@.country in ['Austria', 'Germany', 'Italy', 'Spain', 'France', UK', 'USA'])]"), concat(property('country'), '_recovered'), property('recovered'));;\
multi(jsonPath("\$.[?(\@.country in ['Austria', 'Germany', 'Italy', 'Spain', 'France', UK', 'USA'])]"), concat(property('country'), '_critical'), property('critical'));;\
multi(jsonPath("\$.[?(\@.country in ['Austria', 'Germany', 'Italy', 'Spain', 'France', UK', 'USA'])]"), concat(property('country'), '_cpm'), property('casesPerOneMillion'));;


Der log-Eintrag bei jeder Abfrage:
2020.03.27 03:00:00 3:  IP: corona.lmao.ninja -> 104.18.36.204
2020.03.27 03:00:00 3:  https://corona.lmao.ninja/countries: HTTP response code 200
2020.03.27 03:00:01 2:  [coronaSpread] error while evaluating readingList: unbalanced square brackets in JsonPath filter:  at .//FHEM/98_JsonMod.pm line 1276.


Kannst du schauen, ob ich ggf. was falsch verstanden habe?

Viele​ Grüße​ Gisbert​
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: herrmannj am 27 März 2020, 03:55:56
yepp. Vor UK fehlt das Hochkomma.
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: Gisbert am 27 März 2020, 04:14:50
Hallo Jörg,

wollte gerade meinen Beitrag editieren, da mir das fehlende Hochkomma bei UK auch aufgefallen war. Damit bleiben die log-Einträge jetzt aus, aber neue Readings leider auch. Ich werde das bis morgen beobachten und melde mich dann ggf.

Viele​n Dank und viele​ Grüße​
Gisbert​
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: yersinia am 27 März 2020, 09:43:57
Wer lesen kann ist im Vorteil, hier stand Mist. -.-
Bitte weiter scrollen. Danke.
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: Gisbert am 27 März 2020, 10:23:44
Hallo Jörg,

ich kriege immer noch keine updates, deshalb ein list meiner Definition.

Das Attribut interval habe ich auf 15 gesetzt, weiter oben im list steht 1. Die Definition ist über Fhem save ordnungsgemäß gespeichert.

Internals:
   API_LAST_RES 1585276980.59709
   API__LAST_MSG 200
   CFGFN     
   DEF        https://corona.lmao.ninja/countries
   FUUID      5e7cc4cb-f33f-e986-47cf-86181b0589fa719f
   NAME       coronaSpread
   NEXT       2020-03-27 10:30:00
   NR         960
   NTFY_ORDER 50-coronaSpread
   SOURCE     https://corona.lmao.ninja/countries (200)
   STATE      ???
   SVN        21517 2020-03-25 23:14:35 UTC
   TYPE       JsonMod
   CONFIG:
     IN_REQUEST 1
     SOURCE     https://corona.lmao.ninja/countries
     SECRET:
   READINGS:
     2020-03-26 17:00:01   France_active   20002
     2020-03-26 17:00:01   France_cases    25233
     2020-03-26 17:00:01   France_todayCases 0
     2020-03-26 17:00:01   Germany_active  35509
     2020-03-26 17:00:01   Germany_cases   41414
     2020-03-26 17:00:01   Germany_todayCases 4091
     2020-03-26 17:00:01   Italy_active    57521
     2020-03-26 17:00:01   Italy_cases     74386
     2020-03-26 17:00:01   Italy_todayCases 0
     2020-03-26 17:00:01   Spain_active    45037
     2020-03-26 17:00:01   Spain_cases     56197
     2020-03-26 17:00:01   Spain_todayCases 6682
     2020-03-26 17:00:01   USA_active      70772
     2020-03-26 17:00:01   USA_cases       73670
     2020-03-26 17:00:01   USA_todayCases  5459
   helper:
     bm:
       JsonMod_Attr:
         cnt        13
         dmx        -1000
         dtot       0
         dtotcnt    0
         mTS        27.03. 03:35:21
         max        0.0030360221862793
         tot        0.0192067623138428
         mAr:
           set
           coronaSpread
           interval
           */1 * * * *
       JsonMod_Define:
         cnt        1
         dmx        -1000
         dtot       0
         dtotcnt    0
         mTS        27.03. 03:43:14
         max        0.000322103500366211
         tot        0.000322103500366211
         mAr:
           HASH(0x55c6f50d7dc8)
           coronaSpread JsonMod https://corona.lmao.ninja/countries
       JsonMod_Notify:
         cnt        105662
         dmx        -1000
         dtot       0
         dtotcnt    0
         mTS        27.03. 08:35:33
         max        0.0202682018280029
         tot        25.8302681446075
         mAr:
           HASH(0x55c6f50d7dc8)
           HASH(0x55c6f20d6108)
       JsonMod_Set:
         cnt        184
         dmx        -1000
         dtot       0
         dtotcnt    0
         mTS        27.03. 03:44:53
         max        0.000125885009765625
         tot        0.00396203994750977
         mAr:
           HASH(0x55c6f50d7dc8)
           coronaSpread
           ?
Attributes:
   interval   */15 * * * *
   readingList multi(jsonPath("\$.[?(\@.country in ['Austria', 'Germany', 'Italy', 'Spain', 'France', 'UK', 'USA'])]"), concat(property('country'), '_cases'), property('cases'));
multi(jsonPath("\$.[?(\@.country in ['Austria', 'Germany', 'Italy', 'Spain', 'France', 'UK', 'USA'])]"), concat(property('country'), '_todayCases'), property('todayCases'));
multi(jsonPath("\$.[?(\@.country in ['Austria', 'Germany', 'Italy', 'Spain', 'France', 'UK', 'USA'])]"), concat(property('country'), '_active'), property('active'));
multi(jsonPath("\$.[?(\@.country in ['Austria', 'Germany', 'Italy', 'Spain', 'France', 'UK', 'USA'])]"), concat(property('country'), '_deaths'), property('deaths'));
multi(jsonPath("\$.[?(\@.country in ['Austria', 'Germany', 'Italy', 'Spain', 'France', 'UK', 'USA'])]"), concat(property('country'), '_deathstoday'), property('todayDeaths'));
multi(jsonPath("\$.[?(\@.country in ['Austria', 'Germany', 'Italy', 'Spain', 'France', 'UK', 'USA'])]"), concat(property('country'), '_recovered'), property('recovered'));
multi(jsonPath("\$.[?(\@.country in ['Austria', 'Germany', 'Italy', 'Spain', 'France', 'UK', 'USA'])]"), concat(property('country'), '_critical'), property('critical'));
multi(jsonPath("\$.[?(\@.country in ['Austria', 'Germany', 'Italy', 'Spain', 'France', 'UK', 'USA'])]"), concat(property('country'), '_cpm'), property('casesPerOneMillion'));


Wie bereits geschildert, keine log-Einträge.

Viele​ Grüße​ Gisbert​
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: Gisbert am 27 März 2020, 10:30:20
Hallo Jörg,

ein Fhem shutdown restart hat zur Lösung geführt. Ist das die richtige, bzw. beabsichtigte Vorgehensweise. Ich kenne das aus Markus' (KölnSolar) Modulen, dort muss es zwingend gemacht werden.

Viele​ Grüße​ Gisbert​
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: herrmannj am 27 März 2020, 10:44:24
wollte ich Dir vorschlagen. Nein, das ist nicht notwendig aber in Deinem List sah das ganz wild aus. Da hat Dir irgendein anderes Modul rein geschossen.
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: eurofinder am 27 März 2020, 18:12:23
Ist es auch möglich die Fallzahlen je Bundesland in einem readingsGroup darzustellen? Also alle Bundesländer alphabetisch sortiert untereinander mit den jeweiligen Zahlen in Spalten daneben? Ich komme damit irgendwie nicht klar.

Gruß und bleibt gesund
eurofinder
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: herrmannj am 27 März 2020, 23:50:40
zur readingGroup bitte einen neuen post im entsprechenden Bereich öffnen.

@Andy: Iran haben die mittlerweile wieder umbenannt. Ich konnte das aber vorher noch testen, bei mir hat es ohne Probleme funktioniert.

Für die Sonderzeichen habe ich eben die Revision 21527 ins SVN geladen, ab morgen im Update. Die Unterstüzung ist vollständig.

Im Reading Namen wird die optisch und phonetisch beste Entsprechung verwendet:

Baden-Württemberg -> Baden-Wurttemberg
Réunion -> Reunion

Das funktioniert auch mit 'Exoten' (Nordeuropäische-, Griechische Alphabete usw). Bei Hindu oder Runen gehts dann irgendwann nicht mehr weil im ASCII nichts gibt was ähnlich genug ist.

Sollte jemand, geplagt von shutdown Langeweile, testen können und wollen dann würde ich mich sehr freuen. Je exotischer der JSON desto besser.
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: Andy89 am 28 März 2020, 08:15:33
danke =) jetzt wird als Wert des Readings "Baden-Wurttemberg_name" "Baden-Württemberg" angezeigt  8) Funktioniret also bestens :)

da @yersinia die ISO Variante vorgestellt hat, habe ich meine Readings auch darauf umgebaut, um nicht alle paar Tage nachziehen zu müssen. Hat sich scheinbar jetzt schon gelohnt.

Danke für Modul  :) :) :)
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: herrmannj am 28 März 2020, 15:06:44
Moin,

hier eine weitere Möglichkeit die Zahlen des Robert Koch Instituts darzustellen (mir geht es hier immer darum den Syntax von JsonMod bekannt zu machen).

Durch die Verwendung von concat() und propertyf() (wie property aber mit format string) erzeuge ich pro Bundesland nur einzige Zeile. Damit verbinde und formatiere ich zwei unterschiedliche Felder aus dem JSON zu einem gemeinsamen reading Inhalt.
multi(jsonPath('$.features[*].attributes'), property('LAN_ew_GEN'), concat(property('Fallzahl'), propertyf('Death', '', ' (%d)')));

Screenshot im Anhand.
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: sash.sc am 29 März 2020, 11:21:49
Hast du mal deine ganze definition wo und wie du dann die funktion aufrufst und in welchem Atrribut du die setzt ?

Danke !
Gruß
Sascha

Zitat von: Jamo am 25 März 2020, 21:11:07
Hallo Herrmann,
Ich habe eine Sub "myCoronaStoreOld", die ich um 23:59 anstosse, und die die heutigen Werte nach "_yesterday" kopiert.

Um das ganze dann als Tabelle in FHEMWEB darzustellen, gibts die "sub CoronaStateFormat2($name)" die aus dem ganzen eine HTML tabelle generiert.
Sieht dann so wie im Bild aus. Die Tabelle stimmt natürlich nicht, weil wie gesagt die Readings überschrieben werden.

Das "attr stateformat CoronaStateFormat2($name)" hatte ich im vorherigen listing weggelassen, war ja auch nicht von Bedeutung. Ausserdem habe ich im vergleich zu vorher, auch schon das array der Länderliste erweitert (will sagen passst nicht mehr zu der readinglist von den vorherigen listings.

my @countryList  = ("Italy", "USA", "Spain", "Germany", "France", "Switzerland", "UK", "Austria", "Sweden", "Israel", "Russia");


sub myCoronaStoreOld () {
  my $name2 = "coronaSpread";
  for my $countries (@countryList) {
    my $CasesAll      = ReadingsNum($name2, $countries."_cases",0);
    my $CasesTdy      = ReadingsNum($name2, $countries."_casestoday",0);
    my $DeathTdy      = ReadingsNum($name2, $countries."_deathstoday",0);
    my $readingAllYtd = $countries."_casesyesterday";
    my $readingNewYtd = $countries."_casesnewyesterday";
    my $readingDthYtd = $countries."_deathsyesterday";
    fhem ("setreading $name2 $readingAllYtd $CasesAll;setreading $name2 $readingNewYtd $CasesTdy;setreading $name2 $readingDthYtd $DeathTdy");
  }
}


sub CoronaStateFormat2($) {
  my ($name) = @_;
  my $sub    = "CoronaStateFormat";
  my $state  = "<style type=\"text/css\">                                                                                                                                           
</style>                                                                                                                                                                             
<table width=\"100\" border=\"1\">                                                                                                                                                   
  <tr>
    <th align=\"left\">Land  </th>
    <th style=\"text-align:right\"> Cases</th>
    <th style=\"text-align:right\"> Old</th>
    <th style=\"text-align:right\"> NewTdy</th>
    <th style=\"text-align:right\"> NewYdy</th>
    <th style=\"text-align:right\"> Crit</th>
    <th style=\"text-align:right\"> Recov</th>
    <th style=\"text-align:right\"> Growth</th>
    <th style=\"text-align:right\"> Death</th>
    <th style=\"text-align:right\"> NewTdy</th>
    <th style=\"text-align:right\"> NewYtd</th>
    <th style=\"text-align:right\"> Rate</th>
  </tr>";
    #print("@CCList\n");
    for my $CC (@countryList) {
        #print("$CC\n");
        my $CasesAll       = ReadingsNum($name, $CC."_cases",1);
        my $CasesNew       = ReadingsNum($name, $CC."_casestoday",0);
        my $CasesNewOld    = ReadingsNum($name, $CC."_casesnewyesterday",0);
        my $Casescrt       = ReadingsNum($name, $CC."_critical",0);
        my $DeathAll       = ReadingsNum($name, $CC."_deaths",0);
        my $DeathNew       = ReadingsNum($name, $CC."_deathstoday",0);
        my $DeathNewOld    = ReadingsNum($name, $CC."_deathsyesterday",0);
        my $Recovered      = ReadingsNum($name, $CC."_recovered",0);
        my $CasesAllOld    = ReadingsNum($name, $CC."_casesyesterday",1);
        my $CasesPct       = (($CasesAll/$CasesAllOld)-1)*100;
        my $DeathPct       = ($DeathAll/$CasesAll)*100;
        my $DeathRte       = sprintf("%.1f"."%",$DeathPct);
        my $CasesRte       = sprintf("%.1f"."%",$CasesPct);
        #Log 3, "[$sub] CasesAlln=$CasesAlln, CasesAllOld=CasesAllOld, CasesRte=$CasesRte";
        $state = $state . "<tr>
    <td align=\"left\">$CC</td>
    <td align=\"right\"> $CasesAll</td>
    <td align=\"right\"> $CasesAllOld</td>
    <td align=\"right\"> $CasesNew</td>
    <td align=\"right\"> $CasesNewOld</td>
    <td align=\"right\"> $Casescrt</td>
    <td align=\"right\"> $Recovered</td>
    <td align=\"right\"> $CasesRte</td>
    <td align=\"right\"> $DeathAll</td>
    <td align=\"right\"> $DeathNew</td>
    <td align=\"right\"> $DeathNewOld</td>
    <td align=\"right\"> $DeathRte</td>
  </tr>"

    }
    $state = $state ."</table>                                                                                                                                                       
      <span ></a></span>";

    return $state;

}


Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: MadMax-FHEM am 29 März 2020, 11:35:48
Zitat von: Jamo
Ich habe eine Sub "myCoronaStoreOld", die ich um 23:59 anstosse, und die die heutigen Werte nach "_yesterday" kopiert.

Hätte ich auch so "vorgeschlagen"...
...aber so ist es "amtlich" ;)

Also ein at zum Ende des Tages ;)

Gruß, Joachim
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: Jamo am 29 März 2020, 11:43:55
ZitatHast du mal deine ganze definition wo und wie du dann die funktion aufrufst und in welchem Atrribut du die setzt ?

Aufruf der myCoronaStoreOld sub um die alten Werte zu kopierenmit einem zusätzlichen at:
defmod set_defaults_23Uhr59 at *23:59:59 {fhem ("{myCoronaStoreOld()}")}


DieCoronaStateFormat2 Sub mit der formatierung für die Tabelle wir dann im Device selber mit dem attr Stateformat gesetzt:
attr Corona stateFormat {CoronaStateFormat2($name)}
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: jnewton957 am 29 März 2020, 12:25:48
Zitat von: fh168 am 26 März 2020, 22:27:33
Ich habe darüber 2 Blog-Beiträge geschrieben:

https://blog.moneybag.de/fhem-coronavirus-faelle-deutschland-nach-staedten-und-bundeslaender-anzeigen-lassen/

https://blog.moneybag.de/fhem-corona-faelle-coronavirus-cases-in-fhem-anzeigen/

liebe Grüsse
robin

Mich würde nun als Eingrenzung natürlich genau das Thema Stadt/Landkreis interessieren.

Die Infos oben von robin gehen leider so nicht mehr. Trotzdem vielen Dank.

Wir würde denn eine Umsetzung der Landkreise aussehen ?

Danke Jörg
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: herrmannj am 29 März 2020, 12:33:55
Such und finde eine JSON Quelle wo die Daten drin sind, dann helfe ich dir bei der Umsetzung. Robert Koch vielleicht?
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: Andy89 am 29 März 2020, 12:34:17
Zitat von: jnewton957 am 29 März 2020, 12:25:48
Wir würde denn eine Umsetzung der Landkreise aussehen ?
dort habe ich relativ ausführlich beschrieben, wie ich Bundesländer integriert habe: https://forum.fhem.de/index.php/topic,109490.msg1035351.html#msg1035351 (https://forum.fhem.de/index.php/topic,109490.msg1035351.html#msg1035351)

Mittlerweile habe ich für mich zwei persönliche interesannte Landkreise integriert:
defmod coronaSpreadBnHs JsonMod https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=1%3D1&outFields=EWZ,death_rate,cases,deaths,cases_per_100k,cases_per_population,county,OBJECTID&returnGeometry=false&outSR=4326&f=json
attr coronaSpreadBnHs event-on-change-reading .*
attr coronaSpreadBnHs interval 3 0 * * *
attr coronaSpreadBnHs readingList multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['79', '86'])]"), concat(property('attributes.county'),'_name'), property('attributes.county'));;\
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['79', '86'])]"), concat(property('attributes.county'),'_cases'), property('attributes.cases'));;\
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['79', '86'])]"), concat(property('attributes.county'),'_deaths'), property('attributes.deaths'));;\
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['79', '86'])]"), concat(property('attributes.county'),'_cp100k'), (property('attributes.cases_per_100k')));;
attr coronaSpreadBnHs room Corona


Die Object IDs habe ich vorher aus der Quelle rausgesucht:
https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=1%3D1&outFields=EWZ,death_rate,cases,deaths,cases_per_100k,cases_per_population,county,OBJECTID&returnGeometry=false&outSR=4326&f=json (https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=1%3D1&outFields=EWZ,death_rate,cases,deaths,cases_per_100k,cases_per_population,county,OBJECTID&returnGeometry=false&outSR=4326&f=json)
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: jnewton957 am 29 März 2020, 13:00:32
Zitat von: Andy89 am 29 März 2020, 12:34:17
Mittlerweile habe ich für mich zwei persönliche interesannte Landkreise integriert:
defmod coronaSpreadBnHs JsonMod https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=1%3D1&outFields=EWZ,death_rate,cases,deaths,cases_per_100k,cases_per_population,county,OBJECTID&returnGeometry=false&outSR=4326&f=json
attr coronaSpreadBnHs event-on-change-reading .*
attr coronaSpreadBnHs interval 3 0 * * *
attr coronaSpreadBnHs readingList multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['79', '86'])]"), concat(property('attributes.county'),'_name'), property('attributes.county'));;\
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['79', '86'])]"), concat(property('attributes.county'),'_cases'), property('attributes.cases'));;\
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['79', '86'])]"), concat(property('attributes.county'),'_deaths'), property('attributes.deaths'));;\
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['79', '86'])]"), concat(property('attributes.county'),'_cp100k'), (property('attributes.cases_per_100k')));;
attr coronaSpreadBnHs room Corona



Danke für die schnelle Antwort und die Lösung.

Konnte das als BnSU und 79, 89 schnell anpassen.
Allerdings hat es mir mit dem defmod zuerst das System lahmgelegt, da er so wohl alle Landkreise versucht hat einzulesen.
Habe es dann in einer corona.cfg als include eingebunden

Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: Andy89 am 29 März 2020, 13:02:57
Zitat von: jnewton957 am 29 März 2020, 13:00:32
Allerdings hat es mir mit dem defmod zuerst das System lahmgelegt, da er so wohl alle Landkreise versucht hat einzulesen.
Habe es dann in einer corona.cfg als include eingebunden
ich mache sowas immer über die "Raw definition". Das gibts in jedem Device ganz unten (zumindest bei mir). Ich bin mir aber gerade nich sicher, ob man dafür etwas im global- oder Web-Device hinterlegen muss.
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: herrmannj am 29 März 2020, 13:18:46
Gib mir Mal bitte das list das 'lahm gelegt' hat
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: Gisbert am 29 März 2020, 13:49:17
Nur zur Info: ich hab die Definition über das fette + eingefügt, da wurde nichts lahmgelegt.
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: herrmannj am 29 März 2020, 13:54:51
so oder anders, da soll (und kann eigentlich) sowieso nichts lahmgelegt werden. Meine Vermutung dazu wäre auch dass das attribut dns server nicht gesetzt ist und es deswegen hing. Bevor ich das sage wollte ich das aber evaluieren und  nachstellen. Wenn die Ursache wirklich _im_ JsonMod liegt will ich die beseitigen
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: Andy89 am 29 März 2020, 13:58:11
Zitat von: Gisbert am 29 März 2020, 13:49:17
Nur zur Info: ich hab die Definition über das fette + eingefügt, da wurde nichts lahmgelegt.
was ist denn das fette "plus"?

Zitat von: herrmannj am 29 März 2020, 13:18:46
Gib mir Mal bitte das list das 'lahm gelegt' hat
das hat sich auf meine Definition der Landkreise bezogen: https://forum.fhem.de/index.php/topic,109413.msg1036195.html#msg1036195 (https://forum.fhem.de/index.php/topic,109413.msg1036195.html#msg1036195)
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: Otto123 am 29 März 2020, 14:01:17
Zitat von: Andy89 am 29 März 2020, 13:58:11
was ist denn das fette "plus"?
Siehe hier https://wiki.fhem.de/wiki/Import_von_Code_Snippets
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: Christian72D am 29 März 2020, 17:25:26
Also das "Device" aus dem ersten Beitrag habe ich angelegt, die Readings werden auch sauber erzeugt, aber wie bekomme ich aus dem ganzen denn eine schöne tabellarische Ansicht?
Da bin ich aktuell überfordert.
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: yersinia am 17 April 2020, 08:56:18
Zur Info: für alle, bei denen sich das JsonMod Device seit gestern (ohne Fehlermeldung) nicht mehr aktualisiert, der Endpoint hat sich geändert.
Zitat{"message":"This endpoint has been deprecated. Use /v2/countries instead.","docs":"http://corona.lmao.ninja/docs"}
https://corona.lmao.ninja/countries (https://corona.lmao.ninja/countries)

Aus
define coronaSpread JsonMod https://corona.lmao.ninja/countries
wird dann
define coronaSpread JsonMod https://corona.lmao.ninja/v2/countries
(https://corona.lmao.ninja/docs/)
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: Andy89 am 17 April 2020, 09:07:06
dies gilt auch für die Welt:
https://corona.lmao.ninja/v2/all

Einige userreadings können so nun auch durch die API ersetzt werden (active, critical, CasesPerMillion, TodayCases und TodayDeaths)
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: Ainadilion am 12 Mai 2020, 19:46:40
Hallo, habe mir ebenfalls diese Datei auf meine bevorzugten Kreise eingestellt, was funktioniert. Zusätzlich habe ich meine Quelle angepasst:

https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=1%3D1&outFields=OBJECTID,cases,deaths,cases_per_100k,cases_per_population,BL,BL_ID,county,cases7_per_100k,recovered,last_update,death_rate,GEN,EWZ&returnGeometry=false&outSR=4326&f=json (https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=1%3D1&outFields=OBJECTID,cases,deaths,cases_per_100k,cases_per_population,BL,BL_ID,county,cases7_per_100k,recovered,last_update,death_rate,GEN,EWZ&returnGeometry=false&outSR=4326&f=json)

Nun möchte ich die Werte für cases7_per_100k mit ausgeben, hier komme ich allerdings nicht weiter, sobald ich in readingList den entsprechenden Eintrag ergänze, passiert nichts.

multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['340', '377'])]"), concat(property('attributes.county'),'_name'), property('attributes.county'));
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['340', '377'])]"), concat(property('attributes.county'),'_cases'), property('attributes.cases'));
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['340', '377'])]"), concat(property('attributes.county'),'_deaths'), property('attributes.deaths'));
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['340', '377'])]"), concat(property('attributes.county'),'_cp100k'), (property('attributes.cases_per_100k'));
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['340', '377'])]"), concat(property('attributes.county'),'_cp7100k'), (property('attributes.cases7_per_100k')));


Gruß Ainadilion

Zitat von: Andy89 am 29 März 2020, 12:34:17
dort habe ich relativ ausführlich beschrieben, wie ich Bundesländer integriert habe: https://forum.fhem.de/index.php/topic,109490.msg1035351.html#msg1035351 (https://forum.fhem.de/index.php/topic,109490.msg1035351.html#msg1035351)

Mittlerweile habe ich für mich zwei persönliche interesannte Landkreise integriert:
defmod coronaSpreadBnHs JsonMod https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=1%3D1&outFields=EWZ,death_rate,cases,deaths,cases_per_100k,cases_per_population,county,OBJECTID&returnGeometry=false&outSR=4326&f=json
attr coronaSpreadBnHs event-on-change-reading .*
attr coronaSpreadBnHs interval 3 0 * * *
attr coronaSpreadBnHs readingList multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['79', '86'])]"), concat(property('attributes.county'),'_name'), property('attributes.county'));;\
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['79', '86'])]"), concat(property('attributes.county'),'_cases'), property('attributes.cases'));;\
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['79', '86'])]"), concat(property('attributes.county'),'_deaths'), property('attributes.deaths'));;\
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['79', '86'])]"), concat(property('attributes.county'),'_cp100k'), (property('attributes.cases_per_100k')));;
attr coronaSpreadBnHs room Corona


Die Object IDs habe ich vorher aus der Quelle rausgesucht:
https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=1%3D1&outFields=EWZ,death_rate,cases,deaths,cases_per_100k,cases_per_population,county,OBJECTID&returnGeometry=false&outSR=4326&f=json (https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=1%3D1&outFields=EWZ,death_rate,cases,deaths,cases_per_100k,cases_per_population,county,OBJECTID&returnGeometry=false&outSR=4326&f=json)
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: herrmannj am 12 Mai 2020, 20:09:02
soweit ich sehe ist die 'Klammersetzung' falsch
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: Sticks65 am 23 Mai 2020, 20:38:38
Hallo zusammen,

ich könnte Eure Hilfe gut gebrauchen...

Ich habe versucht das Thema nachzubauen, komme nun aber nun gar nicht mehr weiter.

Ich habe folgende Definitionen gemacht:
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 interval */15 * * * *
attr corona readingList multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['204', '212'])]"), concat(property('attributes.county'),'_name'), property('attributes.county'));;
attr corona room xx System

setstate corona 2020-05-23 20:18:28 _name


Die Seite wird laut Log auch sauber abgerufen HTTP response code 200
aber das Reading bleibt leer ( _name    2020-05-23 20:30:00)

Vielleicht hat jemand eine Idee, wo der Fehler liegt

Viele Grüße
Martin
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: somansch am 23 Mai 2020, 22:44:38
Zitat von: Sticks65 am 23 Mai 2020, 20:38:38
Hallo zusammen,

ich könnte Eure Hilfe gut gebrauchen...

Ich habe versucht das Thema nachzubauen, komme nun aber nun gar nicht mehr weiter.

Ich habe folgende Definitionen gemacht:
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 interval */15 * * * *
attr corona readingList multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['204', '212'])]"), concat(property('attributes.county'),'_name'), property('attributes.county'));;
attr corona room xx System

setstate corona 2020-05-23 20:18:28 _name


Die Seite wird laut Log auch sauber abgerufen HTTP response code 200
aber das Reading bleibt leer ( _name    2020-05-23 20:30:00)

Vielleicht hat jemand eine Idee, wo der Fehler liegt

Viele Grüße
Martin

Ich sehe am Ende deines defmod ein "\". Ist bei mir dort nicht...
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: Sticks65 am 24 Mai 2020, 10:26:17
Zitat von: somansch am 23 Mai 2020, 22:44:38
Ich sehe am Ende deines defmod ein "\". Ist bei mir dort nicht...

Ja, hatte sich am Ende ,,eingeschlichen"  ;)
Funktioniert aber auch ohne leider nicht

Grüße
Martin
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag 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:
attr corona readingList multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['204', '212'])]"), concat(property('attributes.OBJECTID'),'_name'), property('attributes.county'));;
Das funktioniert zumindest bei mir ganz gut.

Ich finde Readings basierend auf veränderlichen Texten immer problematisch. Eine id ist zwar weniger intuitiv, aber dafür eineindeutig.
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: Sticks65 am 24 Mai 2020, 16:40:51
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 ".
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: yersinia am 24 Mai 2020, 19:30:31
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 (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) 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
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: Sticks65 am 25 Mai 2020, 19:49:57
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 (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) 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
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: herrmannj am 25 Mai 2020, 19:55:23
ist jsonmod aktuell? -> update
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: yersinia am 25 Mai 2020, 20:47:22
wie herrmannj sagt, zeig mal deine JsonMod Version.
version JsonMod

Aktuelle Version ist
Zitat98_JsonMod.pm 21711 2020-04-17 23:29:22Z herrmannj
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: Sticks65 am 25 Mai 2020, 21:29:31

... 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?
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: yersinia am 25 Mai 2020, 21:37:02
Was spricht gegen ein komplettes Update? So hast du ein aktuelles FHEM.

Ansonsten:
update 98_JsonMod.pm
(nach commandref (https://fhem.de/commandref_DE.html#update):
Zitatupdate [-noSSL] [<fileName>|all|check|checktime|force] [http://.../controlfile]
[...]
Falls man <fileName> spezifiziert werden nur die Dateien heruntergeladen, die diesem Regexp entsprechen.
)
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: Sticks65 am 25 Mai 2020, 21:50:41
 :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
Titel: (gelöst)Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag 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?

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
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: amenomade am 27 Juni 2020, 00:56:00
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?
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: Hardy62 am 27 Juni 2020, 14:36:06
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
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: somansch am 27 Juni 2020, 15:03:38
Hallo Hardy,

versuche mal:

event-on-update-reading .*

Viele Grüße
Andreas
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: Hardy62 am 27 Juni 2020, 15:10:05
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
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: Hardy62 am 27 Juni 2020, 15:49:58
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
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: All-Ex am 29 Juni 2020, 18:11:52
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
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: herrmannj am 29 Juni 2020, 18:35:37
Nein, der jsonpath kann noch keine Aggregat Funktionen. Ist geplant aber ich bin anderweitig ausgelastet und kann keinen Termin nennen
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: yersinia am 30 Juni 2020, 08:35:04
Zitat von: All-Ex am 29 Juni 2020, 18:11:52Falls 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...
Zitat von: herrmannj am 29 Juni 2020, 18:35:37
Nein, der jsonpath kann noch keine Aggregat Funktionen. Ist geplant aber ich bin anderweitig ausgelastet und kann keinen Termin nennen
Ich habe es in die JsonMod Wunschliste (https://forum.fhem.de/index.php/topic,111489) eingetragen. ;)
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: All-Ex am 30 Juni 2020, 09:01:54
Super, Danke  :D
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: xavier am 25 September 2020, 09:38:49
Hello everybody,

I have to read the last and next to last element of an array.

I try to read this simple URL:
https://raw.githubusercontent.com/pcm-dpc/COVID-19/master/dati-json/dpc-covid19-ita-andamento-nazionale.json (https://raw.githubusercontent.com/pcm-dpc/COVID-19/master/dati-json/dpc-covid19-ita-andamento-nazionale.json)

If I use the normal JSONPath syntax:

$.[(@. length-1)].tamponi

or

$.[-1:].tamponi

I get nothing, while the syntax (for example):

$.[100].tamponi

is accepted and I get a value (the 100th element of the array).

How do I need to modify jsonPath to get a read?

This is the raw of my current code with some test reads:

Internals:
   API_LAST_RES 1601018514.07323
   API__LAST_MSG 200
   DEF        https://raw.githubusercontent.com/pcm-dpc/COVID-19/master/dati-json/dpc-covid19-ita-andamento-nazionale.json
   FUUID      5f6d12f4-f33f-ab34-7552-ffefc7e612223927
   NAME       coronaSpread
   NOTIFYDEV  global
   NR         128
   NTFY_ORDER 50-coronaSpread
   SOURCE     https://raw.githubusercontent.com/pcm-dpc/COVID-19/master/dati-json/dpc-covid19-ita-andamento-nazionale.json (200)
   STATE      ???
   SVN        22651 2020-08-23 11:25:52 UTC
   TYPE       JsonMod
   CONFIG:
     IN_REQUEST 0
     SOURCE     https://raw.githubusercontent.com/pcm-dpc/COVID-19/master/dati-json/dpc-covid19-ita-andamento-nazionale.json
   OLDREADINGS:
   READINGS:
     2020-09-25 09:21:54   data            2020-02-24T18:00:00
     2020-09-25 09:21:54   tamponi         4324
Attributes:
   interval   0 12 * * *
   readingList single(jsonPath('$..data'), 'data', 'none');
single(jsonPath('$..tamponi'), 'tamponi', 'none');
single(jsonPath('$.[-1:].tamponi), 'last_tamponi', 'none');
   room       99 System
   update-on-start 1


Finally, I apologize for my post in english with Google Translate but I write from Italy and don't know german.
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: herrmannj am 25 September 2020, 10:06:39
Hi Xavier,

I wrote the JSONPath implementation, (there was none) but it is not 100 percent feature complete (now).

The first of your two examples are some rare features, its simply not implemented (for now). Lets do it this way: I seek to implement the second syntax next (I cannot promise to do that within a minute, planned leave ahead).

$.[-1:].tamponi

does that work for you?

saluti all'Italia
Joerg
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: yersinia am 25 September 2020, 10:40:21
As interim solution, you could extract just tamponi and data with a kind of index:
multi(jsonPath('$.[*]'), concat('tamponi_', count()), property('.tamponi'));
multi(jsonPath('$.[*]'), concat('data_', count()), property('.data'));

You then may use a user reading to get the latest array (the one with the biggest index ;)).

If implemented, this should work out to get last two array elements:
multi(jsonPath('$.[-2:]'), concat('tamponi_', count()), property('.tamponi'));

Btw, For JsonPath testing I use https://jsonpath.curiousconcept.com (https://jsonpath.curiousconcept.com).

@herrmannj: I assumed you have implemented Stefan Goessners JsonPath implementation?
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: xavier am 25 September 2020, 10:43:29
Zitat von: herrmannj am 25 September 2020, 10:06:39
I wrote the JSONPath implementation, (there was none) but it is not 100 percent feature complete (now).

Wow, very fast reply!

Zitat von: herrmannj am 25 September 2020, 10:06:39I seek to implement the second syntax next (I cannot promise to do that within a minute, planned leave ahead).

$.[-1:].tamponi

Implementing this feature would be wonderful. I'm waiting.

Last minute addition: Thanks @yersinia for his suggestions. Now I try.

Best regards.
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: yersinia am 25 September 2020, 11:09:01
Regarding readings in ascending order, these readingList definition would be better (index first) imho:
multi(jsonPath('$.[*]'), concat(count(), '_tamponi'), property('.tamponi'));
multi(jsonPath('$.[*]'), concat(count(), '_data'), property('.data'));
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: herrmannj am 25 September 2020, 12:30:56
Zitat@herrmannj: I assumed you have implemented Stefan Goessners JsonPath implementation?
yes, but goessner sets the standard syntax and all implementations follow that (more or less;)). I do tests against the goessner files.
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: xavier am 28 September 2020, 12:51:07
Zitat von: yersinia am 25 September 2020, 11:09:01
Regarding readings in ascending order, these readingList definition would be better (index first) imho:
multi(jsonPath('$.[*]'), concat(count(), '_tamponi'), property('.tamponi'));
multi(jsonPath('$.[*]'), concat(count(), '_data'), property('.data'));


@yersinia: Hi, I tried your suggestion. It works, but it fills me with hundreds (!) of readings: today we got to 215.  A bit excessive, imho. :)

I can wait the herrmannj's code revision, just to have a more clean solution.

Best regards,
xavier.
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: yersinia am 28 September 2020, 12:58:34
Zitat von: xavier am 28 September 2020, 12:51:07@yersinia: Hi, I tried your suggestion. It works, but it fills me with hundreds (!) of readings: today we got to 215.  A bit excessive, imho. :)
Yes this was just an interim solution proposal.
Zitat von: yersinia am 25 September 2020, 10:40:21
As interim solution, you could extract just tamponi and data with a kind of index:
multi(jsonPath('$.[*]'), concat(count(), '_tamponi'), property('.tamponi'));
multi(jsonPath('$.[*]'), concat(count(), '_data'), property('.data'));

You then may use a user reading to get the latest array (the one with the biggest index ;)).

If implemented, this should work out to get last two array elements:
multi(jsonPath('$.[-2:]'), concat(count(), '_tamponi'), property('.tamponi'));
;)
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: xavier am 12 Oktober 2020, 23:17:01
Hi,

since the jsonMod update is still pending, I tried an intermediate solution.

Would it be possible to add the contents of $yday into the jsonPath?

I'll explain... the ideal solution would be:

$.[-1:].tamponi

but at the moment it still can't be done.

So, my alternative is to calculate how many days have passed since the beginning of the year minus a certain value and insert it into the formula. For example to get today's tampons only (12/10/2020), it works like this:

concat('$.[',230,'].tamponi')

If 230 could be calculated as $yday-55, a formula like this would work every day:

concat('$.',{$yday-55},'. tamponi')

Unfortunately I don't know enough to get a correct value from $yday.

Can someone help me?

Attached raw full code.

Internals:
   API_LAST_RES 1602537319.73396
   API__LAST_MSG 200
   DEF        https://raw.githubusercontent.com/pcm-dpc/COVID-19/master/dati-json/dpc-covid19-ita-andamento-nazionale.json
   FUUID      5f6d12f4-f33f-ab34-7552-ffefc7e612223927
   NAME       coronaSpread
   NEXT       2020-10-13 17:10:00
   NR         131
   SOURCE     https://raw.githubusercontent.com/pcm-dpc/COVID-19/master/dati-json/dpc-covid19-ita-andamento-nazionale.json (200)
   STATE      ???
   SVN        22854 2020-09-26 01:09:01 UTC
   TYPE       JsonMod
   CONFIG:
     IN_REQUEST 0
     SOURCE     https://raw.githubusercontent.com/pcm-dpc/COVID-19/master/dati-json/dpc-covid19-ita-andamento-nazionale.json
     SECRET:
   READINGS:
     2020-10-12 23:15:19   corona_index    5.41
     2020-10-12 23:15:19   data_last       2020-10-12T17:00:00
     2020-10-12 23:15:19   data_prev       2020-10-11T17:00:00
     2020-10-12 23:15:19   deceduti_diff   39
     2020-10-12 23:15:19   deceduti_last   36205
     2020-10-12 23:15:19   deceduti_prev   36166
     2020-10-12 23:15:19   nuovi_positivi_diff -837
     2020-10-12 23:15:19   nuovi_positivi_last 4619
     2020-10-12 23:15:19   nuovi_positivi_prev 5456
     2020-10-12 23:15:19   tamponi_diff    85442
     2020-10-12 23:15:19   tamponi_last    12650155
     2020-10-12 23:15:19   tamponi_prev    12564713
     2020-10-12 23:15:19   terapia_intensiva_diff 32
     2020-10-12 23:15:19   terapia_intensiva_last 452
     2020-10-12 23:15:19   terapia_intensiva_prev 420
Attributes:
   comment    286 = days from the beginning of the year
   interval   10 17 * * *
   readingList single(jsonPath(concat('$.[',286-55,'].data')), 'data_last', 'none');
single(jsonPath(concat('$.[',286-56,'].data')), 'data_prev', 'none');
single(jsonPath(concat('$.[',286-55,'].nuovi_positivi')), 'nuovi_positivi_last', 'none');
single(jsonPath(concat('$.[',286-56,'].nuovi_positivi')), 'nuovi_positivi_prev', 'none');
single(jsonPath(concat('$.[',286-55,'].deceduti')), 'deceduti_last', 'none');
single(jsonPath(concat('$.[',286-56,'].deceduti')), 'deceduti_prev', 'none');
single(jsonPath(concat('$.[',286-55,'].terapia_intensiva')), 'terapia_intensiva_last', 'none');
single(jsonPath(concat('$.[',286-56,'].terapia_intensiva')), 'terapia_intensiva_prev', 'none');
single(jsonPath(concat('$.[',286-55,'].tamponi')), 'tamponi_last', 'none');
single(jsonPath(concat('$.[',286-56,'].tamponi')), 'tamponi_prev', 'none')
   room       99 System
   update-on-start 1
   userReadings nuovi_positivi_diff {ReadingsVal("coronaSpread","nuovi_positivi_last","")-ReadingsVal("coronaSpread","nuovi_positivi_prev","")},
deceduti_diff {ReadingsVal("coronaSpread","deceduti_last","")-ReadingsVal("coronaSpread","deceduti_prev","")},
terapia_intensiva_diff {ReadingsVal("coronaSpread","terapia_intensiva_last","")-ReadingsVal("coronaSpread","terapia_intensiva_prev","")},
tamponi_diff {ReadingsVal("coronaSpread","tamponi_last","")-ReadingsVal("coronaSpread","tamponi_prev","")},
corona_index {sprintf("%.2f",(ReadingsVal("coronaSpread","nuovi_positivi_last","") * 100) / ReadingsVal("coronaSpread","tamponi_diff",""))}


Best regards,
xavier.
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: yersinia am 13 Oktober 2020, 10:01:28
Hey xavier,

Just an idea, do not know if it works: maybe it is possible when you utilize myUtils with some perl code to update Attribute readingList of the device and initiate a reload.

The myUtils German wiki entry: https://wiki.fhem.de/wiki/99_myUtils_anlegen (https://wiki.fhem.de/wiki/99_myUtils_anlegen) (within FHEM -> left hand navigation 'Edit files' -> there should be a 99_myUtils.pm editable via mouse click)
Add an own sub here to calculate day of the year (https://perldoc.perl.org/functions/localtime)
Zitat$yday is the day of the year, in the range 0..364 (or 0..365 in leap years.)
and update Attribute via fhem command like (not tested)
fhem("attr coronaSpread readingList single(jsonPath(concat('$.[',".($yday-55).",'].data')), 'data_last', 'none');");
or similar.

As said, no idea if this will work but may worth a try.
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: xavier am 14 Oktober 2020, 23:20:49
Zitat von: yersinia am 13 Oktober 2020, 10:01:28
Just an idea, do not know if it works: maybe it is possible when you utilize myUtils...[cut]

You are a genius !! :)

The solution is really simple. Thanks to your suggestions I have inserted this short code in 99_myUtils.pm:

sub yday(){
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
return $yday;
}


and slightly modified my define in fhem.cfg:

define coronaSpread JsonMod https://raw.githubusercontent.com/pcm-dpc/COVID-19/master/dati-json/dpc-covid19-ita-andamento-nazionale.json
attr coronaSpread interval 10 17 * * *
attr coronaSpread comment yday() = days from the beginning of the year
attr coronaSpread readingList single(jsonPath(concat('$.[',yday()-54,'].data')), 'data_last', 'none');;\
single(jsonPath(concat('$.[',yday()-55,'].data')), 'data_prev', 'none');;\
single(jsonPath(concat('$.[',yday()-54,'].nuovi_positivi')), 'nuovi_positivi_last', 'none');;\
single(jsonPath(concat('$.[',yday()-55,'].nuovi_positivi')), 'nuovi_positivi_prev', 'none');;\
single(jsonPath(concat('$.[',yday()-54,'].deceduti')), 'deceduti_last', 'none');;\
single(jsonPath(concat('$.[',yday()-55,'].deceduti')), 'deceduti_prev', 'none');;\
single(jsonPath(concat('$.[',yday()-54,'].terapia_intensiva')), 'terapia_intensiva_last', 'none');;\
single(jsonPath(concat('$.[',yday()-55,'].terapia_intensiva')), 'terapia_intensiva_prev', 'none');;\
single(jsonPath(concat('$.[',yday()-54,'].tamponi')), 'tamponi_last', 'none');;\
single(jsonPath(concat('$.[',yday()-55,'].tamponi')), 'tamponi_prev', 'none')
attr coronaSpread room 99 System
attr coronaSpread update-on-start 1
attr coronaSpread userReadings nuovi_positivi_diff {ReadingsVal("coronaSpread","nuovi_positivi_last","")-ReadingsVal("coronaSpread","nuovi_positivi_prev","")},\
deceduti_diff {ReadingsVal("coronaSpread","deceduti_last","")-ReadingsVal("coronaSpread","deceduti_prev","")},\
terapia_intensiva_diff {ReadingsVal("coronaSpread","terapia_intensiva_last","")-ReadingsVal("coronaSpread","terapia_intensiva_prev","")},\
tamponi_diff {ReadingsVal("coronaSpread","tamponi_last","")-ReadingsVal("coronaSpread","tamponi_prev","")},\
corona_index {sprintf("%.2f",(ReadingsVal("coronaSpread","nuovi_positivi_last","") * 100) / ReadingsVal("coronaSpread","tamponi_diff",""))}


Now until December 31st ;) I will finally be able to extract all the data I needed.

A sincere THANK YOU for your help.

Best regards,
xavier.
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: yersinia am 15 Oktober 2020, 08:30:46
Awesome, even easier than I was thinking of. :D Thanks for sharing!
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: curt am 19 Oktober 2020, 04:27:49
Zitat von: All-Ex am 29 Juni 2020, 18:11:52
Feld cases7_per_100k ...
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

Issjamalcool:
Mit BL_ID kann man die URL hacken, die 15 ist Sachsen-Anhalt. Sehr fein.

Zitat von: All-Ex am 29 Juni 2020, 18:11:52
Feld cases7_per_100k

Das Ganze wäre ja für Bund sowie eigenes Bundesland auch noch ganz schön - hat da jemand schon URLs gehackt?

Zitat von: All-Ex am 29 Juni 2020, 18:11:52
Gibt es dieses Feld auch für ein ganzes Bundesland oder für ganz Deutschland?

Ach - da fragst Du es ja selbst, @All-Ex

Ok, wie weit seid ihr?

Und - jede Art von Code-Vorschlägen für FHEM-Web sowie FTUI sind willkommen!
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: yersinia am 19 Oktober 2020, 09:32:29
Zitat von: curt am 19 Oktober 2020, 04:27:49Das Ganze wäre ja für Bund sowie eigenes Bundesland auch noch ganz schön - hat da jemand schon URLs gehackt?
Hier ein Beispiel für 2 Bundesländer, Suche geht über Text.
defmod coronaSpreadDE JsonMod https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/Coronaf%C3%A4lle_in_den_Bundesl%C3%A4ndern/FeatureServer/0/query?where=1%3D1&outFields=LAN_ew_GEN,Fallzahl,Aktualisierung,faelle_100000_EW,Death&returnGeometry=false&outSR=4326&f=json
attr coronaSpreadDE event-on-update-reading .computedReadings
attr coronaSpreadDE interval 9 */3 * * *
attr coronaSpreadDE readingList multi(jsonPath("\$.features[?(\@.attributes.LAN_ew_GEN in ['Hessen', 'Bayern'])]"), concat(count(),'_name'), property('attributes.LAN_ew_GEN'));;\
multi(jsonPath("\$.features[?(\@.attributes.LAN_ew_GEN in ['Hessen', 'Bayern'])]"), concat(count(),'_cases'), property('attributes.Fallzahl'));;\
multi(jsonPath("\$.features[?(\@.attributes.LAN_ew_GEN in ['Hessen', 'Bayern'])]"), concat(count(),'_deaths'), property('attributes.Death'));;\
multi(jsonPath("\$.features[?(\@.attributes.LAN_ew_GEN in ['Hessen', 'Bayern'])]"), concat(count(),'_lastUpdate'), property('attributes.Aktualisierung'));;
attr coronaSpreadDE 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,"0_name","-").": <font style=\"color:orange;;font-weight:bold;;\">".ReadingsVal($name,"0_cases","-")." F&auml;;lle</font>&nbsp;;&amp;;&nbsp;;";;\
$ret .= "<font style=\"color:red;;font-weight:bold;;\">".ReadingsVal($name,"0_deaths","-")." Tote</font>";;\
$ret .= "&nbsp;;(".ReadingsVal($name,"0_lastUpdatedh","-").")<br \/>";;\
$ret .= ReadingsVal($name,"1_name","-").": <font style=\"color:orange;;font-weight:bold;;\">".ReadingsVal($name,"1_cases","-")." F&auml;;lle</font>&nbsp;;&amp;;&nbsp;;";;\
$ret .= "<font style=\"color:red;;font-weight:bold;;\">".ReadingsVal($name,"1_deaths","-")." Tote</font>";;\
$ret .= "&nbsp;;(".ReadingsVal($name,"1_lastUpdatedh","-").")";;\
$ret .= "</div>";;\
return $ret;;}
attr coronaSpreadDE update-on-start 1
attr coronaSpreadDE userReadings 0_lastUpdatedh {POSIX::strftime ("%d.%m. %H:%M", localtime(ReadingsVal($name,"0_lastUpdate",0)/1000));;}, 1_lastUpdatedh {POSIX::strftime ("%d.%m. %H:%M", localtime(ReadingsVal($name,"1_lastUpdate",0)/1000));;}
attr coronaSpreadDE webCmd reread


Und noch einmal für Landkreise (via OBJECTID, 68=SK Mönchengladbach, 292=LK Weißenburg-Gunzenhausen):
defmod coronaSpreadCounties JsonMod https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=1%3D1&outFields=death_rate,cases,deaths,cases_per_100k,cases_per_population,cases7_per_100k,BL,BL_ID,county,OBJECTID&returnGeometry=false&outSR=4326&f=json
attr coronaSpreadCounties event-on-update-reading .computedReadings
attr coronaSpreadCounties interval 10 */3 * * *
attr coronaSpreadCounties readingList multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['68', '292'])]"), concat(property('attributes.OBJECTID'),'_name'), property('attributes.county'));;\
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['68', '292'])]"), concat(property('attributes.OBJECTID'),'_cases'), property('attributes.cases'));;\
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['68', '292'])]"), concat(property('attributes.OBJECTID'),'_deaths'), property('attributes.deaths'));;\
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['68', '292'])]"), concat(property('attributes.OBJECTID'),'_cases7_per_100k'), property('attributes.cases7_per_100k'));;
attr coronaSpreadCounties room CoViD-19
attr coronaSpreadCounties stateFormat { my $ret = "<div style=\"text-align: left;;\">";;\
$ret .= "last <a href=\"https://corona.rki.de\" title=\"RKI CoViD19\" rel=\"noopener noreferrer\" target=\"_blank\">RKI CoViD-19</a> check => ";;\
$ret .= POSIX::strftime("%d.%m. %H:%M",localtime(time_str2num(ReadingsTimestamp($name,".computedReadings","2000-01-01 00:00:00"))));;\
$ret .= "<br \/>";;\
$ret .= ReadingsVal($name,"68_name","-").": ";;\
$ret .= "<font style=\"font-weight:bold;;color:";;\
if(ReadingsNum($name,"68_cases7_per_100k",0) < 35) {\
$ret .= "green";;\
} elsif (ReadingsNum($name,"68_cases7_per_100k",0) < 50) {\
$ret .= "orange";;\
} else {\
$ret .= "red";;\
}\
$ret .= ";;\">".sprintf("%.1f", ReadingsNum($name,"68_cases7_per_100k",0))."</font>&nbsp;;&amp;;&nbsp;;";;\
$ret .= "<font style=\"color:orange;;\">".ReadingsVal($name,"68_cases","-")." F&auml;;lle</font>&nbsp;;&amp;;&nbsp;;";;\
$ret .= "<font style=\"color:red;;\">".ReadingsVal($name,"68_deaths","-")." Tote</font><br \/>";;\
$ret .= ReadingsVal($name,"292_name","-").": ";;\
$ret .= "<font style=\"font-weight:bold;;color:";;\
if(ReadingsNum($name,"292_cases7_per_100k",0) < 35) {\
$ret .= "green";;\
} elsif (ReadingsNum($name,"292_cases7_per_100k",0) < 50) {\
$ret .= "orange";;\
} else {\
$ret .= "red";;\
}\
$ret .= ";;\">".sprintf("%.1f", ReadingsNum($name,"292_cases7_per_100k",0))."</font>&nbsp;;&amp;;&nbsp;;";;\
$ret .= "<font style=\"color:orange;;\">".ReadingsVal($name,"292_cases","-")." F&auml;;lle</font>&nbsp;;&amp;;&nbsp;;";;\
$ret .= "<font style=\"color:red;;\">".ReadingsVal($name,"292_deaths","-")." Tote</font>";;\
$ret .= "</div>";;\
return $ret;;}
attr coronaSpreadCounties update-on-start 1
attr coronaSpreadCounties webCmd reread


Zitat von: curt am 02 Januar 1970, 21:31:47Und - jede Art von Code-Vorschlägen für FHEM-Web sowie FTUI sind willkommen!
Dieser Thread ist voll damit...
FHEMWEB -> #48 (https://forum.fhem.de/index.php/topic,109413.msg1035075.html#msg1035075), #50 (https://forum.fhem.de/index.php/topic,109413.msg1035081.html#msg1035081), #84 (https://forum.fhem.de/index.php/topic,109413.msg1035304.html#msg1035304)
FTUI -> #17 (https://forum.fhem.de/index.php/topic,109413.msg1034454.html#msg1034454), #29 (https://forum.fhem.de/index.php/topic,109413.msg1034746.html#msg1034746)
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: Gisbert am 19 Oktober 2020, 12:09:47
Hallo yersinia,

sehr interessantes Beispiel, welches auf Anhieb funktioniert.
Darf ich noch eine Bitte äußern?
Ich hätte gerne den 7-Tage-Inzidenz-Wert in der Aufstellung, allerdings gelingt mir das mit der angehängten Definition nicht. Ich habe cases7_per_100k ergänzt, aber ohne Erfolg. Sieh mir bitte nach, dass ich außer über copy-and-paste den Inhalt nicht wirklich durchdringe.

defmod coronaSpreadNRW JsonMod https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/Coronaf%C3%A4lle_in_den_Bundesl%C3%A4ndern/FeatureServer/0/query?where=1%3D1&outFields=LAN_ew_GEN,Fallzahl,Aktualisierung,faelle_100000_EW,cases7_per_100k,Death&returnGeometry=false&outSR=4326&f=json
attr coronaSpreadNRW event-on-update-reading .computedReadings
attr coronaSpreadNRW interval 9 */3 * * *
attr coronaSpreadNRW readingList multi(jsonPath("\$.features[?(\@.attributes.LAN_ew_GEN in ['Nordrhein-Westfalen'])]"), concat(count(),'_name'), property('attributes.LAN_ew_GEN'));;\
multi(jsonPath("\$.features[?(\@.attributes.LAN_ew_GEN in ['Nordrhein-Westfalen'])]"), concat(count(),'_cases'), property('attributes.Fallzahl'));;\
multi(jsonPath("\$.features[?(\@.attributes.LAN_ew_GEN in ['Nordrhein-Westfalen'])]"), concat(count(),'_deaths'), property('attributes.Death'));;\
multi(jsonPath("\$.features[?(\@.attributes.LAN_ew_GEN in ['Nordrhein-Westfalen'])]"), concat(count(),'_lastUpdate'), property('attributes.Aktualisierung'));;\
multi(jsonPath("\$.features[?(\@.attributes.LAN_ew_GEN in ['Nordrhein-Westfalen'])]"), concat(count(),'_cases7_per_100k'), property('attributes.cases7_per_100k'));;
attr coronaSpreadNRW room Corona
attr coronaSpreadNRW 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,"0_name","-").": <font style=\"color:orange;;font-weight:bold;;\">".ReadingsVal($name,"0_cases","-")." F&auml;;lle</font>&nbsp;;&amp;;&nbsp;;";;\
$ret .= "<font style=\"color:red;;font-weight:bold;;\">".ReadingsVal($name,"0_deaths","-")." Tote</font>";;\
$ret .= "&nbsp;;(".ReadingsVal($name,"0_lastUpdatedh","-").")<br \/>";;\
$ret .= ReadingsVal($name,"1_name","-").": <font style=\"color:orange;;font-weight:bold;;\">".ReadingsVal($name,"1_cases","-")." F&auml;;lle</font>&nbsp;;&amp;;&nbsp;;";;\
$ret .= "<font style=\"color:red;;font-weight:bold;;\">".ReadingsVal($name,"1_deaths","-")." Tote</font>";;\
$ret .= "&nbsp;;(".ReadingsVal($name,"1_lastUpdatedh","-").")";;\
$ret .= "</div>";;\
return $ret;;}
attr coronaSpreadNRW update-on-start 1
attr coronaSpreadNRW userReadings 0_lastUpdatedh {POSIX::strftime ("%d.%m. %H:%M", localtime(ReadingsVal($name,"0_lastUpdate",0)/1000));;}, 1_lastUpdatedh {POSIX::strftime ("%d.%m. %H:%M", localtime(ReadingsVal($name,"1_lastUpdate",0)/1000));;}
attr coronaSpreadNRW webCmd reread


Kannst du mal reinschauen?

Viele Grüße Gisbert
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: yersinia am 19 Oktober 2020, 12:25:39
Was die Quelle nicht hergibt....
https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/Coronaf%C3%A4lle_in_den_Bundesl%C3%A4ndern/FeatureServer/0/query?where=1%3D1&outFields=LAN_ew_GEN,Fallzahl,Aktualisierung,faelle_100000_EW,cases7_per_100k,Death&returnGeometry=false&outSR=4326&f=json (https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/Coronaf%C3%A4lle_in_den_Bundesl%C3%A4ndern/FeatureServer/0/query?where=1%3D1&outFields=LAN_ew_GEN,Fallzahl,Aktualisierung,faelle_100000_EW,cases7_per_100k,Death&returnGeometry=false&outSR=4326&f=json) führt zu
Zitat{"error":{"code":400,"message":"Cannot perform query. Invalid query parameters.","details":["Unable to perform query. Please check your parameters."]}}

Der oben verwendete Link (https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/Coronaf%C3%A4lle_in_den_Bundesl%C3%A4ndern/FeatureServer/0/query?where=1%3D1&outFields=LAN_ew_GEN,Fallzahl,Aktualisierung,faelle_100000_EW,Death&returnGeometry=false&outSR=4326&f=json) hat keine Inzidenz in dieser Form mWn, allerdings ein Datenfeld faelle_100000_EW was für Fälle/100.000 EW steht - im Unterschied zur Inzidenz ist der zeitliche Faktor nicht einberechnet.
Entweder andere, mir derzeit nicht bekannte, Quelle für Inzidenz auf Bundesland-Ebene verwenden oder die Inzidenz der Kommunen nutzen (https://forum.fhem.de/index.php/topic,113798.0.html). Das RKI scheint Ersteres nicht zur Verfügung zu stellen (warum auch?). Vielleicht kennt jmd anders eine andere Quelle?

Das ist falsch, siehe #155 (https://forum.fhem.de/index.php/topic,109413.msg1093770.html#msg1093770).
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: Gisbert am 19 Oktober 2020, 12:40:38
Hallo yersinia,

das kann ich natürlich verstehen, was mich aber zur Frage führt, woher weiß man, bzw. du, dass diese Abfragen (Fallzahl,Aktualisierung,faelle_100000_EW,Death) und eventuell sonst keine verfügbar sind.
Kannst du mich darüber informieren?
Leider führt mich mein trial-and-error-Ansatz bei der Suche nach Abfragen nicht zu einem Ergebnis.

Viele Grüße Gisbert
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: yersinia am 19 Oktober 2020, 13:16:13
Ich habe die Informationen hier aus dem Forum, freundlicherweise von herrmannj (https://forum.fhem.de/index.php?action=profile;u=769) zusammengetragen - siehe #1 hier (https://forum.fhem.de/index.php/topic,109413.msg1034048.html#msg1034048) und 7 Tage Inzidenz Thread (https://forum.fhem.de/index.php/topic,113798.0.html).
Wenn man im Netz ein bisschen Sucht findet man aber auch dies hier inkl. API Beschreibung:
RKI Corona Bundesländer (https://npgeo-corona-npgeo-de.hub.arcgis.com/datasets/ef4b445a53c1406892257fe63129a8ea_0)
RKI Corona Landkreise (https://npgeo-corona-npgeo-de.hub.arcgis.com/datasets/917fc37a709542548cc3be077a786c17_0)

Und wenn man die API liest, dann ist meine Aussage falsch bezgl der Inzidenz auf BL ebene, es ist nur ein anderes feld: cases7_bl_per_100k. ::) Es müsste bei dir dann ungefähr so aussehen:
defmod coronaSpreadDE JsonMod https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/Coronaf%C3%A4lle_in_den_Bundesl%C3%A4ndern/FeatureServer/0/query?where=1%3D1&outFields=LAN_ew_GEN,Fallzahl,Aktualisierung,faelle_100000_EW,cases7_bl_per_100k,Death&returnGeometry=false&outSR=4326&f=json
attr coronaSpreadDE event-on-update-reading .computedReadings
attr coronaSpreadDE interval 9 */3 * * *
attr coronaSpreadDE readingList multi(jsonPath("\$.features[?(\@.attributes.LAN_ew_GEN in ['Nordrhein-Westfalen'])]"), concat(count(),'_name'), property('attributes.LAN_ew_GEN'));;\
multi(jsonPath("\$.features[?(\@.attributes.LAN_ew_GEN in ['Nordrhein-Westfalen'])]"), concat(count(),'_cases'), property('attributes.Fallzahl'));;\
multi(jsonPath("\$.features[?(\@.attributes.LAN_ew_GEN in ['Nordrhein-Westfalen'])]"), concat(count(),'_cases_per_100k'), property('attributes.faelle_100000_EW'));;\
multi(jsonPath("\$.features[?(\@.attributes.LAN_ew_GEN in ['Nordrhein-Westfalen'])]"), concat(count(),'_cases7_bl_per_100k'), property('attributes.cases7_bl_per_100k'));;\
multi(jsonPath("\$.features[?(\@.attributes.LAN_ew_GEN in ['Nordrhein-Westfalen'])]"), concat(count(),'_deaths'), property('attributes.Death'));;\
multi(jsonPath("\$.features[?(\@.attributes.LAN_ew_GEN in ['Nordrhein-Westfalen'])]"), concat(count(),'_lastUpdate'), property('attributes.Aktualisierung'));;
attr coronaSpreadDE room Corona
attr coronaSpreadDE 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,"0_name","-").":&nbsp;;";;\
$ret .= "<font style=\"font-weight:bold;;color:";;\
if(ReadingsNum($name,"0_cases7_bl_per_100k",0) < 35) {\
$ret .= "green";;\
} elsif (ReadingsNum($name,"0_cases7_bl_per_100k",0) < 50) {\
$ret .= "orange";;\
} else {\
$ret .= "red";;\
}\
$ret .= ";;\">".sprintf("%.1f", ReadingsNum($name,"0_cases7_bl_per_100k",0))."</font>&nbsp;;&amp;;&nbsp;;";;\
$ret .= "<font style=\"color:orange;;font-weight:bold;;\">".ReadingsVal($name,"0_cases","-")." F&auml;;lle</font>&nbsp;;&amp;;&nbsp;;";;\
$ret .= "<font style=\"color:red;;font-weight:bold;;\">".ReadingsVal($name,"0_deaths","-")." Tote</font>";;\
$ret .= "&nbsp;;(".ReadingsVal($name,"0_lastUpdatedh","-").")";;\
$ret .= "</div>";;\
return $ret;;}
attr coronaSpreadDE update-on-start 1
attr coronaSpreadDE userReadings 0_lastUpdatedh {POSIX::strftime ("%d.%m. %H:%M", localtime(ReadingsVal($name,"0_lastUpdate",0)/1000));;}
attr coronaSpreadDE webCmd reread


Daten zu Staaten gibt es unter disease.sh (https://disease.sh/docs/).

EDIT: Code optimiert
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: curt am 21 Oktober 2020, 03:13:58
@yersinia
Ich weiß, dass Du genervt warst, man hörte es heraus.

Aber Du hast dann selbstlos Zeit von Deiner persönlichen Lebenszeit genommen, den Stand der Diskussion zusammengefasst, dabei den wichtigen Punkt "/7d/100.000" eingearbeitet, funktionierende Beispiele gezeigt.

Wenn ich etwas zu sagen hätte, würde ich Dir heute meinen persönlich mit Goldfolie auf Pappe geklebten Sonnen-Orden "Freundlicher Helfer des Tages" umhängen: Sehr herzlichen Dank!

Einem weiteren hast Du auch geholfen, vielleicht aber noch vielen mehr - denen, die leise mitlesen, aber sehr dankbar Wissen mitnehmen.

Danke nochmals, yersinia!
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: yersinia am 21 Oktober 2020, 10:57:03
@curt: mea culpa ::) & love your sarcasm. ;) Thx.
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: curt am 21 Oktober 2020, 22:29:39
Mit englischen Redewendungen bin ich nicht ganz sooo sattelfest, daher: Mein Dank war ehrlich und reinen Herzens.

Hast Du @yersinia oder @herrmannj vielleicht noch eine Idee für die tägliche Zahl der Neuerkrankten Deutschlands? Ich erkläre genauer:

Es schwirren da ja zig Zahlen rum, ich spare mir die Aufzählung. Ich nutze dafür einen Code aus diesem Thread, der nutzt https://disease.sh/v3/covid-19/countries - das sind Zahlen, die sich über den Tag ändern. Schon schick.

Irgendwie hätte ich gern zusätzlich die offizielle Zahl des RKI, also die Zahl, die das RKI im Dashboard angibt, also hier: https://experience.arcgis.com/experience/478220a4c454480e823b17327b2bf1d4
Dafür fand ich noch folgendes, wenn das hilft: https://github.com/rearc-data/covid-19-deutschland-robert-koch-institut
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: yersinia am 22 Oktober 2020, 08:37:14
Gefunden habe ich nur diese offizielle Beschreibung: https://www.arcgis.com/home/item.html?id=dd4580c810204019a7b8eb3e0b329dd6
Anscheinend gibt das RKI keine offiziellen Zahlen für ganz DE raus, man könnte aber, mit einem userReading o.ä., die Zahlen der Bundesländer addieren.

disease.sh liefert noch für einige Staaten laut deren Aussage 'offizielle', von der Regierung gemeldete, Daten: https://disease.sh/docs/#/COVID-19%3A%20Government/get_v3_covid_19_gov__country_
Die Request Url wäre: https://disease.sh/v3/covid-19/gov/Germany
Response würde so aussehen, dabei ist der letzte Block (province Total) interessant:
[
  {
    "updated": 1603294353926,
    "province": "Baden-Württem­berg",
    "cases": 61694,
    "casePreviousDayChange": 973,
    "casesPerHundredThousand": 5419,
    "sevenDayCasesPerHundredThousand": 48,
    "deaths": 1946
  },
  {
    "updated": 1603294353926,
    "province": "Bayern",
    "cases": 82102,
    "casePreviousDayChange": 1222,
    "casesPerHundredThousand": 7213,
    "sevenDayCasesPerHundredThousand": 55,
    "deaths": 2726
  },
  {
    "updated": 1603294353927,
    "province": "Berlin",
    "cases": 22727,
    "casePreviousDayChange": 822,
    "casesPerHundredThousand": 3399,
    "sevenDayCasesPerHundredThousand": 92,
    "deaths": 243
  },
  {
    "updated": 1603294353928,
    "province": "Branden­burg",
    "cases": 5670,
    "casePreviousDayChange": 96,
    "casesPerHundredThousand": 577,
    "sevenDayCasesPerHundredThousand": 22,
    "deaths": 175
  },
  {
    "updated": 1603294353929,
    "province": "Bremen",
    "cases": 3725,
    "casePreviousDayChange": 95,
    "casesPerHundredThousand": 563,
    "sevenDayCasesPerHundredThousand": 82,
    "deaths": 63
  },
  {
    "updated": 1603294353930,
    "province": "Hamburg",
    "cases": 10207,
    "casePreviousDayChange": 204,
    "casesPerHundredThousand": 852,
    "sevenDayCasesPerHundredThousand": 46,
    "deaths": 281
  },
  {
    "updated": 1603294353930,
    "province": "Hessen",
    "cases": 27307,
    "casePreviousDayChange": 749,
    "casesPerHundredThousand": 4395,
    "sevenDayCasesPerHundredThousand": 69,
    "deaths": 590
  },
  {
    "updated": 1603294353931,
    "province": "Meck­lenburg-\nVor­pommern",
    "cases": 1790,
    "casePreviousDayChange": 71,
    "casesPerHundredThousand": 283,
    "sevenDayCasesPerHundredThousand": 17,
    "deaths": 21
  },
  {
    "updated": 1603294353931,
    "province": "Nieder­sachsen",
    "cases": 26611,
    "casePreviousDayChange": 255,
    "casesPerHundredThousand": 2573,
    "sevenDayCasesPerHundredThousand": 32,
    "deaths": 719
  },
  {
    "updated": 1603294353932,
    "province": "Nord­rhein-West­falen",
    "cases": 94883,
    "casePreviousDayChange": 2189,
    "casesPerHundredThousand": 12027,
    "sevenDayCasesPerHundredThousand": 67,
    "deaths": 1970
  },
  {
    "updated": 1603294353932,
    "province": "Rhein­land-Pfalz",
    "cases": 14199,
    "casePreviousDayChange": 242,
    "casesPerHundredThousand": 1624,
    "sevenDayCasesPerHundredThousand": 39,
    "deaths": 265
  },
  {
    "updated": 1603294353932,
    "province": "Saarland",
    "cases": 4467,
    "casePreviousDayChange": 30,
    "casesPerHundredThousand": 577,
    "sevenDayCasesPerHundredThousand": 58,
    "deaths": 177
  },
  {
    "updated": 1603294353933,
    "province": "Sachsen",
    "cases": 10906,
    "casePreviousDayChange": 386,
    "casesPerHundredThousand": 1704,
    "sevenDayCasesPerHundredThousand": 41,
    "deaths": 264
  },
  {
    "updated": 1603294353933,
    "province": "Sachsen-Anhalt",
    "cases": 3387,
    "casePreviousDayChange": 53,
    "casesPerHundredThousand": 366,
    "sevenDayCasesPerHundredThousand": 16,
    "deaths": 71
  },
  {
    "updated": 1603294353933,
    "province": "Schles­wig-Holstein",
    "cases": 5989,
    "casePreviousDayChange": 110,
    "casesPerHundredThousand": 597,
    "sevenDayCasesPerHundredThousand": 20,
    "deaths": 163
  },
  {
    "updated": 1603294353934,
    "province": "Thüringen",
    "cases": 5098,
    "casePreviousDayChange": 98,
    "casesPerHundredThousand": 520,
    "sevenDayCasesPerHundredThousand": 24,
    "deaths": 201
  },
  {
    "updated": 1603294353934,
    "province": "Total",
    "cases": 380762,
    "casePreviousDayChange": 7595,
    "casesPerHundredThousand": 42689,
    "sevenDayCasesPerHundredThousand": 51,
    "deaths": 9875
  }
]

Die Zahlen decken sich aber nicht mit denen, die man _jetzt_ beim RKI findet.
Dies wird sich im Laufe des Tages ändern. Meiner Erfahrung nach, werden die Zahlen auf disease.sh im Laufe des Tages aktualsiert und entsprechen dann den RKI Zahlen des Vortags.

Zitat von: curt am 21 Oktober 2020, 22:29:39Dafür fand ich noch folgendes, wenn das hilft: https://github.com/rearc-data/covid-19-deutschland-robert-koch-institut
Entspricht nach eigenen Angaben dieser Quelle: RKI COVID19 (https://npgeo-corona-npgeo-de.hub.arcgis.com/datasets/dd4580c810204019a7b8eb3e0b329dd6_0/geoservice)
Auch hier gibt es keine Gesamtanzahl - außer man addiert sich dies selbst.
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: curt am 22 Oktober 2020, 22:03:58
Die offizielle Zahl findet man in https://www.rki.de/DE/Content/InfAZ/N/Neuartiges_Coronavirus/Fallzahlen.html

Diese Zeile, die Zahl mit dem PLUS davor:

Gesamt 392.049 +11.287 46.772 56,2 9.905


Das schreit nach HTTPMOD und RegEx. Leider scheitere ich bei sowas regelmäßig.
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: ErzGabriel am 25 Oktober 2020, 14:48:34
Hallo zusammen.
Ich habe das Anwendungsbeispiel mal nachgebaut aber ich erhalte keine Daten, ich kriege nur die Daten für die Bundesländer. Welt erhalte ich nicht. Fhem ist geupdatet und neu gestartet aber seit 3 Tagen keine Daten erhalten.
Hat jemand einen Tipp für mich, woran es liegen kann.

Danke.
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: yersinia am 25 Oktober 2020, 15:25:02
Welches Anwendungsbeispiel hast du nachgebaut? Weltweite Daten sind im ersten Post (https://forum.fhem.de/index.php/topic,109413.msg1034048.html#msg1034048) beschrieben, nur hat sich mittlerweile der Link geändert:
define coronaSpread JsonMod https://disease.sh/v3/covid-19/countries
Das für Bundesländer zeigt auch nur Bundesländer-daten an.



Dank eines Tipps vom user tklein (https://forum.fhem.de/index.php?action=profile;u=27778) in diesem -> https://forum.fhem.de/index.php/topic,115264.0.html (https://forum.fhem.de/index.php/topic,115264.0.html) Thread, scheint es doch Gesamt-Deutsche Daten zu geben über den Link
https://services1.arcgis.com/0MSEUqKaxRlEPj5g/arcgis/rest/services/ncov_cases/FeatureServer/2/query?f=json&where=Country_Region=%27Germany%27&returnGeometry=false&spatialRel=esriSpatialRelIntersects&outFields=*&orderByFields=Confirmed%20desc&outSR=102100&resultOffset
Allerdings nach erstem Anschein ohne Inzidenz oder Veränderung zum Vortag.

Es scheint auch zu funktionieren, anbei eine RAW zum kopieren
defmod coronaSpreadDE_RKI JsonMod https://services1.arcgis.com/0MSEUqKaxRlEPj5g/arcgis/rest/services/ncov_cases/FeatureServer/2/query?f=json&where=Country_Region=%27Germany%27&returnGeometry=false&outFields=*&resultOffset
attr coronaSpreadDE_RKI interval 5 */2 * * *
attr coronaSpreadDE_RKI readingList single(jsonPath('$.features..attributes.Country_Region'), 'DE_name', '-?-');;\
single(jsonPath('$.features..attributes.Confirmed'), 'DE_confirmed', '-?-');;\
single(jsonPath('$.features..attributes.Deaths'), 'DE_deaths', '-?-');;\
single(jsonPath('$.features..attributes.Recovered'), 'DE_recovered', '-?-');;\
single(jsonPath('$.features..attributes.Active'), 'DE_active', '-?-');;\
single(jsonPath('$.features..attributes.Last_Update'), 'DE_lastUpdate', '-?-');;
attr coronaSpreadDE_RKI room CoViD-19
attr coronaSpreadDE_RKI stateFormat { my $ret = "<div style=\"text-align: left;;\">";;\
$ret .= "CoVid-19 Daten für ".ReadingsVal($name,"DE_name","-");;\
$ret .= " von ".ReadingsVal($name,"DE_lastUpdatedh","-")."<br \/>";;\
$ret .= "<font style=\"color:orange;;font-weight:bold;;\">".ReadingsVal($name,"DE_active","-")." aktive F&auml;;lle</font> \/ ";;\
$ret .= "<font style=\"\">".ReadingsVal($name,"DE_confirmed","-")." Gesamt</font><br \/>";;\
$ret .= "<font style=\"color:green;;\">".ReadingsVal($name,"DE_recovered","-")." Genesene</font> und ";;\
$ret .= "<font style=\"color:red;;font-weight:bold;;\">".ReadingsVal($name,"DE_deaths","-")." Tote</font><br \/>";;\
$ret .= "Letzter <a href=\"https://corona.rki.de\" title=\"RKI CoViD19\" rel=\"noopener noreferrer\" target=\"_blank\">RKI CoViD-19</a> Datenabruf: ";;\
$ret .= POSIX::strftime("%d.%m. %H:%M",localtime(time_str2num(ReadingsTimestamp($name,".computedReadings","2000-01-01 00:00:00"))));;\
$ret .= "</div>";;\
return $ret;;\
}
attr coronaSpreadDE_RKI userReadings DE_lastUpdatedh {POSIX::strftime ("%d.%m. %H:%M", localtime(ReadingsVal($name,"DE_lastUpdate",0)/1000));;}
attr coronaSpreadDE_RKI webCmd reread
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: ErzGabriel am 25 Oktober 2020, 15:40:27
Die Daten für die Bundesländer erhalte ich ja, nur die Daten für die ganze Welt bleiben leer.
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: yersinia am 25 Oktober 2020, 15:54:10
Ein list vom Device bitte.
Zitat von: yersinia am 25 Oktober 2020, 15:25:02
Welches Anwendungsbeispiel hast du nachgebaut? Weltweite Daten sind im ersten Post (https://forum.fhem.de/index.php/topic,109413.msg1034048.html#msg1034048) beschrieben, nur hat sich mittlerweile der Link geändert:
define coronaSpread JsonMod https://disease.sh/v3/covid-19/countries
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: ErzGabriel am 25 Oktober 2020, 15:56:23
defmod coronaSpreadWorld JsonMod https://corona.lmao.ninja/all
attr coronaSpreadWorld event-on-change-reading .*
attr coronaSpreadWorld interval 1/10 * * * *
attr coronaSpreadWorld readingList single(jsonPathf('$.deaths', '%s'), 'world_deaths', 'N/A');;\
single(jsonPathf('$.cases', '%s'), 'world_cases', 'N/A');;\
single(jsonPathf('$.recovered', '%s'), 'world_recovered', 'N/A');;\
single(jsonPathf('$.updated', '%s'), 'world_updated', 'N/A');;
attr coronaSpreadWorld room COVID
attr coronaSpreadWorld stateFormat Welt Fälle: world_active
attr coronaSpreadWorld userReadings updated_human  {setlocale(LC_TIME,"de_DE.utf8");; POSIX::strftime ("%Y-%m-%d %H:%M:00", localtime(ReadingsVal("coronaSpreadWorld","world_updated",0)/1000))},\
world_active {ReadingsVal("coronaSpreadWorld","world_cases",0)-ReadingsVal("coronaSpreadWorld","world_deaths",0)-ReadingsVal("coronaSpreadWorld","world_recovered",0)},\
world_casesPerOneMillion {ReadingsVal("coronaSpreadWorld","world_cases",0)/7773.452460},\
world_todayCases {ReadingsVal("coronaSpreadWorld","world_cases",0)-ReadingsVal("coronaSpreadWorld","world_cases_yesterday",0)},\
world_todayDeaths {ReadingsVal("coronaSpreadWorld","world_deaths",0)-ReadingsVal("coronaSpreadWorld","world_deaths_yesterday",0)},\
world_todayRecovered {ReadingsVal("coronaSpreadWorld","world_recovered",0)-ReadingsVal("coronaSpreadWorld","world_recovered_yesterday",0)},\
world_name {"Welt"}
attr coronaSpreadWorld verbose 5


Internals:
   API_LAST_RES 1603637460.9469
   API__LAST_MSG invalid server response
   DEF        https://corona.lmao.ninja/all
   FUUID      5f8e9441-f33f-7a73-985f-5c4a100ef7180282
   NAME       coronaSpreadWorld
   NEXT       2020-10-25 16:01:00
   NR         692
   SOURCE     https://corona.lmao.ninja/all (502)
   STATE      Welt Fälle: 0
   SVN        22987 2020-10-18 13:26:05 UTC
   TYPE       JsonMod
   CONFIG:
     IN_REQUEST 0
     SOURCE     https://corona.lmao.ninja/all
     SECRET:
   READINGS:
     2020-10-25 15:41:01   updated_human   1970-01-01 01:00:00
     2020-10-25 15:41:01   world_active    0
     2020-10-25 15:41:01   world_cases     N/A
     2020-10-25 15:41:01   world_casesPerOneMillion 0
     2020-10-25 15:41:01   world_deaths    N/A
     2020-10-25 15:41:01   world_name      Welt
     2020-10-25 15:41:01   world_recovered N/A
     2020-10-25 15:41:01   world_todayCases 0
     2020-10-25 15:41:01   world_todayDeaths 0
     2020-10-25 15:41:01   world_todayRecovered 0
     2020-10-25 15:41:01   world_updated   N/A
Attributes:
   event-on-change-reading .*
   interval   1/10 * * * *
   readingList single(jsonPathf('$.deaths', '%s'), 'world_deaths', 'N/A');
single(jsonPathf('$.cases', '%s'), 'world_cases', 'N/A');
single(jsonPathf('$.recovered', '%s'), 'world_recovered', 'N/A');
single(jsonPathf('$.updated', '%s'), 'world_updated', 'N/A');
   room       COVID
   stateFormat Welt Fälle: world_active
   userReadings updated_human  {setlocale(LC_TIME,"de_DE.utf8"); POSIX::strftime ("%Y-%m-%d %H:%M:00", localtime(ReadingsVal("coronaSpreadWorld","world_updated",0)/1000))},
world_active {ReadingsVal("coronaSpreadWorld","world_cases",0)-ReadingsVal("coronaSpreadWorld","world_deaths",0)-ReadingsVal("coronaSpreadWorld","world_recovered",0)},
world_casesPerOneMillion {ReadingsVal("coronaSpreadWorld","world_cases",0)/7773.452460},
world_todayCases {ReadingsVal("coronaSpreadWorld","world_cases",0)-ReadingsVal("coronaSpreadWorld","world_cases_yesterday",0)},
world_todayDeaths {ReadingsVal("coronaSpreadWorld","world_deaths",0)-ReadingsVal("coronaSpreadWorld","world_deaths_yesterday",0)},
world_todayRecovered {ReadingsVal("coronaSpreadWorld","world_recovered",0)-ReadingsVal("coronaSpreadWorld","world_recovered_yesterday",0)},
world_name {"Welt"}
   verbose    5


Im Log steht nichts.
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: yersinia am 25 Oktober 2020, 16:03:47
OK, das es einen neuen Link gibt hast du anscheinend mehrfach überlesen, und man sieht es im list Auszug auch:
Zitat von: ErzGabriel am 25 Oktober 2020, 15:56:23
   API__LAST_MSG invalid server response
   DEF        https://corona.lmao.ninja/all

Anstelle von https://corona.lmao.ninja/all musst du https://disease.sh/v3/covid-19/all nutzen:
defmod coronaSpreadWorld JsonMod https://disease.sh/v3/covid-19/all
attr coronaSpreadWorld event-on-change-reading .*
attr coronaSpreadWorld interval 1/10 * * * *
attr coronaSpreadWorld readingList single(jsonPathf('$.deaths', '%s'), 'world_deaths', 'N/A');;\
single(jsonPathf('$.cases', '%s'), 'world_cases', 'N/A');;\
single(jsonPathf('$.recovered', '%s'), 'world_recovered', 'N/A');;\
single(jsonPathf('$.updated', '%s'), 'world_updated', 'N/A');;
attr coronaSpreadWorld room COVID
attr coronaSpreadWorld stateFormat Welt Fälle: world_active
attr coronaSpreadWorld userReadings updated_human  {setlocale(LC_TIME,"de_DE.utf8");; POSIX::strftime ("%Y-%m-%d %H:%M:00", localtime(ReadingsVal("coronaSpreadWorld","world_updated",0)/1000))},\
world_active {ReadingsVal("coronaSpreadWorld","world_cases",0)-ReadingsVal("coronaSpreadWorld","world_deaths",0)-ReadingsVal("coronaSpreadWorld","world_recovered",0)},\
world_casesPerOneMillion {ReadingsVal("coronaSpreadWorld","world_cases",0)/7773.452460},\
world_todayCases {ReadingsVal("coronaSpreadWorld","world_cases",0)-ReadingsVal("coronaSpreadWorld","world_cases_yesterday",0)},\
world_todayDeaths {ReadingsVal("coronaSpreadWorld","world_deaths",0)-ReadingsVal("coronaSpreadWorld","world_deaths_yesterday",0)},\
world_todayRecovered {ReadingsVal("coronaSpreadWorld","world_recovered",0)-ReadingsVal("coronaSpreadWorld","world_recovered_yesterday",0)},\
world_name {"Welt"}
attr coronaSpreadWorld verbose 5
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: Tutti_Bomovski am 30 Oktober 2020, 11:43:58
Hallo Zusammen,
hat jemand einen finalen Code für mich, den ich ohne weitere Kenntnisse in mein FHEM integrieren kann?
Oder ein Anleitung, welche auf dem aktuellsten Stand ist?

Vielen Dank.
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: MadMax-FHEM am 30 Oktober 2020, 11:51:38
Zitat von: Tutti_Bomovski am 30 Oktober 2020, 11:43:58
hat jemand einen finalen Code für mich, den ich ohne weitere Kenntnisse in mein FHEM integrieren kann?

Welche Werte willst du denn haben?

Genau EINE Antwort zuvor ist ein Beispiel was (verm.) funktionieren sollte.

Einfügen (soweit ich das gesehen habe) per "Raw Definition" (unter jedem Device oder das "Plus Zeichen")...

ABER: ob das was hier "geholt" wird, das ist was du "sehen" willst: das weißt nur du... ;)

Ansonsten: diesen oder andere Threads "durchsuchen", ob jemand was gepostet hat, was dir "zusagt" und nehmen... ;)

Zitat von: Tutti_Bomovski am 30 Oktober 2020, 11:43:58
Oder ein Anleitung, welche auf dem aktuellsten Stand ist?

https://forum.fhem.de/index.php/topic,109413.msg1034048.html#msg1034048

Oder einfach: help jsonmod (in Fhem-Web-Eingabe)

Gruß, Joachim
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: Christoph Morrison am 10 November 2020, 09:09:48
Zitat von: curt am 22 Oktober 2020, 22:03:58
Die offizielle Zahl findet man in https://www.rki.de/DE/Content/InfAZ/N/Neuartiges_Coronavirus/Fallzahlen.html

Diese Zeile, die Zahl mit dem PLUS davor:

Gesamt 392.049 +11.287 46.772 56,2 9.905


Das schreit nach HTTPMOD und RegEx. Leider scheitere ich bei sowas regelmäßig.

Ganz ohne Regex ;-) (Timeout ist nötig):

defmod corona_fz_rki7 HTTPMOD https://www.rki.de/DE/Content/InfAZ/N/Neuartiges_Coronavirus/Fallzahlen.html 43200
attr corona_fz_rki7 userattr reading01Name reading01XPath reading02Name reading02XPath
attr corona_fz_rki7 alias Fallzahlenveränderung RKI7
attr corona_fz_rki7 reading01Name Fallzahlen_change
attr corona_fz_rki7 reading01XPath //*[@id="main"]/div[1]/table/tbody/tr[17]/td[3]/strong
attr corona_fz_rki7 reading02Name last_update
attr corona_fz_rki7 reading02XPath //*[@id="main"]/div[1]/p[1]
attr corona_fz_rki7 showError 1
attr corona_fz_rki7 stateFormat Fallzahlen_change (last_update)
attr corona_fz_rki7 timeout 60
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: herrmannj am 10 November 2020, 09:23:31
Falscher Thread, hier geht's um JSON ;)
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: Christoph Morrison am 10 November 2020, 09:38:47
Zitat von: herrmannj am 10 November 2020, 09:23:31
Falscher Thread, hier geht's um JSON ;)

Sag das curt ;-)

Kannst das natürlich gerne abtrennen / verschieben.
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: FHEMAN am 11 Dezember 2020, 10:54:37
Hallo,

wäre es möglich, das Modul um eine enable / disable Funktion zu erweitern? Ich nutze JsonMod zum Einlesen von Umweltsensoren (UV-A,UV-B) und benötige nachts keine Werte bzw. nur in größeren Intervallen. Eine (tägliche) Änderung des interval Attributs führt jedoch zum bekannten Fragezeichen.

Viele Grüße
Ronny
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: yersinia am 11 Dezember 2020, 11:02:41
Zitat von: FHEMAN am 11 Dezember 2020, 10:54:37wäre es möglich, das Modul um eine enable / disable Funktion zu erweitern? Ich nutze JsonMod zum Einlesen von Umweltsensoren (UV-A,UV-B) und benötige nachts keine Werte bzw. nur in größeren Intervallen. Eine (tägliche) Änderung des interval Attributs führt jedoch zum bekannten Fragezeichen.
Falscher Thread, wäre besser hier aufgehoben: [98_JsonMod.pm] Wunschliste von neuen Funktionen  (https://forum.fhem.de/index.php/topic,111489.0.html)
Ich hab es dort auch gleich zitiert (https://forum.fhem.de/index.php/topic,111489.msg1109545.html#msg1109545).
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: sylvester am 27 April 2021, 10:49:43
Hallo,

hat schon mal jemand versucht, Daten aus dem "Covid 19 Datenhub" zu nutzen?
https://npgeo-corona-npgeo-de.hub.arcgis.com/

Ich würde ja gerne einfach die Inzidenzwerte für meinen Wohnort in ein Log-File schreiben ...
Viele Grüße

Stephan
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: yersinia am 27 April 2021, 10:58:51
Würde dir dies weiterhelfen? -> Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz (https://forum.fhem.de/index.php/topic,113798.0.html)
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: tweety-rt am 04 Mai 2021, 15:53:25
Ich habe das Beispiel aus #151 mit den beiden Bundesländern verwenden wollen. Allerdings werden keine Daten für Baden-Württemberg ermittelt. Ich vermute es liegt am Umlaut, da andere Länder gehen.
Habe keinen brauchbaren Hinweis gefunden was ich tun muss. Hat mir jemand eine Lösung?
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: yersinia am 04 Mai 2021, 16:21:36
Also das funktioniert bei mir:
defmod coronaSpreadDE JsonMod https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/Coronaf%C3%A4lle_in_den_Bundesl%C3%A4ndern/FeatureServer/0/query?where=1%3D1&outFields=LAN_ew_GEN,Fallzahl,Aktualisierung,faelle_100000_EW,Death&returnGeometry=false&outSR=4326&f=json
attr coronaSpreadDE event-on-update-reading .computedReadings
attr coronaSpreadDE interval 9 */3 * * *
attr coronaSpreadDE readingList multi(jsonPath("\$.features[?(\@.attributes.LAN_ew_GEN in ['Baden-Württemberg', 'Saarland'])]"), concat(count(),'_name'), property('attributes.LAN_ew_GEN'));;\
multi(jsonPath("\$.features[?(\@.attributes.LAN_ew_GEN in ['Baden-Württemberg', 'Saarland'])]"), concat(count(),'_cases'), property('attributes.Fallzahl'));;\
multi(jsonPath("\$.features[?(\@.attributes.LAN_ew_GEN in ['Baden-Württemberg', 'Saarland'])]"), concat(count(),'_deaths'), property('attributes.Death'));;\
multi(jsonPath("\$.features[?(\@.attributes.LAN_ew_GEN in ['Baden-Württemberg', 'Saarland'])]"), concat(count(),'_lastUpdate'), property('attributes.Aktualisierung'));;
attr coronaSpreadDE 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,"0_name","-").": <font style=\"color:orange;;font-weight:bold;;\">".ReadingsVal($name,"0_cases","-")." F&auml;;lle</font>&nbsp;;&amp;;&nbsp;;";;\
$ret .= "<font style=\"color:red;;font-weight:bold;;\">".ReadingsVal($name,"0_deaths","-")." Tote</font>";;\
$ret .= "&nbsp;;(".ReadingsVal($name,"0_lastUpdatedh","-").")<br \/>";;\
$ret .= ReadingsVal($name,"1_name","-").": <font style=\"color:orange;;font-weight:bold;;\">".ReadingsVal($name,"1_cases","-")." F&auml;;lle</font>&nbsp;;&amp;;&nbsp;;";;\
$ret .= "<font style=\"color:red;;font-weight:bold;;\">".ReadingsVal($name,"1_deaths","-")." Tote</font>";;\
$ret .= "&nbsp;;(".ReadingsVal($name,"1_lastUpdatedh","-").")";;\
$ret .= "</div>";;\
return $ret;;}
attr coronaSpreadDE update-on-start 1
attr coronaSpreadDE userReadings 0_lastUpdatedh {POSIX::strftime ("%d.%m. %H:%M", localtime(ReadingsVal($name,"0_lastUpdate",0)/1000));;}, 1_lastUpdatedh {POSIX::strftime ("%d.%m. %H:%M", localtime(ReadingsVal($name,"1_lastUpdate",0)/1000));;}
attr coronaSpreadDE webCmd reread

ergibt:
READINGS:
     2021-05-04 16:17:09   .computedReadings 1_name,0_lastUpdate,1_lastUpdate,0_name,0_deaths,1_cases,1_deaths,0_cases
     2021-05-04 16:17:09   0_cases         451387
     2021-05-04 16:17:09   0_deaths        9410
     2021-05-04 16:17:09   0_lastUpdate    1620079200000
     2021-05-04 16:17:09   0_lastUpdatedh  04.05. 00:00
     2021-05-04 16:17:09   0_name          Baden-Württemberg
     2021-05-04 16:17:09   1_cases         37776
     2021-05-04 16:17:09   1_deaths        962
     2021-05-04 16:17:09   1_lastUpdate    1620079200000
     2021-05-04 16:17:09   1_lastUpdatedh  04.05. 00:00
     2021-05-04 16:17:09   1_name          Saarland


JsonMod Version:
98_JsonMod.pm 24360 2021-04-29 21:17:23Z herrmannj



EDIT:
Oder ohne Text-Suche via OBJECTID:
defmod coronaSpreadDE JsonMod https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/Coronaf%C3%A4lle_in_den_Bundesl%C3%A4ndern/FeatureServer/0/query?where=1%3D1&outFields=OBJECTID,LAN_ew_GEN,Fallzahl,Aktualisierung,faelle_100000_EW,Death&returnGeometry=false&outSR=4326&f=json
attr coronaSpreadDE event-on-update-reading .computedReadings
attr coronaSpreadDE interval 9 */3 * * *
attr coronaSpreadDE readingList multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['1', '12'])]"), concat(property('attributes.OBJECTID'),'_name'), property('attributes.LAN_ew_GEN'));;\
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['1', '12'])]"), concat(property('attributes.OBJECTID'),'_cases'), property('attributes.Fallzahl'));;\
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['1', '12'])]"), concat(property('attributes.OBJECTID'),'_deaths'), property('attributes.Death'));;\
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['1', '12'])]"), concat(property('attributes.OBJECTID'),'_lastUpdate'), property('attributes.Aktualisierung'));;
attr coronaSpreadDE 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,"0_name","-").": <font style=\"color:orange;;font-weight:bold;;\">".ReadingsVal($name,"0_cases","-")." F&auml;;lle</font>&nbsp;;&amp;;&nbsp;;";;\
$ret .= "<font style=\"color:red;;font-weight:bold;;\">".ReadingsVal($name,"0_deaths","-")." Tote</font>";;\
$ret .= ReadingsVal($name,"1_name","-").": <font style=\"color:orange;;font-weight:bold;;\">".ReadingsVal($name,"1_cases","-")." F&auml;;lle</font>&nbsp;;&amp;;&nbsp;;";;\
$ret .= "<font style=\"color:red;;font-weight:bold;;\">".ReadingsVal($name,"1_deaths","-")." Tote</font>";;\
$ret .= "</div>";;\
return $ret;;}
attr coronaSpreadDE update-on-start 1
attr coronaSpreadDE webCmd reread

ergibt Readings wie:
   READINGS:
     2021-05-04 16:40:44   .computedReadings 1_name,1_lastUpdate,12_cases,12_lastUpdate,1_cases,1_deaths,12_deaths,12_name
     2021-05-04 16:40:44   12_cases        37776
     2021-05-04 16:40:44   12_deaths       962
     2021-05-04 16:40:44   12_lastUpdate   1620079200000
     2021-05-04 16:40:44   12_name         Saarland
     2021-05-04 16:40:44   1_cases         451387
     2021-05-04 16:40:44   1_deaths        9410
     2021-05-04 16:40:44   1_lastUpdate    1620079200000
     2021-05-04 16:40:44   1_name          Baden-Württemberg


Oder ohne die OBJECTID als Readings-Unterscheidungsmerkmal:
defmod coronaSpreadDE JsonMod https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/Coronaf%C3%A4lle_in_den_Bundesl%C3%A4ndern/FeatureServer/0/query?where=1%3D1&outFields=OBJECTID,LAN_ew_GEN,Fallzahl,Aktualisierung,faelle_100000_EW,Death&returnGeometry=false&outSR=4326&f=json
attr coronaSpreadDE event-on-update-reading .computedReadings
attr coronaSpreadDE interval 9 */3 * * *
attr coronaSpreadDE readingList multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['1', '12'])]"), concat(count(),'_name'), property('attributes.LAN_ew_GEN'));;\
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['1', '12'])]"), concat(count(),'_cases'), property('attributes.Fallzahl'));;\
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['1', '12'])]"), concat(count(),'_deaths'), property('attributes.Death'));;\
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['1', '12'])]"), concat(count(),'_lastUpdate'), property('attributes.Aktualisierung'));;
attr coronaSpreadDE room CoViD-19
attr coronaSpreadDE 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,"0_name","-").": <font style=\"color:orange;;font-weight:bold;;\">".ReadingsVal($name,"0_cases","-")." F&auml;;lle</font>&nbsp;;&amp;;&nbsp;;";;\
$ret .= "<font style=\"color:red;;font-weight:bold;;\">".ReadingsVal($name,"0_deaths","-")." Tote</font>";;\
$ret .= "&nbsp;;(".ReadingsVal($name,"0_lastUpdatedh","-").")<br \/>";;\
$ret .= ReadingsVal($name,"1_name","-").": <font style=\"color:orange;;font-weight:bold;;\">".ReadingsVal($name,"1_cases","-")." F&auml;;lle</font>&nbsp;;&amp;;&nbsp;;";;\
$ret .= "<font style=\"color:red;;font-weight:bold;;\">".ReadingsVal($name,"1_deaths","-")." Tote</font>";;\
$ret .= "&nbsp;;(".ReadingsVal($name,"1_lastUpdatedh","-").")";;\
$ret .= "</div>";;\
return $ret;;}
attr coronaSpreadDE update-on-start 1
attr coronaSpreadDE userReadings 0_lastUpdatedh {POSIX::strftime ("%d.%m. %H:%M", localtime(ReadingsVal($name,"0_lastUpdate",0)/1000));;}, 1_lastUpdatedh {POSIX::strftime ("%d.%m. %H:%M", localtime(ReadingsVal($name,"1_lastUpdate",0)/1000));;}
attr coronaSpreadDE webCmd reread

ergibt readings wie oben.
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: tweety-rt am 04 Mai 2021, 16:51:28
Bei mir auch mit diesem Beispiel halt nicht. JsonMod Version ist die gleiche. Vielleicht fehlt mir eine generelle Einstellung?
Saarland kommt, BW nicht. FHEM ist aktuell.
Edit:
Mit dem Zweiten Beispiel über die Object-ID kommt auch BW.
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: yersinia am 04 Mai 2021, 16:56:54
Zitat von: tweety-rt am 04 Mai 2021, 16:51:28Vielleicht fehlt mir eine generelle Einstellung?
Saarland kommt, BW nicht.
Mit den wenigen Informationen ist es nur raten. Bitte ein list vom Device. Hast du ein reread durchgeführt?

Wie gesagt, auf meiner Seite funktioniert es. Alle beide Versionen.
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: romakrau am 10 August 2021, 19:30:49
Hallo zusammen,

mir fehlt bei meiner Corona Auswertung per Json neuerdings die Cases?
Hat jemand eine Idee

Internals:
   API_LAST_MSG 200
   API_LAST_RES 1628616152.85657
   DEF        https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=OBJECTID='64'&outFields=cases,deaths,cases_per_100k,cases_per_population,cases7_per_100k,BL,BL_ID,county,OBJECTID,last_update&returnGeometry=false&outSR=4326&f=json
   FUUID      5f975018-f33f-3c55-b947-2d72a37160719a57
   NAME       coronaSpreadCounties
   NEXT       2021-08-10 21:10:00
   NR         220
   SOURCE     https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=OBJECTID='64'&outFields=cases,deaths,cases_per_100k,cases_per_population,cases7_per_100k,BL,BL_ID,county,OBJECTID,last_update&returnGeometry=false&outSR=4326&f=json (200)
   STATE      active
   SVN        24420 2021-05-11 21:25:20 UTC
   TYPE       JsonMod
   CONFIG:
     IN_REQUEST 0
     SOURCE     https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=OBJECTID='64'&outFields=cases,deaths,cases_per_100k,cases_per_population,cases7_per_100k,BL,BL_ID,county,OBJECTID,last_update&returnGeometry=false&outSR=4326&f=json
     SECRET:
   OLDREADINGS:
   READINGS:
     2021-08-10 19:22:32   Cases7_per_100k 46.8
     2021-08-10 19:22:32   Cases_per_100k  4247
     2021-08-10 19:22:32   Death           440
     2021-08-10 19:22:32   Name            SK Düsseldorf
     2021-08-10 19:22:32   Updated         10.08.2021, 00:00 Uhr
Attributes:
   interval   10 */3 * * *
   readingList multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['64'])]"), 'Name', property('attributes.county')))
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['64'])]"), 'Cases', sprintf('%.0d',property('attributes.cases')))
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['64'])]"), 'Death', sprintf('%.0d',property('attributes.deaths')))
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['64'])]"), 'Cases_per_100k',sprintf('%.0f', property('attributes.cases_per_100k')))
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['64'])]"), 'Cases7_per_100k',sprintf('%.1f', property('attributes.cases7_per_100k')))
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['64'])]"), 'Updated', property('attributes.last_update'))
   update-on-start 1
   verbose    0

Gruß
Roman
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: yersinia am 11 August 2021, 09:27:55
Ja, ich hab ein ähnliches Problem - ist aber eine andere Quelle vom RKI (https://services1.arcgis.com/0MSEUqKaxRlEPj5g/arcgis/rest/services/ncov_cases/FeatureServer/2/query?f=json&where=Country_Region=%27Germany%27&returnGeometry=false&outFields=*&resultOffset).

In deiner Quelle (https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=OBJECTID=%2764%27&outFields=cases,deaths,cases_per_100k,cases_per_population,cases7_per_100k,BL,BL_ID,county,OBJECTID,last_update&returnGeometry=false&outSR=4326&f=json) kommen die Werte aber vor:
{"attributes":{"cases":26490,"deaths":440,"cases_per_100k":4259.68479297353,"cases_per_population":4.25968479297353,"cases7_per_100k":50.9747104330921,"BL":"Nordrhein-Westfalen","BL_ID":"5","county":"SK Düsseldorf","OBJECTID":64,"last_update":"11.08.2021, 00:00 Uhr"}}
Hast du mal ein reread initiiert?
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: romakrau am 12 August 2021, 08:45:54
Ja hatte ich versucht, aber irgendwie bekommt JsonMod das nicht geregelt.
Keiner einen Tip?
Gruß Roman
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: yersinia am 12 August 2021, 09:11:44
Keine Probleme festzustellen wenn ich dies nachstelle:
Internals:
   API_LAST_MSG 200
   API_LAST_RES 1628751812.64973
   CFGFN     
   DEF        https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=OBJECTID='64'&outFields=cases,deaths,cases_per_100k,cases_per_population,cases7_per_100k,BL,BL_ID,county,OBJECTID,last_update&returnGeometry=false&outSR=4326&f=json
   FUUID      6114c799-f33f-3151-2ed7-5fd81075ae9182de
   NAME       testJM
   NEXT       2021-08-12 10:00:00
   NR         41361
   SOURCE     https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=OBJECTID='64'&outFields=cases,deaths,cases_per_100k,cases_per_population,cases7_per_100k,BL,BL_ID,county,OBJECTID,last_update&returnGeometry=false&outSR=4326&f=json (200)
   STATE      ???
   SVN        24783 2021-07-21 22:37:12 UTC
   TYPE       JsonMod
   .attraggr:
   .attrminint:
   CONFIG:
     IN_REQUEST 0
     SOURCE     https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=OBJECTID='64'&outFields=cases,deaths,cases_per_100k,cases_per_population,cases7_per_100k,BL,BL_ID,county,OBJECTID,last_update&returnGeometry=false&outSR=4326&f=json
     SECRET:
   READINGS:
     2021-08-12 09:03:32   .computedReadings Cases7_per_100k,Name,Death,Updated,Cases_per_100k
     2021-08-12 09:03:32   Cases7_per_100k 58.2
     2021-08-12 09:03:32   Cases_per_100k  4274
     2021-08-12 09:03:32   Death           440
     2021-08-12 09:03:32   Name            SK Düsseldorf
     2021-08-12 09:03:32   Updated         12.08.2021, 00:00 Uhr
Attributes:
   readingList multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['64'])]"), 'Name', property('attributes.county')));
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['64'])]"), 'Cases', sprintf('%.0d',property('attributes.cases')));
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['64'])]"), 'Death', sprintf('%.0d',property('attributes.deaths')));
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['64'])]"), 'Cases_per_100k',sprintf('%.0f', property('attributes.cases_per_100k')));
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['64'])]"), 'Cases7_per_100k',sprintf('%.1f', property('attributes.cases7_per_100k')));
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['64'])]"), 'Updated', property('attributes.last_update'));


Aber zwei Sachen, dir mir aufgefallen sind:
1. deine JsonMod Version ist nicht die aktuellste; deine:
SVN        24420 2021-05-11 21:25:20 UTC
versus die aktuelle aus dem SVN:
SVN        24783 2021-07-21 22:37:12 UTC

2. in deinem ReadingsList fehlen abschließende Semikolon; dein readingsList:
   readingList multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['64'])]"), 'Name', property('attributes.county')))
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['64'])]"), 'Cases', sprintf('%.0d',property('attributes.cases')))
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['64'])]"), 'Death', sprintf('%.0d',property('attributes.deaths')))
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['64'])]"), 'Cases_per_100k',sprintf('%.0f', property('attributes.cases_per_100k')))
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['64'])]"), 'Cases7_per_100k',sprintf('%.1f', property('attributes.cases7_per_100k')))
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['64'])]"), 'Updated', property('attributes.last_update'))

versus
   readingList multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['64'])]"), 'Name', property('attributes.county')));
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['64'])]"), 'Cases', sprintf('%.0d',property('attributes.cases')));
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['64'])]"), 'Death', sprintf('%.0d',property('attributes.deaths')));
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['64'])]"), 'Cases_per_100k',sprintf('%.0f', property('attributes.cases_per_100k')));
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['64'])]"), 'Cases7_per_100k',sprintf('%.1f', property('attributes.cases7_per_100k')));
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['64'])]"), 'Updated', property('attributes.last_update'));


Ich empfehle dir, readingsList zu korrigieren und ein Update zu machen. Und danach ein reread und dann schauen wir weiter.
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: romakrau am 12 August 2021, 16:16:53
So, alles durchgeführt. Das Problem besteht weiterhin. Jemadn eine Idee?
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: yersinia am 12 August 2021, 16:19:14
Zitat von: romakrau am 12 August 2021, 16:16:53So, alles durchgeführt.
Ok, dann bitte ein neues List des Devices.
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: romakrau am 12 August 2021, 16:26:11
Hallo yersinia,
die Lösung ist sehr simple. Die Reihenfolge des Ergebnis der Abfrage (cases,deaths,cases_per_100k,cases...) muss mit der Reihenfolge der JsonMod Defination übereinstimmen. Dann gehts. Manchmal brauchts den Anstoss von anderen.
Danke und Gruß
Roman
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: romakrau am 12 August 2021, 16:30:47
Zu früh gefreut, jetzt fehlt der wert für das Update:
Internals:
   API_LAST_MSG 200
   API_LAST_RES 1628778513.72146
   DEF        https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=OBJECTID='64'&outFields=cases,deaths,cases_per_100k,cases_per_population,cases7_per_100k,BL,BL_ID,county,OBJECTID,last_update&returnGeometry=false&outSR=4326&f=json
   FUUID      5f975018-f33f-3c55-b947-2d72a37160719a57
   NAME       coronaSpreadCounties
   NEXT       2021-08-12 18:10:00
   NR         220
   SOURCE     https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=OBJECTID='64'&outFields=cases,deaths,cases_per_100k,cases_per_population,cases7_per_100k,BL,BL_ID,county,OBJECTID,last_update&returnGeometry=false&outSR=4326&f=json (200)
   STATE      active
   SVN        24783 2021-07-21 22:37:12 UTC
   TYPE       JsonMod
   CONFIG:
     IN_REQUEST 0
     SOURCE     https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=OBJECTID='64'&outFields=cases,deaths,cases_per_100k,cases_per_population,cases7_per_100k,BL,BL_ID,county,OBJECTID,last_update&returnGeometry=false&outSR=4326&f=json
     SECRET:
   OLDREADINGS:
   READINGS:
     2021-08-12 16:28:33   Cases           26578
     2021-08-12 16:28:33   Cases7_per_100k 58.2
     2021-08-12 16:28:33   Cases_per_100k  4274
     2021-08-12 16:28:33   Death           440
     2021-08-12 16:28:33   Name            SK Düsseldorf
Attributes:
   event-on-change-reading Updated,Cases7_per_100k,Cases
   interval   10 */6 * * *
   readingList multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['64'])]"),'Cases',sprintf('%d',property('attributes.cases')));
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['64'])]"),'Death',sprintf('%d',property('attributes.deaths')));
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['64'])]"),'Cases_per_100k',sprintf('%.0f',property('attributes.cases_per_100k')));
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['64'])]"),'Cases7_per_100k',sprintf('%.1f',property('attributes.cases7_per_100k')));
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['64'])]"),'Name',property('attributes.county')));
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['64'])]"),'Updated',property('attributes.last_update')));
   update-on-start 1
   verbose    0
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: yersinia am 12 August 2021, 16:42:32
Zitat von: romakrau am 12 August 2021, 16:26:11die Lösung ist sehr simple. Die Reihenfolge des Ergebnis der Abfrage (cases,deaths,cases_per_100k,cases...) muss mit der Reihenfolge der JsonMod Defination übereinstimmen. Dann gehts.
Ich glaube nicht, dass das beabsichtigt ist - ich vermute hier eher ein Bug. Aber wenn es in der richtigen Reihenfolge funktioniert, alles gut.

Zitat von: romakrau am 12 August 2021, 16:30:47Zu früh gefreut, jetzt fehlt der wert für das Update:
Wenn du verbose nicht auf 0 hättest, würdest du sehen, dass das Device ein Fehler wirft.
2021.08.12 16:34:40 2: [testJM] syntax error in readingList statement: ')'
Du hast in deinem Code eine schließende Klammer zuviel bei Name:
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['64'])]"),'Name',property('attributes.county')));

Richtig sollte es so aussehen:
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['64'])]"),'Cases', sprintf('%d',property('attributes.cases')));
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['64'])]"),'Death', sprintf('%d',property('attributes.deaths')));
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['64'])]"),'Cases_per_100k', sprintf('%.0f',property('attributes.cases_per_100k')));
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['64'])]"),'Cases7_per_100k', sprintf('%.1f',property('attributes.cases7_per_100k')));
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['64'])]"),'Name', property('attributes.county'));
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['64'])]"),'Updated', property('attributes.last_update'));
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: romakrau am 12 August 2021, 16:56:35
Danke für die Hilfe. Jetzt klappt's.
Gruß
Roman
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: curt am 29 September 2021, 03:47:57
Wo und wie bekomme ich die 7-Tage-Inzidenz von Deutschland her? Hat das jemand integriert?

Ich habe mein Bundesland, zwei Landkreise, das funktioniert fein. Das zeige ich auch in FTUI an. Aber Deutschland selbst fehlt mir.
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: yersinia am 29 September 2021, 07:45:19
Zitat von: curt am 29 September 2021, 03:47:57Wo und wie bekomme ich die 7-Tage-Inzidenz von Deutschland her? Hat das jemand integriert?
Das hättest du besser hier gefragt: Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz  (https://forum.fhem.de/index.php/topic,113798.0.html)
Siehe dort post #60 (https://forum.fhem.de/index.php/topic,113798.msg1152987.html#msg1152987):
Zitat von: yersinia am 28 April 2021, 14:52:02Aber auch: https://api.corona-zahlen.org/docs/ (https://api.corona-zahlen.org/docs/) (aber keine csv) ->
API mit Incidence für Deutschland seit dem 31.01.2020 (https://api.corona-zahlen.org/docs/endpoints/germany.html#germany-history-incidence) => JSON: https://api.corona-zahlen.org/germany/history/incidence (https://api.corona-zahlen.org/germany/history/incidence)
API mit Incidence für Bundesländer (Bundesland-Code benötigt) seit dem 31.01.2020 (https://api.corona-zahlen.org/docs/endpoints/states.html#states-state-history-incidence) => JSON: https://api.corona-zahlen.org/states/NI/history/incidence (https://api.corona-zahlen.org/states/NI/history/incidence) (Bundesland-Code (https://api.corona-zahlen.org/states))
API mit Incidence für Gemeinden Kreise (AGS benötigt) seit dem 31.01.2020 (https://api.corona-zahlen.org/docs/endpoints/districts.html#districts-ags-history-incidence) => JSON: https://api.corona-zahlen.org/districts/08115/history/incidence (https://api.corona-zahlen.org/districts/08115/history/incidence) (AGS Schlüssel (https://api.corona-zahlen.org/districts))
https://api.corona-zahlen.org/germany (https://api.corona-zahlen.org/germany) liefert auch die aktuelle (7-Tages-)Inzidenz für Deutschland.
Titel: Antw:Anwendungsbeispiel JsonMod #2: CORONA Verbreitung
Beitrag von: curt am 29 September 2021, 08:46:44
Hallo @yersinia

ich hatte Deine freundlichen Hinweise zu schnell gelesen und war zudem gedanklich auf dem falschen Boot.

Herzlichen Dank!