Stromzähler,Gaszähler und wasserzähler

Begonnen von Sebastian84, 02 Juli 2024, 23:09:56

Vorheriges Thema - Nächstes Thema

MadMax-FHEM

Zitat von: Sebastian84 am 06 August 2024, 11:09:39Das wollte ich auch über State Format. Ich weißnur nicht wie ich das da rein schreiben muss. Das bei KWh eine Stelle hintern Komma Angezeigt wird und bei € zwei Stellen
stateFormat kann auch Perl-Aufrufe. D.h. da dann z.B. sprintf usw. am Ende muss halt wie pah bereits geschrieben hat halt ein "String" zurück kommen (aus Perl), der dann eben alles enthält inkl. notwendiger html-Tags wie <br> usw.

Also so wie du es im userReadings machen würdest, nur zusätzlich mit den html-Angaben.
Oder eben (trotzdem) als userReadings, dann halt richtig (-> korrekte Namen usw.) und im stateFormat auf diese Readings zugreifen.

Ist Geschmackssache...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Sebastian84

Kannst du mir zu mein State Format ein Beispiel geben

MadMax-FHEM

#62
Zitat von: Sebastian84 am 06 August 2024, 12:56:04Kannst du mir zu mein State Format ein Beispiel geben
Schwierig, weil ich deine ganzen falsch geschriebenen Readings und auch (wie ich denke) falschen Berechnungen nicht nachvollziehen kann (will)...

Aber hier:

{my $value1 = ReadingsNum($name, "Zaehler_countsOverall_EnergyDay", 0); my $value2 = ReadingsNum($name, "Zaehler_countsOverall_EnergyDayLast", 0); return sprintf("<span>EnergyDay: %.2f kWh</br>EnergyDayLast: %.2f kWh</span>", $value1 / 100, $value2 / 100)}

Eingabe in der Detailansicht durch Klick auf das Attribut stateFormat.
Bei Eingabe direkt in Fhem-Web musst du halt bzgl. Strichpunkte doppeln etc.

Wie geschrieben, habe ich jetzt aus deinen wilden gelieferten Infos was gebaut.
Bin nicht sicher ob es sinnvoll ist, sollte aber funktionieren...

Die Readings vorher besser löschen und auch die userReadings zu den hier verwendeten Readings löschen, ansonsten wird halt "doppelt gerechnet"...
...1x stateFormat und 1x userReadings...
Und auch hier: warten bis es die Readings wieder gibt, solltest du löschen. Bei einigen kann das dauern...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Prof. Dr. Peter Henning

Ich habe auch keine Lust, die ungenauen und in sich widersprüchlichen Angaben des Fragestellers zu debuggen.
Darum hier nur ein Beispiel:

In meinem Device PowerFlow hat das Attribut stateFormat einen ganz einfachen Inhalt:
{PF_StateFormat()}
In einer 99_EnergyUtils.pm-Datei gibt es den Code dazu:
###############################################################################
#
#  State Format PowerFlow
#
###############################################################################

sub PF_StateFormat(){
  my $ra=ReadingsVal("PowerFlow","relativeAutonomy_p","");
  my $sc=ReadingsVal("PowerFlow","selfConsumption_p","");
  my $rae=ReadingsVal("PowerFlow","relativeAutonomy_e","");
  my $sce=ReadingsVal("PowerFlow","selfConsumption_e","");
  my $ppv1=ReadingsVal("PowerFlow","power_PV1",0);
  my $epv1=ReadingsVal("PowerFlow","energy_PV1",0);
  my $ppv2=ReadingsVal("PowerFlow","power_PV2",0);
  my $epv2=ReadingsVal("PowerFlow","energy_PV2",0);
  my $pbat=ReadingsVal("PowerFlow","power_battery",0);
  my $ebat=ReadingsVal("PowerFlow","energy_battery",0);
  my $soc=ReadingsVal("PowerFlow","battery_SOC",0);
  my $peco=ReadingsVal("PowerFlow","power_eco",0);
  my $eeco=ReadingsVal("PowerFlow","energy_eco",0);
  my $teco=ReadingsVal("PowerFlow","test_eco",0);
  my $phouse=ReadingsVal("PowerFlow","power_house",0);
  my $ehouse=ReadingsVal("PowerFlow","energy_house",0);
  my $pwallbox=ReadingsVal("PowerFlow","power_wallbox",0);
  my $ewallbox=ReadingsVal("PowerFlow","energy_wallbox",0);
  my $pgrid=ReadingsVal("PowerFlow","power_grid",0);
  my $egrid=ReadingsVal("PowerFlow","energy_grid",0);
  my $eupl=ReadingsVal("PowerFlow","energy_upload",0);
  my $tgrid=ReadingsVal("PowerFlow","test_total",0);
  my $str="<p align=\"left\"><table border=\"1\"><tr><td></td><td><b>Power [kW]</b></td><td><b>Energy [kWh]</b></td><td></td></tr>".
    "<tr><td>PV1</td><td>%.3f</td><td>%.3f</td><td></td></tr>".
    "<tr><td>PV2</td><td>%.3f</td><td>%.3f</td><td></td></tr>".
    "<tr><td>Battery</td><td>%.3f</td><td>%.3f</td><td>SOC %d %%</td></tr>".
    "<tr><td>Eco</td><td>%.3f</td><td>%.3f</td><td>test %.2f</td></tr>".
    "<tr><td>House</td><td>%.3f</td><td>%.3f</td><td></td></tr>".
    "<tr><td>Wallbox</td><td>%.3f</td><td>%.3f</td><td></td></tr>".
    "<tr><td rowspan=\"2\">Grid</td><td rowspan=\"2\">%.3f</td><td>%.3f</td><td rowspan=\"2\">test %.2f</td></tr><tr><td>%.3f</td></tr>".
    "<tr><td>Autonomy</td><td>%d %%</td><td>%d %%</td><td></td></tr>".
    "<tr><td>Self Consumption</td><td>%d %%</td><td>%d %%</td><td></td></tr>".
    ".</table></p>";
   return sprintf($str,-$ppv1,-$epv1,-$ppv2,-$epv2,$pbat,$ebat,$soc,$peco,$eeco,$teco,$phouse,$ehouse,$pwallbox,$ewallbox,$pgrid,$egrid,$tgrid,-$eupl,$ra,$rae,$sc,$sce);

Um diesen Code zu verstehen, muss man zunächst einmal wissen, wie eine HTML-Tabelle aufgebaut ist. Zweitens, was die Perl-Funktion sprintf() macht.

Das Ergebnis ist im Bild zu sehen.

pah