DOIF Auslöser einschränken

Begonnen von Escrimark, 02 Januar 2017, 20:35:21

Vorheriges Thema - Nächstes Thema

Escrimark

Hi,

ich möchte in einer DOIF sowohl die wz_Fibaro_Eye (Bewegungsmelder, der eigentlich das DOIF triggern soll abfragen, als auch das wz_Deckenlicht (welches nicht das DOIF triggern soll).

Was mir nun passiert, ist das das doif bei Bewegungserkennung durch wz_Fibaro_Eye zweimal durchlaufen wird. Da es selbst das wz_Deckenlicht auf on schaltet, was fhem wiederum als Trigger für das DOIF verwendet. Wie kann ich das verhindern, bzw. wie kann ich den Trigger im DOIF genau festelegen?


## Fehler DOIF wird durch wz_Deckenlicht zweimal aufgerufen.
define wz_Bewegung ([wz_Fibaro_Eye:"HomeSecurity:.Motion.Detection"] and
[wz_Deckenlicht] eq "off" and     ##<-- Löst erneuten Aufruf der Doif aus. Macht zwar keinen Fehler ist aber unschön
[wz_Fibaro_Eye:luminance] < 75 and
([wz_HarmonyHub:currentActivity] eq "PowerOff" or
[wz_HarmonyHub:currentActivity] eq "AirServer (ohne TV)"))
((set wz_Deckenlicht on) (set wz_LichtAnDurchMotion on))


Vielen Dank im Voraus
MArk

Damian

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

Escrimark

Hi Danke,

für die schnelle Antwort kann nur leider damit nicht viel Anfangen, ich will das ja nicht zeitlich einschränken. Ein wait 0:10 hilft auch nix:
Zeitintervalle, Readings und Stati ohne Trigger 

Angaben in eckigen Klammern, die mit einem Fragezeichen beginnen, führen zu keiner Triggerung des Moduls, sie dienen lediglich der Abfrage.
Anwendungsbeispiel: Licht soll zwischen 06:00 und 10:00 angehen, getriggert wird nur durch den Taster nicht um 06:00 bzw. 10:00 Uhr
define di_motion DOIF ([?06:00-10:00] and [button])(set lamp on-for-timer 600)
attr di_motion do always


Hier mein Log:
2017-01-02 20:56:41 DOIF wz_MotionDetection cmd_nr: 1
2017-01-02 20:56:41 DOIF wz_MotionDetection cmd: 1
2017-01-02 20:56:41 DOIF wz_MotionDetection cmd_event: wz_Fibaro_Eye
2017-01-02 20:56:41 DOIF wz_MotionDetection cmd_1
2017-01-02 20:56:41 ZWave wz_Fibaro_Eye alarm: HomeSecurity: Motion Detection - Unknown Location
2017-01-02 20:56:44 DOIF wz_MotionDetection cmd_nr: 2      <----- Dieser zweite Trigger sollte unterdrückt werden. Er wird durch das DOIF selbst erzeugt, beim wz_Deckenlicht einschalten.
2017-01-02 20:56:44 DOIF wz_MotionDetection cmd: 2
2017-01-02 20:56:44 DOIF wz_MotionDetection cmd_event: wz_Deckenlicht
2017-01-02 20:56:44 DOIF wz_MotionDetection cmd_2

Damian

Warum zeitlich einschränken?

ZitatAngaben in eckigen Klammern, die mit einem Fragezeichen beginnen, führen zu keiner Triggerung des Moduls, sie dienen lediglich der Abfrage.

Bedeutet in deinem Fall:

[?wz_Deckenlicht] eq "off"
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Escrimark

Ohje, ist wohl schon zu spät für mich.
Das ? nach der [ war natürlich der entscheidende Hinweis. Vielen Dank für die schnelle und korrekte Antwort

Escrimark

Hi,

jetzt muss ich leider schon wieder nerven. Nachdem dank Damian alles soweit funktioniert hat wollte ich heute den Raum durch einen zweiten Bewegungsmelder wz_Fibaro_Eye_2 überwachen lassen. Das Einschalten durch einen der beiden funktioniert auch einwandfrei. Allerdings geht das Licht nicht mehr aus. Ich dachte durch eine and -Verknüpfung der "Event.cleared:.Motion.Detection" Meldung der beiden Sensoren müsste eigentlich das Licht ausgehen wenn beide nix mehr "sehen".
Allerdings geht das DOIF jetzt nicht mehr in den CMD 1 (d.h. nicht mehr in den DOELSEIF-Zweig). Glaube mir fehlt da noch etwas Grundverständnis bzgl. der Trigger...


DOIF ([?wz_Deckenlicht] eq "off" and  ## ? Verhindert Trigger (d.h. erneuten Aufruf) durch wz_Deckenlicht
([wz_Fibaro_Eye:"HomeSecurity:.Motion.Detection"] or   ##<-- Funktioniert Licht geht an sobald einer der Sensoren was bemerkt
[wz_Fibaro_Eye_2:"HomeSecurity:.Motion.Detection"]) and
[wz_Fibaro_Eye:luminance] < 75 and
([wz_HarmonyHub:currentActivity] eq "PowerOff" or
[wz_HarmonyHub:currentActivity] eq "AirServer (ohne TV)"))
((set wz_Deckenlicht on) (set wz_LichtAnDurchMotion on) (set wz_Deckenfluter on))
DOELSEIF
([wz_Fibaro_Eye:"HomeSecurity:.Event.cleared:.Motion.Detection"] and
  [wz_Fibaro_Eye_2:"HomeSecurity:.Event.cleared:.Motion.Detection"] and ##<-- Funktioniert nicht d.h. das Licht geht gar nicht mehr aus, obwohl irgendwann beide den Status Event.cleared haben.
[wz_LichtAnDurchMotion] eq "on")
((set wz_Deckenlicht off) (set wz_LichtAnDurchMotion off) (set wz_Deckenfluter off))

Escrimark

#6
Hi *,

habs jetzt selbst rausbekommen. Wenn ich das Reading "alarm" statt dem ?Protokolleintrag/Event? Abfrage funktioniert es. Scheinbar löscht FHEM die Events nach einiger Zeit??


([?wz_Deckenlicht] eq "off" and  ## ? Verhindert Trigger (d.h. erneuten Aufruf) durch wz_Deckenlicht
([wz_Fibaro_Eye:"HomeSecurity:.Motion.Detection"] or
[wz_Fibaro_Eye_2:"HomeSecurity:.Motion.Detection"]) and
[wz_Fibaro_Eye:luminance] < 75 and
([wz_HarmonyHub:currentActivity] eq "PowerOff" or
[wz_HarmonyHub:currentActivity] eq "AirServer (ohne TV)"))
((set wz_Deckenlicht on) (set wz_LichtAnDurchMotion on) (set wz_Deckenfluter on))
DOELSEIF
([wz_Fibaro_Eye:alarm] =~ m"Event.cleared:.Motion.Detection" and ##<-- Damit and verknüpft mit dem Zweiten Sensor funktioniert es.
[wz_Fibaro_Eye_2:alarm] =~ m"Event.cleared:.Motion.Detection" and
[wz_LichtAnDurchMotion] eq "on")
((set wz_Deckenlicht off) (set wz_LichtAnDurchMotion off) (set wz_Deckenfluter off))