(gelöst) Bewegungsmelder und Aussenlicht DOIF Logik ?

Begonnen von gadget, 19 März 2016, 10:34:53

Vorheriges Thema - Nächstes Thema

gadget

Hallo,

ich habe eine eigentlich recht triviale Aufgabenstellung zu der mir aber keine vernünftige Lösung einfällt:

1. Bewegungsmelder (Enocean) der Bewegung (motion) und Beleuchtung (brightness) liefert
2. Lampe (gesteurt über Enocean Aktor)

Gewünschtes Verhalten:

a) Wenn Beleuchtung < 100 und Bewegung dann Lampe einschalten.
b) Wenn keine Bewegung mehr dann Lampe nach 5 Minuten ausschalten.

Das "wenn keine Bewegung mehr" bereitet mir Kopfschmerzen.

Ich habe ein DOIF mit


definfe di_aussenlicht DOIF
(
  ([BEWMELDER:motion] eq "on") and
  ([BEWMELDER:brightness] < 100)
)
  (set LAMPE on-for-timer 300)

attr di_aussenlicht do allways



das "on-for-timer" schaltet die Lampe aber nach 5 Minuten gnadenlos wieder aus (auch wenn der Sensor noch  motion = on liefert). Danach wird erst wieder nach einer "Bewegungspause" (motion->off, motion ->on) eingeschaltet.

Hat jemand einen Tipp wie man das am besten löst ?

Ich hatte über einen ELSEIF Zweig für ([BEWMELDER:motion] eq "off") und attr wait nachdgedacht, aber da habe ich dann das Problem dass es ja sein kann das der Bewegungsmelder ja innerhalb der 5 Minuten mehrfach zwischen "on" und "off" wechseln kann.

Grüße, gadget

Brice

Ich habe kein Enocean und bisher auch eine DOIF-freie-Heimautomation. Meine FS20-Komponenten steuere ich für deinen Anwendungsfall über notifys.

Dein Problem scheint ein Anwendungsfall von FILTER=STATE! zu sein. Also in deinem Fall

(set LAMPE:FILTER=STATE!=on on-for-timer 300)

Bei mir sehe dann die notifys z.B. so aus. Bei Bewegung wird zunächst geprüft, ob der zu schaltende Aktor bereits eingeschaltet ist und falls nicht, wird er über on-for-timer eingeschaltet. Dazu kommt noch die Bedingung des Dämmerungszustandes (bei mir über das Twilight-Modul):

Bewegungsmelder_Bad:on.* {
if (ReadingsVal("Sterne_Bad","state","off") eq "off" && (ReadingsVal("myTwilight","twilight_weather",0) <= 39))
{
{fhem "set Sterne_Bad:FILTER=STATE!=on on-for-timer 360"}
{fhem "set HUEDevice4 pct 100"}
{fhem "set HUEDevice4 effect colorloop"}
{fhem "set HUEDevice4 on-for-timer 360"}
}
}
FHEM auf RPi 4 4GB (Buster) | produktiv) CUL 868 für FS20 | S300TH | KS300 | Max!Cube als CUN 868 für TechemWZ | HM-MOD-RPI-PCB für HM | Z-Wave ZME_UZB1 | FRITZ!DECT 200 | HUE | Lightify | Echo Dot | WS3080

Damian

definfe di_aussenlicht DOIF  ([BEWMELDER:"motion"]  and [BEWMELDER:brightness] < 100) (set LAMPE on-for-timer 300)

attr di_aussenlicht do allways


Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

gadget

Hallo,

erst mal danke für die bisherigen Antworten.

@Brice:

FILTER-STATE hilft  hier nicht weiter. Es wird zwar ggf. kein weiterer Timer gestartet, aber nach Ablauf des ersten Timers geht das Licht trotzdem aus, auch wenn noch Bewegung ist.

@Damian:

Der code von Dir ist identisch zu meinem ???

Ich habe jetzt folgende Kombination:



define di_aussenlicht DOIF  ([BEWMELDER:"motion"]  and [BEWMELDER:brightness] < 100) (set LAMPE on)

define wd_aussenlicht WATCHDOG BEWMELDER.motion.*on 00:05:00 SAME LAMPE off;; setstate wd_aussenlicht defined



Siehe auch http://www.meintechblog.de/2014/12/fhem-watchdog-zur-automatisierung-einsetzen/.

Ich denke aber man könnte das auch alles innerhalb des DOIF lösen wenn man mehr Ahnung als ich hätte.

Grüße, gadget

Damian

Zitat von: gadget am 19 März 2016, 13:43:17
Hallo,

erst mal danke für die bisherigen Antworten.

@Brice:

FILTER-STATE hilft  hier nicht weiter. Es wird zwar ggf. kein weiterer Timer gestartet, aber nach Ablauf des ersten Timers geht das Licht trotzdem aus, auch wenn noch Bewegung ist.

@Damian:

Der code von Dir ist identisch zu meinem ???

Ich habe jetzt folgende Kombination:



define di_aussenlicht DOIF  ([BEWMELDER:"motion"]  and [BEWMELDER:brightness] < 100) (set LAMPE on)

define wd_aussenlicht WATCHDOG BEWMELDER.motion.*on 00:05:00 SAME LAMPE off;; setstate wd_aussenlicht defined



Siehe auch http://www.meintechblog.de/2014/12/fhem-watchdog-zur-automatisierung-einsetzen/.

Ich denke aber man könnte das auch alles innerhalb des DOIF lösen wenn man mehr Ahnung als ich hätte.

Grüße, gadget

Einfach in der Commandref zu DOIF weiter lesen, dort steht:

Zitat
Die Nachbildung eines on-for-timers lässt sich wie folgt realisieren:

define di_on_for_timer ([detector:"motion"])
(set light on)
(set light off)
attr di_on_for_timer do resetwait
attr di_on_for_timer wait 0,30

Hiermit wird das Licht bei Bewegung eingeschaltet. Dabei wird, solange es brennt, bei jeder Bewegung die Ausschaltzeit neu auf 30 Sekunden gesetzt, "set light on" wird dabei nicht unnötig wiederholt.

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Brice

Zitat von: gadget am 19 März 2016, 13:43:17

define wd_aussenlicht WATCHDOG BEWMELDER.motion.*on 00:05:00 SAME LAMPE off;; setstate wd_aussenlicht defined

Als Hinweis, da ich es auch über Jahre genutzt hatte, setstate <watchdog> defined ggfls. ändern in
trigger wd_aussenlicht .

siehe https://forum.fhem.de/index.php/topic,43957.0.html
FHEM auf RPi 4 4GB (Buster) | produktiv) CUL 868 für FS20 | S300TH | KS300 | Max!Cube als CUN 868 für TechemWZ | HM-MOD-RPI-PCB für HM | Z-Wave ZME_UZB1 | FRITZ!DECT 200 | HUE | Lightify | Echo Dot | WS3080

gadget

Hallo,

Hallo,

@Brice: Danke für den Hinweis bezüglich setstate. Das findet sich noch in diversen Beiträgen und im verlinkten Artikel auf meintechblog.

@Damian: Danke für den Hinweis bezüglich DOIF. Ich hab das jetzt mal sinngemäß so verwendet, allerdings habe ich immer noch das Problem mit dem Abschalten der Lampe obwohl der Sensor weiterhin Bewegung registriert (reading motion ist weiterhin on).

Irgendwo hab ich da noch einen Denkfehler ...

Grüße, gadget


Damian

Zitat von: gadget am 19 März 2016, 19:19:07
Hallo,

Hallo,

@Brice: Danke für den Hinweis bezüglich setstate. Das findet sich noch in diversen Beiträgen und im verlinkten Artikel auf meintechblog.

@Damian: Danke für den Hinweis bezüglich DOIF. Ich hab das jetzt mal sinngemäß so verwendet, allerdings habe ich immer noch das Problem mit dem Abschalten der Lampe obwohl der Sensor weiterhin Bewegung registriert (reading motion ist weiterhin on).

Irgendwo hab ich da noch einen Denkfehler ...

Grüße, gadget

Wenn du HM-Sensor benutzt, dann ist das Reading motion immer on. In der Definition des DOIF aus der Commandref, wird aber nicht das Reading (wie in deiner ersten Definition), sondern das Event ausgewertet. Wenn du dich vor dem Bewegungsmelder bewegst, wird immer wieder ein Event erzeugt und das setzt die Verzögerung immer wieder neu, erst wenn über die angegebene Zeitspanne (im Beispiel 30 Sekunden) kein Event registriert wird geht die Lampe aus.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

gadget

Hallo,

@Damian: Mein Enocean Bewegungsmelder verhält sich da offenbar ein wenig anders als ein HM. Der sendet nicht dauernd neue Telegramme wenn noch Bewegung ist, erst wenn keine Bewegung mehr registriert wird kommt dann ein Telegramm Bewegung -> off. Das ist bei Enocean wohl auch so gewollt (Energie sparen, das Ding hat ja nur einen Kondensator und eine Solarzelle aber keine Batterie)

ich hab das jetzt so gelöst:



define di_aussenlicht DOIF
(
  ([BEWMELDER:motion] eq "on") and
  ([BEWMELDER:brightness] < 100)
)
  (set LAMPE on)
DOELSEIF

  ([BEWMELDER:motion] eq "off") and
  ([LAMPE eq "on")

  (set LAMPE off)

attr di_aussenlicht do resetwait
attr di_aussenlicht wait 0:300


Danke für die zahlreichen Tips und Hinweise.

Grüße, gadget