Autor Thema: Corona Fallzahlenübersicht in FTUI (COVID-19)  (Gelesen 1020 mal)

Offline somansch

  • Full Member
  • ***
  • Beiträge: 321
Corona Fallzahlenübersicht in FTUI (COVID-19)
« am: 24 März 2020, 23:09:09 »
Aus dem derzeit gegebenen (äußerst kritischen) Anlaß habe ich die aktuellen Fallzahlen in meine FTUI Anzeige eingebaut. Hierzu habe ich das Beispiel vom neuen "JsonMod" - Modul als Datenquelle genutzt:https://forum.fhem.de/index.php/topic,109413.0.html

Hier die Device-Konfig:
defmod coronaSpread JsonMod https://corona.lmao.ninja/countries
attr coronaSpread interval */10 * * * *
attr coronaSpread 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'));;
attr coronaSpread room 097_News
attr coronaSpread stateFormat Germany_procent_todayDeaths
attr coronaSpread userReadings Germany_procent_todayDeaths {ReadingsVal("coronaSpread","Germany_todayDeaths","")/ReadingsVal("coronaSpread","Germany_deaths","")*100},\
USA_procent_todayDeaths {ReadingsVal("coronaSpread","USA_todayDeaths","")/ReadingsVal("coronaSpread","USA_deaths","")*100},\
UK_procent_todayDeaths {ReadingsVal("coronaSpread","UK_todayDeaths","")/ReadingsVal("coronaSpread","UK_deaths","")*100},\
Denmark_procent_todayDeaths {ReadingsVal("coronaSpread","Denmark_todayDeaths","")/ReadingsVal("coronaSpread","Denmark_deaths","")*100},\
France_procent_todayDeaths {ReadingsVal("coronaSpread","France_todayDeaths","")/ReadingsVal("coronaSpread","France_deaths","")*100},\
Spain_procent_todayDeaths {ReadingsVal("coronaSpread","Spain_todayDeaths","")/ReadingsVal("coronaSpread","Spain_deaths","")*100},\
Netherlands_procent_todayDeaths {ReadingsVal("coronaSpread","Netherlands_todayDeaths","")/ReadingsVal("coronaSpread","Netherlands_deaths","")*100},\
Italy_procent_todayDeaths {ReadingsVal("coronaSpread","Italy_todayDeaths","")/ReadingsVal("coronaSpread","Italy_deaths","")*100},\
China_procent_todayDeaths {ReadingsVal("coronaSpread","China_todayDeaths","")/ReadingsVal("coronaSpread","China_deaths","")*100},\
Germany_procent_todayCases {ReadingsVal("coronaSpread","Germany_todayCases","")/ReadingsVal("coronaSpread","Germany_cases","")*100},\
USA_procent_todayCases {ReadingsVal("coronaSpread","USA_todayCases","")/ReadingsVal("coronaSpread","USA_cases","")*100},\
UK_procent_todayCases {ReadingsVal("coronaSpread","UK_todayCases","")/ReadingsVal("coronaSpread","UK_cases","")*100},\
Denmark_procent_todayCases {ReadingsVal("coronaSpread","Denmark_todayCases","")/ReadingsVal("coronaSpread","Denmark_cases","")*100},\
France_procent_todayCases {ReadingsVal("coronaSpread","France_todayCases","")/ReadingsVal("coronaSpread","France_cases","")*100},\
Spain_procent_todayCases {ReadingsVal("coronaSpread","Spain_todayCases","")/ReadingsVal("coronaSpread","Spain_cases","")*100},\
Netherlands_procent_todayCases {ReadingsVal("coronaSpread","Netherlands_todayCases","")/ReadingsVal("coronaSpread","Netherlands_cases","")*100},\
Italy_procent_todayCases {ReadingsVal("coronaSpread","Italy_todayCases","")/ReadingsVal("coronaSpread","Italy_cases","")*100},\
China_procent_todayCases {ReadingsVal("coronaSpread","China_todayCases","")/ReadingsVal("coronaSpread","China_cases","")*100}\

Der FTUI Code ist im Anhang.

Viele Grüße und bleibt gesund!
Andreas
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline Dracolein

  • Full Member
  • ***
  • Beiträge: 211
Antw:Corona Fallzahlenübersicht in FTUI (COVID-19)
« Antwort #1 am: 25 März 2020, 10:18:20 »
Könntest Du mir auf die Sprünge helfen, wie Deine Vorlage richtig eingebunden wird in ein laufendes FTUI?
Dein Beispiel sieht toll aus, aber ich habe noch nie mit Templates gearbeitet.

Das Device ist 1:1 entsprechend Deinem Beispiel bei mir angelegt und läuft.
Die Datei "template_news_corona.html" habe ich 1:1 im Ordner opt/fhem/www/tablet/ abgespeichert (dort liegen alle meine html Dateien, die ich nutze).
Nun möchte ich das Ganze in mein Layout einbinden, das in dem Fall aus einer weitgehend leeren HTML Seite auf Gridster-Basis besteht (rechts die Menüleiste, links eine freie, riesige Zelle).

Wenn ich folgenden Code-Schnipsel aus Deinem Beispiel dort einfüge
<div class="hbox">
<div class="vbox phone-width">
<div class="card lift">
<header>Land - Gesamt - Gesamt pro Mio - Neu - Erkrankt - &dagger; - neu &dagger; - Geheilt</header>
<section>
<div data-template="template_news_corona.html" data-parameter='{"var_country":"Germany"}'></div>
</section>
<section>
<div data-template="template_news_corona.html" data-parameter='{"var_country":"USA"}'></div>
</section>
<section>
<div data-template="template_news_corona.html" data-parameter='{"var_country":"UK"}'></div>
</section>
<section>
<div data-template="template_news_corona.html" data-parameter='{"var_country":"Denmark"}'></div>
</section>
<section>
<div data-template="template_news_corona.html" data-parameter='{"var_country":"France"}'></div>
</section>
<section>
<div data-template="template_news_corona.html" data-parameter='{"var_country":"Spain"}'></div>
</section>
<section>
<div data-template="template_news_corona.html" data-parameter='{"var_country":"Netherlands"}'></div>
</section>
<section>
<div data-template="template_news_corona.html" data-parameter='{"var_country":"Italy"}'></div>
</section>
<section>
<div data-template="template_news_corona.html" data-parameter='{"var_country":"China"}'></div>
</section>
</div>
</div>
</div>
läuft es zwar inhaltlich, indem die Daten und Icons dargestellt werden, jedoch sind sie alle vertikal untereinander ohne Farbe darbestellt und nicht tabellarisch schön gelistet.
Bevor ich mir ein eigenes Layout bastel, bin ich neugierig, was ich falsch mache.

« Letzte Änderung: 25 März 2020, 10:24:12 von Dracolein »
Raspberry Pi 4 mit FHEM; FTUI Dashboard auf Asus 15,6" VT168H Touchscreen; ZigBee mit ConBee2 USB-Stick; div. Shelly 2.5; integr. Gaszähler mit ESP8266 & ESPEasy;

Offline somansch

  • Full Member
  • ***
  • Beiträge: 321
Antw:Corona Fallzahlenübersicht in FTUI (COVID-19)
« Antwort #2 am: 25 März 2020, 12:22:55 »
Könntest Du mir auf die Sprünge helfen, wie Deine Vorlage richtig eingebunden wird in ein laufendes FTUI?
Dein Beispiel sieht toll aus, aber ich habe noch nie mit Templates gearbeitet.

Das Device ist 1:1 entsprechend Deinem Beispiel bei mir angelegt und läuft.
Die Datei "template_news_corona.html" habe ich 1:1 im Ordner opt/fhem/www/tablet/ abgespeichert (dort liegen alle meine html Dateien, die ich nutze).
Nun möchte ich das Ganze in mein Layout einbinden, das in dem Fall aus einer weitgehend leeren HTML Seite auf Gridster-Basis besteht (rechts die Menüleiste, links eine freie, riesige Zelle).

Wenn ich folgenden Code-Schnipsel aus Deinem Beispiel dort einfüge
<div class="hbox">
<div class="vbox phone-width">
<div class="card lift">
<header>Land - Gesamt - Gesamt pro Mio - Neu - Erkrankt - &dagger; - neu &dagger; - Geheilt</header>
<section>
<div data-template="template_news_corona.html" data-parameter='{"var_country":"Germany"}'></div>
</section>
<section>
<div data-template="template_news_corona.html" data-parameter='{"var_country":"USA"}'></div>
</section>
<section>
<div data-template="template_news_corona.html" data-parameter='{"var_country":"UK"}'></div>
</section>
<section>
<div data-template="template_news_corona.html" data-parameter='{"var_country":"Denmark"}'></div>
</section>
<section>
<div data-template="template_news_corona.html" data-parameter='{"var_country":"France"}'></div>
</section>
<section>
<div data-template="template_news_corona.html" data-parameter='{"var_country":"Spain"}'></div>
</section>
<section>
<div data-template="template_news_corona.html" data-parameter='{"var_country":"Netherlands"}'></div>
</section>
<section>
<div data-template="template_news_corona.html" data-parameter='{"var_country":"Italy"}'></div>
</section>
<section>
<div data-template="template_news_corona.html" data-parameter='{"var_country":"China"}'></div>
</section>
</div>
</div>
</div>
läuft es zwar inhaltlich, indem die Daten und Icons dargestellt werden, jedoch sind sie alle vertikal untereinander ohne Farbe darbestellt und nicht tabellarisch schön gelistet.
Bevor ich mir ein eigenes Layout bastel, bin ich neugierig, was ich falsch mache.

Ich nutze das Flex-Layout. Weitere Templates und die Konfig hatte ich letztes Jahr in diesem Post bereitgestellt:https://forum.fhem.de/index.php/topic,37378.msg885401.html#msg885401

Ich hoffe, das hilft dir  ;)

Offline TWART016

  • Sr. Member
  • ****
  • Beiträge: 920
Antw:Corona Fallzahlenübersicht in FTUI (COVID-19)
« Antwort #3 am: 25 März 2020, 23:43:49 »
Ich habe das ganze bei mir ohne pagebutton umgesetzt. Allerdings stimmen bei mir die Abstände nicht.

Ich vermute das liegt an den Flex-attributen. Auch habe die von dir in meine eigene css übernommen.

Intel NUC, Raspberry Pi,CUL 433+868, JeeLink, Uniroll, LD382/LD686 + WifiLight, Eventghost, Tablet UI, Homekit/Homebridge/Siri, Alexa, Squeezebox, Onkyo, MAX, Harmony, KODI, Winconnect, Geofancy, Nmap, Sysmon, Telegram

Offline herrmannj

  • Global Moderator
  • Hero Member
  • ****
  • Beiträge: 5497
Antw:Corona Fallzahlenübersicht in FTUI (COVID-19)
« Antwort #4 am: 25 März 2020, 23:56:41 »
Falls es von Interesse ist: User Andy89 hat eine Daten Quelle für die (deutschen) Bundesländer beim RKI aufgetan. Fhem Umsetzung ab hier https://forum.fhem.de/index.php/topic,109413.msg1035075.html#msg1035075
Braucht ein aktuelles JsonMod (ab morgen im update).
smartVisu mit fronthem, einiges an HM, RFXTRX, Oregon, CUL, Homeeasy, ganz viele LED + Diverse
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline somansch

  • Full Member
  • ***
  • Beiträge: 321
Antw:Corona Fallzahlenübersicht in FTUI (COVID-19)
« Antwort #5 am: 26 März 2020, 00:04:46 »
Ich habe das ganze bei mir ohne pagebutton umgesetzt. Allerdings stimmen bei mir die Abstände nicht.

Ich vermute das liegt an den Flex-attributen. Auch habe die von dir in meine eigene css übernommen.
Hier meine aktuelle css.

Offline TWART016

  • Sr. Member
  • ****
  • Beiträge: 920
Antw:Corona Fallzahlenübersicht in FTUI (COVID-19)
« Antwort #6 am: 26 März 2020, 00:20:28 »
Hier meine aktuelle css.

Ich habe hdm-flexbox-item-10, hdm-flexbox-item-70 und hdm-flexbox-container genauso in meiner css. Trotzdem scheint das nicht zu greifen.

Der Fehler heißt:
Zitat
Invalid property value
Intel NUC, Raspberry Pi,CUL 433+868, JeeLink, Uniroll, LD382/LD686 + WifiLight, Eventghost, Tablet UI, Homekit/Homebridge/Siri, Alexa, Squeezebox, Onkyo, MAX, Harmony, KODI, Winconnect, Geofancy, Nmap, Sysmon, Telegram

Offline Andy89

  • Full Member
  • ***
  • Beiträge: 304
Antw:Corona Fallzahlenübersicht in FTUI (COVID-19)
« Antwort #7 am: 26 März 2020, 15:48:42 »
so ich habe die Vorlage von Andreas genommen und minimal angepasst, damit ich die Welt Daten auch angezeigt bekomme.

Hier meine Definitionen für die Weltanzeige:
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},\
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"}

hier meine Länderdaten:
defmod coronaSpread JsonMod https://corona.lmao.ninja/countries
attr coronaSpread event-on-change-reading .*
attr coronaSpread event-on-update-reading Germany_todayDeaths
attr coronaSpread interval 1/10 * * * *
attr coronaSpread readingList multi(jsonPath("\$.[?(\@.['countryInfo'].['iso3'] in ['DEU', 'CHN', 'NLD', 'GBR', 'ITA', 'ESP', 'FRA','IRN', 'USA'])]"), concat(property('countryInfo.iso3'), '_name'), property('country'));;\
multi(jsonPath("\$.[?(\@.['countryInfo'].['iso3'] in ['DEU', 'CHN', 'NLD', 'GBR', 'ITA', 'ESP', 'FRA','IRN', 'USA'])]"), concat(property('countryInfo.iso3'), '_cases'), property('cases'));;\
multi(jsonPath("\$.[?(\@.['countryInfo'].['iso3'] in ['DEU', 'CHN', 'NLD', 'GBR', 'ITA', 'ESP', 'FRA','IRN', 'USA'])]"), concat(property('countryInfo.iso3'), '_todayCases'), property('todayCases'));;\
multi(jsonPath("\$.[?(\@.['countryInfo'].['iso3'] in ['DEU', 'CHN', 'NLD', 'GBR', 'ITA', 'ESP', 'FRA','IRN', 'USA'])]"), concat(property('countryInfo.iso3'), '_active'), property('active'));;\
multi(jsonPath("\$.[?(\@.['countryInfo'].['iso3'] in ['DEU', 'CHN', 'NLD', 'GBR', 'ITA', 'ESP', 'FRA','IRN', 'USA'])]"), concat(property('countryInfo.iso3'), '_deaths'), property('deaths'));;\
multi(jsonPath("\$.[?(\@.['countryInfo'].['iso3'] in ['DEU', 'CHN', 'NLD', 'GBR', 'ITA', 'ESP', 'FRA','IRN', 'USA'])]"), concat(property('countryInfo.iso3'), '_todayDeaths'), property('todayDeaths'));;\
multi(jsonPath("\$.[?(\@.['countryInfo'].['iso3'] in ['DEU', 'CHN', 'NLD', 'GBR', 'ITA', 'ESP', 'FRA','IRN', 'USA'])]"), concat(property('countryInfo.iso3'), '_recovered'), property('recovered'));;\
multi(jsonPath("\$.[?(\@.['countryInfo'].['iso3'] in ['DEU', 'CHN', 'NLD', 'GBR', 'ITA', 'ESP', 'FRA','IRN', 'USA'])]"), concat(property('countryInfo.iso3'), '_casesPerOneMillion'), property('casesPerOneMillion'));;\
multi(jsonPath("\$.[?(\@.['countryInfo'].['iso3'] in ['DEU', 'CHN', 'NLD', 'GBR', 'ITA', 'ESP', 'FRA','IRN', 'USA'])]"), concat(property('countryInfo.iso3'), '_critical'), property('critical'));;
attr coronaSpread room Status
attr coronaSpread stateFormat Heutige deutsche Fälle: DEU_todayCases
attr coronaSpread userReadings DEU_procent_todayDeaths {ReadingsVal("coronaSpread","DEU_todayDeaths","")/ReadingsVal("coronaSpread","DEU_deaths","")*100},\
USA_procent_todayDeaths {ReadingsVal("coronaSpread","USA_todayDeaths","")/ReadingsVal("coronaSpread","USA_deaths","")*100},\
GBR_procent_todayDeaths {ReadingsVal("coronaSpread","GBR_todayDeaths","")/ReadingsVal("coronaSpread","GBR_deaths","")*100},\
FRA_procent_todayDeaths {ReadingsVal("coronaSpread","FRA_todayDeaths","")/ReadingsVal("coronaSpread","FRA_deaths","")*100},\
ESP_procent_todayDeaths {ReadingsVal("coronaSpread","ESP_todayDeaths","")/ReadingsVal("coronaSpread","ESP_deaths","")*100},\
NLD_procent_todayDeaths {ReadingsVal("coronaSpread","NLD_todayDeaths","")/ReadingsVal("coronaSpread","NLD_deaths","")*100},\
ITA_procent_todayDeaths {ReadingsVal("coronaSpread","ITA_todayDeaths","")/ReadingsVal("coronaSpread","ITA_deaths","")*100},\
CHN_procent_todayDeaths {ReadingsVal("coronaSpread","CHN_todayDeaths","")/ReadingsVal("coronaSpread","CHN_deaths","")*100},\
IRN_procent_todayDeaths {ReadingsVal("coronaSpread","IRN_todayDeaths","")/ReadingsVal("coronaSpread","IRN_deaths","")*100},\
DEU_procent_todayCases {ReadingsVal("coronaSpread","DEU_todayCases","")/ReadingsVal("coronaSpread","DEU_cases","")*100},\
USA_procent_todayCases {ReadingsVal("coronaSpread","USA_todayCases","")/ReadingsVal("coronaSpread","USA_cases","")*100},\
GBR_procent_todayCases {ReadingsVal("coronaSpread","GBR_todayCases","")/ReadingsVal("coronaSpread","GBR_cases","")*100},\
FRA_procent_todayCases {ReadingsVal("coronaSpread","FRA_todayCases","")/ReadingsVal("coronaSpread","FRA_cases","")*100},\
ESP_procent_todayCases {ReadingsVal("coronaSpread","ESP_todayCases","")/ReadingsVal("coronaSpread","ESP_cases","")*100},\
NLD_procent_todayCases {ReadingsVal("coronaSpread","NLD_todayCases","")/ReadingsVal("coronaSpread","NLD_cases","")*100},\
ITA_procent_todayCases {ReadingsVal("coronaSpread","ITA_todayCases","")/ReadingsVal("coronaSpread","ITA_cases","")*100},\
CHN_procent_todayCases {ReadingsVal("coronaSpread","CHN_todayCases","")/ReadingsVal("coronaSpread","CHN_cases","")*100},\
IRN_procent_todayCases {ReadingsVal("coronaSpread","IRN_todayCases","")/ReadingsVal("coronaSpread","IRN_cases","")*100}

zusätzlich ist noch ein Notifiy notwendig, um die Vortageszahlen kurz vor 0 Uhr abzuspeichern:
defmod di_coronaStats DOIF ([23:52])(setreading coronaSpreadWorld world_deaths_yesterday [coronaSpreadWorld:world_deaths])\
(setreading coronaSpreadWorld world_cases_yesterday [coronaSpreadWorld:world_cases])\
(setreading coronaSpreadWorld world_recovered_yesterday [coronaSpreadWorld:world_recovered])
attr di_coronaStats do always

Zusätzlich habe ich eine zweite Seite angelegt mit den Bundesland-Daten. Leider sind die RKI-Daten nur tagesaktuell und haben keine Zahl für die Geheilten. Somit kann man auch keine Aktiven Fälle berechnen. Um die fehlenden Werte zu Berechnen, lohnt es sich sicher ein Perl Script zu erzeugen. Dazu bin ich noch nicht gekommen, weswegen es auch keine Differenz zum Vortag gibt.

Hier die Bundesland-Daten:
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 .*
attr coronaSpreadDe interval 3 0 * * *
attr coronaSpreadDe readingList multi(jsonPath('$.features[*]'), concat(property('attributes.LAN_ew_GEN'),'_name'), property('attributes.LAN_ew_GEN'));;\
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 NRW Fälle: Nordrhein-Westfalen_cases Tote: Nordrhein-Westfalen_deaths
attr coronaSpreadDe userReadings updated_human {POSIX::strftime ("%d.%m.%Y %H:%M", localtime(ReadingsVal("coronaSpreadDe","Nordrhein-Westfalen_lastUpdate",0)/1000))}

wie auch Andreas habe ich mein template und die zwei HTML Seiten unten angehängt unten angehängt. Die Flaggen habe ich an zwei verschiedenen Stellen als zip heruntergeladen und die Namen angepasst, damit es passt.

Beste Grüße
Andreas

edit: @hermann, du liest ja sicher mit. Könntest du die "Umformatierung" von Umlauten auch bei den Readings übernehmen? Dann passiert sowas nicht:
Baden-Wurttemberg_name Baden-W�rttemberg

das passiert mit diesem Teil des readingList:
multi(jsonPath('$.features[*]'), concat(property('attributes.LAN_ew_GEN'),'_name'), property('attributes.LAN_ew_GEN'));
« Letzte Änderung: 26 März 2020, 15:51:23 von Andy89 »
FHEM 6.0 auf rPi4 docker (mit Alexa & Siri); dbLog, FTUI, Sonos, XiaomiMapCreator auf rPi4 docker;
raspimatic auf rPi3+ > diverse Aktoren und Sensoren;
LGW > (PCA301),EC3000,LaCrosse; MQTT2 > WLAN-Steckdosen,Xiaomi Map;
Harmony Hub;Sonos;Onkyo AVR;RGB WLAN Controller;Netatmo;Withings;Unifi;AMAD
Gefällt mir Gefällt mir x 2 Liste anzeigen

Offline somansch

  • Full Member
  • ***
  • Beiträge: 321
Antw:Corona Fallzahlenübersicht in FTUI (COVID-19)
« Antwort #8 am: 26 März 2020, 16:00:18 »
so ich habe die Vorlage von Andreas genommen und minimal angepasst, damit ich die Welt Daten auch angezeigt bekomme.

Hier meine Definitionen für die Weltanzeige:
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},\
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"}

hier meine Länderdaten:
defmod coronaSpread JsonMod https://corona.lmao.ninja/countries
attr coronaSpread event-on-change-reading .*
attr coronaSpread event-on-update-reading Germany_todayDeaths
attr coronaSpread interval 1/10 * * * *
attr coronaSpread readingList multi(jsonPath("\$.[?(\@.['countryInfo'].['iso3'] in ['DEU', 'CHN', 'NLD', 'GBR', 'ITA', 'ESP', 'FRA','IRN', 'USA'])]"), concat(property('countryInfo.iso3'), '_name'), property('country'));;\
multi(jsonPath("\$.[?(\@.['countryInfo'].['iso3'] in ['DEU', 'CHN', 'NLD', 'GBR', 'ITA', 'ESP', 'FRA','IRN', 'USA'])]"), concat(property('countryInfo.iso3'), '_cases'), property('cases'));;\
multi(jsonPath("\$.[?(\@.['countryInfo'].['iso3'] in ['DEU', 'CHN', 'NLD', 'GBR', 'ITA', 'ESP', 'FRA','IRN', 'USA'])]"), concat(property('countryInfo.iso3'), '_todayCases'), property('todayCases'));;\
multi(jsonPath("\$.[?(\@.['countryInfo'].['iso3'] in ['DEU', 'CHN', 'NLD', 'GBR', 'ITA', 'ESP', 'FRA','IRN', 'USA'])]"), concat(property('countryInfo.iso3'), '_active'), property('active'));;\
multi(jsonPath("\$.[?(\@.['countryInfo'].['iso3'] in ['DEU', 'CHN', 'NLD', 'GBR', 'ITA', 'ESP', 'FRA','IRN', 'USA'])]"), concat(property('countryInfo.iso3'), '_deaths'), property('deaths'));;\
multi(jsonPath("\$.[?(\@.['countryInfo'].['iso3'] in ['DEU', 'CHN', 'NLD', 'GBR', 'ITA', 'ESP', 'FRA','IRN', 'USA'])]"), concat(property('countryInfo.iso3'), '_todayDeaths'), property('todayDeaths'));;\
multi(jsonPath("\$.[?(\@.['countryInfo'].['iso3'] in ['DEU', 'CHN', 'NLD', 'GBR', 'ITA', 'ESP', 'FRA','IRN', 'USA'])]"), concat(property('countryInfo.iso3'), '_recovered'), property('recovered'));;\
multi(jsonPath("\$.[?(\@.['countryInfo'].['iso3'] in ['DEU', 'CHN', 'NLD', 'GBR', 'ITA', 'ESP', 'FRA','IRN', 'USA'])]"), concat(property('countryInfo.iso3'), '_casesPerOneMillion'), property('casesPerOneMillion'));;\
multi(jsonPath("\$.[?(\@.['countryInfo'].['iso3'] in ['DEU', 'CHN', 'NLD', 'GBR', 'ITA', 'ESP', 'FRA','IRN', 'USA'])]"), concat(property('countryInfo.iso3'), '_critical'), property('critical'));;
attr coronaSpread room Status
attr coronaSpread stateFormat Heutige deutsche Fälle: DEU_todayCases
attr coronaSpread userReadings DEU_procent_todayDeaths {ReadingsVal("coronaSpread","DEU_todayDeaths","")/ReadingsVal("coronaSpread","DEU_deaths","")*100},\
USA_procent_todayDeaths {ReadingsVal("coronaSpread","USA_todayDeaths","")/ReadingsVal("coronaSpread","USA_deaths","")*100},\
GBR_procent_todayDeaths {ReadingsVal("coronaSpread","GBR_todayDeaths","")/ReadingsVal("coronaSpread","GBR_deaths","")*100},\
FRA_procent_todayDeaths {ReadingsVal("coronaSpread","FRA_todayDeaths","")/ReadingsVal("coronaSpread","FRA_deaths","")*100},\
ESP_procent_todayDeaths {ReadingsVal("coronaSpread","ESP_todayDeaths","")/ReadingsVal("coronaSpread","ESP_deaths","")*100},\
NLD_procent_todayDeaths {ReadingsVal("coronaSpread","NLD_todayDeaths","")/ReadingsVal("coronaSpread","NLD_deaths","")*100},\
ITA_procent_todayDeaths {ReadingsVal("coronaSpread","ITA_todayDeaths","")/ReadingsVal("coronaSpread","ITA_deaths","")*100},\
CHN_procent_todayDeaths {ReadingsVal("coronaSpread","CHN_todayDeaths","")/ReadingsVal("coronaSpread","CHN_deaths","")*100},\
IRN_procent_todayDeaths {ReadingsVal("coronaSpread","IRN_todayDeaths","")/ReadingsVal("coronaSpread","IRN_deaths","")*100},\
DEU_procent_todayCases {ReadingsVal("coronaSpread","DEU_todayCases","")/ReadingsVal("coronaSpread","DEU_cases","")*100},\
USA_procent_todayCases {ReadingsVal("coronaSpread","USA_todayCases","")/ReadingsVal("coronaSpread","USA_cases","")*100},\
GBR_procent_todayCases {ReadingsVal("coronaSpread","GBR_todayCases","")/ReadingsVal("coronaSpread","GBR_cases","")*100},\
FRA_procent_todayCases {ReadingsVal("coronaSpread","FRA_todayCases","")/ReadingsVal("coronaSpread","FRA_cases","")*100},\
ESP_procent_todayCases {ReadingsVal("coronaSpread","ESP_todayCases","")/ReadingsVal("coronaSpread","ESP_cases","")*100},\
NLD_procent_todayCases {ReadingsVal("coronaSpread","NLD_todayCases","")/ReadingsVal("coronaSpread","NLD_cases","")*100},\
ITA_procent_todayCases {ReadingsVal("coronaSpread","ITA_todayCases","")/ReadingsVal("coronaSpread","ITA_cases","")*100},\
CHN_procent_todayCases {ReadingsVal("coronaSpread","CHN_todayCases","")/ReadingsVal("coronaSpread","CHN_cases","")*100},\
IRN_procent_todayCases {ReadingsVal("coronaSpread","IRN_todayCases","")/ReadingsVal("coronaSpread","IRN_cases","")*100}

zusätzlich ist noch ein Notifiy notwendig, um die Vortageszahlen kurz vor 0 Uhr abzuspeichern:
defmod di_coronaStats DOIF ([23:52])(setreading coronaSpreadWorld world_deaths_yesterday [coronaSpreadWorld:world_deaths])\
(setreading coronaSpreadWorld world_cases_yesterday [coronaSpreadWorld:world_cases])\
(setreading coronaSpreadWorld world_recovered_yesterday [coronaSpreadWorld:world_recovered])
attr di_coronaStats do always

Zusätzlich habe ich eine zweite Seite angelegt mit den Bundesland-Daten. Leider sind die RKI-Daten nur tagesaktuell und haben keine Zahl für die Geheilten. Somit kann man auch keine Aktiven Fälle berechnen. Um die fehlenden Werte zu Berechnen, lohnt es sich sicher ein Perl Script zu erzeugen. Dazu bin ich noch nicht gekommen, weswegen es auch keine Differenz zum Vortag gibt.

Hier die Bundesland-Daten:
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 .*
attr coronaSpreadDe interval 3 0 * * *
attr coronaSpreadDe readingList multi(jsonPath('$.features[*]'), concat(property('attributes.LAN_ew_GEN'),'_name'), property('attributes.LAN_ew_GEN'));;\
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 NRW Fälle: Nordrhein-Westfalen_cases Tote: Nordrhein-Westfalen_deaths
attr coronaSpreadDe userReadings updated_human {POSIX::strftime ("%d.%m.%Y %H:%M", localtime(ReadingsVal("coronaSpreadDe","Nordrhein-Westfalen_lastUpdate",0)/1000))}

wie auch Andreas habe ich mein template und die zwei HTML Seiten unten angehängt unten angehängt. Die Flaggen habe ich an zwei verschiedenen Stellen als zip heruntergeladen und die Namen angepasst, damit es passt.

Beste Grüße
Andreas

edit: @hermann, du liest ja sicher mit. Könntest du die "Umformatierung" von Umlauten auch bei den Readings übernehmen? Dann passiert sowas nicht:
Baden-Wurttemberg_name Baden-W�rttemberg

das passiert mit diesem Teil des readingList:
multi(jsonPath('$.features[*]'), concat(property('attributes.LAN_ew_GEN'),'_name'), property('attributes.LAN_ew_GEN'));

Danke für deine Arbeit. Was hälst du davon die deutschen Zahlen von pro 100k auf pro 1 Mio umzurechnen?

Offline Andy89

  • Full Member
  • ***
  • Beiträge: 304
Antw:Corona Fallzahlenübersicht in FTUI (COVID-19)
« Antwort #9 am: 26 März 2020, 16:03:06 »
Danke für deine Arbeit. Was hälst du davon die deutschen Zahlen von pro 100k auf pro 1 Mio umzurechnen?
ging ja nur so gut, weil du super Vorarbeit geleistet hast  :)

das würde ich genau wie die Berechnungen mit den Vortageszahlen eher in nem Script auslagern. Ich will nicht 3 Userreadings pro Bundesland anlegen. Oder geht das einfacher? Aber ja, ist auf jeden Fall sinnvoll
FHEM 6.0 auf rPi4 docker (mit Alexa & Siri); dbLog, FTUI, Sonos, XiaomiMapCreator auf rPi4 docker;
raspimatic auf rPi3+ > diverse Aktoren und Sensoren;
LGW > (PCA301),EC3000,LaCrosse; MQTT2 > WLAN-Steckdosen,Xiaomi Map;
Harmony Hub;Sonos;Onkyo AVR;RGB WLAN Controller;Netatmo;Withings;Unifi;AMAD

Offline Andy89

  • Full Member
  • ***
  • Beiträge: 304
Antw:Corona Fallzahlenübersicht in FTUI (COVID-19)
« Antwort #10 am: 26 März 2020, 21:52:57 »
so ich hab mal eben was versucht zu programmieren. Im Anhang ist eine utils. In den ersten Zeilen kann man die Länder, Bundesländer und die entsprechenden Devices dafür anpassen.
In den Methoden dadrunter sollte man auf jeden Fall mal die Readings kontrollieren, ob die richtig sind. Diese sind natürlich auf meine Readings ausgelegt. aber ich hoffe, dass eindeutig ist, was wofür ist.

Zusätzlich habe ich mein DOIF angepasst:
defmod di_coronaStats DOIF ([23:52])(setreading coronaSpreadWorld world_deaths_yesterday [coronaSpreadWorld:world_deaths])\
(setreading coronaSpreadWorld world_cases_yesterday [coronaSpreadWorld:world_cases])\
(setreading coronaSpreadWorld world_recovered_yesterday [coronaSpreadWorld:world_recovered])\
({createStatesYesterdayValues()})\
({createCountriesYesterdayValues()})\
\
DOELSEIF ([coronaSpreadDe:Nordrhein-Westfalen_cases])({calcStatesDiffBetweenYesterdayAndToday()})\
DOELSEIF ([coronaSpread:DEU_todayDeaths])({calcCountriesDiffBetweenYesterdayAndToday()})
attr di_coronaStats do always
attr di_coronaStats room Corona
attr di_coronaStats wait 0:30:30

um 23:52 werden jeden Tag die "Gestern" Werte für Welt, Bundesländer und Länder Daten erstellt.

Sobald "coronaSpreadDe:Nordrhein-Westfalen_cases" ein Event auslöst (bei Änderung oder Update) werden 30 Sekunden später die "Tageswerte" berechnet. Die Tageswerte sind in dem Fall ja Vortageswerte, so muss aber am Template nichts verändert werden. => das passiert nur einmal am Tag gegen 0:03 (bei mir)

Das gleiche passiert auch bei einem Update von "coronaSpread:Germany_todayDeaths" => dies passiert natürlich häufiger am Tag

Vielleicht nutzt es jemanden.

Beste Grüße und bleibt Gesund,
Andy

p.s.: ich bin mir noch nicht ganz sicher, ob das DOIF alles korrekt erledigt. Beim manuellen Ausführen der Befehel aus der utils wurden bei mir keine Fehler geworfen und die Werte für Yesterday/Today und Cases per Million wurden sauber erstellt.


Edit: ich habe das DOIF angepasst. Es gibt kein "Germany_todayDeaths" mehr, dafür aber "DEU_todayDeaths"
Edit2: man sieht im Anhang "schön", dass die neuen Zahlen tatsächlich funktioniert haben und so die Anzeige voller, als vorher ist
« Letzte Änderung: 27 März 2020, 06:57:32 von Andy89 »
FHEM 6.0 auf rPi4 docker (mit Alexa & Siri); dbLog, FTUI, Sonos, XiaomiMapCreator auf rPi4 docker;
raspimatic auf rPi3+ > diverse Aktoren und Sensoren;
LGW > (PCA301),EC3000,LaCrosse; MQTT2 > WLAN-Steckdosen,Xiaomi Map;
Harmony Hub;Sonos;Onkyo AVR;RGB WLAN Controller;Netatmo;Withings;Unifi;AMAD
Gefällt mir Gefällt mir x 2 Liste anzeigen

Offline jnewton957

  • Full Member
  • ***
  • Beiträge: 380
Antw:Corona Fallzahlenübersicht in FTUI (COVID-19)
« Antwort #11 am: 29 März 2020, 12:38:49 »
Es gibt auch schon neue Symbole auf Font Awesome

https://fontawesome.com/icons?d=gallery&q=covid-19&m=free
FHEM5.8 auf Pi3
V 1.65 nanoCUL433 (IT)
nanoCUL JeeLink
V 1.66 nanoCUL868 (HM) (ESA2000WZ)
xELRO AB440, xDECT200, PCA301, xTFA30.3125, esp8266, HM, TabletUI, IR-Schreiblesekopf (Udo)

Offline yersinia

  • Full Member
  • ***
  • Beiträge: 403
    • Cyanide & Happiness
viele Grüße, yersinia
----
FHEM 6.0 (SVN) on RPi 4B with Raspian Buster (perl 5.28.1) | FTUI
nanoCUL@a-culfw-> 2x868 (1x ser2net), 1x433 | MQTT | Tasmota | ESPEasy
VCCU->14xHM-SEC-SCo, 7xHM-CC-RT-DN, 5xHM-LC-Bl1PBU-FM, 3xHM-TC-IT-WM-W-EU, 1xHM-PB-2-WM55, 1xHM-LC-Sw1PBU-FM, 1xHM-ES-PMSw1-Pl

Offline jnewton957

  • Full Member
  • ***
  • Beiträge: 380
FHEM5.8 auf Pi3
V 1.65 nanoCUL433 (IT)
nanoCUL JeeLink
V 1.66 nanoCUL868 (HM) (ESA2000WZ)
xELRO AB440, xDECT200, PCA301, xTFA30.3125, esp8266, HM, TabletUI, IR-Schreiblesekopf (Udo)

 

decade-submarginal