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.

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 vorausgesetzt, 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:

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

Der Punkt dialing kann für das Vorhaben des Erhalts einer Push-Nachricht 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 home-assistant-variables zurück

Variablen als Zwischenspeicher einrichten

Nachdem die neue Variablen-Component aus HACS installiert wurde, müssen folgende Einträge in der configuration.yaml erfolgen. Diese speichern die relevanten Informationen des Anrufers:

var:
  callmon_name:
    restore: true
    icon: mdi:phone-classic
    friendly_name: 'Anrufername'
    value_template: '{{ states.sensor.callmon.attributes.from_name }}'
  callmon_number:
    restore: true
    icon: mdi:card-account-phone
    friendly_name: 'Anrufernummer'
    value_template: '{{ states.sensor.callmon.attributes.from }}'
  callmon_time:
    restore: true
    icon: mdi:clock-time-three-outline
    friendly_name: 'Anrufzeit'
    value_template: '{{ now().strftime("%H:%M") }}'
  callmon_date:
    restore: true
    icon: mdi:calendar-today
    friendly_name: 'Anrufdatum'
    value_template: '{{ now().strftime("%d.%m.%Y") }}'

Automation, um Variblen zu füllen

Diese Automation aktualisiert die zuvor definierten value_templates der Variablen und speicher die relevanten Informationen über den Verpassten Anruf:

- alias: festnetz_set_caller_info_variable
  initial_state: True
  trigger:
    - entity_id: sensor.callmon
      platform: state
      to: 'ringing'
  action:
    - service: var.update
      data:
        entity_id:
          - var.callmon_name
          - var.callmon_number
          - var.callmon_time
          - var.callmon_date

Automation für Push-Benachrichtigung

Jetzt muss nur noch eine Automation erstellt werden, die schaut wann der Callmonitor von ringing auf idle wechselt, anschließend die Anruferinformationen aus den Variablen ausliest und diese 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.

- alias: Festnetzbenachrichtigung Hass App
  initial_state: True
  trigger:
    - entity_id: sensor.callmon
      platform: state
      from: ringing
      to: idle
  action:
    - service: notify.mobile_app_mizar      
      data:
        title: "Festnetzanruf 📞"
        message: >
          {{ states.var.callmon_name.state }} ({{ states.var.callmon_number.state }})
          hat am {{ states.var.callmon_date.state }} um {{ states.var.callmon_time.state }}h angerufen.

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