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!
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
Ah, ok... also einfach nochmal auslösen lassen über die zweite Bedingung.
Danke Dir!
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
Zeig mal ein list des Bewegungsmelder.
Gesendet von meinem Doogee S60 mit Tapatalk
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.
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 ;)
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
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
Du kannst auch "and" und "or" schreiben. Ist vielleicht besser lesbar. [emoji6]
Gesendet von meinem Doogee S60 mit Tapatalk