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
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.
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:         AC_ActivePower Watt </b>   ( - => Bezug + => Einspeisung )</div>
<div style="color:white ; text-align:left"><b>Leistung Haus:             round(Power_House,0) Watt </b></div>
<div style="text-align:left">   </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:                 E_Load_Day kw/h</div>
<div style="color:white ; text-align:left">Energie Einspeisung:             E_Day_Outbound kw/h</div>
<div style="color:white ; text-align:left">Energie Battery Entladung:     E_Battery_Discharge_Day kw/h</div>
<div style="color:white ; text-align:left">Energie Battery Ladung:         E_Battery_Charge_Day kw/h</div>
<div style="color:white ; text-align:left">Energie PV Ertrag:                 E_PV_Day kw/h</div>
<div style="color:yellow ; text-align:left">==============================</div>
<div style="text-align:left">   </div>
<div style="text-align:left">PV Strang 1:     PV_1_Power Watt</div>
<div style="text-align:left">PV Strang 1:     PV_1_Voltage Volt</div>
<div style="text-align:left">PV Strang 2:     PV_2_Power Watt</div>
<div style="text-align:left">PV Strang 2:     PV_2_Voltage Volt</div>
<div style="text-align:left">PV Total DC:     PV_Total_Power Watt</div>
<div style="text-align:left">   </div>
<div style="text-align:left">Akku-Power:     Power_Battery Watt   ( - => Laden + => Entladen)</div>
<div style="text-align:left">Akku-Level:       SOC %</div>
<div style="text-align:left">Akku-Health:     SOH %</div>
<div style="text-align:left">Akku-Status:     Akku_Mode</div>
<div style="text-align:left">Akku-Temp:       BMS_Pack_Temperature °C</div>
<div style="text-align:left">   </div>
<div style="text-align:left">BMS Version:     BMS_Software_Version</div>
<div style="text-align:left">DSP Version:     DSP_Software_Version. DSP_SVN_Version</div>
<div style="text-align:left">ARM Version:     ARM_Software_Version. ARM_SVN_Version</div>
<div style="text-align:left">   </div>
<div style="text-align:left">WR Temp:         Inverter_Temperature °C</div>
<div style="text-align:left">   </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
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
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
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
Oh, selbst zu Weihnachten ein Popcorn-Thread Rosinenstollen-Thread 8)