Homeassistant, FritzBox und Anrufbenachrichtigung per Push-Nachricht

Homeassistant, FritzBox und Anrufbenachrichtigung per Push-Nachricht

FritzBox-Router aus dem Hause AVM sind speziell in Deutschland sehr beliebt und aus Erfahrung eine gute Wahl. Neben zahlreichen Funktionen wie einem NAS, Netzwerkstreaming, Anrufbeantworter, etc. stellt eine wichtige Kernfunktion die Telefonie dar. Diese Anrufinformationen können mit der offiziellen FritzBox Callmonitor Integration in Homeassistant integriert und entsprechend automatisiert werden. Somit ist Homeassistant fähig zu erkennen, ob sich das Telefon gerade im Leerlauf, im Telefonat oder im Zustand des Klingelns oder wählens befindet.

Benachrichtigung über Anrufe

Im Folgenden möchte ich erläutern, wie man sich automatisch eine Push-Nachricht mit einem beliebigen Notify-Service senden lassen kann, wenn die Fritzbox einen Anruf empfangen hat, der jedoch nicht entgegen genommen wurde, bspw. wenn man außer Haus ist. Hierzu wird vorrausgesetzt, dass die Fritzbox bereits erfolgreich in Homeassistant integriert wurde.

Theorie zum Callmonitor

Nach der Integration der Fritzbox steht eine Sensor zur Verfügung, der die folgenden states ausgibt:

  1. idle: Die Fritzbox befindet sich im Leerlauf. Es wird nicht telefoniert, gewählt oder ein Telefonat geführt.
  2. ringing: Die Fritzbox klingelt. Ein Anrufer wartet auf die Abnahme des Hörers.
  3. talking: Ein aktives Telefonat wird geführt.
  4. dialing: Ein Telefonat wird aufgebaut und die ausgehende Nummer gewählt.

Punkt 4. kann für das Vorhaben des Erhalts einer Pushnachricht vernachlässigt werden, da dies nicht der Fall ist, wenn man sich außer Haus befindet.

Wer denkt, dass nun der einfachste Weg wäre eine Automation zu schreiben, die den State des Callmonitors überwacht und einfach die Daten des Anrufers (Name, Nummer, Uhrzeit, Datum) per Push-Nachricht sendet, ist leider auf dem Holzweg. Diese Daten stehen nämlich nur zur Verfügung, wenn der Callmonitor den State ringing hat, nicht aber bei idle.
Es muss also ein Zwischenschritt erfolgen, der die Anruferdaten zwischenspeichert und wieder zur Verfügung stellt, wenn der State des Callmonitors von ringing auf idle wechselt. Hierfür greife ich auf die Custom Component mit dem Namen Hass Variables zurück, die über HACS installiert werden kann und unter anderem schon einmal in dem Post über die Integration der Xiaomi Waage zum Einsatz kam.

Variable als Zwischenspeicher der Anruferinformation

Nach der Installation von Hass Variables muss im ersten Schritt in der configuration.yaml ein Eintrag für eine Variable erfolgen. Diese wird beispielhaft caller_information genant, bekommt ein passendes Icon und einen Namen:

variable:
  caller_information:
    value: 'Unknown'
    restore: true
    attributes:
      icon: mdi:phone-in-talk
      name: Anruferinformation

Nachdem dieser Eintrag erfolgt ist, muss Homeassistant neugestartet werden.

Automation um Anruferdetails in die Variable zu schreiben

Nachdem dem Neustart, kann mittels einer Automation die Daten eines Anrufers in die Variable geschrieben werden. Ich habe meinem Callmon-Sensor den Namen sensor.callmon gegeben:

- id: festnetz_set_caller_info_variable
  initial_state: True
  #alias: Festnetztelefon Anrunferinfo
  trigger:
    - entity_id: sensor.callmon
      platform: state
      to: 'ringing'
  action:
    - service: variable.set_variable
      data:
        variable: caller_information
        attributes_template: >
          {
            "nummer": "{{ states.sensor.callmon.attributes.from }}",
            "anrufzeit": "{{ now().strftime("%H:%M") }}",
            "datum": "{{ now().strftime("%d.%m.%Y") }}"
          }
      data_template:
        value: "{{ states.sensor.callmon.attributes.from_name }}"

Diese Automation erzeugt eine Variable, die als State den Namen des Anrufers enthält – sofern er im Telefonbuch eingetragen ist – und die darüber hinaus noch 3 Attribute mit sich führt: Nummer des Anrufers, Anrufzeit und das Datum des Anrufs.

Automation für Benachrichtigung

Jetzt muss nur noch eine Automation erstellt werden, die schaut wann der Callmonitor von ringing auf idle wechselt, anschließend die Anruferinformationen aus der Variable variable.caller_information ausliest und diese Daten per Push-Nachricht sendet. Als Beispiel nehme ich mein Smartphone auf dem die offizielle Homeassitant Android App läuft und die über die Mobile Integration eingebunden ist. Es kann jedoch jeder beliebige Notification Service, wie beispielweise Slack, Jabber oder Matrix verwendet werden.

- id: festnetz_status_mobileapp
  initial_state: True
  alias: Festnetzbenachrichtigung Hass App
  trigger:
    - entity_id: sensor.callmon
      platform: state
      from: ringing
      to: idle
  action:
    - data:
        title: "Festnetzanruf"
        message: >
          {{ states.variable.caller_information.state }} ({{ states.variable.caller_information.attributes.nummer}})
          hat am {{ states.variable.caller_information.attributes.datum }} um {{ states.variable.caller_information.attributes.anrufzeit }}h angerufen.
      service: notify.mobile_app_op7t

Diese Automation sendet eine Nachricht mit dem Schema:
Horst (0174-123456) hat am 23.05.2020 um 23:42h angerufen.

Kleiner zusätzlicher Tipp zur Fritzbox und Homeassistant

Wer noch mehr aus seiner Fritzbox im Zusammenspiel mit Homeassistant herausholen möchte, sollte unbedingt einen Blick auf eine weitere Custom Component richten, die den Namen ha-fritzbox-tools trägt. Mit dieser Integration können viele Funktionen von der Schaltung des Gäste WLan bis hin zu Port Forwarding gesteuert und automatisiert werden.