Berechnungen in userReading mit einer if-Bedienung

Begonnen von MartinD, 26 Januar 2026, 18:42:38

Vorheriges Thema - Nächstes Thema

MartinD

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.

Torxgewinde

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;
}

MartinD