Hi,
mir ist aufgefallen, dass ich im BedingungsTeil von DOIF nicht gen auso auf UserReadings zugreifen kann, wie auf "normale" Readings.
Im folgenden CodeSchnipsel prüfe ich nacheinander Event, Internal, Reading und dann ein UserReading. Sinn oder Unsinn dieser Abfrage sollte nicht in Frage gestellt werden, es geht mir darum, ob und wie ich auf die einzelnen Daten zugreifen kann.
define di_anyWindow2 DOIF (\
([$DEVICE] eq "opened") and \
([$DEVICE:&type] eq "ShutterContact") and \
([$DEVICE:firmware] eq "1.4") and \
([FK_EG_WZ_Tuer:alermWhenOpen10] eq "NEIN"))\
({Log 3,"OPEN $DEVICE [FK_EG_WZ_Tuer:alermWhenOpen10]"})\
DOELSE({Log 3,"ENDE $DEVICE"})
alermWhenOpen20 ist UserReading.
Solange ich mit dem ItemNamen direkt darauf zugreife, klappt es einwandfrei.
Wenn ich das ganze nun aber generischer haben will, müsste ich FK_EG_WZ_Tuer durch $DEVICE ersetzen. das funktioniert aber nicht. dann gibt es Fehlermeldungen beim speichern der ConfigDatei.
define di_anyWindow2 DOIF (\
([$DEVICE] eq "opened") and \
([$DEVICE:&type] eq "ShutterContact") and \
([$DEVICE:firmware] eq "1.4") and \
([$DEVICE:alermWhenOpen10] eq "NEIN"))\
({Log 3,"OPEN $DEVICE [FK_EG_WZ_Tuer:alermWhenOpen10]"})\
DOELSE({Log 3,"ENDE $DEVICE"})
Woran liegt das?
Ist das so gewollt, geht es nicht anders oder wurde es in der Entwicklung lediglich nicht berücksichtigt?
Gruß,
Christian
Und was hat das mit der CUL_Entwicklung zu tun?
Die Frage sollte sein: "Was hat das Thema in der CUL-Entwicklung zu suchen?"
Da muss ich wohl verrutscht sein. Kannst du das Thema verschieben?
Oder weiß du wie es geht und würdest es mir sagen?
Zitat von: habnefrage am 21 Februar 2016, 16:10:44
Hi,
mir ist aufgefallen, dass ich im BedingungsTeil von DOIF nicht gen auso auf UserReadings zugreifen kann, wie auf "normale" Readings.
Im folgenden CodeSchnipsel prüfe ich nacheinander Event, Internal, Reading und dann ein UserReading. Sinn oder Unsinn dieser Abfrage sollte nicht in Frage gestellt werden, es geht mir darum, ob und wie ich auf die einzelnen Daten zugreifen kann.
define di_anyWindow2 DOIF (\
([$DEVICE] eq "opened") and \
([$DEVICE:&type] eq "ShutterContact") and \
([$DEVICE:firmware] eq "1.4") and \
([FK_EG_WZ_Tuer:alermWhenOpen10] eq "NEIN"))\
({Log 3,"OPEN $DEVICE [FK_EG_WZ_Tuer:alermWhenOpen10]"})\
DOELSE({Log 3,"ENDE $DEVICE"})
alermWhenOpen20 ist UserReading.
Solange ich mit dem ItemNamen direkt darauf zugreife, klappt es einwandfrei.
Wenn ich das ganze nun aber generischer haben will, müsste ich FK_EG_WZ_Tuer durch $DEVICE ersetzen. das funktioniert aber nicht. dann gibt es Fehlermeldungen beim speichern der ConfigDatei.
define di_anyWindow2 DOIF (\
([$DEVICE] eq "opened") and \
([$DEVICE:&type] eq "ShutterContact") and \
([$DEVICE:firmware] eq "1.4") and \
([$DEVICE:alermWhenOpen10] eq "NEIN"))\
({Log 3,"OPEN $DEVICE [FK_EG_WZ_Tuer:alermWhenOpen10]"})\
DOELSE({Log 3,"ENDE $DEVICE"})
Woran liegt das?
Ist das so gewollt, geht es nicht anders oder wurde es in der Entwicklung lediglich nicht berücksichtigt?
Gruß,
Christian
Siehe http://fhem.de/commandref_DE.html#DOIF_Angaben_im_Ausfuehrungsteil
Der Log-Befehl enthält ein Komma, daher kann das Komma nicht als Befehlstrenner eingesetzt werden und es gilt:
ZitatFalls ein Komma nicht als Trennzeichen zwischen FHEM-Befehlen gelten soll, so muss der FHEM-Ausdruck zusätzlich in runde Klammern gesetzt werden: ...((set lamp1,lamp2 on),set switch on)
Danke für den Hinweis, diesen Satz hatte ich nicht wahrgenommen.
Habe es eben mal angepasst, bekomme aber weiterhin noch die Fehlermeldung:
Zitatdi_anyWindow2 DOIF: no trigger in condition: ([$DEVICE] eq "opened") and ([$DEVICE:&type] eq "ShutterContact") and ([$DEVICE:firmware] eq "1.4") and ([$DEVICE:alermWhenOpen10] eq "NEIN")
Der Code sieht jetzt folgendermaßen aus:
define di_anyWindow2 DOIF (\
([$DEVICE] eq "opened") and \
([$DEVICE:&type] eq "ShutterContact") and \
([$DEVICE:firmware] eq "1.4") and \
([$DEVICE:alermWhenOpen10] eq "NEIN"))\
(({Log 3,"OPEN $DEVICE"}))\
DOELSE(({Log 3,"ENDE $DEVICE"}))
Wenn ich das UserReading nicht abfrage, läufts.
define di_anyWindow2 DOIF (\
([$DEVICE] eq "opened") and \
([$DEVICE:&type] eq "ShutterContact") and \
([$DEVICE:firmware] eq "1.4") and \
([".*:alermWhenOpen10: NEIN"]))\
(({Log 3,"OPEN $DEVICE"}))\
DOELSE(({Log 3,"ENDE $DEVICE"}))
Hast du noch einen Tipp?
Was soll hier [$DEVICE] triggern?