[gelöst] Bewegungsmelder Lichtsteuerung (Readingsage ?)

Begonnen von MrStonedfire, 11 Oktober 2021, 02:27:29

Vorheriges Thema - Nächstes Thema

MrStonedfire

Schönen guten Tag,
ich habe einige Bewegungsmelder (BwM) bei mir verstreut.
Diese sollen unter anderen das Licht steuern.
Mein erster Ansatz war eine Kombination aus ,,on-for-timer" und wait hatte das Problem das ich öfters mal im Dunkeln stand. Der Grund war die 1% Regelung  (Duty_Cycle).
Jetzt war meine Überlegung dass wenn der BwM nomotion gesendet hat und sich der Wert über eine Zeit von X sec nicht wieder auf motion geändert hat soll ein off gesendet werden.
Wenn ich es richtig verstanden habe kann ich mein DoIF mit ReadingsAge so anpassen das dies funktioniert.
Leider klappt es nicht wie vorgesehen.
Habt einer von euch eine Idee?

([BwM_EG_Flur_Lux:lux] < "13" and [BwM_EG_Flur] eq "motion" and ([HM_Eingang] eq "off" and [Roomba966:cleanMissionStatus-phase] ne "run") (set HM_Eingang on)
DOELSEIF
([BwM_EG_Flur] eq "nomotion" and ReadingsAge("BwM_EG_Flur","state","nomotion") > 5 and [EG_Flur_Beleuchtung_DOIF] eq "cmd_1") (set HM_Eingang off)


LG
Dennis

MadMax-FHEM

#1
Wie soll das gehen (also mit DOIF)?

Der BWM triggert auf nomotion und da prüfst du, ob nomotion bereits einige zeit her ist?

-> NEIN, weil nomotion kam ja gerade erst -> Trigger des DOIF

Danach wird ja nicht mehr getriggert...

EDIT: watchdog könnte auch noch gehen...

Du könntest das mit einem notify machen, dort dann ein at (oder [named] sleep) und erneut prüfen, ob immer noch nomotion (und wie lange schon -> ReadingsAge).
Und erst dann reagieren...

Warum schaltest du nicht einfach bei motion ein und bei nomotion aus?
Statt (so vermute ich) immer mit motion erneut "on-for-timer"?

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

binford6000

ZitatLeider klappt es nicht wie vorgesehen.
Habt einer von euch eine Idee?

Hallo Dennis,
ja ich habe eine: ReadingsAge ist eine PERL-Funktion - dann musst du das DOIF auch im PERL-Modus verwenden.

Und ich hab noch eine: Schau dir mal das Modul "Homezone" an. Das verwenden einige für genau das: Steuerung u.a. Licht mit Hilfe von Bewegungsmeldern.
Hier mal als Beispiel einer meiner Flure:
defmod flk_zone homezone
attr flk_zone userattr hz_decay_afternoon hz_decay_day hz_decay_evening hz_decay_morning hz_decay_night         hz_decay_sr hz_decay_ss hz_decay_sr hz_decay_ss  :textField-long    :textField-long    :textField-long    :textField-long   hz_cmd_present:textField-long hz_lumiThreshold_present hz_cmd_likely:textField-long hz_lumiThreshold_likely hz_cmd_unlikely:textField-long hz_lumiThreshold_unlikely hz_cmd_absent:textField-long hz_lumiThreshold_absent
attr flk_zone hz_absenceEvent Wohnung:presence:.absent
attr flk_zone hz_cmd_absent set HM_Eingang off
attr flk_zone hz_cmd_likely IF ([Roomba966:cleanMissionStatus-phase] ne "run") (set HM_Eingang on)
attr flk_zone hz_dayTimes 03:30|backup 05:00|morning 10:00|day 14:00|afternoon 18:00|evening 23:00|night
attr flk_zone hz_decay 180
attr flk_zone hz_luminanceReading flk_huesens_light:lux
attr flk_zone hz_occupancyEvent flk_bwm:state:.motion
attr flk_zone hz_state 100:present 50:likely 1:unlikely 0:absent


Ich war so frei und habe deine Befehle in likely und absent eingetragen.  ;)

VG Sebastian

Damian

#3
Dafür bietet sich das Attribut do resetwait an:

DOIF (<Bewegung>) (set lamp on) (set lamp off)
attr do resetwait 0,300


Hiebei wird bei Bewegung der Befehl "set lamp on" nicht wiederholt.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

MrStonedfire

Vielen Dank für die Antworten und Anregungen.

Über das Homezone Modul bin ich auch schon gestoßen. Das war mir aber jetzt gerade zu komplex, da ich beruflich gerade viel um zu tun habe.

Ich habe die Idee von Damian aufgegriffen und für mich angepasst. Ich musste jedoch noch ein "repeatsame 1" hinzufügen da es sonst leider doch mehrfach gesendet hat.

Hier noch meine Umsetzung falls es jemand anderen hilft.
P.S. Ich habe mir noch einen dummy eingefügt um das Licht wenn gewünscht auch Manuell einfach wieder zu schalten wenn es benötigt wird.


define EG_Flur_Beleuchtung_DOIF DOIF
([BwM_EG_Flur_Lux:lux] < "13" and \
[BwM_EG_Flur] eq "motion" and \
[EG_Licht] eq "Auto" and \
[Roomba966:cleanMissionStatus-phase] ne "run") \
(set HM_Eingang on)\
DOELSEIF \
([BwM_EG_Flur] eq "nomotion" and \
[EG_Licht] eq "Auto") \
(set HM_Eingang off)\


attr EG_Flur_Beleuchtung_DOIF do resetwait
attr EG_Flur_Beleuchtung_DOIF repeatsame 1
attr EG_Flur_Beleuchtung_DOIF room System
attr EG_Flur_Beleuchtung_DOIF wait 00:150

Ich habe mir noch einen dummy eingefügt um das Licht wenn gewünscht auch Manuell einfach wieder zu schalten wenn es benötigt wird.