FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Rampler am 18 Dezember 2024, 13:47:39

Titel: Event-aggregator Nachkommastellen begrenzen
Beitrag von: Rampler am 18 Dezember 2024, 13:47:39
Hallo zusammen,
ich hatte heute mal den event-aggregator getestet, weil ich einige Readings habe, die sehr oft auftauchen.
Dabei ist mir aufgefallen, das mit der mean function sehr viele Nachkommastellen entstehen.

Mein Atributes sieht so aus:
event-aggregator Power_House:300:linear:mean

Das Reading entsprechend so:
Power_House  312.03757484938

Das Reading wird sowohl in Plots als auch im Stateformat verwendet.
kw/h mit n Nachkommastellen ist auch nicht wirklich sinnvoll.

Das Thema wurde hier schonmal besprochen, allerdings ohne Resultat bzw. Abhilfe:
https://forum.fhem.de/index.php?topic=36771.0

Gibt's es denn hierfür mittlerweile eine Lösung ?
Das Reading Power_House kommt aus einem Userreading, ich habe aber auch etliche normale Readings ..
VG Klaus
Titel: Aw: Event-aggregator Nachkommastellen begrenzen
Beitrag von: passibe am 18 Dezember 2024, 14:40:21
Damit es im stateformat besser aussieht würde ich einfach runden, siehe z.B. hier: https://forum.fhem.de/index.php?topic=102851.0

Für plots ist das mE auch optisch egal oder übersehe ich was?
Vom Speicherplatz, den die Nachkommastellen im Logfile wegnehmen mal abgesehen, aber ich persönlich finde das vernachlässigbar.
Titel: Aw: Event-aggregator Nachkommastellen begrenzen
Beitrag von: Rampler am 18 Dezember 2024, 15:37:53
Hi Passibe,
erstmal Danke für die Antwort.
Das hier:
{ round(2.555,0) }
in der Commandline eingegeben liefert mir eine 3,soweit so gut.
Wie soll ich das in meinem Stateformat eingeben ?
Hhabe das mal so probiert (zweite Zeile):

<div style="color:white ; text-align:left"><b>Leistung Zaehler: &nbsp &nbsp &nbsp &nbsp AC_ActivePower Watt </b>&nbsp &nbsp( - => Bezug  + => Einspeisung )</div>
<div style="color:white ; text-align:left"><b>Leistung Haus: &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp round(Power_House,0) Watt </b></div>
<div style="text-align:left"> &nbsp </div>

<div style="color:yellow ; text-align:left"><b>Tägliche Werte:</b></div>
<div style="color:yellow ; text-align:left">==============================</div>
<div style="color:white ; text-align:left">Energie Verbrauch: &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp E_Load_Day kw/h</div>
<div style="color:white ; text-align:left">Energie Einspeisung: &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp E_Day_Outbound kw/h</div>
<div style="color:white ; text-align:left">Energie Battery Entladung: &nbsp &nbsp E_Battery_Discharge_Day kw/h</div>
<div style="color:white ; text-align:left">Energie Battery Ladung: &nbsp &nbsp &nbsp &nbsp E_Battery_Charge_Day kw/h</div>
<div style="color:white ; text-align:left">Energie PV Ertrag: &nbsp &nbsp &nbsp &nbsp  &nbsp &nbsp &nbsp &nbsp E_PV_Day kw/h</div>
<div style="color:yellow ; text-align:left">==============================</div>
<div style="text-align:left"> &nbsp </div>

<div style="text-align:left">PV Strang 1: &nbsp &nbsp  PV_1_Power Watt</div>
<div style="text-align:left">PV Strang 1: &nbsp &nbsp  PV_1_Voltage Volt</div>
<div style="text-align:left">PV Strang 2: &nbsp &nbsp PV_2_Power Watt</div>
<div style="text-align:left">PV Strang 2: &nbsp &nbsp PV_2_Voltage Volt</div>
<div style="text-align:left">PV Total DC: &nbsp  &nbsp PV_Total_Power Watt</div>
<div style="text-align:left"> &nbsp </div>

<div style="text-align:left">Akku-Power: &nbsp &nbsp  Power_Battery Watt&nbsp &nbsp( - => Laden  + => Entladen)</div>
<div style="text-align:left">Akku-Level: &nbsp &nbsp &nbsp  SOC %</div>
<div style="text-align:left">Akku-Health: &nbsp &nbsp  SOH %</div>
<div style="text-align:left">Akku-Status: &nbsp &nbsp Akku_Mode</div>
<div style="text-align:left">Akku-Temp: &nbsp &nbsp &nbsp BMS_Pack_Temperature °C</div>
<div style="text-align:left"> &nbsp </div>

<div style="text-align:left">BMS Version: &nbsp &nbsp BMS_Software_Version</div>
<div style="text-align:left">DSP Version: &nbsp &nbsp DSP_Software_Version. DSP_SVN_Version</div>
<div style="text-align:left">ARM Version: &nbsp &nbsp ARM_Software_Version. ARM_SVN_Version</div>
<div style="text-align:left"> &nbsp </div>

<div style="text-align:left">WR Temp: &nbsp &nbsp &nbsp &nbsp Inverter_Temperature °C</div>
<div style="text-align:left"> &nbsp </div>

<div style="color:green ; text-align:left">Status: state</div>

Keine Ahnung, wie ich das im stateformat angeben soll...

ZitatFür plots ist das mE auch optisch egal oder übersehe ich was?
Für den Graph selbst ja, ich verwende zur Überschrift im SVG-Plot ein Label:
   
"SOC: $data{currval2} % | Haus Akt: $data{currval3} W | PV - Act: $data{currval1} W - Max: $data{max1} W "

Hier werden dann zum Besipiel bei $data{max1} dann auch die Kommastellen angezeigt....

VG Klaus

Titel: Aw: Event-aggregator Nachkommastellen begrenzen
Beitrag von: Prof. Dr. Peter Henning am 18 Dezember 2024, 17:33:15
Zitat von: Rampler am 18 Dezember 2024, 15:37:53Wie soll ich das in meinem Stateformat eingeben ?
1. der Übersichtlichkeit und Wartbarkeithalber das stateFormat in eine externe Perl-Routine auslagern
2. darin eine HTML-Tabelle verwenden. Beispiel:

###############################################################################
#
#  PowerFlow Status
#  Parameter target = "sf" => stateFormat
#                     
#
###############################################################################

sub PF_status($){
  my ($target) = @_;
  my $str;
 
  my $hash = $defs{"PowerFlow"};
 
  my $ppv1=$hash->{READINGS}{"power_PV1"}{VAL};
  my $epv1=$hash->{READINGS}{"energy_PV1"}{VAL};
  my $ppv2=$hash->{READINGS}{"power_PV2"}{VAL};
  my $epv2=$hash->{READINGS}{"energy_PV2"}{VAL};
 
  my $pbat=$hash->{READINGS}{"power_battery"}{VAL};
  my $ebat=$hash->{READINGS}{"energy_battery"}{VAL};
  my $ebati=$hash->{READINGS}{"energy_battery_in"}{VAL};
  my $ebato=$hash->{READINGS}{"energy_battery_out"}{VAL};
  my $soc=$hash->{READINGS}{"battery_SOC"}{VAL};
  my $soce=$soc*10.24/100;
 
  my $peco=$hash->{READINGS}{"power_eco"}{VAL};
  my $eeco=$hash->{READINGS}{"energy_eco"}{VAL};
  my $phouse=$hash->{READINGS}{"power_house"}{VAL};
  my $ehouse=$hash->{READINGS}{"energy_house"}{VAL};
  my $pwallbox=$hash->{READINGS}{"power_wallbox"}{VAL};
  my $ewallbox=$hash->{READINGS}{"energy_wallbox"}{VAL};
  my $pgrid=$hash->{READINGS}{"power_grid"}{VAL};
  my $egrid=$hash->{READINGS}{"energy_grid"}{VAL};
  my $eupl=$hash->{READINGS}{"energy_upload"}{VAL};
 
  my $ra=$hash->{READINGS}{"relativeAutonomy_p"}{VAL};
  my $sc=$hash->{READINGS}{"selfConsumption_p"}{VAL};
  my $rae=$hash->{READINGS}{"relativeAutonomy_e"}{VAL};
  my $sce=$hash->{READINGS}{"selfConsumption_e"}{VAL};
 
  my $teco=$epv2-$ebat-$eeco;
  my $tgrid=$egrid-$eupl+$epv2-$ebat-$ehouse-$ewallbox;
 
  if( $target eq "sf"){
    $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 rowspan=\"2\">Battery</td><td rowspan=\"2\">%.3f</td><td>%.3f</td><td rowspan=\"2\" style=\"align:left\">SOC %.1f %% = %.2f kWh</td></tr>".
    "<tr><td>%.3f</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,$ebati,$soc,$soce,$ebato,
    $peco,$eeco,$teco,$phouse,$ehouse,$pwallbox,$ewallbox,$pgrid,$egrid,$tgrid,-$eupl,$ra,$rae,$sc,$sce);
  }elsif($target eq "tg" ) {
    $str = sprintf("%.2f %.2f %.2f %.2f %.2f %.1f %.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f %d %d %d %d",
    $ppv1,$epv1,$ppv2,$epv2,$pbat,$ebat,$soc,
     $peco,$eeco,$phouse,$ehouse,$pwallbox,$ewallbox,$pgrid,$egrid,-$eupl,$ra,$rae,$sc,$sce);
    #fhem94Cmd('setreading TelegramBot.Message PF_status '.$str);
      fhem94Cmd("{evalProfile('powerflow','".$str."')}");
  }else{
    Log 1,"[PF_status] unknown target $target";
  }    
}

LG

pah
Titel: Aw: Event-aggregator Nachkommastellen begrenzen
Beitrag von: Rampler am 23 Dezember 2024, 17:44:55
Ganz ehrlich, mir wäre trotzdem die Möglichkeit lieber im event-aggregator runden zu können.
Das mit der HTML Tabelle ist mir den Aufwand nicht wert.
Trotzdem Danke
Titel: Aw: Event-aggregator Nachkommastellen begrenzen
Beitrag von: Prof. Dr. Peter Henning am 25 Dezember 2024, 11:09:51
Zitat von: Rampler am 23 Dezember 2024, 17:44:55mir wäre trotzdem die Möglichkeit lieber im event-aggregator runden zu können
Ich bin prinzipiell dagegen, solche einfachen Hilfsmittel mit immer weiteren Funktionaliäten zu überfrachten. Wer das haben will, kann einfach das Reading duplizieren und dort die Rundung vornehmen.

Im Übrigen sei der Hinweis erlaubt, dass die Mittelwertbildung beim event-Aggregator gar nicht so übermäßig sinnvoll ist, weil es sich nicht um einen gleitenden Mittelwert handelt.
ZitatDas mit der HTML Tabelle ist mir den Aufwand nicht wert.
Also sollen andere den Aufwand erbringen?

Na denn fröhliche Weihnachten.

pah
Titel: Aw: Event-aggregator Nachkommastellen begrenzen
Beitrag von: betateilchen am 25 Dezember 2024, 12:59:36
Oh, selbst zu Weihnachten ein Popcorn-Thread Rosinenstollen-Thread  8)