Neuigkeiten:

Am Sonntag den 8.12.2024 kann es ab ca. 8:00 Uhr zu kurzzeitigen Einschränkungen / Ausfällen bei den Diensten des FHEM Vereines kommen.
Die Server müssen mal gewartet und dabei neu gestartet werden ;)

Hauptmenü

Bewegungsmelder PEHA 451 FU-BM DE - - Problem 10 Minuten Interval

Begonnen von Stonemuc, 30 Oktober 2024, 14:31:11

Vorheriges Thema - Nächstes Thema

Stonemuc

Hallo,

ich habe einen 451-FU-BM-DE aus dem "Lager" aktiviert, den ich vor Jahren wegen seines 10 Minuten Timers schonmal eingemottet hatte und auf die Bewegungsmelder mit 2 Minuten Timer umgestiegen bin.
Da die Preise anscheinend inflationär gestiegen sind, wollte ich meine Schaltung im Bad unten jetzt mit meinem DOIF und diesem Teil realisieren.
Kann ich dazu im DOIF Zweig mit wait arbeiten, um den "Timer" mit zwei Minuten zu simulieren? Wenn ja, setze ich dann die Werte per set oder setreading?

Internals:
   DEF        01A9078D
   FGW14_MSGCNT 41
   FGW14_TIME 2024-10-30 11:29:44
   FUUID      5c51c5c5-f33f-6467-2ead-8390472fd5ad6282
   IODev      FGW14
   LASTInputDev FGW14
   MSGCNT     41
   NAME       Bewegungsmelder_Bad_unten
   NR         408
   NTFY_ORDER 50-Bewegungsmelder_Bad_unten
   STATE      off
   TYPE       EnOcean
   eventCount 46
   OLDREADINGS:
   READINGS:
     2024-10-29 12:13:39   IODev           FGW14
     2024-10-30 12:29:44   alarm           dead_sensor
     2024-10-23 13:55:35   battery         ok
     2024-10-24 08:58:51   current         0.0
     2024-10-30 11:29:44   motion          off
     2024-10-24 08:58:51   sensorType      wall
     2024-10-30 11:29:44   state           off
     2024-10-30 11:29:44   voltage         3.2
   helper:
     timer:
       alarm:
         HASH(0x5592af1aba58)
         alarm
         dead_sensor
         1
         5
Attributes:
   IODev      FGW14
   devChannel 255
   eep        A5-07-01
   group      Bad_EG
   icon       motion_detector
   manufID    00D
   room       EnOcean
   signOfLife on
   signOfLifeInterval 3600
   subType    occupSensor.01
   teachMethod 4BS

Hier das DOIF noch ohne die set/setreading Befehle...das schaltet quasi erst mach 10 Minuten das Licht im Bad aus, wenn der interne Timer des Bewegungsmelder das motion off sender...

defmod Bad_Automatik_unten
DOIF ([?23:00-05:59] and [$SELF:dunkel]) (set Licht_Spiegelschrank An) (set Licht_Spiegelschrank Aus)
DOELSEIF ([Rollo_Bad_EG:position] < 100 and [$SELF:dunkel]) (set Rollo_Bad_EG position 100) (set $SELF cmd_3)
DOELSEIF ([Rollo_Bad_EG:position] == 100 and [$SELF:dunkel]) (set Licht_Bad_EG An)
DOELSEIF ([Taster_Bad_EG_L_R:state] eq "A0" and [Taster_Bad_EG_L_R:buttons] eq "pressed") (set Licht_Bad_EG Aus) (set Licht_Spiegelschrank An) (set Licht_Bad_Spiegelschrank Aus)
DOELSEIF ([Bewegungsmelder_Bad_unten:motion] eq "off") (set Licht_Bad_EG Aus) (set Licht_Spiegelschrank An) (set Licht_Spiegelschrank Aus)
DOELSEIF ([Rollo_Bad_EG:position] == 100 and [Bewegungsmelder_Bad_unten:motion] eq "on" and [Weatherman:wm_var_lux] > 40) (set Rollo_Bad_EG Auf)
attr Bad_Automatik_unten DOIF_Readings dunkel:[Bewegungsmelder_Bad_unten:motion] eq "on" and [Weatherman:wm_var_lux] <= 40 and [?$SELF] ne "cmd_4_1"
attr Bad_Automatik_unten disable 0
attr Bad_Automatik_unten group Bad_EG
attr Bad_Automatik_unten wait 0,120:0,3:0:0,0,3:0,0,3:0

gedacht hatte ich an so etwas in der Art:

defmod Bad_Automatik_unten
DOIF ([?23:00-05:59] and [$SELF:dunkel]) (set Licht_Spiegelschrank An) (set Licht_Spiegelschrank Aus;; setreading Bewegungsmelder_Bad_unten motion off;; setreading Bewegungsmelder_Bad_unten state off)
DOELSEIF ([Rollo_Bad_EG:position] < 100 and [$SELF:dunkel]) (set Rollo_Bad_EG position 100) (set $SELF cmd_3)
DOELSEIF ([Rollo_Bad_EG:position] == 100 and [$SELF:dunkel]) (set Licht_Bad_EG An) (setreading Bewegungsmelder_Bad_unten motion off;; setreading Bewegungsmelder_Bad_unten state off)
DOELSEIF ([Taster_Bad_EG_L_R:state] eq "A0" and [Taster_Bad_EG_L_R:buttons] eq "pressed") (set Licht_Bad_EG Aus) (set Licht_Spiegelschrank An) (set Licht_Bad_Spiegelschrank Aus)
DOELSEIF ([Bewegungsmelder_Bad_unten:motion] eq "off") (set Licht_Bad_EG Aus) (set Licht_Spiegelschrank An) (set Licht_Spiegelschrank Aus)
DOELSEIF ([Rollo_Bad_EG:position] == 100 and [Bewegungsmelder_Bad_unten:motion] eq "on" and [Weatherman:wm_var_lux] > 40) (set Rollo_Bad_EG Auf)
attr Bad_Automatik_unten DOIF_Readings dunkel:[Bewegungsmelder_Bad_unten:motion] eq "on" and [Weatherman:wm_var_lux] <= 40 and [?$SELF] ne "cmd_4_1"
attr Bad_Automatik_unten disable 0
attr Bad_Automatik_unten group Bad_EG
attr Bad_Automatik_unten wait 0,120:0,3:0,120:0,0,3:0,0,3:0
FHEM aus Raspberry PI 3 B+, Haussteuerung auf EnOcean Basis, Tecalor THZ 404eco Wärmepumpe

Flachzange

Es ist vergleichsweise aufwändig sich in solche DOIFs reinzufuchsen. Das schaffe ich selbst bei meinen eigenen nach kurzer Zeit nicht mehr. Daher: beschreib doch mal in Worten, was heute passiert und was du in Zukunft machen willst.

Meine Vermutung: Du willst nicht 10 Minuten warten bis das Licht ausgeht.

Eine Möglichkeit das mit einem DOIF zu realisieren ist ein wait timer, der beim Einschalten der Bewegung für 2 Minuten läuft und danach das Licht abschaltet. Das ist relativ einfach, aber Du wirst in folgendes Problem laufen: Du bekommst das Licht je nach Timing nicht automatisch an, weil der Bewegungsmelder nur alle 2 Minuten ein motion=on sendet. Du willst ja nicht nach 2 Minuten ausschalten, wenn noch jemand im Bad ist. Du solltest also das Abschaltintervall auf 3 Minuten setzen, damit eine erneute Bewegung nach 2 Minuten und bis 3 Minuten den wait timer resetten kann. Für das "do reset wait" brauchst Du aber ein eigenes DOIF nach meinem Verständnis, damit es nicht mit den anderen Wait-Timern in die Quere kommt.

Stonemuc

Also ich habe ja gehofft, dass das DOIF auf das setreading motion off reagiert, macht es aber nicht...weil das setreading vermutlich kein Event auslöst.
FHEM aus Raspberry PI 3 B+, Haussteuerung auf EnOcean Basis, Tecalor THZ 404eco Wärmepumpe

Flachzange

Schau Dir mal https://fhem.de/commandref_DE.html#DOIF_selftrigger an

Die ";;" gehören meiner Meinung nach nicht da hin. Befehle trennst Du mit einfachem Komma.

Aber selbst, wenn das jetzt funktioniert läufst Du irgendwann in das andere Problem rein.

P.S. Warum schaltest Du das Licht eigentlich immer erst An und dann Aus?

Stonemuc

;; gehört so wie geschrieben dahin - wenn man in FHEM zwei Befehler in der Kommandozeile absetzen will, dann immer mit ; ein einfaches , funktioniert nicht

Was soll das für ne Frage sein? Ich schalte das Licht ein, dass ich was sehen kann und wenn ich raus bin soll das Licht aus sein.

Ich probiere es mal mit do reset wait  und 3 Minuten als "Versatz".
An sich funktioniert das DOIF so wie es soll - seit Jahren im Hauptbad, aber im Gästebad schaltet das Licht erst nach  10 Minuten aus.

Das ist halt ein riesen Scheiß, dass der dumme Bewegungsmelder alle 2 Minuten on sendet, aber erst nach 10 Minuten off - weil ich mich damals nicht damit herumärgern wollte, hatte ich dann einfach andere gekauft, die auch nach 2 Minuten off senden.
FHEM aus Raspberry PI 3 B+, Haussteuerung auf EnOcean Basis, Tecalor THZ 404eco Wärmepumpe

Flachzange

Zitat von: Stonemuc am 31 Oktober 2024, 08:33:16;; gehört so wie geschrieben dahin - wenn man in FHEM zwei Befehler in der Kommandozeile absetzen will, dann immer mit ; ein einfaches , funktioniert nicht
https://fhem.de/commandref_DE.html#DOIF_Angaben_im_Ausfuehrungsteil

"Sollen mehrere FHEM-Befehle ausgeführt werden, so werden sie mit Komma statt mit Semikolon angegeben ... (set lamp1 on, set lamp2 off)"

Zitat von: Stonemuc am 31 Oktober 2024, 08:33:16Was soll das für ne Frage sein? Ich schalte das Licht ein, dass ich was sehen kann und wenn ich raus bin soll das Licht aus sein.
Ja, das ist das Problem mit DOIFs. Ich meinte folgendes
DOIF ([?23:00-05:59] and [$SELF:dunkel]) (set Licht_Spiegelschrank An) (set Licht_Spiegelschrank Aus) Du scheinst über das wait nach 2 Minuten das Licht auszuschalten, aber eigentlich willst Du es ja abhängig von der motion des Melders machen.

und bei
DOELSEIF ([Bewegungsmelder_Bad_unten:motion] eq "off") (set Licht_Bad_EG Aus) (set Licht_Spiegelschrank An) (set Licht_Spiegelschrank Aus) frage ich warum bei einem motion=off das Licht_Spiegelschrank erst nochmal eingeschaltet wird, bevor es ausgeschaltet wird.

Aber ja, lass uns nicht über ein funktionierendes DOIF sprechen.