Hallo Fhem Gemeinde,
ich habe ein DOIF geschrieben welches nicht auslöst. Leider finde ich den Fehler nichr selber.
define ALARM_BM_Flur_unten_Flur_oben_Extern DOIF ([BM_Alarm_Flur_unten_STATUS] eq "Bewegung_erkannt" and [BM_Alarm_Flur_OG_Treppe_STATUS] eq "Bewegung_erkannt" and [Bewegung_bei_Scharfschaltung] eq "AN" and [ANLAGE_STATUS_EXTERN] eq "scharf") ("set Alarm1 An,set Alarm2 An,set Flurlicht AN,define verzoegert_ALARM_BM_Flur_unten_Flur_oben_Extern at +00:05:00 set Flurlicht AUS,set Alarm1 Aus,set Alarm2 Aus,delete verzoegert_ALARM_BM_Flur_unten_Flur_oben_Extern")
Es soll halt nur auslösen wenn die 4 Bedingungen zutreffen und na ch 5 Minuten alles wieder abschalten.
Es sind 2 Bewegungsmelder und 2 Dummys.
Würde es gerne ohne die 4 Schalter immer wieder zu schalten triggern, allerdings komme ich damit nicht wirklich klar.
Hat jemand einen Tip für mich ?
Hi,
gib mal
list ALARM_BM_Flur_unten_Flur_oben_Extern
in die Kommandozeile ein und poste den output hier.
Wie lange stehen die Bewegungsmelder denn im Zustand "Bewegung_erkannt"? (ist das überhaupt ein zulässiger "state"?) Sind sie gleichzeitig in diesem Zustand?
Warum verwendest du nicht on-for-timer, statt dir ein AT zu definieren?
Grüße,
Oli
Hallo KernSani,
die Ausgabe hat folgendes ergeben.
Internals:
DEF ([BM_Alarm_Flur_unten_STATUS] eq "Bewegung_erkannt" and [BM_Alarm_Flur_OG_Treppe_STATUS] eq "Bewegung_erkannt" and [Bewegung_bei_Scharfschaltung] eq "AN" and [ANLAGE_STATUS_EXTERN] eq "scharf") ("set Alarm1 An,set Alarm2 An,set Flurlicht AN,define verzoegert_ALARM_BM_Flur_unten_Flur_oben_Extern at +00:05:00 set Flurlicht AUS,set Alarm1 Aus,set Alarm2 Aus,delete verzoegert_ALARM_BM_Flur_unten_Flur_oben_Extern")
MODEL FHEM
NAME ALARM_BM_Flur_unten_Flur_oben_Extern
NR 2680
NTFY_ORDER 50-ALARM_BM_Flur_unten_Flur_oben_Extern
STATE cmd_2
TYPE DOIF
READINGS:
2018-04-23 13:30:14 Device BM_Alarm_Flur_unten_STATUS
2018-04-11 12:07:12 cmd 2
2018-04-11 12:07:12 cmd_event ANLAGE_STATUS_EXTERN
2018-04-11 12:07:12 cmd_nr 2
2018-04-21 13:22:24 e_ANLAGE_STATUS_EXTERN_STATE unscharf
2018-04-23 13:24:19 e_BM_Alarm_Flur_OG_Treppe_STATUS_STATE Keine_Bewegung
2018-04-23 13:30:14 e_BM_Alarm_Flur_unten_STATUS_STATE Keine_Bewegung
2018-04-23 04:30:43 e_Bewegung_bei_Scharfschaltung_STATE AUS
2018-04-09 20:30:49 mode enabled
2018-04-11 12:07:12 state cmd_2
Regex:
condition:
0 InternalDoIf($hash,'BM_Alarm_Flur_unten_STATUS','STATE') eq "Bewegung_erkannt" and InternalDoIf($hash,'BM_Alarm_Flur_OG_Treppe_STATUS','STATE') eq "Bewegung_erkannt" and InternalDoIf($hash,'Bewegung_bei_Scharfschaltung','STATE') eq "AN" and InternalDoIf($hash,'ANLAGE_STATUS_EXTERN','STATE') eq "scharf"
devices:
0 BM_Alarm_Flur_unten_STATUS BM_Alarm_Flur_OG_Treppe_STATUS Bewegung_bei_Scharfschaltung ANLAGE_STATUS_EXTERN
all BM_Alarm_Flur_unten_STATUS BM_Alarm_Flur_OG_Treppe_STATUS Bewegung_bei_Scharfschaltung ANLAGE_STATUS_EXTERN
do:
0:
0 "set Alarm1 An,set Alarm2 An,set Flurlicht AN,define verzoegert_ALARM_BM_Flur_unten_Flur_oben_Extern at +00:05:00 set Flurlicht AUS,set Alarm1 Aus,set Alarm2 Aus,delete verzoegert_ALARM_BM_Flur_unten_Flur_oben_Extern"
1:
helper:
DOIF_Readings_events
DOIF_eventas
event Keine_Bewegung
globalinit 1
last_timer 0
sleeptimer -1
timerdev BM_Alarm_Flur_unten_STATUS
timerevent Keine_Bewegung
triggerDev BM_Alarm_Flur_unten_STATUS
timerevents:
Keine_Bewegung
timereventsState:
state: Keine_Bewegung
triggerEvents:
Keine_Bewegung
triggerEventsState:
state: Keine_Bewegung
internals:
0 BM_Alarm_Flur_unten_STATUS:STATE BM_Alarm_Flur_OG_Treppe_STATUS:STATE Bewegung_bei_Scharfschaltung:STATE ANLAGE_STATUS_EXTERN:STATE
all BM_Alarm_Flur_unten_STATUS:STATE BM_Alarm_Flur_OG_Treppe_STATUS:STATE Bewegung_bei_Scharfschaltung:STATE ANLAGE_STATUS_EXTERN:STATE
itimer:
perlblock:
readings:
trigger:
uiState:
Attributes:
room DO_IF
On-for-timer löst im log immer sehr oft aus und deshalb benutze ich es selten.
Bewegung erkannt wird nach ca 4 Minuten wieder zurückgeschaltet .
Ich möchte halt unabhängig welcher zu erst auslöst den Alarm auslösen . Also wenn Melder a und melder b = Bewegung erkannt und die beiden Dummys den Status haben dann auslösen.
Hi,
ist das zulässiger Syntax? Hier (https://fhem.de/commandref_DE.html#DOIF)steht es zumindest nicht so.
DOIF ()("Befehl")?
Zitat("set Alarm1 An,set Alarm2 An,set Flurlicht AN,define verzoegert_ALARM_BM_Flur_unten_Flur_oben_Extern at +00:05:00 set Flurlicht AUS,set Alarm1 Aus,set Alarm2 Aus,delete verzoegert_ALARM_BM_Flur_unten_Flur_oben_Extern")
Und Du verwendest praktisch alle Varianten von an An AN :o
Gruß Otto
Auf das at würde ich verzichten und wait nutzen, im Prinzip so
([BM_Alarm_Flur_unten_STATUS] eq "Bewegung_erkannt" and [BM_Alarm_Flur_OG_Treppe_STATUS] eq "Bewegung_erkannt" and [Bewegung_bei_Scharfschaltung] eq "AN" and [ANLAGE_STATUS_EXTERN] eq "scharf")
(set ... an), (set ... aus)
mit
do always
wait 0,600
Ich würde noch die Dummys nur abfragen.
([BM_Alarm_Flur_unten_STATUS] eq "Bewegung_erkannt" and [BM_Alarm_Flur_OG_Treppe_STATUS] eq "Bewegung_erkannt" and [?Bewegung_bei_Scharfschaltung] eq "AN" and [?ANLAGE_STATUS_EXTERN] eq "scharf")
(set ... an), (set ... aus)