Hallo,
je mehr ich mit DOIF mache, desto öfter merke ich leider, dass ich noch immer erhebliche Verständnisprobleme habe.
Trotz Commandref und Wiki steige ich da offenbar einfach nicht durch, von daher bitte ich um Nachsicht und würde mich über hilfreiche Antworten freuen. Gefühlte hundert Versuche und nichts klappt momentan.
Ich möchte, dass mein Bewegungsmelder das Licht einschaltet, wenn die Helligkeit <75 und ein Dummy auf "on" steht.
Ausgangssituation:
Wenn der Bewegungsmelder ein "motion" sendet, setze ich per notify / at ein reading im device des Bewegungsmelders auf 1 (movement) - für 3 Minuten. Danach wieder auf 0.
Dieses Reading nutze ich bisher für die Erstellung eines Plots.
Grund: Der STATE des Melder steht ja immer auf Motion. Die Lösung mit dem Reading habe ich hier im Forum gefunden.
Das funktioniert auch wunderbar mit dem Plot.
Zum eigentlich Problem:
define Bewegung_Licht_DOIF DOIF ([HM_407BDF:movement] eq "1" and [?HM_407BDF:brightness]<75 and [?Terrasse_Licht_Automatik] =~ "on") (set HM_41B473 on-for-timer 150)
attr Bewegung_Licht_DOIF do always
Das DOIF löst nicht aus. Der Melder erkennt Bewegung, das notify setzt "movement" auf 1, Brightness ist <75, der dummy ist "on" - aber nichts passiert.
Ich glaube auch den Grund zu kennen, da im DOIF selbst "movement" immer 0 ist.
Das Notify:
Internals:
DEF HM_407BDF:motion {
fhem ("setreading HM_407BDF movement 1 ; define Bewegungsmelder_Sued_movement_off at +00:03:00 setreading HM_407BDF movement 0");
}
NAME Bewegungsmelder_Sued_Trigger
NOTIFYDEV HM_407BDF
NR 571
NTFY_ORDER 50-Bewegungsmelder_Sued_Trigger
REGEXP HM_407BDF:motion
STATE 2016-04-07 21:23:26
TYPE notify
Readings:
2016-04-07 21:22:05 state active
Attributes:
Melder nach dem Auslösen:
Internals:
CUL_0_MSGCNT 3
CUL_0_RAWMSG A0D6CA641407BDF8286FF01222580::-86:CUL_0
CUL_0_RSSI -86
CUL_0_TIME 2016-04-07 21:02:20
DEF 407BDF
IODev CUL_0
LASTInputDev CUL_0
MSGCNT 3
NAME HM_407BDF
NR 569
STATE motion
TYPE CUL_HM
lastMsg No:6C - t:41 s:407BDF d:8286FF 01222580
protLastRcv 2016-04-07 21:02:19
protSnd 4 last_at:2016-04-07 21:02:20
protState CMDs_done
rssi_at_CUL_0 max:-81.5 lst:-86 min:-86 cnt:3 avg:-84.33
Readings:
2016-04-07 20:56:30 Activity alive
2016-04-07 20:23:14 CommandAccepted yes
2016-04-07 20:25:55 D-firmware 1.6
2016-04-07 20:25:55 D-serialNr MEQ1424700
2016-04-07 20:23:15 PairedTo 0x8286FF
2016-04-07 20:25:56 R-brightFilter 2
2016-04-07 20:25:56 R-captInInterval off
2016-04-05 18:52:49 R-evtFltrNum 1
2016-04-05 18:52:49 R-evtFltrPeriod 1 s
2016-04-07 20:25:56 R-minInterval 240
2016-04-05 18:52:49 R-pairCentral 0x8286FF
2016-04-07 20:23:14 RegL_00. 02:01 0A:82 0B:86 0C:FF 00:00
2016-04-07 20:25:56 RegL_01. 01:12 02:24 08:00 22:00 00:00
2016-04-07 21:00:09 battery ok
2016-04-07 21:02:20 brightness 37
2016-04-07 21:00:09 cover closed
2016-04-07 21:02:20 motion on (to CCU)
2016-04-07 21:02:20 motionCount 34_next:116s
2016-04-07 21:02:20 movement 1
2016-04-07 21:00:09 recentStateType info
2016-04-07 21:02:20 state motion
2016-04-07 21:02:20 trigDst_CCU noConfig
2016-04-07 21:02:20 trigger_cnt 34
Helper:
HM_CMDNR 108
mId 00C1
rxType 28
Expert:
def 1
det 0
raw 1
tpl 0
Io:
newChn +407BDF,00,01,00
nextSend 1460055740.00541
rxt 2
vccu CCU
p:
407BDF
00
01
00
prefIO:
CUL_0
Mrssi:
mNo 6C
Io:
CUL_0 -84
Prt:
bErr 0
sProc 0
sleeping 1
Rspwait:
Q:
qReqConf
qReqStat
Role:
chn 1
dev 1
Rpt:
IO CUL_0
flg A
ts 1460055739.91126
ack:
HASH(0x2e94628)
6C80028286FF407BDF01012500
HASH(0x2e94628)
6C80028286FF407BDF00
Rssi:
At_cul_0:
avg -84.3333333333333
cnt 3
lst -86
max -81.5
min -86
Attributes:
IODev CUL_0
IOgrp CCU:CUL_0
actCycle 000:10
actStatus alive
alias Bewegungsmelder_Sued
autoReadReg 4_reqStatus
expert 2_raw
firmware 1.6
group Bewegungsmelder
model HM-Sen-MDIR-O-2
peerIDs 00000000,
room Alarmanlage,CUL_HM,Hausstatus
serialNr MEQ1424700
showtime 1
subType motionDetector
DOIF nach dem Auslösen:
Internals:
DEF ([HM_407BDF:movement] eq "1" and [?HM_407BDF:brightness]<75 and [?Terrasse_Licht_Automatik] =~ "on") (set HM_41B473 on-for-timer 150)
NAME Bewegung_Licht_DOIF
NR 581
NTFY_ORDER 50-Bewegung_Licht_DOIF
STATE initialize
TYPE DOIF
Readings:
2016-04-07 21:02:20 Device HM_407BDF
2016-04-07 21:02:20 e_HM_407BDF_brightness 37
2016-04-07 21:02:20 e_HM_407BDF_movement 0
2016-04-07 21:00:17 state initialize
Condition:
0 ReadingValDoIf($hash,'HM_407BDF','movement','','',AttrVal($hash->{NAME},'notexist',undef)) eq "1" and ReadingValDoIf($hash,'HM_407BDF','brightness','','',AttrVal($hash->{NAME},'notexist',undef))<75 and InternalDoIf($hash,'Terrasse_Licht_Automatik','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) =~ "on"
Devices:
0 HM_407BDF
all HM_407BDF
Do:
0:
0 set HM_41B473 on-for-timer 150
1:
Helper:
event brightness: 37,motion: on (to CCU),motionCount: 34_next:116s,motion,trigDst_CCU: noConfig,trigger_cnt: 34
globalinit 1
last_timer 0
sleeptimer -1
triggerDev HM_407BDF
triggerEvents:
brightness: 37
motion: on (to CCU)
motionCount: 34_next:116s
motion
trigDst_CCU: noConfig
trigger_cnt: 34
movement: 1
Internals:
0 Terrasse_Licht_Automatik:STATE
all Terrasse_Licht_Automatik:STATE
Itimer:
Readings:
0 HM_407BDF:movement HM_407BDF:brightness
all HM_407BDF:movement HM_407BDF:brightness
Regexp:
0:
All:
State:
Trigger:
Attributes:
do always
Kann mich jemand erleuchten?
Lies mal hier: http://www.fhemwiki.de/wiki/HM-Sen-MDIR-O_Funk-IR-Bewegungsmelder_au%C3%9Fen#Au.C3.9Fenbeleuchtung_zeitgesteuert_und_bei_Bewegung_schalten
Moin,
vielleicht lässt sich dein Vorhaben ja etwas einfacher umsetzen...
Schau mal in der commandref zu DOIF bei "Weitere Anwendungsbeispiele" unter "on-for-timer" nach.
So hab ich das bei mir im Gästebad gelöst.
Die Helligkeitsschwelle lässt sich dort bestimmt auch einbauen...s.a. hier:
http://www.meintechblog.de/2014/12/smart-home-bewegungsmelder-lichtsteuerung-mit-fhem/ (http://www.meintechblog.de/2014/12/smart-home-bewegungsmelder-lichtsteuerung-mit-fhem/)
Gruß
Andreas
Die Verwendung des HM-Bewegungsmelders mit seinen Besonderheiten wird hier beschrieben: http://fhem.de/commandref_DE.html#DOIF_Zeitspanne_eines_Readings_seit_der_letzten_Aenderung
Zitat von: Ellert am 08 April 2016, 09:50:21
Die Verwendung des HM-Bewegungsmelders mit seinen Besonderheiten wird hier beschrieben: http://fhem.de/commandref_DE.html#DOIF_Zeitspanne_eines_Readings_seit_der_letzten_Aenderung
Diese Lösung stammt aus der Zeit, als DOIF noch nicht die Möglichkeiten hatte auf Events, statt auf Readingsabfragen zu reagieren.
Heute würde ich die Lösung mit einer Event-Abfrage machen [HMdev:"motion"] wie beim Beispiel für on-for-timer, wie von Vize vorgeschlagen.
Gruß
Damian
(
[ez_BM_Sicherheit:?motion]
and
[ez_BM_Sicherheit:brightness] < 60
)
(set ez_WS_Licht on-for-timer 300)
Das klappt so ziemlich gut....
Zitat von: Rince am 08 April 2016, 20:45:23
(
[ez_BM_Sicherheit:?motion]
and
[ez_BM_Sicherheit:brightness] < 60
)
(set ez_WS_Licht on-for-timer 300)
Das klappt so ziemlich gut....
[ez_BM_Sicherheit:?motion] ist ja noch die alte Syntax, die der neuen [ez_BM_Sicherheit:"motion"] entspricht
Vielen Dank - es funktioniert nun, in dem ich das Event anstatt des (User-)Readings "movement" abfrage.
Mich hätte zwar noch intressiert warum das mit dem Usereading nicht geht, aber Hauptsache, ich habe erstmal eine funktionierende Lösung.
Hallo Damian,
könntest Du auch eine Empfehlung geben, wie sich die neue DOIF-Syntax und der Trick der Woche (Juli 2014, http://www.fhemwiki.de/wiki/Trick_der_Woche#Funklast_reduzieren - Thema Funklast reduzieren) verheiraten läßt?
Ziel wäre, solange der Bewegungsmelder Bewegung erkennt, daß Licht anzulassen, ohne jedesmal ein on-for-time zu senden...
Danke, -MN
Zitat von: Morgennebel am 13 April 2016, 13:27:38
Hallo Damian,
könntest Du auch eine Empfehlung geben, wie sich die neue DOIF-Syntax und der Trick der Woche (Juli 2014, http://www.fhemwiki.de/wiki/Trick_der_Woche#Funklast_reduzieren - Thema Funklast reduzieren) verheiraten läßt?
Ziel wäre, solange der Bewegungsmelder Bewegung erkennt, daß Licht anzulassen, ohne jedesmal ein on-for-time zu senden...
Danke, -MN
http://fhem.de/commandref_DE.html#DOIF_Weitere_Anwendungsbeispiele
Beim nachgebildeten on-for-timer passiert das nicht.
Gruß
Damian
Hallo
Ich habe
Zitat
([Ueberwachung] eq "on" and [BM_Wohnung:"motion"]) (set pushmsg_D msg 'Bewegung Wohnung! {(localtime)}',set pushmsg_E msg 'Bewegung Wohnung! {(localtime)}')
Immer wenn der HM Bewegungsmelder auf "noMotion" geht kommt die Message nocheinmal.
Kann ich das nur mit einer Pause im DOIF lösen?
Oder gibt es da auch eine Bessere Lösung?
Hab es so gelöst.
Zitat([?Ueberwachung] eq "on" and [BM_Wohnung:motion] =~ "on") (set pushmsg_D msg 'Bewegung Wohnung! {(localtime)}',set pushmsg_E msg 'Bewegung Wohnung! {(localtime)}')
cmdpause 240
do always
Der Bewegungsmelder sendet zwar kein Motion und auch kein On, aber der britness Wert wird gesendet und das reicht anscheinend auch zum auslösen im DOIF.
Hallo,
seitdem der state des Bewegungsmelders automatisch auf "noMotion" gesetzt wird (durch ein FHEM Update), funktioniert mein DOIF nicht mehr richtig.
Vielleicht kann mir jemand helfen.
Mein DOIF:
define Bewegung_Licht_DOIF DOIF ([BM_Sued:?motion] and [?BM_Sued:brightness]<75 and [?Terrasse_Licht_Automatik] =~ "on" and [?Lampe_Sued] eq "off") (set Lampe_Sued on-for-timer 150)
attr Bewegung_Licht_DOIF do always
Der Bewegungsmelder ist so konfiguriert, dass nach einer erkannten Bewegung die nächste Erkennung erst nach 240 Sekunden stattfindet.
captInInterval ist aus (off).
Das Problem:
Melder erkennt Bewegung -> Licht geht für 150 Sekunden an
Nach 240 Sekunden wird der state von FHEM auf "nomotion" gesetzt und gleichzeitig die Lampe wieder für 150 Sekunden eingeschaltet.
Warum? Ich vermute, weil sich der State ändert, kann das sein? Wie kann ich das verhindern bzw. besser machen? Die Lampe soll ja nur bei Bewegung geschaltet werden.
Dankeschön.
Versuche ["BMSued:^motion"]
Zitat von: errazzor am 27 Juni 2016, 23:35:45
Hallo,
seitdem der state des Bewegungsmelders automatisch auf "noMotion" gesetzt wird (durch ein FHEM Update), funktioniert mein DOIF nicht mehr richtig.
Vielleicht kann mir jemand helfen.
Mein DOIF:
define Bewegung_Licht_DOIF DOIF ([BM_Sued:?motion] and [?BM_Sued:brightness]<75 and [?Terrasse_Licht_Automatik] =~ "on" and [?Lampe_Sued] eq "off") (set Lampe_Sued on-for-timer 150)
attr Bewegung_Licht_DOIF do always
Der Bewegungsmelder ist so konfiguriert, dass nach einer erkannten Bewegung die nächste Erkennung erst nach 240 Sekunden stattfindet.
captInInterval ist aus (off).
Das Problem:
Melder erkennt Bewegung -> Licht geht für 150 Sekunden an
Nach 240 Sekunden wird der state von FHEM auf "nomotion" gesetzt und gleichzeitig die Lampe wieder für 150 Sekunden eingeschaltet.
Warum? Ich vermute, weil sich der State ändert, kann das sein? Wie kann ich das verhindern bzw. besser machen? Die Lampe soll ja nur bei Bewegung geschaltet werden.
Dankeschön.
Ich habe das gleiche Problem, hast Du es gelöst?