FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Escrimark am 02 Januar 2017, 20:35:21

Titel: DOIF Auslöser einschränken
Beitrag von: Escrimark am 02 Januar 2017, 20:35:21
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
Titel: Antw:DOIF Auslöser einschränken
Beitrag von: Damian am 02 Januar 2017, 20:49:42
https://fhem.de/commandref_DE.html#DOIF_Zeitintervalle_Readings_und_Stati_ohne_Trigger
Titel: Antw:DOIF Auslöser einschränken
Beitrag von: Escrimark am 02 Januar 2017, 21:00:52
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
Titel: Antw:DOIF Auslöser einschränken
Beitrag von: Damian am 02 Januar 2017, 21:03:38
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"
Titel: Antw:DOIF Auslöser einschränken
Beitrag von: Escrimark am 02 Januar 2017, 21:08:41
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
Titel: Antw:DOIF Auslöser einschränken
Beitrag von: Escrimark am 04 Januar 2017, 12:06:00
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))
Titel: Antw:DOIF Auslöser einschränken (Zwei Bewegungsmelder ein Aktor)
Beitrag von: Escrimark am 04 Januar 2017, 20:45:29
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))