[GELÖST] Falscher Reading abfangen Teil 2

Begonnen von MartinD, 21 September 2025, 10:24:24

Vorheriges Thema - Nächstes Thema

MartinD

Hallo,

ich versuche vergeblich in userReading eine umfassende Prüfung durchzuführen:

Dummy Tag_Nacht kann zwei state haben -> "Tag" oder "Nacht"

Meine userReading definition:
PV_Leistung_2:PV_Leistung-temp_2.* {
    my $pwr = ReadingsNum ($name, 'PV_Leistung-temp_2', 0);
       # in der Nacht gibt die PV keine Leistung, ab dann ist $pwr = 0
if {
ReadingsVal ('Tag_Nacht', 'state', '0') ne "Tag";
$pwr = 0;
    };
# oder  wenn $pwr < 0 dann soll  $pwr = 0
  elsif {
$pwr < 0;
$pwr = 0;
};
# und schließlich wenn $pwr > 7 dann soll  $pwr=$pwr/10
else {
$pwr > 7;
$pwr = $pwr/10;
     };
                   $pwr
                   }

Will nicht funktionieren.
Kann mir jemand auf die Sprünge helfen?

Mit besten Grüßen

Martin


Nobbynews

#1
Eigentlich müsste das haufenweise Syntax-Fehler erzeugen.
Ungetestet ungefähr so:

PV_Leistung_2:PV_Leistung-temp_2.* {
           my $pwr = ReadingsNum ($name, 'PV_Leistung-temp_2', 0);
       # in der Nacht gibt die PV keine Leistung, ab dann ist $pwr = 0
        if (ReadingsVal ('Tag_Nacht', 'state', '0') ne "Tag"){
            $pwr = 0;
            }
    # oder  wenn $pwr < 0 dann soll  $pwr = 0
          elsif ($pwr < 0){
            $pwr = 0;
            };
    # und schließlich wenn $pwr > 7 dann soll  $pwr=$pwr/10
        elseif ( $pwr > 7){
            $pwr = $pwr/10;
             };
                  return $pwr;
                   }
Tipp:
Folgenes Attribut setzen:
attr WEB JavaScripts codemirror/fhem_codemirror.jsDann sollten die Hinweise auf die Syntax-Fehler schon beim Abspeichern angezeigt werden.

Edit:
Das letzte else durch elseif ersetzt.

MartinD

Danke!

Leider geht noch nicht so.
Log sagt:
2025.09.21 12:11:36 1: Error evaluating SolarEdge userReading PV_Leistung_2: syntax error at (eval 833718) line 9, near ";
                else"
Global symbol "$pwr" requires explicit package name (did you forget to declare "my $pwr"?) at (eval 833718) line 12.
syntax error at (eval 833718) line 13, near ";
                   }"

frober

Zitat von: Nobbynews am 21 September 2025, 12:08:06PV_Leistung_2:PV_Leistung-temp_2.* {
          my $pwr = ReadingsNum ($name, 'PV_Leistung-temp_2', 0);
      # in der Nacht gibt die PV keine Leistung, ab dann ist $pwr = 0
        if (ReadingsVal ('Tag_Nacht', 'state', '0') ne "Tag"){
            $pwr = 0;
            }
    # oder  wenn $pwr < 0 dann soll  $pwr = 0
          elsif ($pwr < 0){
            $pwr = 0;
            };
    # und schließlich wenn $pwr > 7 dann soll  $pwr=$pwr/10
        else ( $pwr > 7){
            $pwr = $pwr/10;
            };
                  return $pwr;
                  }


Das letze else muss auch ein elsif sein!
Raspi 3b mit Raspbian Bullseye und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

Nobbynews

Zitat von: frober am 21 September 2025, 12:14:37Das letze else muss auch ein elsif sein!
@Frober war schneller.
Das elseif ist mir durchgerutscht.

MartinD

Danke!

das hat geholfen:
PV_Leistung_2:PV_Leistung-temp_2.* {
          my $pwr = ReadingsNum ($name, 'PV_Leistung-temp_2', 0);
        if (ReadingsVal ('Tag_Nacht', 'state', '0') ne "Tag"){
            $pwr = 0;
            }
          elsif ($pwr < 0){
            $pwr = 0;
            } <------------------ ";" weg
        elsif ( $pwr > 7){
            $pwr = $pwr/10;
            };
                  return $pwr;
                  }

Gruß

Martin