[gelöst] DOIF timer neu starten/setzen mit Bewegungsmelder

Begonnen von AndyMu, 29 Dezember 2018, 17:56:37

Vorheriges Thema - Nächstes Thema

AndyMu

Hallo *,

ich stehe gerade auf dem Schlauch, und vor lauter rumsuchen raucht schon der Kopf  :)

Eigentlich sollte meine Frage relativ einfach sein... ich habe ein Garagentor, das im Zustand "offen" ein DOIF auslöst, das nach 2 Minuten das Tor automatisch wieder schließen soll. Soweit so gut, funktioniert auch.

Jetzt möchte ich noch einen Bewegungsmelder in der Garage installieren, der bei Bewegung die 2 Minuten "reseten" soll, sprich das DOIF soll immer wieder eine neue Auslösezeit bekommen.

Welchen Befehl muss ich dem Bewegungsmelder bei "motion" mitgeben, damit das funktioniert?

Danke!

KernSani

Das selbe DOIF Cmd muss erneut triggern, dann läuft die zeit von vorne los, du brauchst also sowas wie
[?Tor] eq "offen" && [xy:"motion"]
als weitere Bedingung im DOIF


Kurz, weil mobil
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

AndyMu

Ah, ok... also einfach nochmal auslösen lassen über die zweite Bedingung.
Danke Dir!

AndyMu

So ganz geklappt hat es leider nicht, es wird einmal per "motion" der Timer ausgelöst, dann aber werden weitere "motion" Meldungen vom DOIF nicht mehr verwertet... vermutlich, da der Bewegungsmelder dauerhauft "motion" meldet und sich das für DOIF nicht ändert.

Es geht also trotzdem nach 2 Minuten zu...

([ga_tor_tk] eq "open" && [ga_bm_Motion:"motion"]) ({
    Log 1, "Garage nach 2 Minuten automatisch geschlossen";;
fhem("set ga_toraktor on-for-timer 1");;
    })
DOELSE


Attributes
do always
wait 120

Frank_Huber

Zeig mal ein list des Bewegungsmelder.

Gesendet von meinem Doogee S60 mit Tapatalk


AndyMu

Zitat von: Frank_Huber am 29 Dezember 2018, 20:43:37
Zeig mal ein list des Bewegungsmelder.

Gesendet von meinem Doogee S60 mit Tapatalk
Danke, der Hinweis war gut. Ich habe dort den event-on-update-reading auf state gesetzt, jetzt wird bei DOIF der Timer alle 30 sek neu gesetzt.

AndyMu

So, neue Erkenntnis, der Code muss ein "oder" drin haben:
([ga_tor_tk] eq "open" || [ga_bm_Motion:"motion"]) ({
    Log 1, "Garage nach 2 Minuten automatisch geschlossen";;
fhem("set ga_toraktor on-for-timer 1");;
    })
DOELSE


Und bei den Attributen das "do" auf "resetwait" gesetzt... ob das allerdings was ausmacht, weiß ich nicht.

Ich habe jetzt nur noch ein Problemchen:
Über den Bewegungsmelder und langes Drücken der Taste deaktiviere ich das DOIF oben und stoppe somit die Ausführung.
Wenn das Tor wieder zugeht, wird über ein notify das DOIF wieder aktiviert, über "initialize".
Dabei allerdings verschwindet der Timer nicht, sondern erst nach seiner ursprünglichen Zeit.
Das hat zur Folge, wenn ich vor Ablauf der 2 Minuten das Tor schließe und damit das DOIF wieder aktiviere, führt er den Timer zu seiner Zeit wieder aus.
Ich dachte eigentlich, diese Verhalten würde man mit "enable" bewusst haben wollen, aber bei "initialize" sollte sich der Timer wieder zurücksetzen.

Daher die Frage: wie kann ich schon beim Deaktivieren des DOIF den Timer zurücksetzen?
Dann wären auch alle Probleme behoben ;)

AndyMu

Hier nochmal alle Infos aus dem List:

DOIF:
Internals:
   DEF        ([ga_tor_tk] eq "open" || [ga_bm_Motion:"motion"]) ({
    Log 1, "Garage nach 2 Minuten automatisch geschlossen";;
fhem("set ga_toraktor on-for-timer 1");;
    fhem( "set SATReceiver msg message 10 Die Garage wurde automatisch geschlossen")if ReadingsVal("SATReceiver","state","") eq "on";;
    })
DOELSE
   MODEL      FHEM
   NAME       DOIF_ga_torOffen
   NR         59
   NTFY_ORDER 50-DOIF_ga_torOffenMsg
   STATE      initialize
   TYPE       DOIF
   READINGS:
     2018-12-29 21:12:04   Device          ga_tor_tk
     2018-12-29 21:10:37   e_ga_bm_Motion_events noMotion
     2018-12-29 21:12:04   e_ga_tor_tk_STATE closed
     2018-12-29 21:10:10   last_cmd        disabled
     2018-12-29 21:12:04   mode            enabled
     2018-12-29 21:12:04   state           initialize
     2018-12-29 21:11:24   wait_timer      no timer
   Regex:
   attr:
     cmdState:
     repeatcmd:
     repeatsame:
     wait:
       0:
         120
     waitdel:
   condition:
     0          ::InternalDoIf($hash,'ga_tor_tk','STATE') eq "open" || ::EventDoIf('ga_bm_Motion',$hash,'motion',1)
   devices:
     0           ga_tor_tk ga_bm_Motion
     all         ga_tor_tk ga_bm_Motion
   do:
     0:
       0          {     Log 1, "Garage nach 2 Minuten automatisch geschlossen";; fhem("set ga_toraktor on-for-timer 1");;     fhem( "set SATReceiver msg message 10 Die Garage wurde automatisch geschlossen")if ReadingsVal("SATReceiver","state","") eq "on";;     }
     1:
       0         
   helper:
     event      closed
     globalinit 1
     last_timer 0
     sleepdevice ga_bm_Motion
     sleepsubtimer 0
     sleeptimer -1
     timerdev   ga_tor_tk
     timerevent closed
     triggerDev ga_tor_tk
     DOIF_eventas:
       cmd_nr: 2
       cmd: 2
       cmd_event: ga_tor_tk
       state: cmd_2
     timerevents:
       closed
     timereventsState:
       state: closed
     triggerEvents:
       closed
     triggerEventsState:
       state: closed
   internals:
     0           ga_tor_tk:STATE
     all         ga_tor_tk:STATE
   itimer:
   readings:
   trigger:
     all         ga_bm_Motion
   uiState:
   uiTable:
Attributes:
   do         resetwait
   room       Garage
   wait       120


und vom Bewegungsmelder:
Internals:
   CFGFN     
   DEF        57CAF503
   NAME       ga_bm_Motion
   NOTIFYDEV  global
   NR         943
   STATE      noMotion
   TYPE       CUL_HM
   chanNo     03
   device     ga_bm
   READINGS:
     2018-12-29 19:31:25   R-brightFilter  7
     2018-12-29 19:31:25   R-captInInterval off
     2018-12-29 19:30:53   R-evtFltrNum    1
     2018-12-29 19:30:53   R-evtFltrPeriod 1 s
     2018-12-29 19:31:25   R-minInterval   30
     2018-12-29 19:30:53   R-sign          off
     2018-12-29 19:31:25   RegL_01.         00:00 01:12 02:71 08:00 22:00 30:03
     2018-12-29 21:10:05   brightness      0
     2018-12-29 21:10:37   motion          off
     2018-12-29 21:10:05   motionCount     83_next:30s
     2018-12-29 21:10:37   motionDuration  32
     2018-12-29 21:10:37   state           noMotion
     2018-12-29 21:10:05   trigger_cnt     83
   helper:
     peerIDsRaw ,00000000
     expert:
       def        1
       det        0
       raw        1
       tpl        0
     regCollect:
     role:
       chn        1
     shadowReg:
     tmpl:
Attributes:
   alias      Garage Bewegungsmelder
   event-on-update-reading state
   model      HM-Sen-MDIR-WM55
   peerIDs    00000000,
   room       Garage

AndyMu

#8
Ok, Antwort selbst gefunden... harte Tour über Attribut disable 1 bzw. 0
Dann wird sauber initialisiert, ist aus diesem Thread: https://forum.fhem.de/index.php/topic,91071.msg835695.html#msg835695

Frank_Huber

Du kannst auch "and" und "or" schreiben. Ist vielleicht besser lesbar. [emoji6]

Gesendet von meinem Doogee S60 mit Tapatalk