FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Rolfg am 03 September 2017, 11:45:08

Titel: at Berechnung mit Variablen
Beitrag von: Rolfg am 03 September 2017, 11:45:08
Hallo,

habe mal wieder ein Problem. Ich möchte in einem dummy fortlaufend den bisherigen Stromverbrauch über Tag haben. Dafür habe ich 2 dummys angelegt. Der erste wird um 00.01.00 von einem at beschrieben mit dem aktuellen wert des Stromzähler von HM. So sieht der Code aus:


*00:01:00 {my $a = (ReadingsVal("HM_353413_IEC_01","energy",0));fhem("set d_Strom_um_Null $a");}


Der funktioniert auch. Ein zweites at soll nun den anderen dummy füllen:


+*00:01:00 {my $a = (ReadingsVal("HM_353413_IEC_01","energy",0));my $b = (ReadingsVal("d_Strom_um_Null","state",0));my $c = $a-$b;fhem("set d_Strom_ueber_Tag $c");}



Das funktioniert leider nicht. Im Lofile steht folgendes:


2017.09.03 11:42:16 3: at_Strom_ueber_Tag: Unknown command {my, try help.
Unknown command my, try help.
Unknown command my, try help.
Unknown command fhem("set, try help.
Unknown command }

, try help.



Warum funtioniert der erste at und beim zweiten mekert er? Vielleicht kann mir ja jemand auf die Sprünge helfen.

Danke und Gruß Rolf
Titel: Antw:at Berechnung mit Variablen
Beitrag von: JensS am 03 September 2017, 12:19:31
Zum Ersten sind einige Klammern überflüssig:
+*00:01:00 {my $a = (ReadingsVal("HM_353413_IEC_01","energy",0));my $b = (ReadingsVal("d_Strom_um_Null","state",0));my $c = $a-$b;fhem("set d_Strom_ueber_Tag $c");}
Zum Anderen sind bei einzeiligen Codes jeweils zwei Semikola zu verwenden. Die letzten Semikola kann man auch weglassen.
+*00:01:00 {my $a = ReadingsVal("HM_353413_IEC_01","energy",0);;my $b = ReadingsVal("d_Strom_um_Null","state",0);;my $c = $a-$b;;fhem("set d_Strom_ueber_Tag $c")}


Gruß Jens
Titel: Antw:at Berechnung mit Variablen
Beitrag von: Rolfg am 03 September 2017, 12:35:07
Hallo Jens,

danke für deine schnelle Antwort. Leider klappt es noch nicht. Folgendes steht im Log:

2017.09.03 12:31:35 3: at_Strom_ueber_Tag: Unknown command {my, try help.



Irgendwas stimmt noch nicht. Das mit den Klammern ist mir eh zu hoch. Ich bastel das halt immer aus Wiki, Forumsbeiträgen und Google zusammen. Manchmal klappt es und manchmal nicht.

Danke und Gruß Rolf
Titel: Antw:at Berechnung mit Variablen
Beitrag von: JensS am 03 September 2017, 12:42:41
Mach mal zwischen der einführenden geschweiften Klammer und my ein Leerzeichen.
{ my
Titel: Antw:at Berechnung mit Variablen
Beitrag von: Rolfg am 03 September 2017, 12:47:42
Leider nein:

2017.09.03 12:46:35 3: at_Strom_ueber_Tag: Unknown command {, try help.

Titel: Antw:at Berechnung mit Variablen
Beitrag von: JensS am 03 September 2017, 12:53:31
Poste mal deine DEF zu at_Strom_ueber_Tag.
Titel: Antw:at Berechnung mit Variablen
Beitrag von: Rolfg am 03 September 2017, 12:54:49

+*00:01:00 { my $a = ReadingsVal("HM_353413_IEC_01","energy",0);;my $b = ReadingsVal("d_Strom_um_Null","state",0);;my $c = $a-$b;;fhem("set d_Strom_ueber_Tag $c")}

Titel: Antw:at Berechnung mit Variablen
Beitrag von: JensS am 03 September 2017, 13:24:57
Sorry, jetzt bin ich ratlos.
Titel: Antw:at Berechnung mit Variablen
Beitrag von: Rolfg am 03 September 2017, 13:30:47
Hallo Jens,

kein Problem. Ich danke dir trotzdem für deine Zeit und mühen.

Gruß Rolf
Titel: Antw:at Berechnung mit Variablen
Beitrag von: Rolfg am 03 September 2017, 15:09:25
Hallo,

ich habe jetzt mal ein Doif gebastelt. Das Funktioniert aber nur einmal. Wegen dem Trigger. Hier mal ein list:


Internals:
   CFGFN
   DEF        ([HM_353413_IEC_01:.*]) ({ my $a = ReadingsVal("HM_353413_IEC_01","energy","") ;; my $b = ReadingsVal("d_Strom_um_Null","state","" ) ;; my $c = $a-$b ;; fhem "set d_Strom_ueber_Tag $c" }) DOELSE
   NAME       di_Strom_ueber_Tag
   NR         1779
   NTFY_ORDER 50-di_Strom_ueber_Tag
   STATE      cmd_1
   TYPE       DOIF
   READINGS:
     2017-09-03 15:01:03   Device          HM_353413_IEC_01
     2017-09-03 15:01:27   cmd             1
     2017-09-03 15:01:27   cmd_event       set_cmd_1
     2017-09-03 15:01:27   cmd_nr          1
     2017-09-03 15:01:27   state           cmd_1
   condition:
     0          ReadingValDoIf($hash,'HM_353413_IEC_01','.*')
   devices:
     0           HM_353413_IEC_01
     all         HM_353413_IEC_01
   do:
     0:
       0          { my $a = ReadingsVal("HM_353413_IEC_01","energy","") ;; my $b = ReadingsVal("d_Strom_um_Null","state","" ) ;; my $c = $a-$b ;; fhem "set d_Strom_ueber_Tag $c" }
     1:
       0
   helper:
     event      boot: off,eState: E: 173989.5 P: 179,energy: 173989.5,energyCalc: 173989.5,power: 179
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   HM_353413_IEC_01
     timerevent boot: off,eState: E: 173989.5 P: 179,energy: 173989.5,energyCalc: 173989.5,power: 179
     triggerDev HM_353413_IEC_01
     timerevents:
       boot: off
       eState: E: 173989.5 P: 179
       energy: 173989.5
       energyCalc: 173989.5
       power: 179
     timereventsState:
       boot: off
       eState: E: 173989.5 P: 179
       energy: 173989.5
       energyCalc: 173989.5
       power: 179
     triggerEvents:
       boot: off
       eState: E: 173989.5 P: 179
       energy: 173989.5
       energyCalc: 173989.5
       power: 179
     triggerEventsState:
       boot: off
       eState: E: 173989.5 P: 179
       energy: 173989.5
       energyCalc: 173989.5
       power: 179
   internals:
   itimer:
   readings:
     0           HM_353413_IEC_01:.*
     all         HM_353413_IEC_01:.*
   regexp:
     0:
     all:
   state:
     STATE:
   trigger:
Attributes:
   do         always
   room       Stromverbrauch



Der state von cmd springt dann auf 2 und da durch funktioniert der code nicht mehr. Wenn ich ein set cmd_1 wird alles ausgeführt.

Hier mal was im Event Monitor ankommt:


2017-09-03 14:28:52 DOIF di_Strom_ueber_Tag cmd_nr: 2
2017-09-03 14:28:52 DOIF di_Strom_ueber_Tag cmd: 2
2017-09-03 14:28:52 DOIF di_Strom_ueber_Tag cmd_event: HM_353413_IEC_01
2017-09-03 14:28:52 DOIF di_Strom_ueber_Tag cmd_2
2017-09-03 14:28:52 CUL_HM HM_353413_IEC_01 boot: off
2017-09-03 14:28:52 CUL_HM HM_353413_IEC_01 eState: E: 173916.6 P: 212
2017-09-03 14:28:52 CUL_HM HM_353413_IEC_01 energy: 173916.6
2017-09-03 14:28:52 CUL_HM HM_353413_IEC_01 energyCalc: 173916.6
2017-09-03 14:28:52 CUL_HM HM_353413_IEC_01 power: 212
2017-09-03 14:28:52 CUL_HM HM_353413_IEC_02 173916.6



Irgenwie muß ich dem doif mitteilen das es wieder auf cmd_1 geht oder so.

Jemand einen Tipp für mich?

Danke und Gruß Rolf
Titel: Antw:at Berechnung mit Variablen
Beitrag von: Rolfg am 03 September 2017, 16:50:10
Hallo,

Habe es jetzt mit einem notify gelöst.



HM_353413_IEC_01:.*
{
my $a = ReadingsVal("HM_353413_IEC_01","energy","") ;;
my $b = ReadingsVal("d_Strom_um_Null","state",0);;
my $c = $a-$b;;
{fhem "set d_Strom_ueber_Tag $c"}}




Jetzt muß ich mal versuchen den Wert zu formatieren.

Gruß Rolf