notify, presence und ESPEasy - Befehl an ESPEasy wird nicht ausgeführt/gesendet

Begonnen von error500, 08 Oktober 2018, 17:56:35

Vorheriges Thema - Nächstes Thema

error500

Hallo zusammen,

ich habe in meinem FHEM eine Konstellation aus Anwesenheits- und Bewegungserkennung deren Status über ein notify verändert werden soll. In Bezug auf ein notify, mit dem ein Befehl nicht an ein ESPEasy-Gerät gesendet wird habe ich nur den folgenden Beitrag gefunden, der bei mir aber keine Abhilfe geschafft hat. (https://forum.fhem.de/index.php/topic,70511.0.html)

Zu meinen Problem: Ich nutze ein PRESENCE-Device um die Anwesenheit über die fritzbox zu ermitteln.
define presence_all PRESENCE function {get_presence()} 120 120
attr presence_all event-on-change-reading presence
attr presence_all webCmd statusRequest

Die Funktion get_presence() ruft eine URL die je nach Anwesenheitsstatus entweder 0 oder 1 zurückgibt. Das funktioniert soweit und der Korrekte Anwesenheitsstatus wird in FHEM angezeigt.

Dazu habe ich ein Dummy-Device definiert, dass entweder durch die Anwesenheit oder durch manuelles setzen die Information enthält ob die Bewegungserkennung aktiviert werden soll oder nicht.
define motion_state dummy
attr motion_state alias Status Bewegungserkennung
attr motion_state devStateIcon on:secur_locked@red off:secur_open

Auch hier wird mir der korrekte/gewünschte Status angezeigt (off: Bewegungserkennung abgeschaltet, on: angeschaltet).

Über ein notify soll nun bei Änderung dieses Status ein Relais an einem ESPEasy-Device geschaltet werden, dass das Gerät zur Bewegungserkennung einschaltet.
define SA_motion_change_state notify motion_state:(on|off) set ESPEasy_ESP_Plug_01_GPIO12 $EVTPART0;;set dummy_test evtvalue $EVTPART0
attr SA_motion_change_state devStateIcon inactive:general_aus@red:active .*:general_an:inactive


Wenn ich nun den Status von motion_state manuell setze (z.B. über das CMD-Feld oder über ein anderes dummy-Device, dann wird das Relais von ESPEasy_ESP_Plug_01_GPIO12 entsprechend ein- oder ausgeschaltet. Bei einer Statusänderung durch presence_all wird das notify SA_motion_change_state zwar ausgelöst aber das Relais wird nicht geschaltet (das erkenne ich durch das Device dummy_test und sehe es auch im Log).

Kann mir hier jemand weiterhelfen? Ich glaube irgendwie, dass es nur eine Kleinigkeit ist, die ich übersehe.

Danke und viele Grüße
Mark

error500

Und Hallo nochmal.

Ich habe zwischenzeitlich etwas rumprobiert und habe vorerst eine Lösung gefunden. Anscheinend wird der Befehl an das ESPEasy-Device irgendwie verschluckt. Wer eine bessere Idee zur Lösung hat darf diese gerne kundtun.  :)

Das notify, welches das ESPEasy-Device schalten soll habe ich nun zur Zeitverzögerung um ein "at" ergänzt. Damit wird der Befehl zum einschalten des Relais des ESPEasy 5 Sekunden verzögert ausgeführt.
define SA_motion_change_state notify motion_state:(on|off) set dummy_test evtvalue $EVTPART0;;define temp_change_motion_cam_$EVTPART0 at +00:00:05 set ESPEasy_ESP_Plug_01_GPIO12 $EVTPART0
attr SA_motion_change_state devStateIcon inactive:general_aus@red:active .*:general_an:inactive
attr SA_motion_change_state room Schaltaufgaben


Dabei ist mir dann aufgefallen, dass beim Wechsel des Anwesenheitsstatus zwei temporäre at's angegelegt werden (einer für off und einer für on, daher auch die $EVTPART0-Variable am Ende des temporären Namen). Wahrscheinlich kam daher das "verschlucken" des Befehls an ESPEasy. Daher habe ich meinem dummy-Device noch das Attribut event-on-change-reading eingerichtet.
define motion_state dummy
attr motion_state alias Status Bewegungserkennung
attr motion_state devStateIcon on:secur_locked@red off:secur_open
attr motion_state event-on-change-reading state


Das ist meine Lösung, damit das Relais des ESPEasy schaltet wenn sich der Anwesenheitsstatus verändert.

Viele Grüße
Mark