Hallo, ich bin mir nicht ganz sicher, ob ich irgendwo einen Fehler habe. Es sieht so aus, als würde sich defmod bei der Definition anders verhalten als define.
Konkret geht es um ein Notify, in dem folgendes AT erstellt wird:
Kurzversion:
fhem("defmod at.WindowOrDoorOpen.$NAME.timer at +00:10:00 { ... }");
Langversion:
fhem("defmod at.WindowOrDoorOpen.$NAME.timer at +00:10:00 { SendMessage('Fenster '.alias($NAME).' offen', 'Offen seit '.(time - time_str2num(ReadingsTimestamp($NAME,'state',0 ))), 'Pushover,Say')}");
$NAME ist bspw. TFK.Kueche.Verschluss.Sw.01
Im Log taucht dann auf:
2016.12.11 22:37:52.468 3: at.WindowOrDoorOpen.TFK.Kueche.Verschluss.Sw.01.timer: Bareword "TFK" not allowed while "strict subs" in use at (eval 2183908) line 1.
Bareword "Kueche" not allowed while "strict subs" in use at (eval 2183908) line 1.
Bareword "Verschluss" not allowed while "strict subs" in use at (eval 2183908) line 1.
Bareword "Sw" not allowed while "strict subs" in use at (eval 2183908) line 1.
Erstelle ich es mit define, funktioniert es hingegen.
Ist das so gewollt, hat das einen Grund, oder liegt der Fehler an anderer Stelle?
Gruß
Ronny
Hi Ronny,
zeig mal bitte ein list von dem notify.
Gruß Otto
Hi Otto,
voila:
Internals:
DEF TFK[\.].*[\.]Sw.(\d\d.Verschluss):(closed|open|tilt|locked) {
# Open Window Alert Timer
if (($EVENT eq "open") && (Value("Aussentemperatur") < 13) && (AttrVal("$NAME", "WindowOpenWatchdog", 1))) {
fhem("define at.WindowOrDoorOpen.$NAME.timer at +00:10:00 { SendMessage('Fenster '.alias($NAME).' offen', 'Offen seit '.(time - time_str2num(ReadingsTimestamp($NAME,'state',0 ))), 'Pushover,SayEx')}");
} elsif (($EVENT eq "closed") && Value("at.WindowOrDoorOpen.$NAME.timer")) {
fhem("delete at.WindowOrDoorOpen.$NAME.timer");
}
}
NAME notify.TFK.Alle
NR 230
NTFY_ORDER 50-notify.TFK.Alle
REGEXP TFK[\.].*[\.]Sw.(\d\d.Verschluss):(closed|open|tilt|locked)
STATE active
TYPE notify
Readings:
2016-12-11 23:19:58 state active
Attributes:
room Fenster
Hi Ronny,
sorry ich dachte daran, der Fehler liegt vielleicht weiter vorn. Aber das sieht ok aus.
Da kann ich glaube ich nicht helfen. :-X
Gruß Otto
$NAME wird nur durch den Namen ersetzt. Wenn du das in Perl aufrufen verwendest, musst du es noch zusätzlich in Anführungszeichen setzen.
Der Vollständigkeit halber, wie es bei mir nun funktioniert:
fhem("defmod at.WindowOrDoorOpen.$NAME.timer at +*{3}00:10:00 { SendMessage('$devalias ist seit '.(sprintf('%.d', (time - time_str2num(ReadingsTimestamp('$NAME','state',0 ))) / 60)).' Minuten offen.', ' ', 'Pushover,SayEx')}");
($devalias wurde vorher mittels alias($NAME) zugewiesen)