Hallo in die Runde,
ich habe in einem Raum einen Bewegungsmelder installiert, der ab 20:00 das Licht in dem Raum einschalten soll. So ist der DOIF definiert:
Internals:
CFGFN
DEF ([Ikea_Bewegungssensor:"^occupancy:.true$"]and [20:00-23:50]) (set Ikea_Kueche_Transformator on-for-timer 600; set S20S10 on-for-timer 600)
FUUID 5e138a5a-f33f-2495-5474-05bfe82010ac8c46
MODEL FHEM
NAME DF.IKEA_BW_Kueche_Abends
NOTIFYDEV Ikea_Bewegungssensor,global
NR 1666
NTFY_ORDER 50-Ikea_Bewegungssensor_DOIF_1
STATE cmd_2
TYPE DOIF
VERSION 20811 2019-12-22 17:45:08
Helper:
DBLOG:
cmd:
myDbLog:
TIME 1578339456.48142
VALUE 2
cmd_event:
myDbLog:
TIME 1578339456.48142
VALUE Ikea_Bewegungssensor
cmd_nr:
myDbLog:
TIME 1578339456.48142
VALUE 2
mode:
myDbLog:
TIME 1578339079.33084
VALUE enabled
state:
myDbLog:
TIME 1578339456.48142
VALUE cmd_2
READINGS:
2020-01-06 20:37:36 Device Ikea_Bewegungssensor
2020-01-06 20:37:36 cmd 2
2020-01-06 20:37:36 cmd_event Ikea_Bewegungssensor
2020-01-06 20:37:36 cmd_nr 2
2020-01-06 20:37:36 e_Ikea_Bewegungssensor_events linkquality: 0,no_motion,occupancy: false,battery: ok,battery_level: 74
2020-01-06 20:31:19 mode enabled
2020-01-06 20:37:36 state cmd_2
2020-01-06 20:31:19 timer_01_c01 07.01.2020 20:00:00
2020-01-06 20:31:19 timer_02_c01 06.01.2020 23:50:00
Regex:
accu:
cond:
Ikea_Bewegungssensor:
0:
&STATE ^Ikea_Bewegungssensor$
attr:
cmdState:
wait:
waitdel:
condition:
0 ::EventDoIf('Ikea_Bewegungssensor',$hash,'^occupancy:.true$',1)and ::DOIF_time($hash,0,1,$wday,$hms)
days:
do:
0:
0 set Ikea_Kueche_Transformator on-for-timer 600; set S20S10 on-for-timer 600
1:
helper:
DEVFILTER ^global$|^Ikea_Bewegungssensor$
NOTIFYDEV global|Ikea_Bewegungssensor
event linkquality: 0,no_motion,occupancy: false,battery: ok,battery_level: 74
globalinit 1
last_timer 2
sleeptimer -1
timerdev Ikea_Bewegungssensor
timerevent linkquality: 0,no_motion,occupancy: false,battery: ok,battery_level: 74
triggerDev Ikea_Bewegungssensor
timerevents:
linkquality: 0
no_motion
occupancy: false
battery: ok
battery_level: 74
timereventsState:
linkquality: 0
state: no_motion
occupancy: false
battery: ok
battery_level: 74
triggerEvents:
linkquality: 0
no_motion
occupancy: false
battery: ok
battery_level: 74
triggerEventsState:
linkquality: 0
state: no_motion
occupancy: false
battery: ok
battery_level: 74
internals:
interval:
0 -1
1 0
intervalfunc:
localtime:
0 1578423600
1 1578351000
readings:
realtime:
0 20:00:00
1 23:50:00
time:
0 20:00:00
1 23:50:00
timeCond:
0 0
1 0
timer:
0 0
1 0
timers:
0 0 1
trigger:
all Ikea_Bewegungssensor
triggertime:
1578351000:
localtime 1578351000
hash:
1578423600:
localtime 1578423600
hash:
uiState:
uiTable:
Attributes:
group 93_DOIF,95_Bewegungsmelder
room 10_Küche,78_DOIF
Der Schalter in der Küche ist aber dadurch nun wirkungslos - beim Verlassen des Raums geht das Licht natürlich wieder an. Daher habe ich folgendes versucht:
Internals:
DEF MQTT_Ikea_Taster_Kueche:click:.off set S20S10 off; set Ikea_Kueche_Transformator off; set DF.IKEA_BW_Kueche_Abends disable; sleep 60; set DF.IKEA_BW_Kueche_Abends enable
FUUID 5dfcecea-f33f-2495-628d-90f78a03d8026b8c
NAME NF.MQTT_Ikea_Taster_Kueche_off
NOTIFYDEV MQTT_Ikea_Taster_Kueche
NR 331
NTFY_ORDER 50-NF.MQTT_Ikea_Taster_Kueche_off
REGEXP MQTT_Ikea_Taster_Kueche:click:.off
STATE active
TYPE notify
READINGS:
2020-01-06 14:16:13 state active
Attributes:
group 92_Notify
room 77_Notify,10_Küche
Irgendwie bleibt DF.IKEA_BW_Kueche_Abends aber immer disabled. Was mache ich falsch? Was kann ich anders machen?
Danke,
Christian
Das wäre aber durch die Brust ins Auge.
Besser die gesamte Logik an einer Stelle unterzubringen:
DOIF ([MQTT_Ikea_Taster_Kueche:click] eq "off") (set S20S10 off) ()
DOELSEIF ([Ikea_Bewegungssensor:"^occupancy:.true$"]and [20:00-23:50] and $cmd != 1.1) (set Ikea_Kueche_Transformator on-for-timer 600; set S20S10 on-for-timer 600)
wait 0,10
übersetzt bedeutet das: reagiere auf den Bewegungssensor erst 10 Sekunden nachdem Lampe ausgeschaltet wurde.
Guten Morgen Damian,
erst einmal danke! Ich versuche gerade deine Definition zu verstehen - probieren kann ich sie erst heute Abend. Wenn du erlaubst, stelle ich mal meine Fragen.
1. DOIF ([MQTT_Ikea_Taster_Kueche:click] eq "off") (set S20S10 off) () - ok, S20S10 wird ausgeschaltet, ich würde es dann noch um das Ikea Gerät erweitern, wofür ist das ()?
2. DOELSEIF ([Ikea_Bewegungssensor:"^occupancy:.true$"]and [20:00-23:50] and $cmd != 1.1) - das erste Zweidrittel ist mir klar - kannst du mir erklären, was $cmd ungleich 1.1 bedeutet.
Christian
Zitat von: ChristianH am 07 Januar 2020, 08:58:39
Guten Morgen Damian,
erst einmal danke! Ich versuche gerade deine Definition zu verstehen - probieren kann ich sie erst heute Abend. Wenn du erlaubst, stelle ich mal meine Fragen.
1. DOIF ([MQTT_Ikea_Taster_Kueche:click] eq "off") (set S20S10 off) () - ok, S20S10 wird ausgeschaltet, ich würde es dann noch um das Ikea Gerät erweitern, wofür ist das ()?
2. DOELSEIF ([Ikea_Bewegungssensor:"^occupancy:.true$"]and [20:00-23:50] and $cmd != 1.1) - das erste Zweidrittel ist mir klar - kannst du mir erklären, was $cmd ungleich 1.1 bedeutet.
Christian
Der erste Zweig hat zwei Sequenzen mit Zuständen: 1.1 (erster geklammerter Befehl) und 1.2. (ohne Befehl)
$cmd entspricht dem Reading cmd, der den aktuellen Zustand darstellt. Solange sich das Modul im Zustand 1.1 befindet (10 Sekunden), soll keine Bewegung schalten. Umgekehrt heißt das: schalten per Bewegung nur, wenn $cmd ungleich 1.1