Unterschiedliche Aktionen abhängig von der Länge eines Status ?

Begonnen von juppzupp, 02 September 2018, 11:26:33

Vorheriges Thema - Nächstes Thema

juppzupp

Hi,

folgendes Setup :
Ich möchte wenn jemand am Bewegungsmelder vorbei läuft das Licht gedimmt einschalten. Sollte sich jemand aber länger (hier 40 Sekunden) in dem Bereich  aufhalten, soll das Licht auf 100% gedimmt werden.

Probiert habe ich :
defmod di_kueche_abends DOIF ([17:00-23:59] and [ESPEasy_esp8266_4_PIR:Switch] eq "on" and [?HM_57C1F2_Motion:brightness] < 100 ) \
(set HUEGroup6 pct 5) \
(set HUEGroup6 pct 100)\
DOELSE (set HUEGroup6 pct 0)

attr di_kueche_abends wait 0,40:121


Klappt soweit auch, ausser wenn jemand durchläuft (pct5), und dann aber zwischen Sekunde 40 und 121 zurück kommt, und sich im Bereich aufhält. DOIF bleibt dann auf 1.1 stehen.
Wie könnte man das abfangen ?

Danke
jupp

Damian

[ESPEasy_esp8266_4_PIR:Switch] eq "on" ist eine Zustandsabfrage. Wenn hier einer helfen soll, dann muss er auch wissen, wann ESPEasy_esp8266_4_PIR:Switch wieder den Zustand wechselt - vermutlich auf off.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

juppzupp

#2
Hallo Guten morgen.

Richtig, der Zustand wechselt wieder auf "off".


Grüße
jupp

edit :
deutet deine frage auf  doelseif mit off und nem wait statt nem "nackten" doelse ?

Damian

Zitat von: juppzupp am 02 September 2018, 11:44:59
Hallo Guten morgen.

Richtig, der Zustand wechselt wieder auf "off".


Grüße
jupp

edit :
deutet deine frage auf  doelseif mit off und nem wait statt nem "nackten" doelse ?

Die Frage war: wann?
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

juppzupp

Sorry.

Wenn sich niemand mehr bewegt + 15 Sekunden.

Grüße
jupp

Damian

Zitat von: juppzupp am 02 September 2018, 12:06:11
Sorry.

Wenn sich niemand mehr bewegt + 15 Sekunden.

Grüße
jupp

Dann muss man wissen, ob innerhalb von 15 Sekunden ein erneutes on gesendet wird bei Bewegung.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF


Damian

Die nächste Frage lautet, was passiert wenn sich jemand innerhalb von 15 Sekunden bewegt, wird z. B. das off zeitlich verschoben oder kommt es ausgehend von der ersten Bewegung nach 15 Sekunden (die zweite Bewegung innerhalb von 15 Sekunden wäre dann nicht erkennbar).

Es sind alles wichtige Informationen, die man wissen muss, wenn man die Anforderungen umsetzen möchte.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

juppzupp

Dann wird das off zeitlich verschoben.
Innerhalb der 15 Sekunden kann man nichts erkennen.deswegen auch im ersten Versuch das wait mit 40 Sekunden. Die Idee war "wenn pir in länger 40 Sekunden"
Der Melder meldet also Bewegung sofort, hält den Ausgang aber min. 15 Sekunden offen. Sollte innerhalb der Spanne weitere Bewegung stattfinden, bleibt der Ausgang auf on.


Damian

OK. So langsam hätten wir dann alle Infos.

Zeitlichabhängige Aktionen lassen sich besser mit DOIF-Perl lösen, hier kann man die Laufzeit eines Timers abfragen. Das geht beim FHEM-Modus nicht ohne weiteres.



define di_kueche DOIF {                           # Block zur Auswertung des Ereignisses
  if ([?17:00-23:59] and
      [ESPEasy_esp8266_4_PIR:Switch] eq "on" and
      [?HM_57C1F2_Motion:brightness] < 100  and
      get_Timer("Timer")==0) {                    # wenn Ereignis  eintritt und kein Timer läuft
    set_Timer("Timer",40);                        # setze Timer auf 40 Sekunden
    fhem"set HUEGroup6 pct 5";                    # lampe dimmen
  }
}
{                                                 # Block für die Auswertung nach Ablauf des Timers
  if ([$SELF:"Timer"]) {                          # wenn Timer nach 40 Sekunden abläuft
    if ([?ESPEasy_esp8266_4_PIR:Switch] eq "on"){ # wenn immer noch einer da
      fhem"set HUEGroup6 pct 100";
      set_Timer("Timer",40);                      # verlängere Timer um weitere 40 Sekunden
    }
  }
}
{                                                 # block zum Licht ausschalten
  if ([ESPEasy_esp8266_4_PIR:Switch] eq "off"){
    fhem"set HUEGroup6 pct 0";                    # Licht aus
    del_Timer("Timer");                           # Timer löschen
  }
}


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