Autor Thema: notify, presence und ESPEasy - Befehl an ESPEasy wird nicht ausgeführt/gesendet  (Gelesen 114 mal)

Offline error500

  • New Member
  • *
  • Beiträge: 20
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

Offline error500

  • New Member
  • *
  • Beiträge: 20
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

 

decade-submarginal