FHEM Forum

FHEM => Frontends => TabletUI => Thema gestartet von: ulobo60 am 21 April 2021, 17:51:35

Titel: [Gelöst] Formatierte Darstellung von JsonMod-Daten im FTUI
Beitrag von: ulobo60 am 21 April 2021, 17:51:35
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.
Titel: Antw:Formatierte Darstellung von JsonMod-Daten im FTUI
Beitrag von: mr_petz am 21 April 2021, 20:32:38
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ß

Titel: Antw:Formatierte Darstellung von JsonMod-Daten im FTUI
Beitrag von: ulobo60 am 22 April 2021, 13:58:04
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?
Titel: Antw:Formatierte Darstellung von JsonMod-Daten im FTUI
Beitrag von: yersinia am 22 April 2021, 14:13:18
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>

Titel: Antw:Formatierte Darstellung von JsonMod-Daten im FTUI
Beitrag von: ulobo60 am 22 April 2021, 16:18:22
@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?
Titel: Antw:Formatierte Darstellung von JsonMod-Daten im FTUI
Beitrag von: yersinia am 22 April 2021, 16:32:22
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>
Titel: Antw:Formatierte Darstellung von JsonMod-Daten im FTUI
Beitrag von: ulobo60 am 22 April 2021, 17:38:08
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 !!!

Titel: Antw:Formatierte Darstellung von JsonMod-Daten im FTUI
Beitrag von: yersinia am 23 April 2021, 07:58:46
Deine JsonMod Version ist die Neuste, die du derzeit über fhem-update bekommst. Alles gut.

Aber super wenn es jetzt funktioniert. ;)