Solarview Werte mit If unterscheiden für Berechnung.

Begonnen von Uli28, 13 Mai 2015, 11:36:42

Vorheriges Thema - Nächstes Thema

Uli28

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") ;; \
  }

frank

if-einzeiler in perl werden andersherum gebaut. erst ausführungsteil, dann bedingung. also zb:

(my $d = $b) if ($a < 0) ;; \
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

Uli28

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.

Prof. Dr. Peter Henning

Aus diesem Grunde hat uns der Herrgott die Syntax
if ( ...) { ... } else {...} 
geschenkt.

LG

pah

Uli28

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.

frank

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.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html