Hi, ich habe heute folgendes DOIF erarbeitet. Es löst wie gewünscht aus, wenn der dummy D_FFO_Alarm geändert wird. Leider werden die Aktionen nicht ausgeführt, sondern ich bekomme eine Fehlermeldung. Habe schon diverse Quelltextveränderungen probiert, aber die Meldung bleibt gleich. Siehe 2. Post.
{ fhem("set remotebot message ALARM"); if (ReadingsVal("HMW01.O01_Leuchte_Flur_OG","state",0) eq "off") { fhem("set HMW01.O01_Leuchte_Flur_OG on-for-timer 300"); } if (ReadingsVal("HMW03.O05_Leuchte_Wegelicht_Decke","state",0) eq "off") { fhem("set HMW03.O05_Leuchte_Wegelicht_Decke on-for-timer 300"); } if (ReadingsVal("HMW01.O04_Leuchte_HzgRaum","state",0) eq "off") { fhem("set HMW01.O04_Leuchte_HzgRaum on-for-timer 300"); } }: Unknown command {, try help. Unknown command if, try help. Unknown command }, try help. Unknown command }, try help. Unknown command }, try help.
([D_FFO_Alarm])({
fhem("set remotebot message ALARM");
if (ReadingsVal("HMW01.O01_Leuchte_Flur_OG","state",0) eq "off") {
fhem("set HMW01.O01_Leuchte_Flur_OG on-for-timer 300");
}
if (ReadingsVal("HMW03.O05_Leuchte_Wegelicht_Decke","state",0) eq "off") {
fhem("set HMW03.O05_Leuchte_Wegelicht_Decke on-for-timer 300");
}
if (ReadingsVal("HMW01.O04_Leuchte_HzgRaum","state",0) eq "off") {
fhem("set HMW01.O04_Leuchte_HzgRaum on-for-timer 300");
}
})
Internals:
CFGFN
DEF ([D_FFO_Alarm])({
fhem("set remotebot message ALARM");
if (ReadingsVal("HMW01.O01_Leuchte_Flur_OG","state",0) eq "off") {
fhem("set HMW01.O01_Leuchte_Flur_OG on-for-timer 300");
}
if (ReadingsVal("HMW03.O05_Leuchte_Wegelicht_Decke","state",0) eq "off") {
fhem("set HMW03.O05_Leuchte_Wegelicht_Decke on-for-timer 300");
}
if (ReadingsVal("HMW01.O04_Leuchte_HzgRaum","state",0) eq "off") {
fhem("set HMW01.O04_Leuchte_HzgRaum on-for-timer 300");
}
})
NAME DF_FFO_Alarm
NR 43713
NTFY_ORDER 50-DF_FFO_Alarm
STATE cmd_1
TYPE DOIF
Readings:
2016-10-31 17:14:02 Device D_FFO_Alarm
2016-10-31 17:14:02 cmd 1
2016-10-31 17:14:02 cmd_event D_FFO_Alarm
2016-10-31 17:14:02 cmd_nr 1
2016-10-31 17:14:02 e_D_FFO_Alarm_STATE 1
2016-10-31 17:14:02 error { fhem("set remotebot message ALARM"); if (ReadingsVal("HMW01.O01_Leuchte_Flur_OG","state",0) eq "off") { fhem("set HMW01.O01_Leuchte_Flur_OG on-for-timer 300"); } if (ReadingsVal("HMW03.O05_Leuchte_Wegelicht_Decke","state",0) eq "off") { fhem("set HMW03.O05_Leuchte_Wegelicht_Decke on-for-timer 300"); } if (ReadingsVal("HMW01.O04_Leuchte_HzgRaum","state",0) eq "off") { fhem("set HMW01.O04_Leuchte_HzgRaum on-for-timer 300"); } }: Unknown command {, try help.
Unknown command if, try help.
Unknown command }, try help.
Unknown command }, try help.
Unknown command }, try help.
2016-10-31 17:14:02 state cmd_1
Condition:
0 InternalDoIf($hash,'D_FFO_Alarm','STATE','','',AttrVal($hash->{NAME},'notexist',undef))
Devices:
0 D_FFO_Alarm
all D_FFO_Alarm
Do:
0:
0 { fhem("set remotebot message ALARM"); if (ReadingsVal("HMW01.O01_Leuchte_Flur_OG","state",0) eq "off") { fhem("set HMW01.O01_Leuchte_Flur_OG on-for-timer 300"); } if (ReadingsVal("HMW03.O05_Leuchte_Wegelicht_Decke","state",0) eq "off") { fhem("set HMW03.O05_Leuchte_Wegelicht_Decke on-for-timer 300"); } if (ReadingsVal("HMW01.O04_Leuchte_HzgRaum","state",0) eq "off") { fhem("set HMW01.O04_Leuchte_HzgRaum on-for-timer 300"); } }
Helper:
event 1
globalinit 1
last_timer 0
sleeptimer -1
timerdev D_FFO_Alarm
timerevent 1
triggerDev D_FFO_Alarm
timerevents:
1
timereventsState:
state: 1
triggerEvents:
1
triggerEventsState:
state: 1
Internals:
0 D_FFO_Alarm:STATE
all D_FFO_Alarm:STATE
Itimer:
Readings:
Regexp:
0:
All:
State:
Trigger:
Attributes:
do always
room x_FFO
das hier funktioniert:
([D_FFO_Alarm])({fhem("set remotebot message ALARM")})
## if (ReadingsVal("HMW01.O01_Leuchte_Flur_OG","state",0) eq "off") {
## fhem("set HMW01.O01_Leuchte_Flur_OG on-for-timer 300");
## }
## if (ReadingsVal("HMW03.O05_Leuchte_Wegelicht_Decke","state",0) eq "off") {
## fhem("set HMW03.O05_Leuchte_Wegelicht_Decke on-for-timer 300");
## }
## if (ReadingsVal("HMW01.O04_Leuchte_HzgRaum","state",0) eq "off") {
## fhem("set HMW01.O04_Leuchte_HzgRaum on-for-timer 300");
## }
##})
Zitat von: abc2006 am 31 Oktober 2016, 17:19:00
das hier funktioniert:
([D_FFO_Alarm])({fhem("set remotebot message ALARM")})
## if (ReadingsVal("HMW01.O01_Leuchte_Flur_OG","state",0) eq "off") {
## fhem("set HMW01.O01_Leuchte_Flur_OG on-for-timer 300");
## }
## if (ReadingsVal("HMW03.O05_Leuchte_Wegelicht_Decke","state",0) eq "off") {
## fhem("set HMW03.O05_Leuchte_Wegelicht_Decke on-for-timer 300");
## }
## if (ReadingsVal("HMW01.O04_Leuchte_HzgRaum","state",0) eq "off") {
## fhem("set HMW01.O04_Leuchte_HzgRaum on-for-timer 300");
## }
##})
1. Die Definition wird ohne Semikolons funktionieren.
oder
2. Wenn Semikolon dann immer doppelt.
oder
3. FHEM-IF verwenden ohne fhem()-Befehl
oder
4. Readingangaben in DOIF/IF-Syntax verwenden
Bsp:
([D_FFO_Alarm]) (IF ([HMW01.O01_Leuchte_Flur_OG] eq "off") (set HMW01.O01_Leuchte_Flur_OG on-for-timer 300),
IF (..)(...),
IF (..)(...),
)
Ist kürzer und damit weniger fehlerträchtig.
Gruß
Damian
Hi,
danke für deine Antwort.
ich habe zuerst 1) versucht:
([D_FFO_Alarm])({
fhem("set remotebot message ALARM")
if (ReadingsVal("HMW01.O01_Leuchte_Flur_OG","state",0) eq "off") {
fhem("set HMW01.O01_Leuchte_Flur_OG on-for-timer 300")
}
if (ReadingsVal("HMW03.O05_Leuchte_Wegelicht_Decke","state",0) eq "off") {
fhem("set HMW03.O05_Leuchte_Wegelicht_Decke on-for-timer 300")
}
if (ReadingsVal("HMW01.O04_Leuchte_HzgRaum","state",0) eq "off") {
fhem("set HMW01.O04_Leuchte_HzgRaum on-for-timer 300")
}
})
Fehlermeldung:
{ fhem("set remotebot message ALARM") if (ReadingsVal("HMW01.O01_Leuchte_Flur_OG","state",0) eq "off") { fhem("set
HMW01.O01_Leuchte_Flur_OG on-for-timer 300") } if (ReadingsVal("HMW03.O05_Leuchte_Wegelicht_Decke","state",0) eq "off") { fhem("set
HMW03.O05_Leuchte_Wegelicht_Decke on-for-timer 300") } if (ReadingsVal("HMW01.O04_Leuchte_HzgRaum","state",0) eq "off") { fhem("set
HMW01.O04_Leuchte_HzgRaum on-for-timer 300") } }: syntax error at (eval 1010) line 1, near ") {" syntax error at (eval 1010) line 1, near "} }"
2) hat dann funktioniert:
([D_FFO_Alarm])({
fhem("set remotebot message ALARM");;
if (ReadingsVal("HMW01.O01_Leuchte_Flur_OG","state",0) eq "off") {
fhem("set HMW01.O01_Leuchte_Flur_OG on-for-timer 300");;
}
if (ReadingsVal("HMW03.O05_Leuchte_Wegelicht_Decke","state",0) eq "off") {
fhem("set HMW03.O05_Leuchte_Wegelicht_Decke on-for-timer 300");;
}
if (ReadingsVal("HMW01.O04_Leuchte_HzgRaum","state",0) eq "off") {
fhem("set HMW01.O04_Leuchte_HzgRaum on-for-timer 300");;
}
})
4) funktioniert leider auch nicht, hätte ich aber auch nicht erwartet:
funktioniert, wenn das Reading zusätzlich in "" eingeschlossen wird, - cool, war mir nicht bekannt :-)
([D_FFO_Alarm])({
fhem("set remotebot message ALARM");;
if (ReadingsVal("HMW01.O01_Leuchte_Flur_OG","state",0) eq "off") {
fhem("set HMW01.O01_Leuchte_Flur_OG on-for-timer 300");;
}
if (ReadingsVal("HMW03.O05_Leuchte_Wegelicht_Decke","state",0) eq "off") {
fhem("set HMW03.O05_Leuchte_Wegelicht_Decke on-for-timer 300");;
}
## if (ReadingsVal("HMW01.O04_Leuchte_HzgRaum","state",0) eq "off") {
if ("[HMW01.O04_Leuchte_HzgRaum]" eq "off") {
fhem("set HMW01.O04_Leuchte_HzgRaum on-for-timer 300");;
}
})
Der Grund, warum ich 3)IF nicht verwende, ist zum einen, dass ich ggf noch Berechnungen einbauen will - und zum anderen, dass ich versuche, irgendwie eine Kontinuität reinzukriegen, damit nicht jedes DOIF und notify in einer anderen Syntax geschrieben ist - ich seh so schon nicht mehr durch :/
Darf ich noch ne zweite Frage stellen?
([+:[D_sendAll_Interval]])({sendAllTemp()})
ergibt folgenden Fehler:
DF_sendAll DOIF: Wrong timespec :15: either HH:MM:SS or {perlcode}: +:[D_sendAll_Interval]
wohingegen
([+:15])({sendAllTemp()})
funktioniert. Laut Commandref hätte ich vermutet, dass ich beliebige Zahlen aus der Bedingung durch Variablen ersetzen kann?
Zitat von: abc2006 am 01 November 2016, 20:17:06
Darf ich noch ne zweite Frage stellen?
([+:[D_sendAll_Interval]])({sendAllTemp()})
ergibt folgenden Fehler:
DF_sendAll DOIF: Wrong timespec :15: either HH:MM:SS or {perlcode}: +:[D_sendAll_Interval]
wohingegen
([+:15])({sendAllTemp()})
funktioniert. Laut Commandref hätte ich vermutet, dass ich beliebige Zahlen aus der Bedingung durch Variablen ersetzen kann?
Dahinter steckt ein selbst geschriebener Parser, der nicht alle Variationen zulässt.
Übrigens, ich würde in diesem Fall mir das Leben etwas einfacher machen und gar kein if/IF verwenden.
([D_FFO_Alarm]) (set remotebot message ALARM,
set HMW01.O01_Leuchte_Flur_OG:FILTER=STATE=off on-for-timer 300,
...
)
Interessanter Ansatz :o
Werde ich morgen mal verfolgen, danke!
Hast du denn eine Idee, wie ich das "jede volle Viertelstunde" variabel umsetze? mit [+[D_dummy]] soll es ja laut commandref funktionieren.. aber ist eigentlich nicht ganz das, was ich will...
Danke
Stephan
Zitat von: abc2006 am 01 November 2016, 23:28:51
Interessanter Ansatz :o
Werde ich morgen mal verfolgen, danke!
Hast du denn eine Idee, wie ich das "jede volle Viertelstunde" variabel umsetze? mit [+[D_dummy]] soll es ja laut commandref funktionieren.. aber ist eigentlich nicht ganz das, was ich will...
Danke
Stephan
jede volle Viertelstunde indirekt geht z. Zt. nur mit
set D_dummy +:15
[[D_dummy]]