Hallo Leute,
meine erste Frage im Forum.
Ich würde gerne wenn der Wert $a > 0 ist eine Unterscheidung treffen.
Leider funktioniert es nicht.
Ich hoffe mir kann jemand helfen.
Vielen Dank.
###calc E-Verbrauch
define E_Verbrauch dummy
attr E_Verbrauch room PV_Anlage
define notify_PVErtrag notify se:currentPower.* { \
my $a = ReadingsVal("d01","currentPower",0) ;; \
my $b = ReadingsVal("se","currentPower",0) ;; \
my $c = $b-$a ;; \
if ($a < 0) (my $d = $b) ;; \
if ($a > 0) (my $d = $b-$a) ;; \
my $text = "PV_Netz: $a Wh, SE_Erzeugung: $b Wh, E-Verbrauch: $c Wh, PV_Eigenverbrauch: $d" ;; \
fhem ("set E_Verbrauch $text") ;; \
}
if-einzeiler in perl werden andersherum gebaut. erst ausführungsteil, dann bedingung. also zb:
(my $d = $b) if ($a < 0) ;; \
Herzlichen Dank für die Hilfe,
leider funktioniert meine Berechnung nicht falls $a < 0 ist z.B. -500 für Strom Bezug.
Da ist dann $d = $b-$a falsch da ja Aufgrund $d = $b-(-100) ja wieder Plus gerechnet wird.
###calc E-Verbrauch
define E_Verbrauch dummy
attr E_Verbrauch room PV_Anlage
define notify_PVErtrag notify se:currentPower.* { \
my $a = ReadingsVal("d01","currentPower",0) ;; \
my $b = ReadingsVal("se","currentPower",0) ;; \
my $c = $b-$a ;; \
(my $d = $b) if ($a <= 0 ) ;; \
(my $d = $b-$a) if ($a > 0) ;; \
my $text = "PV_Netz: $a Wh, SE_Erzeugung: $b Wh, E-Verbrauch: $c Wh, PV_Eigenverbrauch: $d Wh" ;; \
fhem ("set E_Verbrauch $text") ;; \
}
Vielen Dank für die Hilfe.
Aus diesem Grunde hat uns der Herrgott die Syntax
if ( ...) { ... } else {...}
geschenkt.
LG
pah
Leider ist das mit der Syntax so ein Kreuz.
Habe für mich alle möglichen Arten probiert bin aber gescheitert.
Ädere ich die Zeile wie empfohle gibt es die Fehler Meldung.
notify_PVErtrag return value: Global symbol "$d" requires explicit package name at (eval 47776) line 1.
Meine geänderte Zeile ist.
if ($a > 0) { my $d = $b-$a } else { my $d = $b } ;; \
Was ist daran falsch?
Zur Volstänigkeit alles.
###calc E-Verbrauch
define E_Verbrauch dummy
attr E_Verbrauch room PV_Anlage
define notify_PVErtrag notify se:currentPower.* { \
my $a = ReadingsVal("d01","currentPower",0) ;; \
my $b = ReadingsVal("se","currentPower",0) ;; \
my $c = $b-$a ;; \
if ($a > 0) { my $d = $b-$a } else { my $d = $b } ;; \
my $text = "PV_Netz: $a Wh, SE_Erzeugung: $b Wh, E-Verbrauch: $c Wh, PV_Eigenverbrauch: $d Wh" ;; \
fhem ("set E_Verbrauch $text") ;; \
Vielen Dank für die bisherigen Antworten.
ZitatWas ist daran falsch?
nichts.
mit "my $d ..." definierst du diese variable nur für diesen block (zb if-block), benutzt sie aber ausserhalb in der zeile "my $text ...". schreibe also eine zeile "my $d;;" am anfang deines notifys, dann ist sie im ganzen notify definiert.
schau dir mal einen perl-grundkurs an.