Verpasste Anrufe im FHEM TabletUI darstellen

Nachdem bereits mehrfach nach meiner Umsetzung für die verpassten Anrufe gefragt wurde, findet ihr nun nachfolgend meine Lösung dafür. Als Basis nutze ich eine Fritzbox, die ich auch zum Telefonieren verwende.

Mit dem FHEM Modul FB_CALLMONITOR auf Anrufe reagieren

Innerhalb FHEM gibt es das Modul FB_CALLMONITOR, mit dem man auf externe Anrufe, die über eine Fritzbox getätigt werden, reagieren kann. Außerdem kann man mit dem Modul auf das Telefonbuch zugreifen, was aber nicht Bestandteil dieses Artikels ist.

Damit man über FHEM auf den Callmonitor der Fritzbox zugreifen kann, muß dieser auf der Fritzbox zunächst aktiviert werden. Hierzu nutzt man ein angeschlossenes Telefon und wählt die Folge #96*5* .

Nun kann man das Modul innerhalb FHEM anlegen. Hierbei sollte die Box über den Namen „fritz.box“ erreichbar sein oder man gibt statt dessen die entsprechende IP Adresse der Box an:

define fbCallMonitor FB_CALLMONITOR fritz.box:1012

Zur Abfrage von Telefonereignissen wird nun ein NOTIFY benötigt:

define notAnrufe NOTIFY fbCallMonitor:event:.*disconnect { CheckAnrufe($EVENT) }

Jedesmal, wenn sich das Telefon nach einem Anruf „abmeldet“ wird meine Funktion „CheckAnrufe“ aufgerufen. In den Readings des Fritzbox Device könnten dann noch weitere Infos wie Telefonnummer, Richtung des Anrufs (rein oder raus) usw. ermittelt werden. Einfach mal die Hilfe des Moduls heran ziehen.

Infos, die der Fritzbox Callmonitor innerhalb FHEM liefert

Infos, die der Fritzbox Callmonitor innerhalb FHEM liefert

Vorbereitung zur Anzeige der verpassten Anrufe

Nun müssen wir also nur noch dafür sorgen, dass unser TabletUI irgendwo abfragen kann, wieviel unbeantwortete Anrufe eingegangen sind. Hierzu nutze ich wieder einmal ein Dummy, welcher dann im TabletUI genutzt werden kann.

define duVerpassteAnrufe DUMMY

Mit der Funktion „CheckAnrufe“ wird dieser Dummy nun bei jedem verpassten Anruf um 1 hochgezählt:

#
# Anruf Funktionen
#
sub CheckAnrufe($)
{
   my ($aktion) = @_;

   #bei ausgehenden Anrufen wird der Dummy hochgezählt
   if (ReadingsVal("fbCallMonitor", "direction", "outgoing") eq "incoming")
   {
      fhem("set duVerpassteAnrufe ".(Value("duVerpassteAnrufe")+1));
   }
}

Jetzt fehlt nur noch eine Funktion, die den Dummy wieder auf 0 setzt. Denn sonst würde dieser ja bis ins unendliche laufen. Bei mir habe ich das innerhalb meiner „Schlafen“ Funktion gelöst. Hier muß jeder für sich den richtigen Zeitpunkt definieren. Denkbar wäre es z.B. einen AT-Befehl zu nutzen:

define ResetVerpassteAnrufe at 23:00:00 set duVerpassteAnrufe 0

Anzeige der verpassten Anrufe im TabletUI

Nun muß nur noch das Symbol in die Oberfläche eingebunden werden. Bei mir sieht der entsprechende Code hierzu wie folgt aus:

<div class="top-space">
<div class="inline cell">
<div data-type="symbol" data-device="duVerpassteAnrufe" data-icon="fa-phone warn" class="bigger"></div>
<div data-type="label" style="margin-top:-24px;">Anrufe</div>
</div>
Anzeige der verpassten Anrufe im TabletUI

Anzeige der verpassten Anrufe im TabletUI

38 comments

  1. Hi,

    klasse Anleitung hat bei mir super funktioniert!!!! Du hast nur einen kleinen Fehler drin, den aber ich denke auch Neulinge wie ich selber erkennen dürften
    da sollte statt:
    define notAnrufe fbCallMonitor:event:.*disconnect { CheckAnrufe($EVENT) }
    so heißen:
    define notAnrufe NOTIFY fbCallMonitor:event:.*disconnect { CheckAnrufe($EVENT) }

    Vielen Dank, dass Du Deine Lösung hier mit uns teilst!!!
    Gruß Eddie

  2. Danke für den Hinweis. Das kommt davon, wenn man nicht alles 1:1 kopiert – warum auch immer 😉

  3. hallo,
    danke für die Anleitung.
    Ich hab nur eine frage wohin kommt der Code für die Funktion „CheckAnrufe“

    Grüße und danke schon mal

  4. Selbst geschriebene Funktionen kommen in die Datei „99_myutils.pm“. Sollte diese Datei, die man über die FHEM Navigation „Edit Files“ findet, noch nicht vorhanden sein, dann kann man sich diese selbst erstellen. Hierzu kann man die Datei myUtilsTemplate.pm nutzen. Diese editiert man einfach und speichert sie unter dem Namen „99_myutils.pm“. Danach sollte man FHEM komplett neu starten, damit die Funktionen aus der Datei verfügbar werden. Achtung, die Zeile „1;“ muß am Ende der Datei immer vorhanden sein!

  5. Hallo,
    danke für die Mühe, das wir an deinem Wissen teilhaben dürfen! Ich mache gerade die ersten vorsichtigen Schritte in der ftui und würde gerne wissen, wie du das mit dem QR-Code hinbekommen hast. Läuft das über das Fritzbox Modul oder ist das ein Bild?

    mfG
    Tobias

  6. Für den QR-Code habe ich einfach einen Screenshot der Fritzbox Administration (Gastzugang) gemacht. Das Bild habe ich dann im FTUI Verzeichnis abgelegt und dann mit dem entsprechenden Code im FTUI eingebunden. Müsste eigentlich auch in meiner Beispielkonfiguration zu finden sein, die man auf meinem Google Drive findet (Link in der rechten Seitenleiste, wenn man im Bereich Smarthome ist).

  7. Guten Abend,
    ja, stimmt. Ich hatte das Drive gestern noch entdeckt – und auch das Bild … vielen Dank!

    Aber was anderes: kann es sein, dass die Bedingung nicht stimmt:

     if (ReadingsVal("fbCallMonitor", "direction", "outgoing") eq "incoming")

    oder irre ich mich? Warum fragst du „direction“ ab? Sollte das nicht besser „event“ sein? Bei mir wird nämlich nix hochgezählt, wenn ein verpasster Anruf war.

    Ich wünsche noch ein schönes Wochenende

  8. Beim erstellen einer neuen utils.pm erhalte ich…

    Undefined subroutine &main::myUtilsAnrufe_Initialize called at fhem.pl line 2258.

  9. Schau mal in der Wiki, ob du alle Basis Infos eingetragen hast. Auch „1;“ muss am Ende vorhanden sein. http://www.fhemwiki.de/wiki/99_myUtils_anlegen

  10. Das mit dem pm ist geklärt. der Name muss genauso lauten. Jetzt habe ich aber ein Probblem mit der cfg.

    ResetVerpassteAnrufe already defined, delete it first

    Kommentiere ich dein define aus und speichere, klappt das auch. Nur wenn ich das define wieder rein nehme und speichere, bekomme ich diese Meldung.

  11. Diese Fehlermeldung kommt immer dann, wenn ein Device mit dem Namen bereits existiert. Entweder schaust du dir das angelegte Device einmal an, ob es richtig definiert ist oder du löschst es tatsächlich erstmal. Hierfür einfach „Delete ResetVerpassteAnrufe“ in der Befehlszeile von FHEM eingeben. Danach kannst du den Timer wieder anlegen.

  12. Es gibt define ResetVerpassteAnrufe at 23:00:00 set duVerpassteAnrufe 0 (bzw. ResetVerpassteAnrufe) nur einmal. Lege ich es erneut an, erscheint wieder is already define.

  13. komme irgendwie nicht weiter, immer wieder der gleiche Fehler, trotz dass das ResetVerpassteAnrufe nur einmal in der cfg existiert.

  14. Ich bin mir nicht ganz sicher, ob ich dein eigentliches Problem verstanden habe. Wenn der „ResertVerpassteAnrufe“ bereits existiert, ist ja alles in Ordnung. Dann sollte zu dem von dir angegeben Zeitpunkt der Dummy wieder auf 0 gesetzt werden. Falls das nicht passiert ist die Frage, ob ein Fehler in der Definition ist. Diesen kannst du dann durch Editieren des „Device“ ggf. anpassen. Die Frage ist also, wie sieht der angelegte Timer in FHEM nun genau aus und was funktioniert nicht? Evtl. schon mal das Logfile geprüft?

  15. Alles nochmal gelöscht und über fhem ingeegeben und es klappt. Allerdings habe ich in der weboberfläche nun ein Ausrufezeichen in dem roten Kreis, wo die verpassten Anrufen stehen sollten.

  16. OK, schön, dass es soweit schon mal funktioniert. An dieser Stelle nochmals einen Hinweis. Möglichst niemals in der CFG-Datei direkt die Befehle erfassen! Immer die Befehlszeile nutzen.

    Der aktuelle Fehler deutet darauf hin, dass in dem Dummy keine Zahl steht. Hast du evtl. einen Schreibfehler bei dem Dummy bzw. was steht denn im Dummy „duVerpassteAnrufe“, wenn du dir diesen direkt in FHEM anschaust?

  17. Bei state stehen ???. Ich habe alles 1:1 von hier kopiert und eingefügt incl. rereadcfg.

  18. Unter not Anrufe steht jedoch das Datum und die Uhrzeit des entgangenen Anrufes. Nur state ist leer und wird dadurch nicht übergeben.

    Ich hatte zudem eine eigene 99er pm Datei geschrieben. Vielleicht liegt auch da der Fehler ?

    ##############################################
    package main;

    use strict;
    use warnings;
    use POSIX;

    sub
    myUtilsCheckAnrufe_Initialize($$)
    {
    my ($hash) = @_;
    }

    #
    # Anruf Funktionen
    #
    sub CheckAnrufe($)
    {
    my ($aktion) = @_;

    #bei ausgehenden Anrufen wird der Dummy hochgezählt
    if (ReadingsVal(„FritzBoxCallMonitor“, „direction“, „outgoing“) eq „incoming“)
    {
    fhem(„set duVerpassteAnrufe „.(Value(„duVerpassteAnrufe“)+1));
    }
    }

    1;

  19. An der Funktion kann ich jetzt erstmal keinen Fehler entdecken. Ob die Funktion ausgeführt wird und auch in den if-Zweig läuft kann man am besten mit einer Logfile Protokollierung testen. Denn wenn der notify funktioniert, scheint der Aufruf der Funktion vielleicht nicht richtig zu funktionieren.

    Z.B.

    Log3 undef, 3, „Aufruf CheckAnrufe“

    bzw.

    Log3 undef, 3, „CheckAnrufe im if“

  20. Wer Probleme mit dem Reset hat, so wird der Reset täglich ausgeführt:

    define ResetVerpassteAnrufe at *23:59:00 set duVerpassteAnrufe 0

    ohne * wird der Befehl nur einmal ausgeführt, siehe auch http://www.fhemwiki.de/wiki/At

  21. Eine tolle Erweiterung fände ich wäre, wenn man durch einen Klick (oder beim Tablet besser Tipp) den Zähler sofort auf Null setzen könnte…. zusätzlich zur nächtlichen Löschung. Hätte aus meiner Sicht den Vorteil, dass es tagsüber nicht zu Missverständnissen kommt wegen eventuell verpasster Anrufe.

    Lässt sich so eine Funktion auch nachträglich einbauen…. mir fehlen dazu leider noch die Kenntnisse für eine solche Umsetzung.

  22. Das ist in der Tat eine gute Anregung. Ich muß mir dazu nochmals die Widgets anschauen. Meines Wissen ist das „warn“ Attribut nur beim Symbol Widget zu finden und für einen „Knopf“ bräuchte man ein Push-Widget oder etwas ähnliches.

  23. Hallo Jürgen, ich bin auf deine Löung mit dem QR-Code gestoßen. Das Bild legst du folgendermaßen ab:
    data-url=“./images/bild.PNG“
    Ich bin noch relativer Anfänger in FTUI und verstehe jetzt nicht, was der Punkt (./images) in der Pfadangabe bedeutet
    Könntest du mir da weiterhelfen?

  24. Der Pfad bezieht sich auf den FTUI Pfad. In der Regel sollte ja im FHEM Verzeichnis ein Ordner „www“ zu finden sein. Dort müsste dann das Verzeichnis „tablet“ zu finden sein. Hier gibt es dann ein Verzeichnis „images“, in dem man auch eigene Bilder ablegen kann. Sollte es nicht existieren, dann kann man es natürlich auch selbst anlegen oder ein anderes Verzeichnis nutzen. In der Anweisung für data-url wird dann der Pfad angegeben, wo das Bild liegt. Da man sich beim Start des FTUI im Verzeichnis „tablet“ befindet, wird hierfür der Punkt „./“ genutzt.

  25. Vielen Dank für die super Anleitung. Habe nun auch einen callmonitor in meine tablet-ui eingebaut.
    Das mit dem zurücksetzen des Zählers habe ich für mich erstmal so gelöst.

    [url=http://abload.de/image.php?img=vpa_reset5tj51.jpg][img]https://abload.de/thumb/vpa_reset5tj51.jpg[/img][/url]

    Verpasste Anrufe

    reset

  26. Hallo,

    ich hab das alles von oben kopiert.
    Jedoch werden bei mir alle anrufe mitgezählt, auch die angenommenen.
    Dies sollte nicht so sein oder?
    Hast einen Tip für mich?

  27. In der Funktion „CheckAnrufe“ wird ja eigentlich nur gezählt, wenn die „direction“ „incoming“ ist. Daher sollten eigentlich auch nur eingehende Anrufe gezählt werden. Vielleicht ist beim Kopieren der Funktion irgendetwas schief gelaufen. Evtl. fehlt irgendeine Klammer?

  28. Es werden auch nur ale eingehenden Anrufe gezählt, doch leider auch die angenommenen!

  29. Hab ich mal die Frage wieder nicht richtig gelesen! 😉

    Ich habe mir die einzelnen Attribute vom CallMonitor nochmal angeschaut. Ohne es im Detail getestet zu haben, würde ich mal annehmen, dass man mit „internal_connection“ noch etwas anfangen kann. Hier steht immer drin, welches „Gerät“ den Anruf angenommen hat. Bei mir taucht „Dect_XX“ auf, wenn der Anruf mit einem Telefon angenommen wurde und irgend etwas mit „Answering_Machine_XX“, wenn der AB dran gegangen ist. Allerdings gibt es hierbei ein Problem. Legt der Anrufer auf, bevor irgend jemand dran gegangen ist, dann wird das Attribut nicht geändert. In diesem Fall könnte man über das Attribut „missed_call“ heraus bekommen, dass ein nicht angenommener Anruf eingegangen ist.

    So wirklich fällt mir auf Anhieb keine sinnvolle Lösung dafür ein. Wahrscheinlich muss man mit zwei notify Definitionen für jedes der oben erwähnten Attribute arbeiten. Bei „disconnect“ wird ein Anruf hochgezählt. Bei „internal_connection“ wird ein Anruf wieder herunter gezählt, wenn „DECT_.*“ drin steht.

  30. Hi,
    man benötigt die Funktion „duVerpassteAnrufe“ garnicht mehr. Es gibt das Modul „FB_CALLLIST“, das macht schon alles 🙂

    define Fritzbox_MissedCalls FB_CALLLIST Fritz_Box_Monitor
    attr Fritzbox_MissedCalls create-readings 1
    attr Fritzbox_MissedCalls list-type missed-calls

    In FTUI muss das das hier rein:

    <div data-type="symbol"
               data-device="Fritzbox_MissedCalls"
               data-get="numberOfCalls"
               data-icon="fa-phone warn"
               class="bigger">
    </div>
  31. Super. Danke für den Hinweis. Zu erwähnen ist vielleicht noch, dass FB_CALLLIST auf FB_CALLMONITOR aufbaut und dieses Modul auch weiterhin benötigt wird. Muß ich bei Gelegenheit mal ausprobieren.

  32. Vielen Dank für deine tollen FHEM Vorlagen und Ideen. Großartig, bitte weiter so 🙂
    Grüße Tobi

  33. Danke! Ich habe schon einige Ideen für weitere Artikel, nur nicht genug Zeit 😉

  34. Hi,
    super Anleitung hast du geschrieben! Hat mir viel Arbeit abgenommen 🙂

    Kurze Frage: ist es mit einfachen Mitteln möglich, dass dieses „warn“ lediglich erscheint, wenn der Wert darin >0 ist? Mich persönlich stört es ein bisschen, wenn der rote Punkt erscheint, aber eine Null darin steht. Wesentlich besser würde es mir gefallen, wenn diese Darstellung nur dann kommt, wenn ich auch tatsächlich einen verpassten Anruf habe.

    Danke aber noch mal!
    Michael

  35. Damit das „warn“ nur bei Werten > 0 erscheint müsste man folgende Anpassung vornehmen:

    data-get-on='["0","[0-9]*"]'
    data-icons='["fa-phone","fa-phone warn"]'

    Außerdem habe ich wahrscheinlich noch einen kleinen „Bug“ in meiner Beschreibung, der auch schon in einem Kommentar erwähnt wurde. So werden wohl aktuell nicht nur die Anrufe in Abwesenheit gezählt, sondern alle Anrufe. Bin ich aber noch nicht dazu gekommen, dass zu ändern und auch in der Beschreibung anzupassen.

  36. Hallo Leute,

    ich hab mir die Reading mal genau angesehen und bisserl getestet.
    Wenn man die Funktion wie folgt abändert werden nur die unbeantworteten eingehenden Anrufe gezählt.
    Meine „Anrufliste“ in der ReadingsVal-Zeile ist das Modul FB_CALLLIST

    sub CheckAnrufe($)
    {
    my ($aktion) = @_;

    #bei ausgehenden Anrufen wird der Dummy hochgezählt
    if (ReadingsVal(„Anrufliste“, „1-state“, „-„) eq „=> X“)
    {
    fhem(„set duVerpassteAnrufe „.(Value(„duVerpassteAnrufe“)+1));
    }
    }

    Zurückstellen auf 0 im FTUI hab ich so gelöst:

    Anrufe

    Hoffe ich konnte Euch helfen.
    Gruß
    Sascha

  37. Danke für den Hinweis. Nehme ich dann vielleicht noch direkt in den Text mit auf.

  38. Hi,

    ich glaube hier fehlt noch ein * damit der Counter immer auf 0 gesetzt wird:

    define ResetVerpassteAnrufe at *23:00:00 set duVerpassteAnrufe 0

Leave a Reply

Your email address will not be published. Required fields are marked *

*

Why ask?

x

Check Also

Tibber Erfahrungen nach drei Monaten

Seit Mitte April nutzen wir die dynamischen Strompreise von Tibber*. Nach dem ersten vollen Monat ...