Hallo erstmal,
mittels eines JsonMods hole ich mir bestimmte Corona-Werte ins FHEM und stelle sie über's FTUI per Flex-Layout dar (also mit Template).
Die Daten der '7-Tage-Inzidenz' erfolgt leider mit ordentlich vielen Nachkommastellen (siehe Screenshot weiter unten).
Diese Nachkommastellen möchte ich gern eliminieren (runden oder abschneiden, egal).
Hier das Listing meines JsonMods:
Internals:
API_LAST_RES 1619013600.18117
API__LAST_MSG 200
DEF https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=1%3D1&outFields=death_rate,cases,deaths,cases_per_100k,cases_per_population,cases7_per_100k,BL,BL_ID,county,OBJECTID&returnGeometry=false&outSR=4326&f=json
FUUID 607c7466-f33f-4a34-1ca1-2b879d6e66d190c2
NAME coronaSpreadCounties
NEXT 2021-04-21 17:00:00
NR 85
SOURCE https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=1%3D1&outFields=death_rate,cases,deaths,cases_per_100k,cases_per_population,cases7_per_100k,BL,BL_ID,county,OBJECTID&returnGeometry=false&outSR=4326&f=json (200)
STATE ???
SVN 22987 2020-10-18 13:26:05 UTC
TYPE JsonMod
CONFIG:
IN_REQUEST 0
SOURCE https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=1%3D1&outFields=death_rate,cases,deaths,cases_per_100k,cases_per_population,cases7_per_100k,BL,BL_ID,county,OBJECTID&returnGeometry=false&outSR=4326&f=json
SECRET:
READINGS:
2021-04-21 16:00:01 230_cases 5605
2021-04-21 16:00:01 230_cases7_per_100k 112.078747502593
2021-04-21 16:00:01 230_deaths 172
2021-04-21 16:00:01 230_name LK Ebersberg
2021-04-21 16:00:01 64_cases 21430
2021-04-21 16:00:01 64_cases7_per_100k 152.602524293389
2021-04-21 16:00:01 64_deaths 352
2021-04-21 16:00:01 64_name SK Düsseldorf
2021-04-21 16:00:01 66_cases 22518
2021-04-21 16:00:01 66_cases7_per_100k 152.549934793054
2021-04-21 16:00:01 66_deaths 535
2021-04-21 16:00:01 66_name SK Essen
2021-04-21 16:00:01 76_cases 14933
2021-04-21 16:00:01 76_cases7_per_100k 101.387997254997
2021-04-21 16:00:01 76_deaths 305
2021-04-21 16:00:01 76_name LK Rhein-Kreis Neuss
2021-04-21 16:00:01 80_cases 44440
2021-04-21 16:00:01 80_cases7_per_100k 190.09746631699
2021-04-21 16:00:01 80_deaths 619
2021-04-21 16:00:01 80_name SK Köln
2021-04-21 16:00:01 95_cases 27628
2021-04-21 16:00:01 95_cases7_per_100k 180.41577042256
2021-04-21 16:00:01 95_deaths 798
2021-04-21 16:00:01 95_name LK Recklinghausen
2021-04-19 21:28:40 siebentage 117.0
Attributes:
event-on-change-reading .*
interval 0 */1 * * *
oldreadings .*_cases7_per_100k
readingList multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['76', '64', '80', '66', '95', '230'])]"), concat(property('attributes.OBJECTID'),'_name'), property('attributes.county'));
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['76', '64', '80', '66', '95', '230'])]"), concat(property('attributes.OBJECTID'),'_cases'), property('attributes.cases'));
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['76', '64', '80', '66', '95', '230'])]"), concat(property('attributes.OBJECTID'),'_deaths'), property('attributes.deaths'));
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['76', '64', '80', '66', '95', '230'])]"), concat(property('attributes.OBJECTID'),'_cases7_per_100k'), property('attributes.cases7_per_100k'));
room Corona-Status
update-on-start 1
Der letzte ReadingList-Eintrag (property('attributes.cases7_per_100k')) müßte aus meiner Sicht mit der entsprechenden Codierung versehen werden.
Meine bisherigen Forums-Suchen ergaben für mich nur die Erkenntnis, dass ich wohl "sprintf" verwenden sollte.
Aber geht das im Array überhaupt und falls ja, wie würde eine solche Formel aussehen ?
Bin fit in STRG-C | STRG-V ;), kann mich auch in die Syntaxes von Modulen einlesen und nach meinen Anforderungen abändern - aber hiermit habe ich leider keinerlei Erfahrung.
Über Eure Hilfe würde ich mich sehr freuen.
Zitat
Diese Nachkommastellen möchte ich gern eliminieren (runden oder abschneiden, egal).
Hast du das schon angesehen?:
https://forum.fhem.de/index.php/topic,31795.0.html (https://forum.fhem.de/index.php/topic,31795.0.html)
Gruß
hi mr_petz,
erst einmal vielen Dank, dass Du Dich meiner erbarmt hast.
Dein Link ist absolut passend zum Thema. Ich hatte leider bei meiner Forumssuche nicht den Begriff HTTPMOD eingebunden :(
Ich habe nun gelernt, dass man das Attribut 'cases7_per_100k' bspw. mit
attr cases7_per_100k reading1Expr {sprintf("%.1f", $val)}
als Reading ausgeben kann.
Heute Vormittag habe ich versucht, dieses Attribut in das Array meines 'multi(jsonPath)' einzubauen.
Mein letztes "Trial and Error" ist folgende Syntax:
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['76', '64', '80', '66', '95', '230'])]"), concat(property('attributes.OBJECTID'),'_cases7_per_100k'), property('attributes.(cases7_per_100k reading1Expr {sprintf("%.1f", $val)})'));;
Kein Erfolg - auf ganzer Linie: die Readings "cases7_per_100k" sind leer.
mr_petz, könntest Du bitte noch mal ein Auge darauf werfen?
Kannst Du den korrekten Code evtl. sogar in meine Codierung einbinden?
Bitte nicht JsonMod und HTTPMOD durcheinanderwerfen. Du kannst im JsonMod dies versuchen (https://forum.fhem.de/index.php/topic,111489.msg1074304.html#msg1074304):
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['76', '64', '80', '66', '95', '230'])]"), concat(property('attributes.OBJECTID'),'_cases7_per_100k'), sprintf('%.1f', property('attributes.cases7_per_100k')));
Wenn du dies in dem Device nicht ändern möchtest, kannst du das auch im FTUI behandeln.
Für FTUI2 kannst du, ich nehme an du nutzt das Label-widget, das attribut data-fix (https://wiki.fhem.de/wiki/FTUI_Widget_Label#Attribute) setzen.
Für FTUI3 übergibst du den Wert an round:
<ftui-label [text]="coronaSpreadCounties:80_cases7_per_100k | round(1)"
[color]="coronaSpreadCounties2:80_cases7_per_100k | map('0:success, 50:warning, 75:danger, 200:red')"
class="">
</ftui-label>
@yersinia
Wow, vielen Dank - die volle Antwort-Dröhnung! Suppi!
Wenn ich so sehe, was man mit FTUI3 so alles machen kann ...
Ich nutze FTUI2 und setzte für dieses Layout die Flexbox-Variante ein - mit Template.
Gehe davon aus, dass das Label-Widget damit nicht verwendbar ist.
Habe gerade Deine Codierung ins JasonMod übernommen.
Ergebnis im FTUI2: Die '_cases7_per_100k' erscheinen mit allen vorherigen Nachkommastellen wie bisher.
Irgendwie hat die Berechnung im JasonMod nix gebracht.
In der READINGSLISTE des JeasonMod werden nun keinerlei '_cases7_per_100k' - Werte angezeigt. Auch kein Attribut-Name - einfach nur die je 3 anderen Readings der 6 Landkreise.
Hier noch zur Vollständigkeit meine FTUI-Codierungen der html-Seiten.
content_news_corona_7tage:
<!DOCTYPE html>
<html>
<body>
<div class="page" id="content_news_corona_7tage">
<div class="phone-back-btn">
<div class="hbox">
<div class="vbox phone-width">
<div class="card lift">
<header>
<div class="hdm-flexbox-container">
<div class="left-align hdm-flexbox-item-10 left-align left-space">Landkreis</div>
<div class="left-align hdm-flexbox-item-10 right-align left-space">Infizierte</div>
<div class="left-align hdm-flexbox-item-10 right-align left-space">Tote</div>
<div class="left-align hdm-flexbox-item-10 right-align left-space">7-Tage-Inzidenz</div>
</div>
</header>
<section>
<div
data-template="template/template_news_corona_7tage.html"
data-parameter='{"var_device" :"coronaSpreadCounties" ,"var_country":"76" }'></div>
</section>
<section>
<div
data-template="template/template_news_corona_7tage.html"
data-parameter='{"var_device" :"coronaSpreadCounties" ,"var_country":"64" }'></div>
</section>
<section>
<div
data-template="template/template_news_corona_7tage.html"
data-parameter='{"var_device" :"coronaSpreadCounties" ,"var_country":"80" }'></div>
</section>
<section>
<div
data-template="template/template_news_corona_7tage.html"
data-parameter='{"var_device" :"coronaSpreadCounties" ,"var_country":"66" }'></div>
</section>
<section>
<div
data-template="template/template_news_corona_7tage.html"
data-parameter='{"var_device" :"coronaSpreadCounties" ,"var_country":"95" }'></div>
</section>
<section>
<div
data-template="template/template_news_corona_7tage.html"
data-parameter='{"var_device" :"coronaSpreadCounties" ,"var_country":"230" }'></div>
</section>
</div>
</div>
</div>
</div>
</body>
</html>
template_news_corona_7tage:
<!DOCTYPE html>
<html>
<head>
<!-- FHEM Tablet UI V2.6 -->
<!-- Template f�r Corona -->
</head>
<body>
<div class="hdm-flexbox-container" "7tageinzidenz">
<div class="hdm-flexbox-item-10 left-align">
<div class="bigger inline" data-type="label" data-device="var_device" data-get="var_country_name" data-substitution='["LK Rhein-Kreis Neuss","Neuss","SK Düsseldorf","Düsseldorf","SK Köln","Köln","SK Essen","Essen","LK Recklinghausen","Recklinghausen","LK Ebersberg","Ebersberg"]'></div>
</div>
<div class="hdm-flexbox-item-10 right-align">
<div class="bigger" data-type="label" data-device="var_device" data-get="var_country_cases"></div>
</div>
<div class="hdm-flexbox-item-10 right-align">
<div class="bigger" data-type="label" data-device="var_device" data-get="var_country_deaths"></div>
</div>
<div class="hdm-flexbox-item-10 right-align">
<div class="bigger" data-type="label" data-device="var_device" data-get="var_country_cases7_per_100k"></div>
</div>
</div>
</body>
</html>
Hättest Du noch mal Bock einen Blick drauf zu werfen?
Zitat von: ulobo60 am 22 April 2021, 16:18:22Ich nutze FTUI2 und setzte für dieses Layout die Flexbox-Variante ein - mit Template.
Gehe davon aus, dass das Label-Widget damit nicht verwendbar ist.
Doch, sind sie. Nur hat das label jeweils eine andere Syntax. Das FTUI2-widget Label kann das, wie geschrieben das Attribut data-fix (https://wiki.fhem.de/wiki/FTUI_Widget_Label#Attribute) muss gesetzt werden.
Zitat von: ulobo60 am 22 April 2021, 16:18:22Habe gerade Deine Codierung ins JasonMod übernommen.
Ergebnis im FTUI2: Die '_cases7_per_100k' erscheinen mit allen vorherigen Nachkommastellen wie bisher.
Irgendwie hat die Berechnung im JasonMod nix gebracht.
Hast du auf dem JsonMod-Device, nachdem du readingList adaptiert hast, ein reread durchgeführt? Wenn der Code funktioniert, muss bereits das reading _case7_per_100k gerundet sein - oder wirr oder gar nicht vorhanden sein im Fehlerfall.
Was hast du jetzt in readingList stehen?
multi(jsonPath("\$.features[?(\@.attributes.OBJECTID in ['76', '64', '80', '66', '95', '230'])]"), concat(property('attributes.OBJECTID'),'_cases7_per_100k'), sprintf("%.1f", property('attributes.cases7_per_100k')));
Zitat von: ulobo60 am 22 April 2021, 16:18:22In der READINGSLISTE des JeasonMod werden nun keinerlei '_cases7_per_100k' - Werte angezeigt. Auch kein Attribut-Name - einfach nur die je 3 anderen Readings der 6 Landkreise.
Dann scheint das mit sprintf nicht zu funktionieren. Kannst du bitte, nur zur Sicherheit, mal die Ausgabe von
version JsonMod
posten?
Zitat von: ulobo60 am 22 April 2021, 16:18:22template_news_corona_7tage:
<!DOCTYPE html>
<html>
<head>
<!-- FHEM Tablet UI V2.6 -->
<!-- Template f�r Corona -->
</head>
<body>
<div class="hdm-flexbox-container" "7tageinzidenz">
<div class="hdm-flexbox-item-10 left-align">
<div class="bigger inline" data-type="label" data-device="var_device" data-get="var_country_name" data-substitution='["LK Rhein-Kreis Neuss","Neuss","SK Düsseldorf","Düsseldorf","SK Köln","Köln","SK Essen","Essen","LK Recklinghausen","Recklinghausen","LK Ebersberg","Ebersberg"]'></div>
</div>
<div class="hdm-flexbox-item-10 right-align">
<div class="bigger" data-type="label" data-device="var_device" data-get="var_country_cases"></div>
</div>
<div class="hdm-flexbox-item-10 right-align">
<div class="bigger" data-type="label" data-device="var_device" data-get="var_country_deaths"></div>
</div>
<div class="hdm-flexbox-item-10 right-align">
<div class="bigger" data-type="label" data-device="var_device" data-get="var_country_cases7_per_100k"></div>
</div>
</div>
</body>
</html>
Hier die Adaption für dein FTUI2 content:
[code]<!DOCTYPE html>
<html>
<head>
<!-- FHEM Tablet UI V2.6 -->
<!-- Template f�r Corona -->
</head>
<body>
<div class="hdm-flexbox-container" "7tageinzidenz">
<div class="hdm-flexbox-item-10 left-align">
<div class="bigger inline" data-type="label" data-device="var_device" data-get="var_country_name" data-substitution='["LK Rhein-Kreis Neuss","Neuss","SK Düsseldorf","Düsseldorf","SK Köln","Köln","SK Essen","Essen","LK Recklinghausen","Recklinghausen","LK Ebersberg","Ebersberg"]'></div>
</div>
<div class="hdm-flexbox-item-10 right-align">
<div class="bigger" data-type="label" data-device="var_device" data-get="var_country_cases"></div>
</div>
<div class="hdm-flexbox-item-10 right-align">
<div class="bigger" data-type="label" data-device="var_device" data-get="var_country_deaths"></div>
</div>
<div class="hdm-flexbox-item-10 right-align">
<div class="bigger" data-type="label" data-device="var_device" data-get="var_country_cases7_per_100k" data-fix="1"></div> <!-- <== Änderung hier == -->
</div>
</div>
</body>
</html>
Zitat
Dann scheint das mit sprintf nicht zu funktionieren. Kannst du bitte, nur zur Sicherheit, mal die Ausgabe von
version JsonMod
posten?
meine JsonMod-Version:
98_JsonMod.pm 22987 2020-10-18 13:26:05Z herrmannj
doif.js 15546 2017-12-03 09:57:42Z Ellert
fhemweb.js 23979 2021-03-15 14:00:33Z rudolfkoenig
Veraltet?
Das reread hat`s gebracht !!!Alles ist gut...
Die Werte werden in den Readings dargestellt und die FTUI2-Ausgabe ist bestens (siehe Bild weiter unten).
Man lernt hier doch nie aus - reread bspw.
Ich werde mir nachher auch mal Deinen Vorschlag zur Adaption meines FTUI2 content anschauen.
Werde ich sicher bei anderen Ausgaben gebrauchen können.
Vielen Dank yersinia !!!
Deine JsonMod Version ist die Neuste, die du derzeit über fhem-update bekommst. Alles gut.
Aber super wenn es jetzt funktioniert. ;)