notify soll ein DOIF kurz deaktivieren und dann wieder aktivieren.

Begonnen von ChristianH, 06 Januar 2020, 21:14:36

Vorheriges Thema - Nächstes Thema

ChristianH

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

Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

ChristianH

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

Damian

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



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