FHEM Forum

FHEM => Frontends => TabletUI => Thema gestartet von: somansch am 24 März 2020, 23:09:09

Titel: Corona Fallzahlenübersicht in FTUI (COVID-19)
Beitrag von: somansch 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 (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
Titel: Antw:Corona Fallzahlenübersicht in FTUI (COVID-19)
Beitrag von: Dracolein 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.

Titel: Antw:Corona Fallzahlenübersicht in FTUI (COVID-19)
Beitrag von: somansch am 25 März 2020, 12:22:55
Zitat von: Dracolein 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.

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 (https://forum.fhem.de/index.php/topic,37378.msg885401.html#msg885401)

Ich hoffe, das hilft dir  ;)
Titel: Antw:Corona Fallzahlenübersicht in FTUI (COVID-19)
Beitrag von: TWART016 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.

Titel: Antw:Corona Fallzahlenübersicht in FTUI (COVID-19)
Beitrag von: herrmannj 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).
Titel: Antw:Corona Fallzahlenübersicht in FTUI (COVID-19)
Beitrag von: somansch am 26 März 2020, 00:04:46
Zitat von: TWART016 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.
Hier meine aktuelle css.
Titel: Antw:Corona Fallzahlenübersicht in FTUI (COVID-19)
Beitrag von: TWART016 am 26 März 2020, 00:20:28
Zitat von: somansch am 26 März 2020, 00:04:46
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:
ZitatInvalid property value
Titel: Antw:Corona Fallzahlenübersicht in FTUI (COVID-19)
Beitrag von: Andy89 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'));
Titel: Antw:Corona Fallzahlenübersicht in FTUI (COVID-19)
Beitrag von: somansch am 26 März 2020, 16:00:18
Zitat von: Andy89 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'));

Danke für deine Arbeit. Was hälst du davon die deutschen Zahlen von pro 100k auf pro 1 Mio umzurechnen?
Titel: Antw:Corona Fallzahlenübersicht in FTUI (COVID-19)
Beitrag von: Andy89 am 26 März 2020, 16:03:06
Zitat von: somansch am 26 März 2020, 16:00:18
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
Titel: Antw:Corona Fallzahlenübersicht in FTUI (COVID-19)
Beitrag von: Andy89 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
Titel: Antw:Corona Fallzahlenübersicht in FTUI (COVID-19)
Beitrag von: jnewton957 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 (https://fontawesome.com/icons?d=gallery&q=covid-19&m=free)
Titel: Antw:Corona Fallzahlenübersicht in FTUI (COVID-19)
Beitrag von: yersinia am 03 April 2020, 14:50:23
Zitat von: jnewton957 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 (https://fontawesome.com/icons?d=gallery&q=covid-19&m=free)
...und hier habe ich beschrieben, wie man das neuste fa-icon-set für FTUI verfügbar macht (https://forum.fhem.de/index.php/topic,109488.msg1038123.html#msg1038123).
Titel: Antw:Corona Fallzahlenübersicht in FTUI (COVID-19)
Beitrag von: jnewton957 am 03 April 2020, 20:03:50
Zitat von: yersinia am 03 April 2020, 14:50:23
...und hier habe ich beschrieben, wie man das neuste fa-icon-set für FTUI verfügbar macht (https://forum.fhem.de/index.php/topic,109488.msg1038123.html#msg1038123).
Tolle Anleitung. Hat auf Anhieb funktioniert.

Danke dafür
Titel: Antw:Corona Fallzahlenübersicht in FTUI (COVID-19)
Beitrag von: Gisbert am 02 Mai 2020, 18:16:51
Hallo zusammen,

ich lade Daten für die mich interessierenden Land- bzw. Stadtkreise runter. Es werden die Gesamtzahl an Infizierten angezeigt, die ja kontinuierlich zunimmt.
Gibt es auch die Möglichkeit sich die Anzahl der täglich neu Infizierten downzuloaden, bzw. notfalls sich selbst zu errechnen?

Viele​ Grüße​ Gisbert​
Titel: Antw:Corona Fallzahlenübersicht in FTUI (COVID-19)
Beitrag von: sash.sc am 02 Mai 2020, 18:21:13
Schaue mal nach jsonmod. Da gibt es anwendungsbeispiele mir Adressen

Gesendet von meinem MI 9 mit Tapatalk

Titel: Antw:Corona Fallzahlenübersicht in FTUI (COVID-19)
Beitrag von: Gisbert am 02 Mai 2020, 19:26:54
Hallo sash.sc,

ich habe folgende Definition, bzw. Webpage, die abgefragt wird:
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)
Wie kann ich denn herausfinden, wie denn die Abfrage für die Fälle von heute aussehen?

Viele​ Grüße​ Gisbert​
Titel: Antw:Corona Fallzahlenübersicht in FTUI (COVID-19)
Beitrag von: sash.sc am 02 Mai 2020, 19:28:54
In den jsonmod thread gibt es ein Beispiel mit einer subroutine wo kurz vor Mitternacht die Werte in einem reading gespeichert werden, bevor diese aktualisiert werden.

Musst du mal schauen.



Gesendet von meinem MI 9 mit Tapatalk

Titel: Antw:Corona Fallzahlenübersicht in FTUI (COVID-19)
Beitrag von: Gisbert am 02 Mai 2020, 21:15:29
Hallo,

ich hab's jetzt wie folgt gelöst:

Viele Grüße Gisbert
Titel: Antw:Corona Fallzahlenübersicht in FTUI (COVID-19)
Beitrag von: Eisix am 30 August 2020, 14:14:47
Hallo,

api wurde wieder geändert, steige aber noch nicht durch was anzupassen ist.


/v3/covid-19/countries


oder hat das schon jemand angepasst und kann es teilen?

Gruß
Eisix
Titel: Antw:Corona Fallzahlenübersicht in FTUI (COVID-19)
Beitrag von: yersinia am 30 August 2020, 19:28:56
Danke für den Hinweis, Eisix!

Doku gibt es hier: https://disease.sh/docs/ (https://disease.sh/docs/)

Ich musste nur die URL
https://corona.lmao.ninja/v2/countries
durch
https://disease.sh/v3/covid-19/countries
ersetzen und kam auf das gleiche Ergebnis - inklusive der identischen Readings.

Der Vollständigkeithalber meine RAW:
defmod coronaSpread JsonMod https://disease.sh/v3/covid-19/countries
attr coronaSpread event-on-update-reading .computedReadings
attr coronaSpread interval 5 */1 * * *
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'));;
attr coronaSpread room CoViD-19
attr coronaSpread stateFormat { my $uptime = POSIX::strftime("%H:%M",localtime(time_str2num(ReadingsTimestamp($name,".computedReadings","2000-01-01 00:00:00"))));;\
my $ret = "<div style=\"text-align: left;;\">";;\
$ret .= "last <a href=\"https://covid19-scenarios.org/\" title=\"covid19\" rel=\"noopener noreferrer\" target=\"_blank\">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 .= "Heute: <font style=\"color:orange;;font-weight:bold;;\">".ReadingsVal($name,"DEU_todayCases","-")." neue Infektionen</font>&nbsp;;&amp;;&nbsp;;";;\
$ret .= "<font style=\"color:red;;font-weight:bold;;\">".ReadingsVal($name,"DEU_todayDeaths","-")." Tote</font><br />";;\
$ret .= "Gesamt: <font style=\"color:orange;;\">".ReadingsVal($name,"DEU_active","-")." best. Infektionen</font>,&nbsp;;";;\
$ret .= "<font style=\"\">".ReadingsVal($name,"DEU_cases","-")." F&auml;;lle</font>,&nbsp;;";;\
$ret .= "<font style=\"color:red;;\">".ReadingsVal($name,"DEU_deaths","-")." Tote</font>";;\
$ret .= "</div>";;\
return $ret;;}
attr coronaSpread update-on-start 1
attr coronaSpread verbose 2
attr coronaSpread webCmd reread
Titel: Antw:Corona Fallzahlenübersicht in FTUI (COVID-19)
Beitrag von: ErzGabriel am 20 Oktober 2020, 15:18:47
Hallo.
Hat jemand das schon auf ein Gridster System umgebaut?
Wenn ja, währe es nett, wenn er seinen HTML-Code hier mal posten könnte.

Danke.
Titel: Antw:Corona Fallzahlenübersicht in FTUI (COVID-19)
Beitrag von: Eisix am 20 Oktober 2020, 16:48:38
Hallo,

Corona.html

<!DOCTYPE html>
<html>
<head>
</head>
<body>
<div class="page" id="Corona">
<div class="container1">
<ul>
<li data-row="1" data-col="1" data-sizex="17" data-sizey="1">
    <table style="width:100%;height:100%;border 1px solid black">
    <tr align="center" valign="center">
        <td style="width:15%" class="">
Land
</td>
        <td style="width:15%" class="">
Gesamt
</td>
        <td style="width:10%" class="">
Gesamt / Mio
</td>
        <td style="width:10%" class="">
Neu
</td>
        <td style="width:15%" class="">
Erkrankt
</td>
        <td style="width:10%" class="">
&dagger;
</td>
        <td style="width:15%" class="">
neu &dagger;
</td>
        <td style="width:10%" class="">
Geheilt
</td>
</tr>
</table>
        </li>
</ul>
    <div class="container2">
<ul>
        <li data-row="2" data-col="1" data-sizex="17" data-sizey="2"
                                data-template="./templates/template_news_corona.html"
                                data-parameter='{"var_device" :"coronaSpreadWorld" ,"var_country"
                                :"world" }'
        ></li>
        <li data-row="5" data-col="1" data-sizex="17" data-sizey="2"
                                data-template="templates/template_news_corona.html"
                                data-parameter='{"var_device" :"coronaSpread" ,"var_country"
                                :"DEU" }'
        ></li>
        <li data-row="8" data-col="1" data-sizex="17" data-sizey="2"
                                data-template="templates/template_news_corona.html"
                                data-parameter='{"var_device" :"coronaSpread" ,"var_country"
                                :"GRC" }'
        ></li>
        <li data-row="11" data-col="1" data-sizex="17" data-sizey="2"
                                data-template="templates/template_news_corona.html"
                                data-parameter='{"var_device" :"coronaSpread" ,"var_country"
                                :"ITA" }'
        ></li>
        <li data-row="14" data-col="1" data-sizex="17" data-sizey="2"
                                data-template="templates/template_news_corona.html"
                                data-parameter='{"var_device" :"coronaSpread" ,"var_country" :"ESP" }'
        ></li>
        <li data-row="17" data-col="1" data-sizex="17" data-sizey="2"
                                data-template="templates/template_news_corona.html"
                                data-parameter='{"var_device" :"coronaSpread" ,"var_country" :"FRA" }'
        ></li>
        <li data-row="20" data-col="1" data-sizex="17" data-sizey="2"
                                data-template="templates/template_news_corona.html"
                                data-parameter='{"var_device" :"coronaSpread" ,"var_country" :"USA" }'
        ></li>
        <li data-row="23" data-col="1" data-sizex="17" data-sizey="2"
                                data-template="templates/template_news_corona.html"
                                data-parameter='{"var_device" :"coronaSpread" ,"var_country" :"GBR" }'
        ></li>
        <li data-row="26" data-col="1" data-sizex="17" data-sizey="2"
                                data-template="templates/template_news_corona.html"
                                data-parameter='{"var_device" :"coronaSpread" ,"var_country" :"NLD" }'
        ></li>
        <li data-row="29" data-col="1" data-sizex="17" data-sizey="2"
                                data-template="templates/template_news_corona.html"
                                data-parameter='{"var_device" :"coronaSpread" ,"var_country" :"CHE" }'
        ></li>
        <li data-row="32" data-col="1" data-sizex="17" data-sizey="2"
                                data-template="templates/template_news_corona.html"
                                data-parameter='{"var_device" :"coronaSpread" ,"var_country" :"LUX" }'
        ></li>
        <li data-row="35" data-col="1" data-sizex="17" data-sizey="2"
                                data-template="templates/template_news_corona.html"
                                data-parameter='{"var_device" :"coronaSpread" ,"var_country" :"BEL" }'
        ></li>
        <li data-row="38" data-col="1" data-sizex="17" data-sizey="2"
                                data-template="templates/template_news_corona.html"
                                data-parameter='{"var_device" :"coronaSpread" ,"var_country" :"AUT" }'
        ></li>
        <li data-row="41" data-col="1" data-sizex="17" data-sizey="2"
                                data-template="templates/template_news_corona.html"
                                data-parameter='{"var_device" :"coronaSpread" ,"var_country" :"POL" }'
        ></li>
        <li data-row="44" data-col="1" data-sizex="17" data-sizey="2"
                                data-template="templates/template_news_corona.html"
                                data-parameter='{"var_device" :"coronaSpread" ,"var_country" :"AUS" }'
        ></li>
        <li data-row="47" data-col="1" data-sizex="17" data-sizey="2"
                                data-template="templates/template_news_corona.html"
                                data-parameter='{"var_device" :"coronaSpread" ,"var_country" :"CAN" }'
        ></li>
        <li data-row="50" data-col="1" data-sizex="17" data-sizey="2"
                                data-template="templates/template_news_corona.html"
                                data-parameter='{"var_device" :"coronaSpread" ,"var_country" :"TUR" }'
        ></li>
        <li data-row="53" data-col="1" data-sizex="17" data-sizey="2"
                                data-template="templates/template_news_corona.html"
                                data-parameter='{"var_device" :"coronaSpread" ,"var_country" :"KOR" }'
        ></li>
        <li data-row="56" data-col="1" data-sizex="17" data-sizey="2"
                                data-template="templates/template_news_corona.html"
                                data-parameter='{"var_device" :"coronaSpread" ,"var_country" :"CHN" }'
        ></li>
</ul>
</div>
</div>
</div>
</body>
</html>


templates/template_news_corona.html

<!DOCTYPE html>
<html>

    <head>
        <!-- FHEM Tablet UI V2.6 -->
        <!-- Template f�r Corona -->
    </head>

    <body>
<table style="width:100%;height:100%;border:1px solid black">
<tr align="center" valign="center">
        <td style="width:15%">
                <div data-type="image" data-url="../images/var_country.png" data-refresh=0 data-height=40 data-width=40 class=""></div>
                <div style="color:#fffff0;" class="bigger" data-type="label" data-device="var_device" data-get="var_country_name" data-substitution='["Iran, Islamic Republic of","Iran","Nordrhein-Westfalen","NRW","Baden-Wurttemberg","BaWu","Mecklenburg-Vorpommern","MeckPom"]'></div>
</td>
        <td style="width:15%" class="">
                <div class="compressed" data-type="symbol" data-icon="mi-people" data-off-color="blue"></div>
                <div style="color:#fffff0;" class="bigger" data-type="label" data-device="var_device" data-get="var_country_cases"></div>
</td>
        <td style="width:10%" class="">
                <div class="compressed" data-type="symbol" data-icon="mi-people_outline" data-off-color="blue"></div>
                <div style="color:#fffff0;" class="bigger" data-type="label" data-device="var_device" data-get="var_country_casesPerOneMillion" data-fix="1"></div>
</td>
        <td style="width:10%" class="">
                <div class="compressed" data-type="symbol" data-icon="mi-update" data-off-color="blue"></div>
                <div style="color:#fffff0;" class="bigger" data-type="label" data-device="var_device" data-get="var_country_todayCases"></div>
                <div style="color:#fffff0;" class="normal" data-type="label" data-device="var_device" data-pre-text="(" data-get="var_country_procent_todayCases" data-post-text="%)" data-fix="1"></div>
</td>
        <td style="width:15%" class="">
                <div class="compressed" data-type="symbol" data-icon="mi-local_hospital" data-off-color="yellow"></div>
                <div style="color:#fffff0;" class="bigger inline" data-type="label" data-device="var_device" data-get="var_country_active"></div>
                <div style="color:#fffff0;" class="normal inline" data-type="label" data-device="var_device" data-pre-text="(" data-get="var_country_critical" data-post-text=")"></div>
</td>
        <td style="width:10%" class="">
                <div class="compressed" data-type="symbol" data-icon="mi-sentiment_dissatisfied" data-off-color="orange"></div>
                <div style="color:#fffff0;" class="bigger" data-type="label" data-device="var_device" data-get="var_country_deaths"></div>
</td>
        <td style="width:15%" class="">
                <div class="compressed" data-type="symbol" data-icon="mi-update" data-off-color="orange"></div>
                <div style="color:#fffff0;" class="bigger inline" data-type="label" data-device="var_device" data-get="var_country_todayDeaths"></div>
                <div style="color:#fffff0;" class="normal inline" data-type="label" data-device="var_device" data-pre-text="(" data-get="var_country_procent_todayDeaths" data-post-text="%)" data-fix="1"></div>
</td>
        <td style="width:10%" class="">
                <div class="compressed" data-type="symbol" data-icon="mi-sentiment_satisfied" data-off-color="green"></div>
                <div style="color:#fffff0;" class="bigger" data-type="label" data-device="var_device" data-get="var_country_recovered"></div>
</td>
</tr>
</table>
    </body>
</html>

Damit kannst du nach oben scrollen. Die Länder musst du entsprechend deiner Liste anpassen.

Gruß
Eisix
Titel: Antw:Corona Fallzahlenübersicht in FTUI (COVID-19)
Beitrag von: patman1607 am 20 November 2020, 00:31:29
Hallo,
ich habe es so in meine FTUI integriert:

<div class="sheet-50 narrow">
        <div class="row bold">
<div class="cell-50 left-align">
<div data-type="image" data-url="https://disease.sh/assets/img/flags/de.png" data-size="20px"></div>
</div>
<div class="cell-50">
<div data-type="label" data-device="coronaSpread" data-get="Germany_todayCases" class="">Germany</div>
</div>
</div>
  <div class="row bold">
<div class="cell-50 left-align">
<div data-type="image" data-url="https://disease.sh/assets/img/flags/us.png" data-size="20px"></div>
</div>
<div class="cell-50">
<div data-type="label" data-device="coronaSpread" data-get="USA_todayCases" class="">Germany</div>
</div>
</div>
  <div class="row bold">
<div class="cell-50 left-align">
<div data-type="image" data-url="https://disease.sh/assets/img/flags/fr.png" data-size="20px"></div>
</div>
<div class="cell-50">
<div data-type="label" data-device="coronaSpread" data-get="France_todayCases" class="">Germany</div>
</div>
</div>
  <div class="row bold">
<div class="cell-50 left-align">
<div data-type="image" data-url="https://disease.sh/assets/img/flags/it.png" data-size="20px"></div>
</div>
<div class="cell-50">
<div data-type="label" data-device="coronaSpread" data-get="Italy_todayCases" class="">Germany</div>
</div>
</div>
</div>


EDIT: 15:12:2020

und auf onklick kommt eine kleine Statistik. bin aber noch nicht ganz fertig. Mein CoronaSpread hab ich so angepasst das nur noch einmal am Tag abgerufen wird und nur noch in ein Logfile loggt.
hier das komplette DIV:

<!-- ============== CoronaFälle  ================ -->
<li data-row="5" data-col="8" data-sizex="1" data-sizey="1" class="semitransparent">
<header>CoronaFälle</header>
     
          <div data-type="popup" data-width="800px" data-height="640" class="center">
    <div class="sheet-50 narrow">
        <div class="row bold">
<div class="cell-50 left-align">
<div data-type="image" data-url="https://disease.sh/assets/img/flags/de.png" data-size="20px"></div>
</div>
<div class="cell-50">
<div data-type="label" data-device="coronaSpread" data-get="Germany_todayCases" class="right-align"></div>
</div>
</div>
  <div class="row bold">
<div class="cell-50 left-align">
<div data-type="image" data-url="https://disease.sh/assets/img/flags/us.png" data-size="20px"></div>
</div>
<div class="cell-50">
<div data-type="label" data-device="coronaSpread" data-get="USA_todayCases" class="left-space right-align"></div>
</div>
</div>
  <div class="row bold">
<div class="cell-50 left-align">
<div data-type="image" data-url="https://disease.sh/assets/img/flags/fr.png" data-size="20px"></div>
</div>
<div class="cell-50">
<div data-type="label" data-device="coronaSpread" data-get="France_todayCases" class="right-align"></div>
</div>
</div>
  <div class="row bold">
<div class="cell-50 left-align">
<div data-type="image" data-url="https://disease.sh/assets/img/flags/it.png" data-size="20px"></div>
</div>
<div class="cell-50">
<div data-type="label" data-device="coronaSpread" data-get="Italy_todayCases" class="right-align"></div>
</div>
</div>
</div>
    <div class="dialog">
        <header>Corona</header>     
            <div    class="normal inline"
                    data-type="chart"
data-title="Tägliche Fälle"
                    data-device="coronaSpread"
                    data-logdevice="FileLog_coronaSpread"
                    data-columnspec='["4:France_todayCases","4:Germany_todayCases","4:Italy_todayCases","4:Spain_todayCases","4:USA_todayCases"]'
                    data-style='["ftui l4","ftui l2","ftui l1","ftui l3","ftui l0"]'
                    data-ptype='["lines","lines","lines","lines","lines"]'
                    data-uaxis='["primary","primary","primary","primary","secondary"]'
                    data-legend='["Tägliche Fälle Frankreich","Tägliche Fälle Deutschland","Tägliche Fälle Italien","Tägliche Fälle Spanien","Tägliche Fälle USA"]'
                    data-yunit=""
data-yunit_sec=""
                    data-ytext="Täglich D, FR, IT, SPA"
data-ytext_sec="Täglich USA"
                    data-minvalue="auto"
                    data-maxvalue="100000"
data-minvalue_sec="0"
data-maxvalue_sec="250000"
                    data-yticks="auto"
data-xticks="2400"
                    data-minvalue_sec="auto"
                    data-maxvalue_sec="auto"
                    data-daysago_start="7"
                    data-daysago_end="-1"
                    data-crosshair="true"
                    data-cursorgroup="1"
                    data-scrollgroup="1"
                    data-showlegend="true"
                    data-height="300px"
data-width="370px">
               </div>
   
   <div    class="normal inline"
                    data-type="chart"
data-title="Insgesamte Infektionen"
                    data-device="coronaSpread"
                    data-logdevice="FileLog_coronaSpread"
                    data-columnspec='["4:France_cases","4:Germany_cases","4:Italy_cases","4:Spain_cases","4:USA_cases"]'
                    data-style='["ftui l4","ftui l2","ftui l1","ftui l3","ftui l0"]'
                    data-ptype='["lines","lines","lines","lines","lines"]'
                    data-uaxis='["primary","primary","primary","primary","primary"]'
                    data-legend='["Fälle insg. Frankreich","Fälle insg. Deutschland","Fälle insg. Italien","Fälle insg. Spanien","Fälle insg. USA"]'
                    data-yunit=""
data-yunit_sec=""
                    data-ytext="Fälle insgesamt D, FR, IT, SPA"
data-ytext_sec="Fälle insgesamt USA"
                    data-minvalue="800000"
                    data-maxvalue="auto"
data-minvalue_sec="800000"
data-maxvalue_sec="auto"
                    data-yticks="auto"
data-xticks="2400"
                    data-minvalue_sec="auto"
                    data-maxvalue_sec="auto"
                    data-daysago_start="7"
                    data-daysago_end="-1"
                    data-crosshair="true"
                    data-cursorgroup="1"
                    data-scrollgroup="1"
                    data-showlegend="true"
                    data-height="300px"
data-width="357px">
               </div>
   
<div    class="normal inline"
                    data-type="chart"
data-title="Tägliche Todesfälle"
                    data-device="coronaSpread"
                    data-logdevice="FileLog_coronaSpread"
                    data-columnspec='["4:France_todayDeaths","4:Germany_todayDeaths","4:Italy_todayDeaths","4:Spain_todayDeaths","4:USA_todayDeaths"]'
                    data-style='["ftui l4","ftui l2","ftui l1","ftui l3","ftui l0"]'
                    data-ptype='["lines","lines","lines","lines","lines"]'
                    data-uaxis='["primary","primary","primary","primary","secondary"]'
                    data-legend='["Tgl + Frankreich","Tgl + Deutschland","Tgl + Italien","Tgl + Spanien","Tgl + USA"]'
                    data-yunit=""
data-yunit_sec=""
                    data-ytext="TäglichSterbend D, FR, IT, SPA"
data-ytext_sec="TäglichSterbend USA"
                    data-minvalue="0"
                    data-maxvalue="2000"
data-minvalue_sec="0"
data-maxvalue_sec="3000"
                    data-yticks="auto"
data-xticks="2400"
                    data-minvalue_sec="auto"
                    data-maxvalue_sec="auto"
                    data-daysago_start="7"
                    data-daysago_end="-1"
                    data-crosshair="true"
                    data-cursorgroup="1"
                    data-scrollgroup="1"
                    data-showlegend="true"
                    data-height="300px"
data-width="357px">
               </div>
   
    <div    class="normal inline"
                    data-type="chart"
data-title="Geneßene Fälle"
                    data-device="coronaSpread"
                    data-logdevice="FileLog_coronaSpread"
                    data-columnspec='["4:France_recovered","4:Germany_recovered","4:Italy_recovered","4:Spain_recovered","4:USA_recovered"]'
                    data-style='["ftui l4","ftui l2","ftui l1","ftui l3","ftui l0"]'
                    data-ptype='["lines","lines","lines","lines","lines"]'
                    data-uaxis='["primary","primary","primary","primary","secondary"]'
                    data-legend='["Geneßene Fälle Frankreich","Geneßene Fälle Deutschland","Geneßene Fälle Italien","Geneßene Fälle Spanien","Geneßene Fälle USA"]'
                    data-yunit=""
data-yunit_sec=""
                    data-ytext="Geneßen D, FR, IT, SPA"
data-ytext_sec="Geneßen USA"
data-yticks_format_sec=""
                    data-minvalue="0"
                    data-maxvalue="1800000"
data-minvalue_sec="4000000"
data-maxvalue_sec="10000000"
                    data-yticks="auto"
data-xticks="2400"
                    data-minvalue_sec="14000000"
                    data-maxvalue_sec="auto"
                    data-daysago_start="7"
                    data-daysago_end="-1"
                    data-crosshair="true"
                    data-cursorgroup="1"
                    data-scrollgroup="1"
                    data-showlegend="true"
                    data-height="300px"
data-width="357px">
               </div>
   
   
    </div>
    </div>
</li>
Titel: Antw:Corona Fallzahlenübersicht in FTUI (COVID-19)
Beitrag von: ulobo60 am 18 April 2021, 18:08:55
Ich habe die Vorlagen von Andy89 (Antwort #7 am: 26 März 2020, 15:48:42) in mein FHEM eingebaut.
Klasse Vorarbeit und Veröffentlichung für einen "STRG-C + STRG-P"-Könner :), auch großen Dank für den Input von somansch !!!

Habe nur die Segmente "coronaSpreadWorld" und "coronaSpread" übernommen und im FTUI abgebildet.
Auf die Bundesländer-Darstellung ("coronaSpreadDe") habe ich verzichtet.
Zusätzlich habe ich das DOIF von Andy89 installiert (revidierte Fassung vom 26.03.2020).
Ausserdem wurde von mir die "99_myCoronaUtils.pm" übernommen. Dort habe ich die von mir nicht benötigten Bundesländer-Zeilen auskommentiert.

Mein FTUI-Layout basiert eigentlich auf gridster (Beispielseite siehe unten 'FTUI-gridster-Seite.jpg').
Zur 1:1-Umsetzung der Corona-Daten wird aber Flexbox benötigt.
Daher habe ich in meine persönliche css-Datei die für das Flexbox-Layout benötigten Einträge aus der fhem-tablet-ui-user.css von somansch kopiert (https://forum.fhem.de/index.php/topic,109490.msg1035132.html#msg1035132) und entsprechend modifiziert.
Im Wesentlichen wurden in den HTML-Seiten von mir die Icons eliminiert und aus der Ausrichtung "center" wurde "right" in den CSS-Einträgen (siehe unten 'FTUI-Flexbox-Seite_Corona-Daten1.jpg').
Also: Super-Job von unseren Profis für die Laien (wie ich) unter uns. Nochmals <merci vielmals!>.

Hier meine 2 Optimierungswünsche, die ich aufgrund meiner mangelnden Programmierkünste selbst nicht erledigen kann.
Wunsch-1:
Kann mir bitte jemand die Zahlenausgaben mit "Tausender-Punkten" formatieren? Ich glaube, erst dann wird's bei den langen Zahlen einigermaßen übersichtlich.
Wunsch-2:
Die Spalten "Infiz./Mio-EW" und "Tote neu" füllen sich ja im Laufe des Tages - abhängig vom Eingang der Meldungen bei der Datenbank. D.h. aber, tagsüber sieht man im Wesentlichen die '0' (siehe unten 'FTUI-Flexbox-Seite_Corona-Daten2.jpg').
In diesen 2 Spalten würde ich daher lieber die Vortageswerte sehen. Ist das zu realisieren? Und falls ja - wie?
Würde mich über Eure Tipps sehr freuen.
Titel: Antw:Corona Fallzahlenübersicht in FTUI (COVID-19)
Beitrag von: Eisix am 19 April 2021, 14:36:12
Hallo,


/* Scrollen */
.container1 {
    height: 100%;
    width: 100%;
    border: 0px solid green;
    overflow: hidden;
    position: relative;
}
.container2 {
    position: absolute;
    top: 50px;
    bottom: 5px;
    left: 0px;
    right: 0px;
    border: 0px solid white;
    overflow: auto;
}



Gruß
Eisix
Titel: Antw:Corona Fallzahlenübersicht in FTUI (COVID-19)
Beitrag von: ulobo60 am 19 April 2021, 22:37:52
@Eisix
... vielen Dank!
Eingebaut, minimal angepasst, läuft  :)
Titel: Antw:Corona Fallzahlenübersicht in FTUI (COVID-19)
Beitrag von: ulobo60 am 23 April 2021, 12:05:12
::: Für Mitlesende :::

Die 2 hierüber stehenden Beiträge haben nichts mit meiner Anfrage vom 18. April 2021, 18:08:55 zu tun.
Eisix hat hier seine CSS-Codierung für seine HTMLs eingestellt (siehe sein Beitrag weiter oben vom 20. Oktober 2020, 16:48:38).

Von den 2 Wünschen aus meiner obigen Anfrage habe ich meinen 2. Wunsch gelöst.
Für die Interessierten hier mein Define:
define di_coronaStatsLaender DOIF ([23:53])(setreading coronaSpread DEU_deaths_yesterday [coronaSpread:DEU_deaths])\
(setreading coronaSpread DEU_todayDeaths_yesterday [coronaSpread:DEU_todayDeaths])\
(setreading coronaSpread DEU_todayCases_yesterday [coronaSpread:DEU_todayCases])\
(setreading coronaSpread USA_deaths_yesterday [coronaSpread:USA_deaths])\
(setreading coronaSpread USA_todayDeaths_yesterday [coronaSpread:USA_todayDeaths])\
(setreading coronaSpread USA_todayCases_yesterday [coronaSpread:USA_todayCases])\
(setreading coronaSpread POL_deaths_yesterday [coronaSpread:POL_deaths])\
(setreading coronaSpread POL_todayDeaths_yesterday [coronaSpread:POL_todayDeaths])\
(setreading coronaSpread POL_todayCases_yesterday [coronaSpread:POL_todayCases])\
(setreading coronaSpread GBR_deaths_yesterday [coronaSpread:GBR_deaths])\
(setreading coronaSpread GBR_todayDeaths_yesterday [coronaSpread:GBR_todayDeaths])\
(setreading coronaSpread GBR_todayCases_yesterday [coronaSpread:GBR_todayCases])\
(setreading coronaSpread ITA_deaths_yesterday [coronaSpread:ITA_deaths])\
(setreading coronaSpread ITA_todayDeaths_yesterday [coronaSpread:ITA_todayDeaths])\
(setreading coronaSpread ITA_todayCases_yesterday [coronaSpread:ITA_todayCases])\
(setreading coronaSpread ESP_deaths_yesterday [coronaSpread:ESP_deaths])\
(setreading coronaSpread ESP_todayDeaths_yesterday [coronaSpread:ESP_todayDeaths])\
(setreading coronaSpread ESP_todayCases_yesterday [coronaSpread:ESP_todayCases])\
(setreading coronaSpread FRA_deaths_yesterday [coronaSpread:FRA_deaths])\
(setreading coronaSpread FRA_todayDeaths_yesterday [coronaSpread:FRA_todayDeaths])\
(setreading coronaSpread FRA_todayCases_yesterday [coronaSpread:FRA_todayCases])\
(setreading coronaSpread TUR_deaths_yesterday [coronaSpread:TUR_deaths])\
(setreading coronaSpread TUR_todayDeaths_yesterday [coronaSpread:TUR_todayDeaths])\
(setreading coronaSpread TUR_todayCases_yesterday [coronaSpread:TUR_todayCases])\
(setreading coronaSpread NLD_deaths_yesterday [coronaSpread:NLD_deaths])\
(setreading coronaSpread NLD_todayDeaths_yesterday [coronaSpread:NLD_todayDeaths])\
(setreading coronaSpread NLD_todayCases_yesterday [coronaSpread:NLD_todayCases])\
({createCountriesYesterdayValues()})\
\
DOELSEIF ([coronaSpreadDe:Nordrhein-Westfalen_cases])({calcStatesDiffBetweenYesterdayAndToday()})\
DOELSEIF ([coronaSpread:DEU_todayDeaths])({calcCountriesDiffBetweenYesterdayAndToday()})
setuuid di_coronaStatsLaender 60812405-f33f-4a34-73ce-b897c45e587cfc15
attr di_coronaStatsLaender do always
attr di_coronaStatsLaender room Corona-Status
attr di_coronaStatsLaender wait 0:30:32


Dazu gehört noch das Modul '99_myCoronaUtils.pm' von Andy99
(siehe https://forum.fhem.de/index.php/topic,109490.msg1035476.html#msg1035476 oberhalb seines angehängten Bildes).

Mein 1. Wunsch ist noch offen: die Zahlenausgaben mit "Tausender-Punkten" zu formatieren
Ich habe in den letzten Tagen einige Suchen abgearbeitet. Hier im Forum, generell im Internet - nix, nada zur Problemlösung.
Habe nur viele andere Hilfesuchen dazu gefunden.
Auch meine Suchen nach 'sprintf' haben diesbzgl. zu keinem Ergebnis geführt.

Ich fürchte, dazu müßte ein Programmschnipsel geschrieben und in ein Modul gepackt werden.
Meine Laien-Überlegung:
Zahl/Text in Variable einlesen, diese von rechts nach links abarbeiten, nach jeweils 3 Zeichen 1 Punkt setzen, weiter abarbeiten bis Ende, letztlich Ausgabe als Text.
Leider bin ich persönlich dazu selbst nicht in der Lage.

Ich warte dann mal weiter auf göttliche Eingebungen, evtl. auch von Euch  ;D
P.S.: Vielleicht bin ich auch nur zu blöd zum richtigen Suchen/Finden !
Würde mich wirklich freuen, wenn das zutreffen würde...  8)
Titel: Antw:Corona Fallzahlenübersicht in FTUI (COVID-19)
Beitrag von: yersinia am 23 April 2021, 12:54:17
Zitat von: ulobo60 am 23 April 2021, 12:05:12Mein 1. Wunsch ist noch offen: die Zahlenausgaben mit "Tausender-Punkten" zu formatieren
Ich habe in den letzten Tagen einige Suchen abgearbeitet. Hier im Forum, generell im Internet - nix, nada zur Problemlösung.
Habe nur viele andere Hilfesuchen dazu gefunden.
Auch meine Suchen nach 'sprintf' haben diesbzgl. zu keinem Ergebnis geführt.

Ich fürchte, dazu müßte ein Programmschnipsel geschrieben und in ein Modul gepackt werden.
Meine Laien-Überlegung:
Zahl/Text in Variable einlesen, diese von rechts nach links abarbeiten, nach jeweils 3 Zeichen 1 Punkt setzen, weiter abarbeiten bis Ende, letztlich Ausgabe als Text.
Jup, so steht es auch auf https://inspire-world.de/perl-lange-zahlen-mit-tausender-trennpunkten-versehen (https://inspire-world.de/perl-lange-zahlen-mit-tausender-trennpunkten-versehen):
# Die Subroutine zum einsetzen der Tausender Trennpunkte
sub wandler {
  my $zahl = shift;
  my $text = reverse $zahl;
  $text =~ s/\./\,/g;  #replace decimal point by decimal comma
  $text =~ s/(\d\d\d)(?=\d)(?!\d*\,)/$1./g;
  return scalar reverse $text;
}

Ungetestet, kA ob dies funktioniert
Könnte man in die myUtils einbauen und dann überall dort aufrufen, wo man es benötigt.
Aber Vorsicht: perl und idR alle Programmiersprachen verwenden die englische Notation (https://de.wikipedia.org/wiki/Tausenderpunkt#Zur_Problematik_von_Punkt_und_Komma_f%C3%BCr_Tausender-_und_Dezimaltrennzeichen). Wenn das Ersetzen stattfinden sollte, dann nur zur reinen Anzeige, aber nicht zum Weiterverarbeiten (Rechnen, Umwandeln usw).
Titel: Antw:Corona Fallzahlenübersicht in FTUI (COVID-19)
Beitrag von: ulobo60 am 23 April 2021, 18:38:23
@yersinia
1. hiermit ist also erwiesen: ich bin zu blöd, um richtig Suchen/Finden zu können!
2. klasse, dass Du sowas schon kennst.

Nun bin ich im Programmieren nicht gerade bewandert.
Ich kann die Code-Schnipsel lesen und verstehe (meist) auch den Inhalt und Zweck der Codierungen.
Aber Code selbst erstellen kann ich nicht.

Sehe ich denn Folgendes richtig (bis die von Dir angesprochene Einbindungs-Lösung offiziell verwirklicht würde):
1) Ich speichere eine Datei 'wandler_ulf.pm' mit Deinem Inhalt (sub wandler { ...} ) ins Verzeichnis /opt/fhem/FHEM ab.
2) Ich setze im HTML-Template 'template_news_corona.html' vor jede Zahlenabfrage (also bspw 'data-get="var_country_cases") den entsprechenden Befehl, um die 'sub wandler' abzuarbeiten! ähem: bei dieser Codierung muss ich schon passen  :-[

Ist das so richtig gedacht - uuuuund wenn ja, könntest Du mir evtl. die Codierungs-Schnipsel zum Aufruf der Funktion 'wandler' in der HTML rüberreichen?
P.S. muss ich nicht noch dem FHEM-System mitteilen, dass es gefälligst meine 'wandler_ulf.pm' einlesen soll, oder werden automatisch alle .pm-Dateien beim FHEM-Start eingelesen?
P.P.S.: ist natürlich klar, dass die Verwendung einer solchen Routine nur zur Darstellung von Zahlen im FTUI2 erfolgt  :)
Titel: Antw:Corona Fallzahlenübersicht in FTUI (COVID-19)
Beitrag von: yersinia am 24 April 2021, 09:59:14
Zitat von: ulobo60 am 23 April 2021, 18:38:23Sehe ich denn Folgendes richtig (bis die von Dir angesprochene Einbindungs-Lösung offiziell verwirklicht würde):
1) Ich speichere eine Datei 'wandler_ulf.pm' mit Deinem Inhalt (sub wandler { ...} ) ins Verzeichnis /opt/fhem/FHEM ab.
2) Ich setze im HTML-Template 'template_news_corona.html' vor jede Zahlenabfrage (also bspw 'data-get="var_country_cases") den entsprechenden Befehl, um die 'sub wandler' abzuarbeiten! ähem: bei dieser Codierung muss ich schon passen  :-[
Nein. Erstmal ist das perl und hat wenig bis gar nichts mit HTML/FTUI zu tun. Du erstellst, sofern nicht bereits vorhanden, eine 99_myUtils.pm (https://wiki.fhem.de/wiki/99_myUtils_anlegen) Datei, in diese fügst du den Code ein:
# Die Subroutine zum einsetzen der Tausender Trennpunkte
sub wandler {
  my $zahl = shift;
  my $text = reverse $zahl;
  $text =~ s/\./\,/g;  #replace decimal point by decimal comma
  $text =~ s/(\d\d\d)(?=\d)(?!\d*\,)/$1./g;
  return scalar reverse $text;
}

und speicherst.

Dann kannst du auf diese sub aus FHEM in perl heraus zugreifen, zum Beispiel in deinem covid-JsonMod-Device (https://forum.fhem.de/index.php/topic,120579.msg1151204.html#msg1151204) in der readingList (nicht getestet):
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['76', '64', '80', '66', '95', '230'])]"), concat(property('attributes.OBJECTID'),'_cases'), wandler(property('attributes.cases')));
Oder du erzeugst dir ein zusätzliches userReading (https://wiki.fhem.de/wiki/UserReadings) (attribut userReading).

Da du in FTUI2 das label widget verwendest, sollte es da eigentlich keine Änderungen geben.
Titel: Antw:Corona Fallzahlenübersicht in FTUI (COVID-19)
Beitrag von: ulobo60 am 24 April 2021, 18:53:10
... wow, wieder mal die volle Aufklärung und Hilfe !
Vielen Dank, yersinia.

Aus meinem Screenshot (siehe angehängtes Bild) kannst Du entnehmen, dass in der FTUI2-Darstellung (fast alles) bestens funktioniert im FTUI2.
Nur die Spalte "Neu Infizierte" kränkelt noch.

Das liegt m.E. an folgendem Sachverhalt:
Das RKI schreibt in seinen Json-Datensatz keine Vortageswerte!
Ab Mitternacht wird bspw. der Länder-Wert "todayCases" vom RKI mit '0' gemeldet.
Das Feld füllt sich im Laufe des Tages mit den dann gemeldeten Werten für Neu-Infizierte.
Einigermaßen valide Tagesdaten hat man dann erst ab so ca. 18:00 Uhr.

andy98 hatte dafür ein DOIF geschrieben, das gegen ca. 23:50 Uhr den bis dato aufgelaufenen Tageswert in ein Feld z.B "todayCases_yesterday" kopiert.
Diese gestrigen Werte werden im FTUI2 angezeigt!
Ist mir lieber, als nur fast den ganzen Tag dort eine "0" zu sehen.
Mit diesen Übergabedaten kann man aber nach Mitternacht keine Berechnungen durchführen, da sie ja schon mit den Tausenderpunkten versehen wurden.

Ich schaue mir am Montag Vormittag mal an, ob ich dafür spezielle userReadings erstellen kann.
Wünsche Dir/Euch erst mal ein schönes Rest-Wochenende.
Titel: Antw:Corona Fallzahlenübersicht in FTUI (COVID-19)
Beitrag von: yersinia am 25 April 2021, 09:51:33
Deine Annahme ist korrekt, jdf mMn. Mit "123.456,789" kannst du schlecht rechnen. Aber das war uns ja von vornherein klar.
Nun kannst du dir entweder eigene userReadings bauen und diese dann für FTUI2 zur Anzeige mit Tausenderpunkten vorhalten - oder du versuchst nur für die Berechnung die Tausenderpunktänderung zu revidieren. Und dies mit einer weiteren sub in deiner myUtils:
sub wandlerzurueck {
  my $text = shift;
  $text =~ s/\.//g;  #eliminate point
  $text =~ s/\,/\./g;  #replace decimal comma with point
  return scalar $text;
}

Aber das funktioniert nur für Zahlen in dem Format 123.456.789,098; Zahlen wie 123456789.098 werden hier verfälscht.

Bezgl Andy89's Corona script verweist du auf dieses hier (https://forum.fhem.de/index.php/topic,109490.msg1035476.html#msg1035476)?
Da würde ich den Teil der Vortagsberechnung entsprechend anpassen/ergänzen - zum einen vor Berechnung in eine 'normale' Zahl konvertieren und bevor das Ergebnis als reading geschrieben wird, wieder um Tausenderpunkt ergänzen (ungetestet):
sub calcStatesDiffBetweenYesterdayAndToday()
{
my @states = getStates();
  my $device = getStatesDevice();
my ($value_yesterday,$value_today,$value_diff);

foreach (@states)
{
Log 5, "[99_myCoronaUtils:calcStatesDiffBetweenYesterdayAndToday] Land: ".$_;
$value_yesterday = wandlerzurueck(ReadingsVal($device,$_."_cases_yesterday",-1)); # <===
$value_today = wandlerzurueck(ReadingsVal($device,$_."_cases",-1)); # <===
$value_diff = wandler($value_today-$value_yesterday); # <===
setReading($device,$_."_todayCases",$value_diff);

$value_yesterday = wandlerzurueck(ReadingsVal($device,$_."_deaths_yesterday",-1)); # <===
$value_today = wandlerzurueck(ReadingsVal($device,$_."_deaths",-1)); # <===
$value_diff = wandler($value_today-$value_yesterday); # <===
setReading($device,$_."_todayDeaths",$value_diff);
}
return;
}

(btw, mich wundert das er hier mit readingsVal anstelle von readingsNum für Berechnungen arbeitet - was aber in deinem Fall hier besser ist, da ich nicht weiss wie readingsNum die Zahlen mit Tausenderpunkt handhabt)

[OT]Bei der Qualität der Datenübertragung sowie dessen Zeitpunkt der Gesundheitsämter betrachte ich die Werte eher als gewürfelt und 'grobe Richtung' als exakte Werte. Es ist immer wieder beschämend zu sehen, dass die Fallzahlen am Wochenende und Montags nach unten gehen weil einfach weniger getestet, gemeldet, gearbeitet wird.[/OT]
Titel: Antw:Corona Fallzahlenübersicht in FTUI (COVID-19)
Beitrag von: ulobo60 am 26 April 2021, 14:17:08
Moin yersinia,

... Deine 'wandlerzurueck'-Idee beeindruckt mich natürlich wieder mal...

Großen Dank für Deine Tipps.
Habe Deine Vorschläge/Hinweise von gestern und vorgestern umgesetzt.
M.E. ist alles paletti (siehe angefügten Screenshot).

Dass "Neu Infizierte" (= 'todayCases') nicht formatiert sind, ist m.E. logisch.
Hier werden ja die Vortageswerte angezeigt - und die sind halt noch ohne Tausenderpunkte.
Das gilt m.E. auch für das Feld "Tote neu" (= 'todayDeaths') - nur hier liegen alle Werte unter 1.000, so dass man die fehlende Formatierung nicht sieht.
Schätze mal, dass ich morgen auch in der Spalte "Neu Infizierte" Tausenderpunkte sehen werde!
SPAIN (ESP) hatte für gestern wohl nix gemeldet. Habe gerade mal (13:45 Uhr) im heute aktuellen RKI-Datensatz nachgeschaut - ist heute auch noch auf 0 in den Feldern "Neu Infizierte" und "Tote neu".
Schaun mer mal - morgen.

Für alle interessierten Mitlesenden (und COPY-Freunde, wie mich :) ) folgen untenstehend alle benötigten Elemente (Devices, DOIF, die 2 von mir geänderten .pm-Dateien) zwecks Übernahme.
Euer Dank gebührt Andy89 und yersinia.
Bitte beachtet die Warnung der Profis vor der Benutzung der wandler-Funktion. Damit umgewandelte Ergebnisse dürfen nur zu Ansicht und keinesfalls zur Weiterberechnung verwendet werden. Es kann zu nur schwer nachvollziehbaren Fehlern kommen! 

Device 'coronaSpread':

define coronaSpread JsonMod https://disease.sh/v3/covid-19/countries
setuuid coronaSpread 60787e5d-f33f-4a34-573d-b37eab31d80fb449
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', 'USA', 'POL', 'GBR', 'ITA', 'ESP', 'FRA', 'TUR', 'NLD'])]"), concat(property('countryInfo.iso3'), '_name'), property('country'));;\
multi(jsonPath("\$.[?(\@.['countryInfo'].['iso3'] in ['DEU', 'USA', 'POL', 'GBR', 'ITA', 'ESP', 'FRA', 'TUR', 'NLD'])]"), concat(property('countryInfo.iso3'), '_cases'), wandler(property('cases')));;\
multi(jsonPath("\$.[?(\@.['countryInfo'].['iso3'] in ['DEU', 'USA', 'POL', 'GBR', 'ITA', 'ESP', 'FRA', 'TUR', 'NLD'])]"), concat(property('countryInfo.iso3'), '_casesPerOneMillion'), wandler(property('casesPerOneMillion')));;\
multi(jsonPath("\$.[?(\@.['countryInfo'].['iso3'] in ['DEU', 'USA', 'POL', 'GBR', 'ITA', 'ESP', 'FRA', 'TUR', 'NLD'])]"), concat(property('countryInfo.iso3'), '_todayCases'), wandler(property('todayCases')));;\
multi(jsonPath("\$.[?(\@.['countryInfo'].['iso3'] in ['DEU', 'USA', 'POL', 'GBR', 'ITA', 'ESP', 'FRA', 'TUR', 'NLD'])]"), concat(property('countryInfo.iso3'), '_active'), wandler(property('active')));;\
multi(jsonPath("\$.[?(\@.['countryInfo'].['iso3'] in ['DEU', 'USA', 'POL', 'GBR', 'ITA', 'ESP', 'FRA', 'TUR', 'NLD'])]"), concat(property('countryInfo.iso3'), '_deaths'), wandler(property('deaths')));;\
multi(jsonPath("\$.[?(\@.['countryInfo'].['iso3'] in ['DEU', 'USA', 'POL', 'GBR', 'ITA', 'ESP', 'FRA', 'TUR', 'NLD'])]"), concat(property('countryInfo.iso3'), '_todayDeaths'), wandler(property('todayDeaths')));;\
multi(jsonPath("\$.[?(\@.['countryInfo'].['iso3'] in ['DEU', 'USA', 'POL', 'GBR', 'ITA', 'ESP', 'FRA', 'TUR', 'NLD'])]"), concat(property('countryInfo.iso3'), '_recovered'), wandler(property('recovered')));;\
attr coronaSpread room Corona-Status
attr coronaSpread room Corona-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},\
TUR_procent_todayDeaths {ReadingsVal("coronaSpread","TUR_todayDeaths","")/ReadingsVal("coronaSpread","TUR_deaths","")*100},\
POL_procent_todayDeaths {ReadingsVal("coronaSpread","POL_todayDeaths","")/ReadingsVal("coronaSpread","POL_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},\
TUR_procent_todayCases {ReadingsVal("coronaSpread","TUR_todayCases","")/ReadingsVal("coronaSpread","TUR_cases","")*100},\
POL_procent_todayCases {ReadingsVal("coronaSpread","POL_todayCases","")/ReadingsVal("coronaSpread","POL_cases","")*100}


DOIF 'di_coronaStatsLaender':

define di_coronaStatsLaender DOIF ([23:53])(setreading coronaSpread DEU_deaths_yesterday [coronaSpread:DEU_deaths])\
(setreading coronaSpread DEU_todayDeaths_yesterday [coronaSpread:DEU_todayDeaths])\
(setreading coronaSpread DEU_todayCases_yesterday [coronaSpread:DEU_todayCases])\
(setreading coronaSpread USA_deaths_yesterday [coronaSpread:USA_deaths])\
(setreading coronaSpread USA_todayDeaths_yesterday [coronaSpread:USA_todayDeaths])\
(setreading coronaSpread USA_todayCases_yesterday [coronaSpread:USA_todayCases])\
(setreading coronaSpread POL_deaths_yesterday [coronaSpread:POL_deaths])\
(setreading coronaSpread POL_todayDeaths_yesterday [coronaSpread:POL_todayDeaths])\
(setreading coronaSpread POL_todayCases_yesterday [coronaSpread:POL_todayCases])\
(setreading coronaSpread GBR_deaths_yesterday [coronaSpread:GBR_deaths])\
(setreading coronaSpread GBR_todayDeaths_yesterday [coronaSpread:GBR_todayDeaths])\
(setreading coronaSpread GBR_todayCases_yesterday [coronaSpread:GBR_todayCases])\
(setreading coronaSpread ITA_deaths_yesterday [coronaSpread:ITA_deaths])\
(setreading coronaSpread ITA_todayDeaths_yesterday [coronaSpread:ITA_todayDeaths])\
(setreading coronaSpread ITA_todayCases_yesterday [coronaSpread:ITA_todayCases])\
(setreading coronaSpread ESP_deaths_yesterday [coronaSpread:ESP_deaths])\
(setreading coronaSpread ESP_todayDeaths_yesterday [coronaSpread:ESP_todayDeaths])\
(setreading coronaSpread ESP_todayCases_yesterday [coronaSpread:ESP_todayCases])\
(setreading coronaSpread FRA_deaths_yesterday [coronaSpread:FRA_deaths])\
(setreading coronaSpread FRA_todayDeaths_yesterday [coronaSpread:FRA_todayDeaths])\
(setreading coronaSpread FRA_todayCases_yesterday [coronaSpread:FRA_todayCases])\
(setreading coronaSpread TUR_deaths_yesterday [coronaSpread:TUR_deaths])\
(setreading coronaSpread TUR_todayDeaths_yesterday [coronaSpread:TUR_todayDeaths])\
(setreading coronaSpread TUR_todayCases_yesterday [coronaSpread:TUR_todayCases])\
(setreading coronaSpread NLD_deaths_yesterday [coronaSpread:NLD_deaths])\
(setreading coronaSpread NLD_todayDeaths_yesterday [coronaSpread:NLD_todayDeaths])\
(setreading coronaSpread NLD_todayCases_yesterday [coronaSpread:NLD_todayCases])\
({createStatesYesterdayValues()})\
\
DOELSEIF ([coronaSpreadDe:Nordrhein-Westfalen_cases])({calcStatesDiffBetweenYesterdayAndToday()})\
DOELSEIF ([coronaSpread:DEU_todayDeaths])({calcCountriesDiffBetweenYesterdayAndToday()})
setuuid di_coronaStatsLaender 60812405-f33f-4a34-73ce-b897c45e587cfc15
attr di_coronaStatsLaender do always
attr di_coronaStatsLaender room Corona-Status
attr di_coronaStatsLaender wait 0:30:32


Die in meiner bereits vorhandenen Datei '99_myUtils.pm' unten zugefügten Codierungen für 'wandler' und 'wandlerzurueck':

# Die Subroutinen zum einsetzen der Tausender Trennpunkte
sub wandler {
  my $zahl = shift;
  my $text = reverse $zahl;
  $text =~ s/\./\,/g;  #replace decimal point by decimal comma
  $text =~ s/(\d\d\d)(?=\d)(?!\d*\,)/$1./g;
  return scalar reverse $text;
}

sub wandlerzurueck {
  my $text = shift;
  $text =~ s/\.//g;  #eliminate point
  $text =~ s/\,/\./g;  #replace decimal comma with point
  return scalar $text;
}


Inhalt der Datei '99_myCoronaUtils.pm'

##############################################
# 99_myCoronaUtils.pm v0.1 2020-03-26 21:50:00A Andy89
#
# This file creates Readings and Calculate some Diffs for States and Countrys

package main;

sub myCoronaUtils_Initialize($$)
{
  my ($hash) = @_;
}

# Enter you functions below _this_ line.
#######################################################################################
#                                                                                     #
#   gewünschte Länder und Bundesländer und Devices                                    #
#                                                                                     #
#######################################################################################
sub getCountrys()
{
my @countries = ('DEU', 'USA', 'POL', 'GBR', 'ITA', 'ESP', 'FRA', 'TUR', 'NLD');
return @countries;
}

sub getStates()
{
my @states = ("Baden-Wurttemberg","Bayern","Berlin","Brandenburg","Bremen","Hamburg",
  "Hessen","Mecklenburg-Vorpommern","Niedersachsen","Nordrhein-Westfalen",
  "Rheinland-Pfalz","Saarland","Sachsen-Anhalt","Sachsen","Schleswig-Holstein","Thuringen");
return @states;
}

sub getCountryDevice()
{
return "coronaSpread";
}

sub getStatesDevice()
{
return "coronaSpreadDe";
}

sub getWorldDevice()
{
return "coronaSpreadWorld";
}


#######################################################################################
#                                                                                     #
#   Umrechnung von Fälle pro 100k auf pro 1 Mio                                       #
#                                                                                     #
#######################################################################################
sub calcStatesCPM()
{
  my @states = getStates();
  my $device = getStatesDevice();
  my $cp100k;

  foreach (@states)
  {
  Log 5, "[99_myCoronaUtils:calcStatesCPM] Land: ".$_;
$cp100k = ReadingsVal($device,$_."_cp100k",-1);
    setReading($device,$_."_casesPerOneMillion",$cp100k*10);
  }
  return;
}

#######################################################################################
#                                                                                     #
#   States Yesterday Werte                                                            #
#                                                                                     #
#######################################################################################
sub createStatesYesterdayValues()
{
my @states = getStates();
  my $device = getStatesDevice();
my $value;

foreach (@states)
{
Log 5, "[99_myCoronaUtils:createStatesYesterdayValues] Land: ".$_;
$value = ReadingsVal($device,$_."_cases",-1);
setReading($device,$_."_cases_yesterday",$value);
$value = ReadingsVal($device,$_."_deaths",-1);
setReading($device,$_."_deaths_yesterday",$value);
}
return;
}

#######################################################################################
#                                                                                     #
#   States Differenz Werte zu Heute                                                   #
#                                                                                     #
#######################################################################################
sub calcStatesDiffBetweenYesterdayAndToday()
{
my @states = getStates();
  my $device = getStatesDevice();
my ($value_yesterday,$value_today,$value_diff);

foreach (@states)
{
Log 5, "[99_myCoronaUtils:calcStatesDiffBetweenYesterdayAndToday] Land: ".$_;
$value_yesterday = ReadingsVal($device,$_."_cases_yesterday",-1);
$value_today = ReadingsVal($device,$_."_cases",-1);
$value_diff = $value_today-$value_yesterday;
setReading($device,$_."_todayCases",$value_diff);

$value_yesterday = ReadingsVal($device,$_."_deaths_yesterday",-1);
$value_today = ReadingsVal($device,$_."_deaths",-1);
$value_diff = $value_today-$value_yesterday;
setReading($device,$_."_todayDeaths",$value_diff);
}
return;
}

#######################################################################################
#                                                                                     #
#   Countries Yesterday Werte                                                         #
#                                                                                     #
#######################################################################################
sub createCountriesYesterdayValues()
{
my @countries = getCountrys();
  my $device = getCountryDevice();
my $value;

foreach (@countries)
{
Log 5, "[99_myCoronaUtils:createCountriesYesterdayValues] Land: ".$_;
$value = ReadingsVal($device,$_."_active",-1);
setReading($device,$_."_active_yesterday",$value);
$value = ReadingsVal($device,$_."_recovered",-1);
setReading($device,$_."_recovered_yesterday",$value);
}
return;
}

#######################################################################################
#                                                                                     #
#   Countries Differenz Werte zu Heute                                                #
#                                                                                     #
#######################################################################################
sub calcCountriesDiffBetweenYesterdayAndToday()
{
my @countries = getCountrys();
  my $device = getCountryDevice();
my ($value_yesterday,$value_today,$value_diff);

foreach (@countries)
{
Log 5, "[99_myCoronaUtils:calcCountriesDiffBetweenYesterdayAndToday] Land: ".$_;
$value_yesterday = wandlerzurueck(ReadingsVal($device,$_."_cases_yesterday",-1)); # <===
$value_today = wandlerzurueck(ReadingsVal($device,$_."_cases",-1)); # <===
$value_diff = wandler($value_today-$value_yesterday); # <===
setReading($device,$_."_todayActive",$value_diff);

$value_yesterday = wandlerzurueck(ReadingsVal($device,$_."_deaths_yesterday",-1)); # <===
$value_today = wandlerzurueck(ReadingsVal($device,$_."_deaths",-1)); # <===
$value_diff = wandler($value_today-$value_yesterday); # <===
setReading($device,$_."_todayRecovered",$value_diff);
}
return;
}


#######################################################################################
#                                                                                     #
#   Reading setzen                                                                    #
#                                                                                     #
#######################################################################################
sub setReading($$$){
  my $device       = shift;
  my $readingsName = shift;
  my $readingsWert = shift;
  readingsSingleUpdate($main::defs{$device}, $readingsName, $readingsWert, 1);
}

1;


[OT]yersinia, Deinem gestrigen OT kann ich nur voll zustimmen. Daher sehe ich bspw. es auch als problemlos an, mit gemischten Tages- und Vortageswerten zu agieren.
Darüberhinaus sehe ich die generell vorherrschende (so gut wie nicht vorhandene) EDV-/IT-"Kenntnis" und -Ausstatung in Behörden- und Politikerkreisen als ausgesprochen problematisch an für die mittelfristige Weiterentwicklung unseres Landes im Weltgeschehen.[/OT]
Titel: Antw:Corona Fallzahlenübersicht in FTUI (COVID-19)
Beitrag von: ulobo60 am 27 April 2021, 10:59:19
Abschließend für mich hier der Screenshot vom FTUI2 von heute Morgen. Alle Zahlen haben Tausenderpunkten :), und ESP zeigt auch wieder Werte.
Nicht vergessen: die beiden Spalten "Neu Infizierte" und "Tote neu" enthalten die Werte von gestern (Stand kurz vor Mitternacht).
Aufgrund der doch recht unterschiedlichen Tageszeiten der Datenübermittlung von den Landkreisen an's RKI ist das m.E. aber nicht ganz sooo wichtig.

P.S.: Ich sitze derzeit an der FTUI2-Darstellung nur der 7-Tage-Inzidenz mit dem Chart Modul für meine 6 Landkreise aus diesem jsonMod. Anzeigen möchte ich gern die Werte der 7-Tage-Inzidenz für die letzten 5 Tage. Dazu müssen die Werte des hier verwendeten jsonMod in meine logdb geschrieben werden. Das gelingt mir nicht!
Da dies kein FTUI2-Problem ist, habe ich meine Hilfe-Anfrage in den 'Anfängerbereich' des Forums gestellt. Wer mir hierzu helfen kann/möchte, der klicke bitte hier: https://forum.fhem.de/index.php/topic,120688.0.html (https://forum.fhem.de/index.php/topic,120688.0.html). Thx.
Titel: Antw:Corona Fallzahlenübersicht in FTUI (COVID-19)
Beitrag von: is2late am 10 Januar 2022, 12:49:30
Hi,

vielen Dank für das Teilen Deines Codes!

In dem DOIF befindet sich eine Zeile, die ich nicht verstehe:

setuuid di_coronaStatsLaender 60812405-f33f-4a34-73ce-b897c45e587cfc15

Woher nimmst Du die UUID?

LG Ingo
Titel: Antw:Corona Fallzahlenübersicht in FTUI (COVID-19)
Beitrag von: Christoph Morrison am 10 Januar 2022, 13:40:41
Zitat von: is2late am 10 Januar 2022, 12:49:30
Woher nimmst Du die UUID?

Die vergibt dein FHEM automatisch.
Titel: Antw:Corona Fallzahlenübersicht in FTUI (COVID-19)
Beitrag von: is2late am 10 Januar 2022, 14:48:11
Danke, Christoph!

Eine Frage noch: Wird die Zeile automatisch in das DOIF eingefügt?
Versuche ich dies (mit der richtigen UUID) nachträglich, gibt es eine Fehlermeldung
setuuid cannot be used after FHEM is initialized

LG Ingo
Titel: Antw:Corona Fallzahlenübersicht in FTUI (COVID-19)
Beitrag von: rabehd am 10 Januar 2022, 15:15:26
Zitat von: is2late am 10 Januar 2022, 14:48:11
Danke, Christoph!

Eine Frage noch: Wird die Zeile automatisch in das DOIF eingefügt?
Versuche ich dies (mit der richtigen UUID) nachträglich, gibt es eine Fehlermeldung
setuuid cannot be used after FHEM is initialized

LG Ingo

Ist Dir aufgefallen, dass jedes Device ein Internal FUUID hat?
Titel: Antw:Corona Fallzahlenübersicht in FTUI (COVID-19)
Beitrag von: is2late am 10 Januar 2022, 15:25:48
Ja schon  ;)

Jedoch findet sich zwar in den Internals, nicht jedoch im RAW dieses "SetUUID" - anders als im o.g. Code.

Und da bei mir auch keine Daten aufscheinen, dachte ich, dass evlt. hier das Problem liegt.
Titel: Antw:Corona Fallzahlenübersicht in FTUI (COVID-19)
Beitrag von: rabehd am 10 Januar 2022, 15:51:28
RAW ist nicht gleich list.
Da Du es nicht brauchst (setzen musst) ist es nicht im RAW.
Titel: Antw:Corona Fallzahlenübersicht in FTUI (COVID-19)
Beitrag von: is2late am 10 Januar 2022, 16:05:57
OKay, danke!
Titel: Antw:Corona Fallzahlenübersicht in FTUI (COVID-19)
Beitrag von: curt am 11 Januar 2022, 03:05:45
Vielleicht sollte ich einfach mal anmerken, dass ich das seit Beginn der Krise nutze und für den Code sehr dankbar bin.