Liebe FHEM-Gemeinde
Als Anfänger bin ich seit einem Monat stolzer Besitzer eines Raspi's (HM-USB-CFG), eines HM-Sec-MDIR und einem UP Schalter.
In dieser Zeit habe ich viel Zeit mit Informationsbeschaffung, Lesen, Forum durchstöbern, ausprobieren und lernen verbracht.
Nach stundenlangem pröbeln komm ich aber einfach nicht weiter, vorallem bin ich mir nicht sicher wie ich das Projekt angehen soll:
Frau und Kind lassen im Bad immer wieder das Licht brennen. Dem möchte ich nun mit dem Bewegungsmelder und Aktor entgegenwirken. Wenn das Licht mittels Taster eingeschaltet wird, aber nach 5min z.B. während weiteren 5min keine Bewegung mehr festgestellt wird, soll das Licht wieder ausgeschaltet werden.
Wie würdet Ihr das umsetzen? Mit Watchdog?
Ich möchte nicht einen fertigen Code sondern eher einen Tipp, womit Ihr das lösen würdet. Den Code würde ich gerne selber schreiben, um dann auch weitere Projekte möglichst selbstständig lösen zu können.
Für etwas Hilfe wäre ich sehr dankbar.
Freundliche Grüsse
****Edit***
Ich habe es nun so gelöst:
Bei Bewegung wird ein notify ausgelöst, welches mir einen Timer erstellt:
Bewegungsmelder:motion define Timer at +00:05:00 set Bad off
Erhalte ich nun wieder ein motion wird bei bereits bestehendem Timer kein neuer erstellt. Sind jedoch die 5min vorüber wird der Timer ausgelöst und somit gelöscht
Erhalte ich innerhalb dieser 5min ein motion wird ein weiteres notify ausgelöst welches den bestehenden Timer modifiziert und für 10min neu startet.
Diese 10min werden nun bei jedem motion neu gestartet.
Bewegungsmelder:motion modify Timer +00:10:00
Vielen Dank für die Hilfe eurerseits!!
Hab das jetzt schon ein paar Tage so in Betrieb und bis jetzt hats jedenfalls funktioniert.
Für Anregungen bin ich aber jederzeit dankbar!
bei mir habe ich es folgendermaßen gelöst ...
im Up Schalter direkt die Register gesetzt
Short Press --> On For Timer 45 Minuten
Lomg Press --> On 4e4
aaaaah, diese Idee hatte ich auch schon, frage mich aber im Moment wieso ich das verworfen habe ::)
wäre ja wirklich die sauberste Lösung.
Vielen Dank schon mal!!
Hallo,
die Lösung es direkt in den Registern des Schlaters zu machen hat mehrere Vorteile.
1) Du musst nichts programmieren und
2) es funktioniert auch, wenn fhem mal nicht läuft
und das dürfet für Frau und Kind ein schlagendes Argument sein. Ich möchtennicht dabei sein, wenn Du Deiner Frau erklärst " fhem ist abgestürzt und das Bad bleibt dunkel " ;)
Gruß Christoph
Hier mal die Register dazu ....
R-intKeyVisib visib
R-self01-lgActionType jmpToTarget
R-self01-lgCtDlyOff geLo
R-self01-lgCtDlyOn geLo
R-self01-lgCtOff geLo
R-self01-lgCtOn geLo
R-self01-lgCtValHi 100
R-self01-lgCtValLo 50
R-self01-lgMultiExec on
R-self01-lgOffDly 0 s
R-self01-lgOffTime unused
R-self01-lgOffTimeMode absolut
R-self01-lgOnDly 0 s
R-self01-lgOnTime unused
R-self01-lgOnTimeMode absolut
R-self01-lgSwJtDlyOff off
R-self01-lgSwJtDlyOn off
R-self01-lgSwJtOff off
R-self01-lgSwJtOn dlyOff
R-self01-shActionType jmpToTarget
R-self01-shCtDlyOff geLo
R-self01-shCtDlyOn geLo
R-self01-shCtOff geLo
R-self01-shCtOn geLo
R-self01-shCtValHi 100
R-self01-shCtValLo 50
R-self01-shOffDly 0 s
R-self01-shOffTime unused
R-self01-shOffTimeMode absolut
R-self01-shOnDly 0 s
R-self01-shOnTime unused
R-self01-shOnTimeMode absolut
R-self01-shSwJtDlyOff off
R-self01-shSwJtDlyOn off
R-self01-shSwJtOff off
R-self01-shSwJtOn dlyOff
R-self02-lgActionType jmpToTarget
R-self02-lgCtDlyOff geLo
R-self02-lgCtDlyOn geLo
R-self02-lgCtOff geLo
R-self02-lgCtOn geLo
R-self02-lgCtValHi 100
R-self02-lgCtValLo 50
R-self02-lgMultiExec on
R-self02-lgOffDly 0 s
R-self02-lgOffTime unused
R-self02-lgOffTimeMode absolut
R-self02-lgOnDly 0 s
R-self02-lgOnTime unused
R-self02-lgOnTimeMode absolut
R-self02-lgSwJtDlyOff on
R-self02-lgSwJtDlyOn on
R-self02-lgSwJtOff dlyOn
R-self02-lgSwJtOn on
R-self02-shActionType jmpToTarget
R-self02-shCtDlyOff geLo
R-self02-shCtDlyOn geLo
R-self02-shCtOff geLo
R-self02-shCtOn geLo
R-self02-shCtValHi 100
R-self02-shCtValLo 50
R-self02-shOffDly 0 s
R-self02-shOffTime unused
R-self02-shOffTimeMode absolut
R-self02-shOnDly 0 s
R-self02-shOnTime 5400 s
R-self02-shOnTimeMode absolut
R-self02-shSwJtDlyOff on
R-self02-shSwJtDlyOn on
R-self02-shSwJtOff dlyOn
R-self02-shSwJtOn on
und jetzt mein FHEM Komfort dazu :-)
Notify für On ...
hm.sw.5:on
set media.sonos.bad Play;
set media.sons.bad SleepTimer 01:15:00;
IF ([dummy.Heizung.aktiv] eq "wahr") (set hm.thermo.2.clima desired-temp 21.5)
Notify für Off
hm.sw.5:off
set media.sonos.bad Pause;
IF ([dummy.Heizung.aktiv] eq "wahr") (set hm.thermo.2.clima desired-temp 18.0)
Die Heizung ist lt. Plan nur morgens zur Aufstehenszeit mit Automatik an
Hallo,
also zunächst mal musst Du Expert auf "2_full" setzen. Dann mit set Gerät(SCHALTER) regSet intKeyVisib visib" die Interen Taster anzeigen lassen. Dadurch bekommst Du eine sehr lange Liste.
2014-12-20 09:53:29 CommandAccepted yes
2014-12-19 21:22:15 D-firmware 2.3
2014-12-19 21:22:15 D-serialNr LEQ0243943
2014-12-16 18:41:38 PairedTo 0x23A821
2014-12-16 18:41:43 R-Bewegungsmelder_01_chn-01-lgActionType off
2014-12-16 18:41:43 R-Bewegungsmelder_01_chn-01-lgCtDlyOff geLo
2014-12-16 18:41:43 R-Bewegungsmelder_01_chn-01-lgCtDlyOn geLo
2014-12-16 18:41:43 R-Bewegungsmelder_01_chn-01-lgCtOff geLo
2014-12-16 18:41:43 R-Bewegungsmelder_01_chn-01-lgCtOn geLo
2014-12-16 18:41:43 R-Bewegungsmelder_01_chn-01-lgCtValHi 100
2014-12-16 18:41:43 R-Bewegungsmelder_01_chn-01-lgCtValLo 50
2014-12-16 18:41:43 R-Bewegungsmelder_01_chn-01-lgMultiExec on
2014-12-16 18:41:43 R-Bewegungsmelder_01_chn-01-lgOffDly 0 s
2014-12-16 18:41:43 R-Bewegungsmelder_01_chn-01-lgOffTime unused
2014-12-16 18:41:43 R-Bewegungsmelder_01_chn-01-lgOffTimeMode absolut
2014-12-16 18:41:43 R-Bewegungsmelder_01_chn-01-lgOnDly 0 s
2014-12-16 18:41:43 R-Bewegungsmelder_01_chn-01-lgOnTime 120 s
2014-12-16 18:41:43 R-Bewegungsmelder_01_chn-01-lgOnTimeMode absolut
2014-12-16 18:41:43 R-Bewegungsmelder_01_chn-01-lgSwJtDlyOff on
2014-12-16 18:41:43 R-Bewegungsmelder_01_chn-01-lgSwJtDlyOn on
2014-12-16 18:41:43 R-Bewegungsmelder_01_chn-01-lgSwJtOff dlyOn
2014-12-16 18:41:43 R-Bewegungsmelder_01_chn-01-lgSwJtOn on
2014-12-16 18:41:43 R-Bewegungsmelder_01_chn-01-shActionType jmpToTarget
2014-12-16 18:41:43 R-Bewegungsmelder_01_chn-01-shCtDlyOff ltLo
2014-12-16 18:41:43 R-Bewegungsmelder_01_chn-01-shCtDlyOn ltLo
2014-12-16 18:41:43 R-Bewegungsmelder_01_chn-01-shCtOff ltLo
2014-12-16 18:41:43 R-Bewegungsmelder_01_chn-01-shCtOn ltLo
2014-12-16 18:41:43 R-Bewegungsmelder_01_chn-01-shCtValHi 100
2014-12-16 18:41:43 R-Bewegungsmelder_01_chn-01-shCtValLo 10
2014-12-16 18:41:43 R-Bewegungsmelder_01_chn-01-shOffDly 0 s
2014-12-16 18:41:43 R-Bewegungsmelder_01_chn-01-shOffTime unused
2014-12-16 18:41:43 R-Bewegungsmelder_01_chn-01-shOffTimeMode absolut
2014-12-16 18:41:43 R-Bewegungsmelder_01_chn-01-shOnDly 0 s
2014-12-16 18:41:43 R-Bewegungsmelder_01_chn-01-shOnTime 120 s
2014-12-16 18:41:43 R-Bewegungsmelder_01_chn-01-shOnTimeMode absolut
2014-12-16 18:41:43 R-Bewegungsmelder_01_chn-01-shSwJtDlyOff on
2014-12-16 18:41:43 R-Bewegungsmelder_01_chn-01-shSwJtDlyOn on
2014-12-16 18:41:43 R-Bewegungsmelder_01_chn-01-shSwJtOff dlyOn
2014-12-16 18:41:43 R-Bewegungsmelder_01_chn-01-shSwJtOn on
2014-12-16 18:41:38 R-intKeyVisib visib
2014-12-16 18:41:38 R-pairCentral 0x23A821
2014-12-16 18:41:41 R-self01-lgActionType jmpToTarget
2014-12-16 18:41:41 R-self01-lgCtDlyOff geLo
2014-12-16 18:41:41 R-self01-lgCtDlyOn geLo
2014-12-16 18:41:41 R-self01-lgCtOff geLo
2014-12-16 18:41:41 R-self01-lgCtOn geLo
2014-12-16 18:41:41 R-self01-lgCtValHi 100
2014-12-16 18:41:41 R-self01-lgCtValLo 50
2014-12-16 18:41:41 R-self01-lgMultiExec on
2014-12-15 16:03:57 R-self01-lgOffDly 0 s
2014-12-15 16:03:57 R-self01-lgOffTime unused
2014-12-16 18:41:41 R-self01-lgOffTimeMode absolut
2014-12-15 16:03:57 R-self01-lgOnDly 0 s
2014-12-15 16:03:57 R-self01-lgOnTime unused
2014-12-16 18:41:41 R-self01-lgOnTimeMode absolut
2014-12-16 18:41:41 R-self01-lgSwJtDlyOff off
2014-12-16 18:41:41 R-self01-lgSwJtDlyOn on
2014-12-16 18:41:41 R-self01-lgSwJtOff dlyOn
2014-12-16 18:41:41 R-self01-lgSwJtOn dlyOff
2014-12-16 18:41:41 R-self01-shActionType jmpToTarget
2014-12-16 18:41:41 R-self01-shCtDlyOff geLo
2014-12-16 18:41:41 R-self01-shCtDlyOn geLo
2014-12-16 18:41:41 R-self01-shCtOff geLo
2014-12-16 18:41:41 R-self01-shCtOn geLo
2014-12-16 18:41:41 R-self01-shCtValHi 100
2014-12-16 18:41:41 R-self01-shCtValLo 50
2014-12-15 16:03:57 R-self01-shOffDly 0 s
2014-12-15 16:03:57 R-self01-shOffTime unused
2014-12-16 18:41:41 R-self01-shOffTimeMode absolut
2014-12-15 16:03:57 R-self01-shOnDly 0 s
2014-12-15 16:03:57 R-self01-shOnTime unused
2014-12-16 18:41:41 R-self01-shOnTimeMode absolut
2014-12-16 18:41:41 R-self01-shSwJtDlyOff off
2014-12-16 18:41:41 R-self01-shSwJtDlyOn on
2014-12-16 18:41:41 R-self01-shSwJtOff dlyOn
2014-12-16 18:41:41 R-self01-shSwJtOn dlyOff
2014-12-16 18:41:42 R-self02-lgActionType jmpToTarget
2014-12-16 18:41:42 R-self02-lgCtDlyOff geLo
2014-12-16 18:41:42 R-self02-lgCtDlyOn geLo
2014-12-16 18:41:42 R-self02-lgCtOff geLo
2014-12-16 18:41:42 R-self02-lgCtOn geLo
2014-12-16 18:41:42 R-self02-lgCtValHi 100
2014-12-16 18:41:42 R-self02-lgCtValLo 50
2014-12-16 18:41:42 R-self02-lgMultiExec on
2014-12-15 16:03:58 R-self02-lgOffDly 0 s
2014-12-15 16:03:58 R-self02-lgOffTime unused
2014-12-16 18:41:42 R-self02-lgOffTimeMode absolut
2014-12-15 16:03:58 R-self02-lgOnDly 0 s
2014-12-15 16:10:28 R-self02-lgOnTime 120 s
2014-12-16 18:41:42 R-self02-lgOnTimeMode absolut
2014-12-16 18:41:42 R-self02-lgSwJtDlyOff on
2014-12-16 18:41:42 R-self02-lgSwJtDlyOn on
2014-12-16 18:41:42 R-self02-lgSwJtOff dlyOn
2014-12-16 18:41:42 R-self02-lgSwJtOn on
2014-12-16 18:41:42 R-self02-shActionType jmpToTarget
2014-12-16 18:41:42 R-self02-shCtDlyOff geLo
2014-12-16 18:41:42 R-self02-shCtDlyOn geLo
2014-12-16 18:41:42 R-self02-shCtOff geLo
2014-12-16 18:41:42 R-self02-shCtOn geLo
2014-12-16 18:41:42 R-self02-shCtValHi 100
2014-12-16 18:41:42 R-self02-shCtValLo 50
2014-12-15 16:03:58 R-self02-shOffDly 0 s
2014-12-15 16:03:58 R-self02-shOffTime unused
2014-12-16 18:41:42 R-self02-shOffTimeMode absolut
2014-12-15 16:03:58 R-self02-shOnDly 0 s
2014-12-15 16:10:28 R-self02-shOnTime 120 s
2014-12-16 18:41:42 R-self02-shOnTimeMode absolut
2014-12-16 18:41:42 R-self02-shSwJtDlyOff on
2014-12-16 18:41:42 R-self02-shSwJtDlyOn on
2014-12-16 18:41:42 R-self02-shSwJtOff dlyOn
2014-12-16 18:41:42 R-self02-shSwJtOn on
2014-12-16 18:41:39 R-sign off
Die relevanten Register sind
2014-12-16 18:41:43 R-Bewegungsmelder_01_chn-01-shOnTime 120 s
der Bewegungsmelder kennt nur short - die Zeit wird in Sekunden angegeben.
2014-12-16 18:41:43 R-Bewegungsmelder_01_chn-01-shCtValLo 10
hier wird der Lichtwert eingestellt, ab dem Über den Bewegungsmelder das Licht angeschaltet wird.
Das ganze gibt es natürlich auch, für die Self, also internen Taster. Im Beispiel oben wird bei dem einen Taster für 120 sec eingeschaltet (sh und lg) und mit dem anderen Taster auch short und long dauerhaft ein oder aus.
Gruß Christoph
Leute,vielen Dank für die ausführlichen Antworten!!
Werde das schnellstmöglich ausprobieren und mich dann wieder melden.
Auf expert und Visib hab ichs bereits. Somit sollte das machbar sein.
Gruss Yvan
Hallo
Ich habe das nun ausprobiert, diese Lösung ist aber auf diese Weise nicht ganz so wie ich es gern hätte:
Das Licht schaltet zwar nach eingestellter Zeit aus, jedoch auch automatisch ein.
Ziel ist es, dass im Bad das Licht NICHT automatisch einschaltet.
Ich stellt mir das etwa so vor
Wenn das Licht per Schalter eingeschaltet wurde, soll es nach abgelaufener Zeit wieder ausschalten, VORAUSGESETZT es wird vom Bewegungsmelder kein "motion" gesendet.
Ich probier gerade mit einem Notify mit if-Bedinung....will aber nicht so richtig.
Da ich wirklich blutiger Anfänger bin, nehme ich an, dass ich das Notify falsch geschrieben habe:
{ if ("$value[Bad]"
eq "on") && ("Bewegungsmelder:motion") { fhem("set Bad on") }}
Freundliche Grüsse
Yvan
Hallo,
was stört Dich an dem automatischen Einschalten. Du kannst ja eine Helligkeitsschwelle vorgeben.
Das mit Notify zu lösen ist schon ok, ich würde aber dann mit at arbeiten und stumpf nach 10 Minuten einen "set Lampe off" schicken. Wenn das so funktioniert, wie ich mir das denke, müsste der timer (at) bei jeder erkannten Bewegung wieder auf 10 Minuten gesetzt werden.
Gruß Christoph
;D stören tut es mich nicht. Das wäre dann eigentlich die Notlösung.
Der Grund fur die komplizierte Variante sind meine Kinder und die Katzen. Somit verhindere ich ein automatisches Einschalten sollte dort ungewollte Bewegung festgestellt werden. Klar, ich kann den Melder anders positionieren, aber da sind mir Grenzen gesetzt worden ;)
Trotzdem schaue ich mit Deine Vatiante genauer an, man kann ja nur dazulernen :)
Schönen Heiligabend
Und Grüsse aus der Schweiz (auch ohne Schnee :'( )
Verstehe ich das richtig:
Ist es dunkel im Bad, soll der Bewegungsmelder nicht das Licht einschalten.
Hat jemand händisch das Licht eingeschaltet, soll es nach 5 Minuten ausgehen.
Springt der Bewegungssmelder an, während das Licht an ist, soll das Licht eine weitere Zeit an bleiben?
Genau so ;D
Ich weiss, ist ein komplizierter Wunsch....
Hallo,
wie schon gesagt - dann musst Du nicht peeren, das Signal vom Bewegunsmelder nehmen und ein at ... set Lampe off machen. Der Befehl wird abgesetzt egal ob die Lampe an ist oder nicht - macht ja nichts kaputt.
Gruß Christoph
Hallo Christoph
Vielen Dank! Ich denke, DAS ist die Lösung.
Hallo
Also ausschalten tut es nun bereits.
ABER:
wenn vom Melder ein "motion" kommmt wird der Timer scheinbar gelöscht anstatt verlängert.
Im Eventmonitor steht:
2014-12-26 17:23:28 CUL_HM Bad set_off
2014-12-26 17:23:28 Global global DELETED Timer
was läuft falsch?
Hallo,
da fehlt irgendwo ein Stern - sonst wird der Timer nach dem ersten mal gelöscht. Aus der Commandref
Zitatif no * is specified, then a command will be executed only once, and then the at entry will be deleted. In this case the command will be saved to the statefile (as it considered volatile, i.e. entered by cronjob) and not to the configfile (see the save command.)
Also ich würde versuchen, "define Timer notify Bewegungsmelder.* at *+00:00:10 set Lampe off"
Gruß Christoph
Komisch, nach vielem Probieren hats plötzlich ohne Stern funktioniert
Trotzdem vielen,vielen Dank, endlich kann ich einen Erfolg verbuchen 8)
Muss nochmal öffnen....
Funktioniert doch nicht :-\
Habs in diversen Varianten probiert, auch in Perl....jedoch ohne Erfolg.
Ohne Stern nur mit "+" funktionierts, jedoch ohne Verlängerung des Timers bei "motion"
wenn ich folgendes im DEF habe:
Bewegungsmelder:motion define Timer at *+00:02:00 set Bad off
Erhalte ich diese Logs:
2014.12.29 17:08:20 4: Badnotify exec define Timer at *+00:02:00 set Bad off
2014.12.29 17:08:20 1: define Timer Timer at *+00:02:00 set Bad off: Wrong timespec +00:02:00: either HH:MM:SS or {perlcode}
2014.12.29 17:08:20 3: Badnotify return value: Wrong timespec +00:02:00: either HH:MM:SS or {perlcode}
was stimmt nicht?
Tausche mal das + mit dem *, also +*00:02:00
Hallo
Hab ich auch schon probiert, der Timer wird zwar erstellt, wird aber bei einem trigger nicht verlängert.
Ebenfalls stelle ich fest, dass der Timer nach Ablauf der zwei Minuten neu erstellt wird.
Dabei wird aber mein Licht ausgeschaltet, was ich ja nicht möchte...
Im Log steht dann das:
2014.12.29 18:30:05 4: HTTP FHEMWEB:192.168.1.133:57000 GET /fhem&room=all&cmd=trigger+Bewegungsmelder+motion
2014.12.29 18:30:05 4: Badnotify exec define Timer at +*00:02:00 set Bad off
2014.12.29 18:30:05 3: Badnotify return value: Timer already defined, delete it first
2014.12.29 18:30:05 4: eventTypes: CUL_HM Bewegungsmelder motion -> motion
Steht ja da, das er den Timer nicht neu anlegen kann weil er schon existiert.
Entweder den Timer wenn vorhanden Löschen und neu Anlegen, oder Modifizieren.