at Berechnung mit Variablen

Begonnen von Rolfg, 03 September 2017, 11:45:08

Vorheriges Thema - Nächstes Thema

Rolfg

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

JensS

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
Debian auf APU2C4, HM-CFG-USB2, SIGNALduino, HM-ES-PMSw1-Pl, TFA 30.3121, TFA 30.3125, ITS-150, PIR-5000, configurable Firmata USB & LAN, 1-wire: DS-18B20, DS-18S20, DS-2408, DS-2413, diverse I2C-Komponenten, zigbee2mqtt, ESPEasy etc.

Rolfg

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

JensS

Mach mal zwischen der einführenden geschweiften Klammer und my ein Leerzeichen.
{ my
Debian auf APU2C4, HM-CFG-USB2, SIGNALduino, HM-ES-PMSw1-Pl, TFA 30.3121, TFA 30.3125, ITS-150, PIR-5000, configurable Firmata USB & LAN, 1-wire: DS-18B20, DS-18S20, DS-2408, DS-2413, diverse I2C-Komponenten, zigbee2mqtt, ESPEasy etc.

Rolfg

Leider nein:

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


JensS

Poste mal deine DEF zu at_Strom_ueber_Tag.
Debian auf APU2C4, HM-CFG-USB2, SIGNALduino, HM-ES-PMSw1-Pl, TFA 30.3121, TFA 30.3125, ITS-150, PIR-5000, configurable Firmata USB & LAN, 1-wire: DS-18B20, DS-18S20, DS-2408, DS-2413, diverse I2C-Komponenten, zigbee2mqtt, ESPEasy etc.

Rolfg


+*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")}


JensS

Debian auf APU2C4, HM-CFG-USB2, SIGNALduino, HM-ES-PMSw1-Pl, TFA 30.3121, TFA 30.3125, ITS-150, PIR-5000, configurable Firmata USB & LAN, 1-wire: DS-18B20, DS-18S20, DS-2408, DS-2413, diverse I2C-Komponenten, zigbee2mqtt, ESPEasy etc.

Rolfg

Hallo Jens,

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

Gruß Rolf

Rolfg

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

Rolfg

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