Hallo,
ich versuche eine Berechnung als userReading zu formulieren:
Direkt_Verbrauch_Haus:Diff_I_AC_Energy_WH.* {
((ReadingsNum('SolarEdge','I_DC_Power',0) - ReadingsNum('SolarEdge','BatOut',0)) / ReadingsNum('SolarEdge','I_DC_Power',0)) * ReadingsNum($name,'Diff_I_AC_Energy_WH',0)
}
Das funktioniert gut solange I_DC_Power > 0 UND I_DC_Power > BatOut
Nun wollte ich eine Bedienung einbauen (zunächst für I_DC_Power > 0):
Direkt_Verbrauch_Haus:Diff_I_AC_Energy_WH.* {
if (ReadingsNum('SolarEdge','I_DC_Power',0) > 0 ;
((ReadingsNum('SolarEdge','I_DC_Power',0) - ReadingsNum('SolarEdge','BatOut',0)) / ReadingsNum('SolarEdge','I_DC_Power',0)) * ReadingsNum($name,'Diff_I_AC_Energy_WH',0)
}
und bin daran grandios gescheitert.
Ich sehe nicht mal den Fehler :-(
Kann mir jemand helfend unter die Arme greifen?
Mit besten Grüßen
Martin
[EDIT]
Ich habe auch versucht mit:
Direkt_Verbrauch_Haus:Diff_I_AC_Energy_WH.* {
my $i_dc = ReadingsNum('SolarEdge','I_DC_Power',0);
my $bat_out = ReadingsNum('SolarEdge','BatOut',0);
my $den = $i_dc;
if ($den > 0) { ReadingsNum($name,'Diff_I_AC_Energy_WH',0) * ( ($i_dc - $bat_out) / $den ); } }
War leider auch nichts.
Du hast da ein paar Klammern nicht korrekt gesetzt und in einigen Fällen hattest du keinen Rückgabewert. Ob deine Rechenlogik stimmt habe ich mir jetzt nicht überlegt:
Direkt_Verbrauch_Haus:Diff_I_AC_Energy_WH:.* {
my $i_dc = ReadingsNum('SolarEdge','I_DC_Power',0);
my $bat_out = ReadingsNum('SolarEdge','BatOut',0);
my $diff_ac = ReadingsNum($name,'Diff_I_AC_Energy_WH',0);
my $result = 0;
if ($i_dc > 0) {
$result = $diff_ac * (($i_dc - $bat_out) / $i_dc);
}
return $result;
}
Vielen Dank, so passt es!