Autor Thema: Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz  (Gelesen 11386 mal)

Offline yersinia

  • Hero Member
  • *****
  • Beiträge: 1075
    • Cyanide & Happiness
Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
« Antwort #120 am: 09 September 2021, 07:31:17 »
Ich nutze die tausender sub um mir Zahlen entsprechend in der deutschen Notation (m.nnn,nnn) anzeigen zu lassen - übergib der Funktion ein Zahlenwert und diese gibt den umgewandelten Wert zurück. Wenn ich aber selbst dies im stateFormat nutze und es zur Verfügung stelle, kann ich nicht davon ausgehen, dass andere user die tausender sub haben bzw. haben möchten - daher gibt es in #110 das ganze ohne die sub.

Mit tausender sub wäre der stateFormat:
attr Intensivregister stateFormat { my @objects = ("0","1","overallSum");;\
my $cellstyle = "padding:3pt;;border-bottom:1px dotted lightgray;;text-align: right;;";;\
my $highlightcolor = "DarkSlateGray";; #DodgerBlue";;\
my $ret = "<div style=\"text-align: left;;\">";;\
$ret .= "last check => ";;\
$ret .= POSIX::strftime("%d.%m. %H:%M",localtime(time_str2num(ReadingsTimestamp($name,".computedReadings","2000-01-01 00:00:00"))));;\
$ret .= "<br \/>";;\
$ret .= '<div style="display:table;;width:80%;;">';;\
$ret .= '<div style="display:table-row;;">';;\
  $ret .= '<div style="display:table-cell;;'.$cellstyle.'width:35%;;font-weight:bold;;">&nbsp;;</div>';;\
  $ret .= '<div style="display:table-cell;;'.$cellstyle.'width:15%;;font-weight:bold;;">Covid</div>';;\
  $ret .= '<div style="display:table-cell;;'.$cellstyle.'width:10%;;font-weight:bold;;">&nbsp;;</div>';;\
  $ret .= '<div style="display:table-cell;;'.$cellstyle.'width:15%;;font-weight:bold;;">davon beatmet</div>';;\
  $ret .= '<div style="display:table-cell;;'.$cellstyle.'width:10%;;font-weight:bold;;">&nbsp;;</div>';;\
  $ret .= '<div style="display:table-cell;;'.$cellstyle.'width:15%;;font-weight:bold;;">freie Kapazit&auml;;ten</div>';;\
$ret .= '</div>';; #header\
for my $obj (@objects) {\
$ret .= '<div style="display:table-row;;" onmouseover="this.style.background=\''.$highlightcolor.'\';;" onmouseout="this.style.background=\'transparent\';;">';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:35%;;">';;\
$ret .= ReadingsVal($name,$obj."_name","-");;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:15%;;">';;\
$ret .= tausender(ReadingsVal($name,$obj."_faelleCovidAktuell","-"));;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:10%;;">';;\
$ret .= ReadingsVal($name,$obj."_covidToIntensivBettenPercent","-")."%";;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:15%;;">';;\
$ret .= tausender(ReadingsVal($name,$obj."_faelleCovidAktuellBeatmet","-"));;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:10%;;">';;\
$ret .= ReadingsVal($name,$obj."_faelleCovidAktuellBeatmetToCovidAktuellPercent","-")."%";;\
$ret .= '</div>';;\
$ret .= '<div style="display:table-cell;;'.$cellstyle.'width:15%;;">';;\
$ret .= tausender(ReadingsVal($name,$obj."_covidKapazitaetFrei","-"));;\
$ret .= '</div>';;\
$ret .= '</div>';;\
}\
$ret .= '</div><br />';; #table\
$ret .= "Letzter API-Update-Check: ";;\
$ret .= ReadingsVal($name,"creationTimestamp","-");;\
$ret .= "</div>";;\
return $ret;;}
viele Grüße, yersinia
----
FHEM 6.0 (SVN) on RPi 4B with RasPi OS Buster (perl 5.28.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@aculfw | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

Offline Wasserwerk33

  • Full Member
  • ***
  • Beiträge: 496
Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
« Antwort #121 am: 13 September 2021, 21:56:16 »
@yersinia
Du hast in einem Beitrag geschrieben das man die erste Zeile ändern muss wenn man mehrere Bundesländer Abfragen möchte.

Mein Angepassteste:
{ my @objects = ("NORDRHEIN_WESTFALEN","NIEDERSACHSEN","overallSum");
Leider stehen bei mir keine Bundesländer in Tabelle davor sondern nur Striche, habe ich etwas vergessen einzugeben?

Danke für deine Hilfe, und die coole Arbeite

Offline yersinia

  • Hero Member
  • *****
  • Beiträge: 1075
    • Cyanide & Happiness
Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
« Antwort #122 am: 14 September 2021, 08:00:43 »
Das hängt davon ab, wie deine Readings gebaut werden.
Wenn mit BL als Schlüsselteil (wie in #109 beschrieben) via (zB)
multi(jsonPath("\$.data[?(\@.bundesland in ['NORDRHEIN_WESTFALEN','NIEDERSACHSEN'])]"), concat(property('bundesland'),'_standortAnzahl'), property('standortAnzahl'));;\
##-------------------------siehe----hier--------------------------------------------------------^
sollten alle Readings auch mit NORDRHEIN_WESTFALEN_ bzw. NIEDERSACHSEN_ (und overallSum_) beginnen, dann sollte
{ my @objects = ("NORDRHEIN_WESTFALEN","NIEDERSACHSEN","overallSum");funktionieren.

Wenn count anstelle des BL verwendet wird (weil die Readings dann wesentlich kürzer sind - wie in #110 beschrieben) via (zB)
multi(jsonPath("\$.data[?(\@.bundesland in ['NORDRHEIN_WESTFALEN','NIEDERSACHSEN'])]"), concat(count(),'_meldebereichAnz'), property('meldebereichAnz'));;\
##-------------------------siehe----hier--------------------------------------------------------^
sollten alle Readings auch mit 0_ bzw. 1_ (und overallSum_) beginnen, dann sollte
{ my @objects = ("0","1","overallSum");funktionieren.

Wichtig ist, dass du ein Reading mit _name erzeugst, sonst hast du keine Beschreibung für das BL:
multi(jsonPath("\$.data[?(\@.bundesland in ['NORDRHEIN_WESTFALEN','NIEDERSACHSEN'])]"), concat(count(),'_name'), ucfirst(lc(property('bundesland'))));;\Das ist aber in #110 enthalten.

Nach den Änderungen ein reread ausführen - und auch mal prüfen, ob die JSON-Quelle auch zur Verfügung steht. ;)

Ansonsten zeig' mal ein list des Devices. ;)
viele Grüße, yersinia
----
FHEM 6.0 (SVN) on RPi 4B with RasPi OS Buster (perl 5.28.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@aculfw | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

Offline Wasserwerk33

  • Full Member
  • ***
  • Beiträge: 496
Antw:Anwendungsbeispiel JsonMod / Covid / 7-Tage-Inzidenz
« Antwort #123 am: 15 September 2021, 20:30:30 »
Hi

Ich habe es nach dem wie im Beitrag #110 umgebaut. Nun geht es. Dort wird auch der Name als Reading angezeigt. So wie unter overallSum.

Jetzt mit dem Klappt alles und ist so wie es sollte.

 

decade-submarginal