FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: ChristianH am 06 Januar 2020, 21:14:36

Titel: notify soll ein DOIF kurz deaktivieren und dann wieder aktivieren.
Beitrag von: ChristianH am 06 Januar 2020, 21:14:36
Hallo in die Runde,

ich habe in einem Raum einen Bewegungsmelder installiert, der ab 20:00 das Licht in dem Raum einschalten soll. So ist der DOIF definiert:

Internals:
   CFGFN     
   DEF        ([Ikea_Bewegungssensor:"^occupancy:.true$"]and [20:00-23:50]) (set Ikea_Kueche_Transformator on-for-timer 600; set S20S10 on-for-timer 600)
   FUUID      5e138a5a-f33f-2495-5474-05bfe82010ac8c46
   MODEL      FHEM
   NAME       DF.IKEA_BW_Kueche_Abends
   NOTIFYDEV  Ikea_Bewegungssensor,global
   NR         1666
   NTFY_ORDER 50-Ikea_Bewegungssensor_DOIF_1
   STATE      cmd_2
   TYPE       DOIF
   VERSION    20811 2019-12-22 17:45:08
   Helper:
     DBLOG:
       cmd:
         myDbLog:
           TIME       1578339456.48142
           VALUE      2
       cmd_event:
         myDbLog:
           TIME       1578339456.48142
           VALUE      Ikea_Bewegungssensor
       cmd_nr:
         myDbLog:
           TIME       1578339456.48142
           VALUE      2
       mode:
         myDbLog:
           TIME       1578339079.33084
           VALUE      enabled
       state:
         myDbLog:
           TIME       1578339456.48142
           VALUE      cmd_2
   READINGS:
     2020-01-06 20:37:36   Device          Ikea_Bewegungssensor
     2020-01-06 20:37:36   cmd             2
     2020-01-06 20:37:36   cmd_event       Ikea_Bewegungssensor
     2020-01-06 20:37:36   cmd_nr          2
     2020-01-06 20:37:36   e_Ikea_Bewegungssensor_events linkquality: 0,no_motion,occupancy: false,battery: ok,battery_level: 74
     2020-01-06 20:31:19   mode            enabled
     2020-01-06 20:37:36   state           cmd_2
     2020-01-06 20:31:19   timer_01_c01    07.01.2020 20:00:00
     2020-01-06 20:31:19   timer_02_c01    06.01.2020 23:50:00
   Regex:
     accu:
     cond:
       Ikea_Bewegungssensor:
         0:
           &STATE     ^Ikea_Bewegungssensor$
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
     0          ::EventDoIf('Ikea_Bewegungssensor',$hash,'^occupancy:.true$',1)and ::DOIF_time($hash,0,1,$wday,$hms)
   days:
   do:
     0:
       0          set Ikea_Kueche_Transformator on-for-timer 600; set S20S10 on-for-timer 600
     1:
   helper:
     DEVFILTER  ^global$|^Ikea_Bewegungssensor$
     NOTIFYDEV  global|Ikea_Bewegungssensor
     event      linkquality: 0,no_motion,occupancy: false,battery: ok,battery_level: 74
     globalinit 1
     last_timer 2
     sleeptimer -1
     timerdev   Ikea_Bewegungssensor
     timerevent linkquality: 0,no_motion,occupancy: false,battery: ok,battery_level: 74
     triggerDev Ikea_Bewegungssensor
     timerevents:
       linkquality: 0
       no_motion
       occupancy: false
       battery: ok
       battery_level: 74
     timereventsState:
       linkquality: 0
       state: no_motion
       occupancy: false
       battery: ok
       battery_level: 74
     triggerEvents:
       linkquality: 0
       no_motion
       occupancy: false
       battery: ok
       battery_level: 74
     triggerEventsState:
       linkquality: 0
       state: no_motion
       occupancy: false
       battery: ok
       battery_level: 74
   internals:
   interval:
     0          -1
     1          0
   intervalfunc:
   localtime:
     0          1578423600
     1          1578351000
   readings:
   realtime:
     0          20:00:00
     1          23:50:00
   time:
     0          20:00:00
     1          23:50:00
   timeCond:
     0          0
     1          0
   timer:
     0          0
     1          0
   timers:
     0           0  1
   trigger:
     all         Ikea_Bewegungssensor
   triggertime:
     1578351000:
       localtime  1578351000
       hash:
     1578423600:
       localtime  1578423600
       hash:
   uiState:
   uiTable:
Attributes:
   group      93_DOIF,95_Bewegungsmelder
   room       10_Küche,78_DOIF


Der Schalter in der Küche ist aber dadurch nun wirkungslos - beim Verlassen des Raums geht das Licht natürlich wieder an. Daher habe ich folgendes versucht:


Internals:
   DEF        MQTT_Ikea_Taster_Kueche:click:.off set S20S10 off; set Ikea_Kueche_Transformator off; set DF.IKEA_BW_Kueche_Abends disable; sleep 60; set DF.IKEA_BW_Kueche_Abends enable
   FUUID      5dfcecea-f33f-2495-628d-90f78a03d8026b8c
   NAME       NF.MQTT_Ikea_Taster_Kueche_off
   NOTIFYDEV  MQTT_Ikea_Taster_Kueche
   NR         331
   NTFY_ORDER 50-NF.MQTT_Ikea_Taster_Kueche_off
   REGEXP     MQTT_Ikea_Taster_Kueche:click:.off
   STATE      active
   TYPE       notify
   READINGS:
     2020-01-06 14:16:13   state           active
Attributes:
   group      92_Notify
   room       77_Notify,10_Küche


Irgendwie bleibt DF.IKEA_BW_Kueche_Abends aber immer disabled. Was mache ich falsch? Was kann ich anders machen?

Danke,

Christian
Titel: Antw:notify soll ein DOIF kurz deaktivieren und dann wieder aktivieren.
Beitrag von: Damian am 06 Januar 2020, 21:48:20
Das wäre aber durch die Brust ins Auge.

Besser die gesamte Logik an einer Stelle unterzubringen:


DOIF ([MQTT_Ikea_Taster_Kueche:click] eq "off") (set S20S10 off) ()
DOELSEIF ([Ikea_Bewegungssensor:"^occupancy:.true$"]and [20:00-23:50] and $cmd != 1.1) (set Ikea_Kueche_Transformator on-for-timer 600; set S20S10 on-for-timer 600)

wait 0,10


übersetzt bedeutet das: reagiere auf den Bewegungssensor erst 10 Sekunden nachdem Lampe ausgeschaltet wurde.
Titel: Antw:notify soll ein DOIF kurz deaktivieren und dann wieder aktivieren.
Beitrag von: ChristianH am 07 Januar 2020, 08:58:39
Guten Morgen Damian,

erst einmal danke! Ich versuche gerade deine Definition zu verstehen - probieren kann ich sie erst heute Abend. Wenn du erlaubst, stelle ich mal meine Fragen.

1. DOIF ([MQTT_Ikea_Taster_Kueche:click] eq "off") (set S20S10 off) () - ok, S20S10 wird ausgeschaltet, ich würde es dann noch um das Ikea Gerät erweitern, wofür ist das ()?
2. DOELSEIF ([Ikea_Bewegungssensor:"^occupancy:.true$"]and [20:00-23:50] and $cmd != 1.1) - das erste Zweidrittel ist mir klar - kannst du mir erklären, was $cmd ungleich 1.1 bedeutet.

Christian
Titel: Antw:notify soll ein DOIF kurz deaktivieren und dann wieder aktivieren.
Beitrag von: Damian am 07 Januar 2020, 10:52:46
Zitat von: ChristianH am 07 Januar 2020, 08:58:39
Guten Morgen Damian,

erst einmal danke! Ich versuche gerade deine Definition zu verstehen - probieren kann ich sie erst heute Abend. Wenn du erlaubst, stelle ich mal meine Fragen.

1. DOIF ([MQTT_Ikea_Taster_Kueche:click] eq "off") (set S20S10 off) () - ok, S20S10 wird ausgeschaltet, ich würde es dann noch um das Ikea Gerät erweitern, wofür ist das ()?
2. DOELSEIF ([Ikea_Bewegungssensor:"^occupancy:.true$"]and [20:00-23:50] and $cmd != 1.1) - das erste Zweidrittel ist mir klar - kannst du mir erklären, was $cmd ungleich 1.1 bedeutet.

Christian

Der erste Zweig hat zwei Sequenzen mit Zuständen: 1.1 (erster geklammerter Befehl) und 1.2. (ohne Befehl)

$cmd entspricht dem Reading cmd, der den aktuellen Zustand darstellt. Solange sich das Modul im Zustand 1.1 befindet (10 Sekunden), soll keine Bewegung schalten. Umgekehrt heißt das: schalten per Bewegung nur, wenn $cmd ungleich 1.1