FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Uli28 am 13 Mai 2015, 11:36:42

Titel: Solarview Werte mit If unterscheiden für Berechnung.
Beitrag von: Uli28 am 13 Mai 2015, 11:36:42
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") ;; \
  }
Titel: Antw:Solarview Werte mit If unterscheiden für Berechnung.
Beitrag von: frank am 13 Mai 2015, 11:47:58
if-einzeiler in perl werden andersherum gebaut. erst ausführungsteil, dann bedingung. also zb:

(my $d = $b) if ($a < 0) ;; \
Titel: Antw:Solarview Werte mit If unterscheiden für Berechnung.
Beitrag von: Uli28 am 14 Mai 2015, 10:25:34
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.
Titel: Antw:Solarview Werte mit If unterscheiden für Berechnung.
Beitrag von: Prof. Dr. Peter Henning am 15 Mai 2015, 06:38:02
Aus diesem Grunde hat uns der Herrgott die Syntax
if ( ...) { ... } else {...} 
geschenkt.

LG

pah
Titel: Antw:Solarview Werte mit If unterscheiden für Berechnung.
Beitrag von: Uli28 am 15 Mai 2015, 08:50:28
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.
Titel: Antw:Solarview Werte mit If unterscheiden für Berechnung.
Beitrag von: frank am 15 Mai 2015, 12:57:00
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.