FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: bgewehr am 01 Januar 2015, 21:08:03

Titel: notify: Bitte um Syntax-Hilfe!
Beitrag von: bgewehr am 01 Januar 2015, 21:08:03
Ich möchte bestimmten devices einen live-timer hinzufügen, der anzeigt, wie lange der aktuelle Status schon aktiv ist.

Dieses Beispiel


define n_FBCallmonitor_timer notify \
FBCallmonitor:call|FBCallmonitor:ring|FBCallmonitor:connect|FBCallmonitor:disconnect \
{if (ReadingsVal($NAME,'event','') eq 'disconnect') \
{fhem 'delete a_'.$NAME.'_timer';;} \
else \
{fhem 'setreading '.$NAME.' duration_live 0';;\
fhem 'define a_'.$NAME.'_timer at +*00:00:01 {fhem "setreading '.$NAME.' duration_live ".eval(ReadingsVal("'.$NAME.'","duration_live","0") + 1)}';;\
fhem 'attr a_'.$NAME.'_timer room System';;}}


funktioniert einwandfrei. Nun wollte ich das Ganze optimieren und für die häufigere Verwendung etwas erleichtern. Da passiert leider gar nichts mehr - ich finde aber den Fehler nicht. Was kann ich tun?


define n_FBCallmonitor_timer notify FBCallmonitor:call|FBCallmonitor:ring|FBCallmonitor:connect|FBCallmonitor:disconnect
{if (ReadingsVal('$NAME','event','') eq 'disconnect')
{fhem 'attr a_'.$NAME.'_timer' disable 1';;}
else
{fhem 'setreading '.$NAME.' duration_live 0';;
fhem 'delete a_'.$NAME.'_timer';;
fhem 'define a_'.$NAME.'_timer at +*00:00:01 {fhem "setreading '.$NAME.' duration_live ".eval(ReadingsVal("'.$NAME.'","duration_live","0") + 1)}';;
fhem 'attr a_'.$NAME.'_timer room System';;}}


Es passiert offensichtlich gar nichts!
Titel: Antw:notify: Bitte um Syntax-Hilfe!
Beitrag von: marvin78 am 02 Januar 2015, 11:43:32
Das mit $NAME passt schon. Das steht dir im notify zur Verfügung. Allerdings machst du es unnötig kompliziert:

define n_FBCallmonitor_timer notify FBCallmonitor:.*(call|ring|connect|disconnect)
{if ($EVENT =~/event:.disconnect/)
{fhem 'attr a_'.$NAME.'_timer' disable 1';;}
else
{fhem 'setreading '.$NAME.' duration_live 0';;
fhem 'delete a_'.$NAME.'_timer';;
fhem 'define a_'.$NAME.'_timer at +*00:00:01 {fhem "setreading '.$NAME.' duration_live ".eval(ReadingsVal("'.$NAME.'","duration_live","0") + 1)}';;
fhem 'attr a_'.$NAME.'_timer room System';;}}


So ähnlich funktioniert es bei mir.
Titel: Antw:notify: Bitte um Syntax-Hilfe!
Beitrag von: bgewehr am 02 Januar 2015, 12:59:58
Dank Dir! Leider ist im $EVENT kein Hinweis auf disconnect enthalten, es wird immer nur die call_id gemeldet.

define n_FBCallmonitor_timer notify
FBCallmonitor:call|FBCallmonitor:ring|FBCallmonitor:connect|FBCallmonitor:disconnect
{if (ReadingsVal($NAME,'event','') eq 'disconnect')
{fhem 'delete a_'.$NAME.'_timer';;}
else
{fhem 'setreading '.$NAME.' duration_live 0';;
fhem 'define a_'.$NAME.'_timer at +*00:00:01 {fhem "setreading '.$NAME.' duration_live ".eval(ReadingsVal("'.$NAME.'","duration_live","0") + 1)}';;
fhem 'attr a_'.$NAME.'_timer room System';;}}


Nun funktioniert es auch bei mir.
Titel: Antw:notify: Bitte um Syntax-Hilfe!
Beitrag von: marvin78 am 02 Januar 2015, 13:03:26
Hast du "event" eventuell per event-on-...-reading ausgeschlossen?

Der Code oben funktkioniert bei mir in meiner Version einwandfrei. Ich kann auf alle events per

if ($EVENT =~/event:.EVENTNAME/

reagieren.
Titel: Antw:notify: Bitte um Syntax-Hilfe!
Beitrag von: bgewehr am 02 Januar 2015, 16:56:01
Das war der richtige Tipp, nur andersherum, ich musste erst event_on_change reading event setzen, damit auch ein event generiert wird. Vielen Dank!
Titel: Antw:notify: Bitte um Syntax-Hilfe!
Beitrag von: bgewehr am 02 Januar 2015, 17:02:05
Noch anders: Ich hatte - warum auch immer - mal verbose 1 gesetzt, da wurde nur noch die call_id gemeldet... gelöscht, gelöst!