FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: M.Piet am 17 Februar 2017, 14:31:28

Titel: notify wenn Reading bestimmten Wert hat
Beitrag von: M.Piet am 17 Februar 2017, 14:31:28
Hallo Zusammen,

ich habe nun schon einiges mit notifys gebastelt.
Nun möchte ich gern eine Pushnachricht bei Anruf in Abwesenheit bzw. Verpassten Anrufen der Fritzbox.

Die FB_Calllist lieftert mir folgendes (aus dem Event-Monitor rauskopiert):
Eingehender, erfolgloser Anruf (Verpasster Anruf):
2017-02-17 13:50:21 FB_CALLLIST CallList 1-state: => X
Eingehender Anruf (laufendes Gespräch)
2017-02-17 13:54:01 FB_CALLLIST CallList 1-state: => [=]

Ich habe ein wenig Probleme, ein notify aufzubauen wenn ein bestimmtes Reading einen bestimmten Wert hat. Ich habe mich die letzten 3 Stunden mit Lesen und probieren zu dem Thema beschäftigt. Aber so richtig komme ich nicht zum Ziel.
Da die Readings Leerzeichen enthalten, habe ich es in Klammer gesetzt. Ich vermute das ich aber was grundlegendes falsch mache.

Vielleicht kann mir jemand aus der Sackgasse helfen...

Dies war mein letzter Versuch:
define notify_Anruf_Abwesenheit CallList 1-state:(=> X) set Pushover_Mike msg "Dies ist noch eine Testnachricht für Anruf Abwesenheit, wird später mit Werten gefüllt"
define notify_Anruf CallList 1-state:(=> [=]) set Pushover_Mike msg "Dies ist noch eine Testnachricht für einen Anruf, wird später mit Werten gefüllt"

(Später fülle ich die Pushnachricht noch mit Werten)
Titel: Antw:notify wenn Reading bestimmten Wert hat
Beitrag von: DeeSPe am 17 Februar 2017, 14:35:33
Zitat von: M.Piet am 17 Februar 2017, 14:31:28
Dies war mein letzter Versuch:
define notify_Anruf_Abwesenheit CallList 1-state:(=> X) set Pushover_Mike msg "Dies ist noch eine Testnachricht für Anruf Abwesenheit, wird später mit Werten gefüllt"
define notify_Anruf CallList 1-state:(=> [=]) set Pushover_Mike msg "Dies ist noch eine Testnachricht für einen Anruf, wird später mit Werten gefüllt"

(Später fülle ich die Pushnachricht noch mit Werten)

Beim notify soll CallList als Modul verwendet werden?
Probier mal:
define notify_Anruf_Abwesenheit notify CallList:1-state:(=>.X).* set Pushover_Mike msg "Dies ist noch eine Testnachricht für Anruf Abwesenheit, wird später mit Werten gefüllt"
define notify_Anruf notify CallList:1-state:(=>.\[=\]).* set Pushover_Mike msg "Dies ist noch eine Testnachricht für einen Anruf, wird später mit Werten gefüllt"


Gruß
Dan
Titel: Antw:notify wenn Reading bestimmten Wert hat
Beitrag von: marvin78 am 17 Februar 2017, 14:37:19
Wäre es nicht geschickter, direkt den Callmonitor abzufragen? Dessen Readings sind auch nicht so "seltsam".
Titel: Antw:notify wenn Reading bestimmten Wert hat
Beitrag von: M.Piet am 17 Februar 2017, 14:51:21
Zitat von: marvin78 am 17 Februar 2017, 14:37:19
Wäre es nicht geschickter, direkt den Callmonitor abzufragen? Dessen Readings sind auch nicht so "seltsam".
So habe ich es auch bereits erfolgreich gemacht.

Problem:
Reading "missed_call" wird nur bei Anruf in Abwesenheit erzeugt.
Reading "external_number" wird bei jedem Anruf erzeugt. Somit habe ich bei einem Anruf in Abwesenheit 2 Push-Nachrichten, bei einem "normalen" Anruf einen.
Und weiter kann ich in den Attributen der Calllist Filtern, dass nur eine externe Nummer angezeigt werden soll, und die anderen Rufnummern (der Oma und so) gar nicht auftauchen. Das geht im Callmonitor nicht so einfach.

@Dan: das geht leider nicht, hatte ich vorher auch schon mal in der Form probiert.
Fehler erscheint auch im Log:
2017.02.17 14:26:33 3: test_fritzbox_push return value: Unknown command 1-state:(=>, try help.

Titel: Antw:notify wenn Reading bestimmten Wert hat
Beitrag von: DeeSPe am 17 Februar 2017, 15:01:12
Zitat von: M.Piet am 17 Februar 2017, 14:51:21
@Dan: das geht leider nicht, hatte ich vorher auch schon mal in der Form probiert.
Fehler erscheint auch im Log:
2017.02.17 14:26:33 3: test_fritzbox_push return value: Unknown command 1-state:(=>, try help.

Das kann nicht sein!
Habe es gerade selbst bei mir in Testsystem genau so wie geschrieben definiert und es gab keine Fehlermeldung!

Gruß
Dan
Titel: Antw:notify wenn Reading bestimmten Wert hat
Beitrag von: M.Piet am 17 Februar 2017, 15:24:31
Danke schon mal für deine Hilfe. :)

OK, die Fehler in dem Log müssen ein alter Test gewesen sein. Sorry dafür.
Nun habe ich keinen Fehler im Log.

Ich habe 2 Anrufe um 15:16 gemacht (siehe Screenshot).
Ich habe keine Push bekommen.

Was mich wundert: bei den beiden Readings des Notifys steht eine alte Uhrzeit (siehe Screenshot).
Sollte dort nicht immer, wenn das Reading in der Calllist neu geschrieben wird, die Uhrzeit auch erneuert werden? Oder mach ich da einen Denkfehler?
Titel: Antw:notify wenn Reading bestimmten Wert hat
Beitrag von: marvin78 am 17 Februar 2017, 15:26:03
screenshots helfen nicht. Bitte immer lists posten.

Hast du event-on-change-reading im Einsatz?
Titel: Antw:notify wenn Reading bestimmten Wert hat
Beitrag von: M.Piet am 17 Februar 2017, 15:31:15
Ok, wollte das mit den Screenshots ein wenig verdeutlichen.

event-on-change-reading war in der Tag aktiv. Ich habe es in der CallList deaktiviert. Aber kein Unterschied. Die Readings in den Notifys haben nach wie vor eine alte Uhrzeit (und nicht di aktuelle die das Reading in der CallList hat.
Titel: Antw:notify wenn Reading bestimmten Wert hat
Beitrag von: marvin78 am 17 Februar 2017, 15:32:55
Das ist auch ok. Du musst schauen, wie das Event wirklich aussieht. Was sagt der Eventmonitor?
Titel: Antw:notify wenn Reading bestimmten Wert hat
Beitrag von: M.Piet am 17 Februar 2017, 15:37:30
So sehen die Events aus:

Eingehender, erfolgloser Anruf (Verpasster Anruf):
2017-02-17 13:50:21 FB_CALLLIST CallList 1-state: => X

Eingehender Anruf (erfolgreiches Gespräch)
2017-02-17 13:54:01 FB_CALLLIST CallList 1-state: => [=]

Von dem notify sehe ich keinen Event. ich vermute das das Notify das Reading von der Calllist nicht ließt:
define notify_Anruf_Abwesenheit notify CallList:1-state:(=>.X).* set Pushover_Mike msg "Dies ist noch eine Testnachricht für Anruf Abwesenheit, wird später mit Werten gefüllt"
define notify_Anruf notify CallList:1-state:(=>.\[=\]).* set Pushover_Mike msg "Dies ist noch eine Testnachricht für einen Anruf, wird später mit Werten gefüllt"
Titel: Antw:notify wenn Reading bestimmten Wert hat
Beitrag von: Thorsten Pferdekaemper am 17 Februar 2017, 19:08:39
Hi,
mach mal versuchsweise ein notify ganz ohne den =>-Kram, also in etwa:

define notify_Anruf_Abwesenheit notify CallList:1-state:.*

Das sollte auf jeden Fall triggern.
Gruß,
   Thorsten
Titel: Antw:notify wenn Reading bestimmten Wert hat
Beitrag von: M.Piet am 17 Februar 2017, 21:03:06
Gute Hinweis! Daran liegt es auf jeden Fall!

Hiermit erzeugt er mir sofort eine Pushnachicht:
CallList:1-state:.*

Nur wie bekomme ich es hin, dass er nur auf diese beiden States von "CallList:1-state" reagiert:

=> X
oder
=>
   
=> X
Titel: Antw:notify wenn Reading bestimmten Wert hat
Beitrag von: Thorsten Pferdekaemper am 17 Februar 2017, 21:09:28
Hi,
probier mal das:

CallList:1-state:.=>.X

ggf. noch mit einem * hinten dran
Gruß,
   Thorsten
Titel: Antw:notify wenn Reading bestimmten Wert hat
Beitrag von: betateilchen am 17 Februar 2017, 21:25:25
Das hier funktioniert bei mir einwandfrei:


define n_CallList notify CallList.1-state:.=>.X {Debug "CallList 1-state: => X"}


und liefert


2017.02.17 21:24:05 1: DEBUG>CallList 1-state: => X
Titel: Antw:notify wenn Reading bestimmten Wert hat
Beitrag von: M.Piet am 17 Februar 2017, 21:42:05
Hab es nun dank eurer Hilfe hinbekommen.
Meine Lösung:

CallList:1-state:.=>.X set Pushover_Mike msg "Anruf in Abwesenheit von [CallList:1-name] / [CallList:1-number] am [CallList:1-timestamp]"
CallList:1-state:.=>.\[=\] set Pushover_Mike msg "Anruf von [CallList:1-name] / [CallList:1-number] am [CallList:1-timestamp]"


Ich musste bei dem "[=]" noch ein \ davorsetzten: CallList:1-state:.=>.\[=\]

Vielen Dank für die Hilfe!!!!!
Titel: Antw:notify wenn Reading bestimmten Wert hat
Beitrag von: DeeSPe am 17 Februar 2017, 21:49:38
Zitat von: M.Piet am 17 Februar 2017, 21:42:05
Hab es nun dank eurer Hilfe hinbekommen.
Meine Lösung:

CallList:1-state:.=>.X set Pushover_Mike msg "Anruf in Abwesenheit von [CallList:1-name] / [CallList:1-number] am [CallList:1-timestamp]"
CallList:1-state:.=>.\[=\] set Pushover_Mike msg "Anruf von [CallList:1-name] / [CallList:1-number] am [CallList:1-timestamp]"


Ich musste bei dem "[=]" noch ein \ davorsetzten: CallList:1-state:.=>.\[=\]

Vielen Dank für die Hilfe!!!!!

Das hatte ich irgendwie schon mal vorgeschlagen... :D

Zitat von: DeeSPe am 17 Februar 2017, 14:35:33
define notify_Anruf_Abwesenheit notify CallList:1-state:(=>.X).* set Pushover_Mike msg "Dies ist noch eine Testnachricht für Anruf Abwesenheit, wird später mit Werten gefüllt"
define notify_Anruf notify CallList:1-state:(=>.\[=\]).* set Pushover_Mike msg "Dies ist noch eine Testnachricht für einen Anruf, wird später mit Werten gefüllt"


Gruß
Dan
Titel: Antw:notify wenn Reading bestimmten Wert hat
Beitrag von: M.Piet am 17 Februar 2017, 22:05:36
Hey Dan. :)

Deine Variante unterscheidet sich aber von meinem Ergebnis ein wenig. Und bei deiner Variante wurde das Reading nicht erkannt.
Aber im Grunde haben alle zu dem Erfolg beigetragen, und dafür danke ich allen. Und wieder liebe ich meinen kleinen Pi im Keller ein wenig mehr....😍