FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: FHEMAN am 11 Dezember 2016, 22:55:05

Titel: [gelöst] Frage zu defmod vs. define Definition
Beitrag von: FHEMAN am 11 Dezember 2016, 22:55:05
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
Titel: Antw:Frage zu defmod vs. define Definition
Beitrag von: Otto123 am 11 Dezember 2016, 23:19:03
Hi Ronny,

zeig mal bitte ein list von dem notify.

Gruß Otto
Titel: Antw:Frage zu defmod vs. define Definition
Beitrag von: FHEMAN am 11 Dezember 2016, 23:27:30
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
Titel: Antw:Frage zu defmod vs. define Definition
Beitrag von: Otto123 am 12 Dezember 2016, 01:03:29
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
Titel: Antw:Frage zu defmod vs. define Definition
Beitrag von: igami am 12 Dezember 2016, 05:42:34
$NAME wird nur durch den Namen ersetzt. Wenn du das in Perl aufrufen verwendest, musst du es noch zusätzlich in Anführungszeichen setzen.
Titel: Antw:Frage zu defmod vs. define Definition
Beitrag von: FHEMAN am 06 Januar 2017, 13:37:04
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)