FHEM Forum

FHEM => Automatisierung => Thema gestartet von: error500 am 08 Oktober 2018, 17:56:35

Titel: notify, presence und ESPEasy - Befehl an ESPEasy wird nicht ausgeführt/gesendet
Beitrag von: error500 am 08 Oktober 2018, 17:56:35
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 (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
Titel: Antw:notify, presence und ESPEasy - Befehl an ESPEasy wird nicht ausgeführt/gesendet
Beitrag von: error500 am 09 Oktober 2018, 20:02:58
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