DOIF - Bewegungsmelder soll Licht schalten

Begonnen von errazzor, 07 April 2016, 21:37:10

Vorheriges Thema - Nächstes Thema

errazzor

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?

Morgennebel

Einziger Spender an FHEM e.V. mit Dauerauftrag seit >= 24 Monaten

FHEM: MacMini/ESXi, 2-3 FHEM Instanzen produktiv
In-Use: STELLMOTOR, VALVES, PWM-PWMR, Xiaomi, Allergy, Proplanta, UWZ, MQTT,  Homematic, Luftsensor.info, ESP8266, ESERA

Vize

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/

Gruß
Andreas

Ellert


Damian

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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Rince


(
[ez_BM_Sicherheit:?motion]
and
[ez_BM_Sicherheit:brightness] < 60
)
(set ez_WS_Licht on-for-timer 300)

Das klappt so ziemlich gut....
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

Damian

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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

errazzor

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.

Morgennebel

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
Einziger Spender an FHEM e.V. mit Dauerauftrag seit >= 24 Monaten

FHEM: MacMini/ESXi, 2-3 FHEM Instanzen produktiv
In-Use: STELLMOTOR, VALVES, PWM-PWMR, Xiaomi, Allergy, Proplanta, UWZ, MQTT,  Homematic, Luftsensor.info, ESP8266, ESERA

Damian

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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damu

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?

Damu

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.

errazzor

#12
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.

Ellert


Fredi69

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?
fhem auf Raspberry Pi 3
FRITZ!Box7490, Fritz!Box 3270 AP, 3xHMLAN, CUL868, nanoCUL 433 für IT, JeeLink für LaCrosse, HUE Bridge 2.0, Samsung UE46C8790 (STV), mehrere Homematic, Intertechno, Shelly und LaCrosse Komponenten