DOIF - Bewegungsmelder, Flur Licht Dimmer, Taster

Begonnen von basi79, 25 Januar 2016, 10:04:20

Vorheriges Thema - Nächstes Thema

basi79

Hallo Freunde,

kann ich das Thema noch mal auffassen..?? ich entschuldige mich im voraus falls ich etwas überlesen habe.. schaf in der Herde nicht gesehen habe..  :-\

Ich habe bewust nicht in das abgeschlossene Thread gepostet, das sonst schwer wird Lösungen brauchbar wieder zu finden..
(Thema: GELÖST DOIF / Bewegungsmelder in Kombi mit manuellem Schalter / kniffelige Logik) =>  http://forum.fhem.de/index.php/topic,41252.0.html


Es geht darum, das ich im Flur einen Dimmer für die Deckenleuchte verbaut habe, einen Bewegungsmelder und 2x Taster im Flur habe.

Ich möchte folgenden ablauf hinbekommen:

- Bewegung im Flur bei ausgeschaltetem Flur Deckenlampe => Flur Deckenlampe (HMDimFLur) auf 15% setzen
- Nach 60 Sec. keine Bewegung soll es wieder aus gehen.
- Wenn einer der Wandtasten betätigt wird soll die Flur Deckenlampe (HMDimFlur) auf "on" gesetzt werden egal ob vorher per Bewegungsmelder auf 15% gesetzt ist.
- Flur Deckenlampe (HMDimFlur) soll nach 10min bei länger als 5 min. keine Bewegung ausgeschaltet werden.

aktuell sieht mein Code wie folgt aus:

Bewegung bei ausgeschaltetem FlurLicht => FlurLicht für 60 sec. auf 15% Dimmen

define DOIF_FlurLichtMotion DOIF ([HMFlurMotion:state:sec] < 30) (set HMDimFlur:FILTER=STATE!=on 15) (set HMDimFlur:FILTER=STATE=15 off)
attr DOIF_FlurLichtMotion do resetwait
attr DOIF_FlurLichtMotion room _DOIF_
attr DOIF_FlurLichtMotion wait 0,60


Sobald FlurLicht "on" soll nach 10min geschaut werden wie lange die letzte Bewegung her ist = letze Bewegung größer 5 min. => HMDimFLur off (wenn "on")

define DOIF_HMDimFlur DOIF ([HMDimFlur:state] eq "on") \
({Log 1, ">>>>>>>>>> FlurLicht Eingeschaltet!!"}) \
DOELSEIF ([HMFlurMotion:state:sec] > 300) \
(set HMDimFlur off)
attr DOIF_HMDimFlur do resetwait
attr DOIF_HMDimFlur room _DOIF_
attr DOIF_HMDimFlur wait 0:600


Die 2 Wandtaster bediene ich per notify, da ich noch über Short und Longpress andere Lichter schalte und das ganze natürlich auch über das WebOberfläche direkt bedienbar bleiben soll.

zur Vollständigkeit hier noch mal das Notify welches aber nicht relevant sein sollte:

define FL_Taster_WZ_On notify (HMSchalFlurWZ_Btn_01.Short.*|HMSchalFlurWZ_Btn_02.Short.*) {\
Log 1, ">>>>>>>>> FlurLampe Test!!";;\
if (Value("HMDimFlur") eq "on") {\
          Log 1, ">>>>>>>>> FlurLampe aus!!";;\
          fhem("set HMDimFlur off");;}\
     else {\
          fhem("set HMDimFlur on");;}\
          Log 1, ">>>>>>>>> FlurLampe an!!";;\
}

define FL_Taster_WZ_LongPress notify (HMSchalFlurWZ_Btn_01.Long.3.*|HMSchalFlurWZ_Btn_02.Long.3.*) {\
     if (Value("SZ.HM.SteckDose.Schrank.01") eq "on") {\
          Log 1, ">>>>>>>>> SZ.HM.SteckDose.Schrank.01 - Lampe aus!!";;\
          fhem("set SZ.HM.SteckDose.Schrank.01 off");;}\
     else {\
          fhem("set SZ.HM.SteckDose.Schrank.01 on");;}\
          Log 1, ">>>>>>>>> SZ.HM.SteckDose.Schrank.01 - Lampe an!!";;\
}


Wer kann mir hier mal ein schubs in die richtige richtung geben..???

Gruß

Basi79
RaspberryPI, Homematic, FS20, Fritzbox7490

Ellert

Du hast das von Dir gewünschte Verhalten beschrieben und Deinen Versuch es zu lösen. Du hast aber versäumt zu beschreiben, an welcher Stelle genau das tatsächliche Verhalten Deines Lösungsversuches von dem gewünschte Verhalten abweicht. Dort wäre dann der Ansatzpung für eine Hilfestellung.

basi79

Sorry Ellert,
dieser Teil des DOIF scheint nicht zu funktionieren..

Heißt das ich die Routine mit dem Einschalten des Flurlichts und ausgehen nach 10min bei länger als 5min keine Bewegung nicht funktioniert..
Ich komme leider aktuell noch nicht mit den DOIF's (Abfrage,Trigger,Zeitangabe) nicht gut zu recht.

Zitat
Sobald FlurLicht "on" soll nach 10min geschaut werden wie lange die letzte Bewegung her ist = letze Bewegung größer 5 min. => HMDimFLur off (wenn "on")


define DOIF_HMDimFlur DOIF ([HMDimFlur:state] eq "on") \
({Log 1, ">>>>>>>>>> FlurLicht Eingeschaltet!!"}) \
DOELSEIF ([HMFlurMotion:state:sec] > 300) \
(set HMDimFlur off)
attr DOIF_HMDimFlur do resetwait
attr DOIF_HMDimFlur room _DOIF_
attr DOIF_HMDimFlur wait 0:600


Danke

Gruß

Basi79
RaspberryPI, Homematic, FS20, Fritzbox7490

krusi

Danke basi79 dass du dieses Thema nochmals aufgegriffen hast !

Versuche ebenfalls seit Tagen aus den bisherigen Beiträgen eine funktionsfähige Lösung zu basteln komme aber nicht weiter.

Umgebung:
-4 Taster im Flur (früher an Stromstoßschalter)
-Fibaro Motionsensor
-Türkontakt
-Fibaro Schaltaktor

Gewünschte Funktionsweise:
a) Durchgangsbeleuchtung
Tür auf oder Bewegung detektiert => Licht an für 2min bei Nacht
=>funktioniert bereits über ein Notify
DEF EG.FL.MS.1:open
IF ([EG.FL.MS.1] eq "open" and [Tageslicht] eq "dunkel") (
    IF ([EG.FL.SR.1] eq "off") (set EG.FL.SR.1 on-for-timer 120)
)

b) Dauerlicht mit Stromsparfunktion
Taster betätigt => Dauerlicht an, dann regelmäßig Überprüfung ob Motion-Sensor innerhalb 15min Bewegung meldet, ansonsten Licht aus
=>funktioniert bisher nicht
Tests mit Watchdog-Funktion: Licht an startet Watchdog, mit Motion-Sensor Zeit auf Null stellen ohne Überwachung ganz zu beenden klappt nicht
Tests mit DOIF:
DEF ([EG.FL.SR.1] eq "on" and [EG.FL.MS.1] eq "closed") (set EG.FL.SR.1 off)
NAME       di_Licht_FL
TYPE       DOIF
Attributes:
wait       900


Die Funktion Licht manuell über Taster eingeschaltet dann innerhalb Xmin kein Motion-Detect =>Licht aus möchte ich für alle Räume integrieren.
Hat jemand einen heißen Tipp dazu ?

DeeSPe

Schaut doch mal hier:
http://www.fhemwiki.de/wiki/Trick_der_Woche#Funklast_reduzieren

Vielleicht hilft euch das weiter, läuft zwar nicht über DOIF, aber genau so bzw. leicht abgewandelt läuft es bei mir super...
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Ellert

Zitat von: basi79 am 26 Januar 2016, 14:57:37
Sorry Ellert,
dieser Teil des DOIF scheint nicht zu funktionieren..

Heißt das ich die Routine mit dem Einschalten des Flurlichts und ausgehen nach 10min bei länger als 5min keine Bewegung nicht funktioniert..
Ich komme leider aktuell noch nicht mit den DOIF's (Abfrage,Trigger,Zeitangabe) nicht gut zu recht.

Danke

Gruß

Basi79
Ich kenne den HM-Bewegungsmelder nicht.
Zitat[HMFlurMotion:state:sec] > 300)
Funktioniert diese Bedingung als Auslöser für den 2. Bedingungszweig?

Ellert

Zitat von: krusi am 26 Januar 2016, 15:50:23
Danke basi79 dass du dieses Thema nochmals aufgegriffen hast !

Versuche ebenfalls seit Tagen aus den bisherigen Beiträgen eine funktionsfähige Lösung zu basteln komme aber nicht weiter.

Umgebung:
-4 Taster im Flur (früher an Stromstoßschalter)
-Fibaro Motionsensor
-Türkontakt
-Fibaro Schaltaktor

Gewünschte Funktionsweise:
a) Durchgangsbeleuchtung
Tür auf oder Bewegung detektiert => Licht an für 2min bei Nacht
=>funktioniert bereits über ein Notify
DEF EG.FL.MS.1:open
IF ([EG.FL.MS.1] eq "open" and [Tageslicht] eq "dunkel") (
    IF ([EG.FL.SR.1] eq "off") (set EG.FL.SR.1 on-for-timer 120)
)

b) Dauerlicht mit Stromsparfunktion
Taster betätigt => Dauerlicht an, dann regelmäßig Überprüfung ob Motion-Sensor innerhalb 15min Bewegung meldet, ansonsten Licht aus
=>funktioniert bisher nicht
Tests mit Watchdog-Funktion: Licht an startet Watchdog, mit Motion-Sensor Zeit auf Null stellen ohne Überwachung ganz zu beenden klappt nicht
Tests mit DOIF:
DEF ([EG.FL.SR.1] eq "on" and [EG.FL.MS.1] eq "closed") (set EG.FL.SR.1 off)
NAME       di_Licht_FL
TYPE       DOIF
Attributes:
wait       900


Die Funktion Licht manuell über Taster eingeschaltet dann innerhalb Xmin kein Motion-Detect =>Licht aus möchte ich für alle Räume integrieren.
Hat jemand einen heißen Tipp dazu ?
Starte mal ein eigenes THema, sonst kann es hier arg durcheiander gehen.

basi79

@Ellert:
Es handelt sich um ein Homematic HM-SEC-MDIR Bewegungsmelder..
Der zweite Ausführungsteil des DOIF

DOELSEIF ([HMFlurMotion:state:sec] > 300)
(set HMDimFlur off)

funktioniert nicht... weil es wahrscheinlich nicht getriggert wird.
Wie denn auch wenn keine "state:motion" vom HMFlurMotion kommt und wenn es kommt stimmt die Bedingung nicht (>300sec.) oder
es kommt in unregelmäßigen abständen vom Bewegungsmelder "Activity:alive" oder "Activity:dead" welches den DOIF wieder triggert und
somit auch die Bedingung "HMFlurMotion:state:motion" mit ">300" stimmt. Aber das ist eben nicht das was ich will.. :(

@DeeSpe:
Leider sind viele Bespiele dich gefunden habe mit diesem "on-for-timer xx" welches ich in meinem Fall nicht benutzen kann.. weil ich mit Dimm werten arbeite.

@krusi:
Ich denke wenn es hier in meinem Bespiel die DOIF Funktion richtig geklärt wird und man ein Verständniss bekommt.. sollte es sich für dich auch einfach umsetzbar sein.

Gruß

Basi79
RaspberryPI, Homematic, FS20, Fritzbox7490

Ellert

In welchen Abständen kommt
Zitat"state:motion" vom HMFlurMotion

basi79

Hallo Ellert,

habe leider kein FileLog Eingestellt für den Bewegungsmelder.. aber
bei Bewegung alle 15 sec. natürlich..

ist im Registar des Bewegungsmelder so eingestellt:

   Readings:
     2016-01-26 20:20:21   Activity        dead
     2015-08-19 03:18:46   D-firmware      1.0
     2015-08-19 03:18:46   D-serialNr      JEQ0154267
     2015-08-19 03:18:46   PairedTo        0x000000
     2014-12-24 22:00:51   R-brightFilter  0
     2014-12-24 22:00:51   R-captInInterval on
     2014-12-24 22:00:51   R-evtFltrNum    1
     2014-12-24 22:00:51   R-evtFltrPeriod 0.5 s
     2014-12-24 22:00:51   R-minInterval   15                                <==
     2014-12-24 22:00:51   R-pairCentral   0x000000
     2014-12-24 22:00:51   R-sabotageMsg   on
     2015-08-18 17:53:01   battery         ok
     2016-01-26 20:09:46   brightness      33
     2015-08-18 17:53:01   cover           closed
     2016-01-26 20:09:46   motion          on (to broadcast)
     2016-01-26 20:09:46   motionCount     85_next:7s
     2015-08-18 17:53:01   powerOn         2015-08-18 17:53:01
     2015-08-18 17:53:01   recentStateType info
     2016-01-26 20:09:46   state           motion
     2016-01-26 20:09:46   trigger_cnt     85


Gruß

Basi79
RaspberryPI, Homematic, FS20, Fritzbox7490

Ellert

Das wird dem, was Dir vorschwebt nahe kommen.
([HMDimFlur] eq "on") (...)
DOELSEIF ([HMFlurMotion])
   (set HMDimFlur off)

wait 0:300
do resetwait


:state kannst Du weglassen, wenn Du nur den Status abfragen möchtest.
resetwait, s. http://fhem.de/commandref_DE.html#DOIF_do_resetwait

basi79

Hallo Ellert,

vielen Dank..

leider funktioniert das nicht.. ist ja auch identisch was ich bereits implementiert habe.. außer die Schreibweise.. :)

ich benötige eine möglichkeit, das das DOIF nach ablauf von 600 Sec. (10min) schaut ob die zweite Bedingung letze Motion vom BW größer 300 Sec (5 min.) ist und das Flurlicht ausschaltet.
Sollte die zweite bedingung nicht stimmen (also Bewegung im Flur vor weniger 5min. soll der Timer erneut 10min warten und erneut prüfen..

Vielleicht bin ich auch auf einem Holzweg.. und benötige ein Bespiel wie ggf. andere das machen.. ist mein umsetzungswunsch so speiziell..??

Gruß

Basi79
RaspberryPI, Homematic, FS20, Fritzbox7490

Ellert

Zitatist ja auch identisch was ich bereits implementiert habe.. außer die Schreibweise
Das kann ich nicht mittragen. [HMFlurMotion:state:sec] hat keinen brauchbaren Auslöser erzeugt.
Hiermit
([HMDimFlur] eq "on") (...)
DOELSEIF ([HMFlurMotion])
   (set HMDimFlur off)

wait 0:300
do resetwait

hast Du einen Auslöser, wenn es 5 min keine Bewegung gab, das ist schon ein großer Unterschied, es entspricht diesem Wunsch
Zitatob die zweite Bedingung letze Motion vom BW größer 300 Sec (5 min.)
Diesen Vorschlag kannst Du gern mit eigenen Ideen weiter ausbauen.

Zitatleider funktioniert das nicht
ist wenig hilfreich um eine gemeinsame Lösung zu entwickeln.

basi79

Hallo Ellert,

ich bin aus diesem CommandRef Eintrag ausgegangen:
Zitat
Zeitspanne eines Readings seit der letzten Änderung

Bei Readingangaben kann die Zeitspanne mit [<Device>:<Reading>:sec] in Sekunden seit der letzten Änderung bestimmt werden

Anwendungsbeispiel: Licht soll angehen, wenn der Status des Bewegungsmelders in den letzten fünf Sekunden upgedatet wurde.

define di_lamp DOIF ([BM:state:sec] < 5)(set lamp on-for-timer 300)
attr di_lamp do always

Bei HM-Bewegungsmelder werden periodisch Readings aktualisiert, dadurch wird das Modul getrigger, auch wenn keine Bewegung stattgefunden hat. Der Status bleibt dabei auf "motion". Mit der obigen Abfrage lässt sich feststellen, ob der Status aufgrund einer Bewegung tatsächlich upgedatet wurde.
wie bereits auch schon geschrieben.. kommt in unregelmäßigen abständen vom BW das Reading Activity mit alive oder dead.. dies soll den DOIF aber nicht triggern..
wäre aber in dem Codebeispiel von dir der Fall.. oder nicht..?

Was soll ich für eine Hilfestellung und gemeinsame Lösung liefern? Logs, List <Device> oder Screenshots..??

Ich will schließlich eine Lösung mit dem ggf. auch andere etwas anfangen können, die Beispiele in der Referenz sind in einigen Themen leider etwas dürr.. um sich selbt dabei zu Helfen.

Gruß

Basi79


RaspberryPI, Homematic, FS20, Fritzbox7490

Ellert

Ich kenne den HM Bewegungsmelder nicht, wenn Du über [HMFlurMotion] sagst
Zitatbei Bewegung alle 15 sec. natürlich
, verlasse ich mich darauf, dass etwa alle 15 s ein Event vom Bewegungsmelder kommt. Mit diesem Teil des DOIF DOELSEIF ([HMFlurMotion])
   (set HMDimFlur off)

wait 0:300
do resetwait

sollte, wenn 300 s lang keine Statuserneuerung von [HMFlurMotion] mehr kommt  (set HMDimFlur off) ausgeführt werden. Kannst Du das beobachten?

Ob Du [HMFlurMotion] noch mit einem Wert vergleichen musst, kann ich nicht sagen, da ich nicht weiss welchen Wert [HMFlurMotion] bei Bewegung annimmt.

Wenn Du dann die Logeinträge postest, solltest Du die wichtigen Stellen fett markieren und kommentieren, damit ich weiss, was Du andem entsprechenden Zeitpunkt gemacht hast.
Damit Du einen Überblick erhältst, könntest Du ein notify erstellen, das alle relevanten Events mitloggt, also HMFlurMotion, das DOIF, ... und einen Log in den zu schaltenden Bedingungszweigen einbauen, wie du es hier schon versucht hast :
Zitatdefine DOIF_HMDimFlur DOIF ([HMDimFlur:state] eq "on") \
({Log 1, ">>>>>>>>>> FlurLicht Eingeschaltet!!"}) \
DOELSEIF ([HMFlurMotion:state:sec] > 300) \
(set HMDimFlur off)
attr DOIF_HMDimFlur do resetwait
attr DOIF_HMDimFlur room _DOIF_
attr DOIF_HMDimFlur wait 0:600

Hier ein Beispiel, wie das notify aussehen könnte: anaus {Log 1, "notify $NAME: $EVENT"}