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
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
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
Mach mal zwischen der einführenden geschweiften Klammer und my ein Leerzeichen.
{ my
Leider nein:
2017.09.03 12:46:35 3: at_Strom_ueber_Tag: Unknown command {, try help.
Poste mal deine DEF zu at_Strom_ueber_Tag.
+*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")}
Sorry, jetzt bin ich ratlos.
Hallo Jens,
kein Problem. Ich danke dir trotzdem für deine Zeit und mühen.
Gruß Rolf
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
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