FHEM Forum

FHEM => Automatisierung => Thema gestartet von: sigi3001 am 02 Februar 2023, 18:09:22

Titel: Lampe automatisch nach bestimmter Zeit wieder ausschalten
Beitrag von: sigi3001 am 02 Februar 2023, 18:09:22
Hallo!

Bin leider ein kompletter Neuling in FHEM und Perl, darum komme ich mit folgener Fragestellung nicht zurecht:

Ich möchte eine Lampe, die über einen KNX-Taster eingeschaltet wird, automatisch nach einer bestimmten Zeit ausschalten.
Meine bisherige Lösung geht über ein notify und sieht so aus:

define Lichttimer notify Lampe1:on set Lampe1 on-for-timer 180

Das funktioniert zwar grundsätzlich, aber so kriege ich immer ein zweites on-Signal auf den Bus.
Wie könnte ich das besser lösen?

Cheers,
Sigi
Titel: Antw:Lampe automatisch nach bestimmter Zeit wieder ausschalten
Beitrag von: betateilchen am 02 Februar 2023, 18:19:46
Hast Du mal einen Auszug aus dem EventMonitor, damit man sehen kann, was da genau passiert?

Alternativ:

define Lichttimer notify Lampe1:on define lampe1off at +00:03:00 set Lampe1 off
Titel: Antw:Lampe automatisch nach bestimmter Zeit wieder ausschalten
Beitrag von: sigi3001 am 02 Februar 2023, 20:33:52
Hallo Betateilchen!

Vielen Dank für deine rasche Hilfe - jetzt funktioniert das super!
Auf die Verschachtelung mit dem define wäre ich selber nie gekommen.

Jetzt wollte ich der Vollständigkeit halber noch einen Auszug aus dem Eventmonitor von meiner ursprünglichen Variante einfügen.
Dabei habe ich festgestellt, dass das Ganze eine Schleife produziert, die im Sekundentakt ein on liefert.
Kann man also vergessen.

Nochmals vielen Dank!
Titel: Antw:Lampe automatisch nach bestimmter Zeit wieder ausschalten
Beitrag von: sigi3001 am 02 Februar 2023, 23:21:08
Hallo!

Jetzt hat sich beim mehrfachen Testen doch noch ein Problem ergeben:
Wenn ich die Lampe während der Laufzeit ausschalte, wird die laufende Zeit nicht zurückgesetzt.
D.H. wenn ich die Lampe (innerhalb der noch laufenden Zeit) wieder einschalte, wird die Laufzeit nicht neu gestartet, sondern die Lampe schaltet zum Ende der ersten Laufzeit aus. Sieht man auch beim STATE vom "at": Next: 23:05:03
Also:
Laufzeit ist auf 1 Stunde gestellt.
Lampe wird um 22:05:03 eingeschaltet. -> Laufzeit geht bis 23:05:03
Lampe wird um 22:30:12 ausgeschaltet. ->Laufzeit läuft im Hintergrund weiter bis 23:05:03
Lampe wird um 22:45:36 wieder eingeschaltet. -> Laufzeit bleibt weiter bis 23:05:03 (sollte jetzt aber eigentlich bis 23:45:36 gehen)
Lampe schaltet auch tatsächlich um 23:05:03 aus.
Wird die Lampe danach wieder eingeschaltet so wird die neue Laufzeit begonnen.

Wie könnte man die Laufzeit resetten?
Titel: Antw:Lampe automatisch nach bestimmter Zeit wieder ausschalten
Beitrag von: rudolfkoenig am 03 Februar 2023, 09:25:43
ZitatWie könnte man die Laufzeit resetten?
den zweiten define in defmod aendern.
Aktuell generiert der zweite define einen Fehler (steht im FHEM-Log), weil diese Definition schon existiert.
defmod steht fuer "define or modify if exists".
Titel: Antw:Lampe automatisch nach bestimmter Zeit wieder ausschalten
Beitrag von: LordVoodoo am 19 Februar 2023, 08:22:24
Ich habe das gleiche Vorgehen bei meiner Kaffeemaschine, nach 45 Minuten soll sie ausgehen, habe ich wie folgt gelöst:


defmod Regel_Kaffeemaschine_AutoOff DOIF ([Kaffeemaschine:onoff] == 1) (set Kaffeemaschine off)
attr Regel_Kaffeemaschine_AutoOff do resetwait
attr Regel_Kaffeemaschine_AutoOff wait 2700


Code ist aus aus dem Kopf geschrieben, ungeprüft.
Die Einstellung resetwait setzt den Ausschalt-Timer zurück, wenn die Kaffeemaschine manuell ausgeschaltet wurde.
Die wait Einstellungen verzögert den Befehl set-Kaffeemaschine-off um 2.700 Sekuden, entspricht 45 Minuten.
Titel: Antw:Lampe automatisch nach bestimmter Zeit wieder ausschalten
Beitrag von: erwin am 19 Februar 2023, 09:54:05
ZitatWie könnte ich das besser lösen?
.. ganz ohne notify, doif,defmod..... 8)
mit
attr <knxdevice> eventMap { usr=> {'^on' => 'on-for-timer 180'}, fw => {'^on' => 'on'} }
ZitatWie könnte man die Laufzeit resetten?
mit einem set <knxdevice> off
ein weiteres "set <knxdevice> on" während der laufzeit des ursprünglichen timers startet den timer neu!
l.g.erwin