Fritzboxanruf Ansage auf Alexa

Hallo zusammen,
ich komme von ioBroker.
Nun läuft Home Assistant schon eine Weile.
ioBroker noch für ein paar Scripte.

Das möchte ich jetzt ändern und ioBroker abstellen.

Aber eine Sache bekomme ich nicht hin.

Wenn mich jemand auf meiner Fritzbox anruft soll auf meiner Alexa „Anruf von Name aus Fritzbox Telefonbuch „ gesagt werden.
Oder die Nummer, falls jemand anruft dessen Nummer ich nicht im Telefonbuch habe.
Oder eben „unbekannt.“

Als erstes habe ich mal das Script in ioBroker abgestellt.
Dann den Callmonitor in HA installiert.

Wenn ich dann über meine Handy Nummer anrufe, kommt aber kein Ton aus der Alexa.

Ich habe mir mal angeschaut, welcher Zustand im Entwicklermode angezeigt wird.
Da steht dann „ringing“.

Es wäre nett, wenn mir jemand helfen kann.
Hier der YAML Code

alias: Anruf auf Alexa ansagen
description: Gibt eingehende Anrufe auf der Alexa
triggers:
  - entity_id:
      - sensor.fritz_box_5590_fiber_call_monitor_telefonbuch
    trigger: state
conditions:
  - condition: template
    value_template: "{{ trigger.to_state.state != 'idle' }}"
actions:
  - target:
      entity_id: media_player.echo_show8_flur
    data:
      media_content_type: tts
      media_content_id: >-
        {% if states('sensor.fritz_box_7490_ui_call_monitor_telefonbuch') in
        ['unknown', 'unbekannt', ''] %}
          Anruf von einer anonymen Nummer
        {% elif states('sensor.fritz_box_7490_ui_call_monitor_telefonbuch') is
        number %}
          Anruf von {{ states('sensor.fritz_box_7490_ui_call_monitor_telefonbuch') }}
        {% else %}
          Anruf von {{ states('sensor.fritz_box_7490_ui_call_monitor_telefonbuch') }}
        {% endif %}
    action: media_player.play_media
mode: single

Vielen Dank

EDIT: Code bitte im Editor immer über die Codefunktion „</>“ einfügen. Habe korrekt formatiert.

Habe keine Alexa :grinning:
aber eine Mitteilung mit Name oder der Telefonnummer wenn Unbekannt
den Texthelfer brauchst Du ja nicht und Alexa bekommst du schon hin

also erst mal eine notify erstellen und dann weiter :v:

alias: "Anruf Mitteilung "
description: ""
mode: single
triggers:
  - entity_id:
      - sensor.fritz_box_7590_ui_anrufmonitor_telefonbuch
    to: ringing
    trigger: state
conditions: []
actions:
  - data:
      data:
        push:
          sound: Minuet.caf
      title: Fritz!Fon
      message: >-
        Anruf von {{
        state_attr("sensor.fritz_box_7590_ui_anrufmonitor_telefonbuch","from")}}
        ({{ state_attr("sensor.fritz_box_7590_ui_anrufmonitor_telefonbuch",
        "from_name")}})
    action: notify.mobile_app_ipadair
  - metadata: {}
    data:
      value: >-
        {{ state_attr("sensor.fritz_box_7590_ui_anrufmonitor_telefonbuch",
        "from")}}  ({{
        state_attr("sensor.fritz_box_7590_ui_anrufmonitor_telefonbuch",
        "from_name") }})
    target:
      entity_id: input_text.anrufliste
    action: input_text.set_value

Moin,
erstmal vielen Dank für die Hilfe.
:smiling_face:

Das ich den Code in eine Codefunktion setzen muss, wusste ich. Aber am Handy hab ich nicht gefunden, wie ich das auswählen kann. Entschuldigung.

In meinem Code ist mir ein Fehler passiert.
Da sind vom Telefonbuch 2 Fritzboxen drin.
Hab nämlich 2.
Richtig ist die sensor.fritz_box_5590_fiber_call_monitor_telefonbuch

Das mit der Notify ist ne tolle Idee um es direkt zu sehen.

Aber wenn ich mich da anrufe kommt kein Name aus dem Telefonbuch sondern nur die Nummer.

Und meine Geschäftsnummer steht im Fritzbox Adressbuch.
Unter ioBroker funktioniert es auch.

Ich habe auch schon im Netz nach einer Lösung gesucht.
Habe nur einen Verweiss auf eine Blueprint gefunden.
Aber die habe ich auch nicht zum laufen bekommen.

LG Frank

Da muss etwas in der FB erlaubt werden :wink:
Glaube es war ein Code vom FritzFon zur FB
ist schon so lange her bei mir
Das wurde auch übernommen von meiner alten FB zur neuen

Benutzer in FB habe ich das

Das ist am Handy etwas versteckt im :gear:

1 „Gefällt mir“

Die Callmonitor Funktion ist freigeschaltet.
Benutze es ja genauso mit iobroker und Alexa.
Will iobroker jetzt nur abdrehen und wollte die Funktion der Ansage gerne in HA haben :smiling_face:

Schau dir das Mail, du brauchst es dann nur noch an Alexa Durchreichen

Versuche es mal mit diesem Template: {{state_attr("sensor.fritz_box_7590_call_monitor_telefonbuch","with")}}
Und dann halt die Entität an deine anpassen :slight_smile:

Was ist jetzt genau noch das Problem? Nur noch, dass die Nummer aus dem Telefonbuch nicht angezeigt wird? Oder funktioniert es generell noch nicht?

Wenn es nur noch ums Telefonbuch geht, habe ich auf der GitHub Seite der Integration eine gute Anleitung gefunden:

I just got around to testing it with FritzOS 7.50. Everything is working fine for me, including the name matching.

Some things to check

  • Make sure the fritzbox user has at least the Voice messages, faxes, FRITZ!App Fon and call list permission to read the phone book.
  • The integration will add a log message after the phone book has been updated → Fritz!Box phone book successfully updated. That should happen at most every 6h.
  • Check that the number in the phone book matches the calling one. If you prefer country codes, make sure to set the prefixes appropriately. It should be a comma-separated list. E.g.
Calling number: 0123 456789
Number in phone book: 0123 456789

_OR_

Calling number: 0123 456789
Number in phone book: +01 123 456789
Prefixes: +01
  • For any automations / templates: Check that the sensor name is correct.

If that doesn’t help

Hallo ich habe es auch eingerichtet und funktioniert Super. Allerdings wie ist es wenn man mehrere Telefonnummer hat und das es auf eine Rufnummer reagiert soll. Geht das überhaubt?
Danke

Hallo zusammen,

sorry, dass ich erst jetzt antworte. Lag ne Weile flach.

Ich habe mich jetzt noch mit dem ganzen Thema beschäftigt.

Habe in Simons Forum einen Thread gefunden wo das gleiche Problem bestand.
Weiss nicht, ob ich den Link hier posten darf.

Auf jeden Fall, habe ich den YAML Code genommen und meine Daten angepasst.
Aber Alexa sagt keinen Ton.

Wenn ich mir bei einem Anruf die Zustände anzeigen lasse, weil Nummer und Name auch als Attribut angezeigt:

Weiter oben im Thread meinte @Dreckfresse ja, dass ich eine Benachrichtigung über die HA App anzeigen lassen soll.
Das habe ich jetzt in den Code unten eingebaut.
Und das Popup kommt auch. Mit Name und Nummer.

Nur der Teil mit Alexa bleibt stumm.

Hier der komplette YAML Code:

alias: Anruf TEST
description: ""
triggers:
  - trigger: state
    entity_id: sensor.fritz_box_5590_fiber_call_monitor_telefonbuch
conditions:
  - condition: template
    value_template: >-
      {{is_state("sensor.fritz_box_5590_fiber_call_monitor_telefonbuch",
      "ringing")}}
actions:
  - action: notify.alexa_media
    data:
      message: >-
        {% if state_attr("sensor.fritz_box_5590_fiber_call_monitor_telefonbuch",
        "from_name") == "unknown" %} Anruf von {{
        state_attr('sensor.fritz_box_5590_fiber_call_monitor_telefonbuch',
        'from') }} {% else %} Anruf von {{
        state_attr('sensor.fritz_box_5590_fiber_call_monitor_telefonbuch',
        'from_name') }} {% endif %}
      target:
        - media_player.echo_show8_flur
      data:
        type: announce
        method: speak
  - delay:
      hours: 0
      minutes: 0
      seconds: 5
      milliseconds: 0
  - action: notify.alexa_media
    data:
      message: >-
        {% if state_attr("sensor.fritz_box_5590_fiber_call_monitor_telefonbuch",
        "from_name") == "unknown" %} Anruf von {{
        state_attr('sensor.fritz_box_5590_fiber_call_monitor_telefonbuch',
        'from') }} {% else %} Anruf von {{
        state_attr('sensor.fritz_box_5590_fiber_call_monitor_telefonbuch',
        'from_name') }} {% endif %}
      target:
        - media_player.echo_show8_flur
      data:
        type: announce
        method: speak
  - data:
      data:
        push:
          sound: Minuet.caf
      title: Fritz!Fon
      message: >-
        Anruf von {{
        state_attr("sensor.fritz_box_5590_fiber_call_monitor_telefonbuch","from")}}
        ({{ state_attr("sensor.fritz_box_5590_fiber_call_monitor_telefonbuch",
        "from_name")}})
    action: notify.mobile_app_iphonepro_frank
  - metadata: {}
    data:
      value: >-
        {{ state_attr("sensor.fritz_box_5590_fiber_call_monitor_telefonbuch",
        "from")}}  ({{
        state_attr("sensor.fritz_box_5590_fiber_call_monitor_telefonbuch",
        "from_name") }})
    target:
      entity_id: input_text.anrufliste
    action: input_text.set_value
mode: single

Alexa Media funktioniert sonst auch prima.
Ich habe für meine Alarmanlage eine Automation, wenn diese scharfgestellt wird.
Da kommt auch eine saubere Ansage.

So sieht das da aus (verkürzte Fassung):

alias: Nur ein Beispiel
description: ""
triggers:
  - device_id: 47f029ec032c3a4eba4b1cea5a18ee37
    domain: alarm_control_panel
    entity_id: 109ed038b92ba545bc0c3c1a5de04752
    type: armed_away
    trigger: device
conditions: []
actions:
  - metadata: {}
    data:
      message: Hallo, die Anlage ist scharf.
    action: notify.alexa_media_echo_show8_flur
mode: single

Wenn ich mir bei einem Anruf in dem Trace Bereich ansehe was passiert sehe ich leider keinen Fehler.
So tief bin ich in Home Assistant noch nicht drin.

Wäre toll, wenn mir jemand helfen kann.

Vielen vielen Dank.

Mhh, dann scheint es wohl ein Problem mit dem Alexa Service Call zu geben?
Versuche es doch mal so, wie in deiner Alarmanlagen Automation:

  - metadata: {}
    data:
    message: >-
        {% if state_attr("sensor.fritz_box_5590_fiber_call_monitor_telefonbuch",
        "from_name") == "unknown" %} Anruf von {{
        state_attr('sensor.fritz_box_5590_fiber_call_monitor_telefonbuch',
        'from') }} {% else %} Anruf von {{
        state_attr('sensor.fritz_box_5590_fiber_call_monitor_telefonbuch',
        'from_name') }} {% endif %}
    action: notify.alexa_media_echo_show8_flur
mode: single

In etwa so vielleicht? (Einrückung müsstest du noch anpassen glaube ich) Ich kenne mich mit Alexa nicht so gut aus, ich denke aber da liegt irgendwo der Fehler. Sonst versuche vielleicht nochmal den Teil mit Alexa aus deiner Alarmanlagen Automation zu kopieren und dann schrittweise den message text aus der FritzBox Ansage zu kopieren…

VG

Danke für Deine Antwort.
Aber ich bekomme beide Fassungen (Alarmanlage) nicht kombiniert.
Laufend kommen Fehlermeldungen beim speichern.

Wenn du hier schaust, ist das genau mein Ursprungs Code. Nur ohne die Benachrichtigung über die HA App die ich nur eingebaut habe um zu sehen, ob Nummer und Name übergeben wird.
Simon42 Lösung
Und ich verstehe nicht warum. Dafür bin ich noch nicht tief genug drin.

Das ist wirklich seltsam…Ich würde dir mal raten, nur den unteren Code in deine Automation zu packen und sie wirklcih aufs Wesentliche zu reduzieren. Wenn dann die Ansage abgespielt wird, dass jemand anruft, wenn jemand anruft, sind wir schonmal einen großen Schritt weiter :slight_smile:

actions:
  - action: notify.alexa_media
    data:
      message: Jemand ruft an
      target:
        - media_player.echo_show8_flur
      data:
        type: announce
        method: speak

Ich weiss gerade nicht welche Teile ich nehmen soll.
Wie gesagt: So fit bin ich noch nicht.
Alles was ich mir oben zusammengesucht habe (und was funktionieren sollte), verstehe ich nicht wirklich. Habe bisher nur mit dem visuellen Editor gearbeitet.

Kein Problem! Ich schaue es mir später nochmal genauer an…

Guten Morgen,
ich denke mal, dass brauchst Du nicht mehr.
Ich habe bis heute Nacht um 1 Uhr mit ChatGPT ne Problem Analyse gemacht. Gott war das anstrengend.
Aber es scheint jetzt zu klappen.
Habs gleich mit 2 Alexas im Wechsel machen lassen.
Verstehe zwar immer noch nicht, warum die Ausgabe jetzt geht.
Denn der Ursprungs YAML Code scheint ja bei anderen zu klappen.

Am Ende habe ich noch mit Unbekannter Nummer angerufen. Auch das ging dann.
Als ich dann wieder mit einer bekannten Nummer anrief und die Ansage auf der ersten Alexa kam und dann auflegte, kam auf der zweiten Alexa „Anruf von Unbekannt“.
Aber ich denke, dass es jetzt geht. Bin echt froh.

Hier nun der Code. Werde es heute Abend nochmal im Detail testen und es dann als Lösung markieren.

alias: Anruf Benachrichtigung Alexa
description: ""
triggers:
  - entity_id: sensor.fritz_box_5590_fiber_call_monitor_telefonbuch
    to: ringing
    trigger: state
  - entity_id: sensor.fritz_box_5590_fiber_call_monitor_telefonbuch
    to: idle
    trigger: state
conditions: []
actions:
  - variables:
      caller_name: >
        {% set name =
        state_attr("sensor.fritz_box_5590_fiber_call_monitor_telefonbuch",
        "from_name") %} {% if name == "unknown" or name == None %}
          Anruf von Unbekannt
        {% elif name %}
          Anruf von {{ name | trim }}
        {% else %}
          Anruf von {{ state_attr("sensor.fritz_box_5590_fiber_call_monitor_telefonbuch", "from") }}
        {% endif %}
  - data:
      message: "{{ caller_name }}"
      target: media_player.echo_show8_flur
    action: notify.alexa_media
  - delay:
      seconds: 5
  - data:
      message: "{{ caller_name }}"
      target: media_player.echo_show8_bad
    action: notify.alexa_media
  - delay:
      seconds: 5
  - condition: state
    entity_id: sensor.fritz_box_5590_fiber_call_monitor_telefonbuch
    state: idle
  - data:
      message: "{{ caller_name }}"
      target: media_player.echo_show8_bad
    action: notify.alexa_media
mode: single

2 „Gefällt mir“

So. Jetzt habe ich es nochmal getestet.

Die Ansage kommt jetzt sauber auf beiden Alexas im Flur und im Bad.

Wenn mich jemand, der im Telefonbuch der Fritzbox steht, wird auch der
Name „Anruf von (Name)“ richtig gesprochen.
Ruft jemand mit unterdrückter Nummer an, kommt „Anruf von Unbekannt“.

Jetzt aber das aber …
Am Ende kommt nochmal auf dem Flur und auch im Bad „Anruf von Unbekannt“.
Auch wenn jemand mit aus dem Telefonbuch anruft.

Gerade eben rief mich jemand an. Die Ansage kam.
Als ich nach dem gespräch aufgelegt habe, kommt dann nochmal "Anruf von Unbekannt.
Auch wieder im Flur und im Bad.

Also irgendwie scheint die Schleife falsch zu sein.

Solange ich beim „Ringing“ nicht rangehe, sollen die Alexa im Flur und im Bad ja im Wechsel von 5 Sekunden die Ansage machen.
Bis ich rangehe oder derjenige vorher auflegt und kein ringing mehr als Status kommt.

(Nachtrag)
Ich habe jetzt nochmal ChatGPT befragt.

Das hier ist die funktionierende Fassung.
Das ganze ist jetzt noch erweitert, dass die Ansagen nur kommen, wenn jemand in der Home Zone ist.
Dazu merkt HA sich welche Lautstärke Alexa vor der Ansage hatte und setzt beide von der Lautstärke unterschiedlich.
Nach der Ansage wird die Ansage wieder zurückgestellt.

alias: "Anruf Benachrichtigung Alexa"
description: ""
triggers:
  - entity_id: sensor.fritz_box_5590_fiber_call_monitor_telefonbuch
    to: ringing
    trigger: state
conditions:
  - condition: or
    conditions:
      - condition: state
        entity_id: person.kai
        state: home
      - condition: state
        entity_id: person.ute
        state: home
actions:
  - variables:
      caller_name: >
        {% set name =
        state_attr("sensor.fritz_box_5590_fiber_call_monitor_telefonbuch",
        "from_name") %} {% if name == "unknown" or name == none %}
          Anruf von Unbekannt
        {% elif name %}
          Anruf von {{ name | trim }}
        {% else %}
          Anruf von {{ state_attr("sensor.fritz_box_5590_fiber_call_monitor_telefonbuch", "from") }}
        {% endif %}
  - data:
      entity_id: input_number.echo_show8_flur_volume
      value: "{{ state_attr('media_player.echo_show8_flur', 'volume_level') | float }}"
    action: input_number.set_value
  - data:
      entity_id: input_number.echo_show8_bad_volume
      value: "{{ state_attr('media_player.echo_show8_bad', 'volume_level') | float }}"
    action: input_number.set_value
  - repeat:
      while:
        - condition: state
          entity_id: sensor.fritz_box_5590_fiber_call_monitor_telefonbuch
          state: ringing
      sequence:
        - data:
            entity_id: media_player.echo_show8_flur
            volume_level: 0.8
          action: media_player.volume_set
        - data:
            message: "{{ caller_name }}"
            target: media_player.echo_show8_flur
          action: notify.alexa_media
        - delay:
            seconds: 5
        - data:
            entity_id: media_player.echo_show8_bad
            volume_level: 0.5
          action: media_player.volume_set
        - data:
            message: "{{ caller_name }}"
            target: media_player.echo_show8_bad
          action: notify.alexa_media
        - delay:
            seconds: 5
  - data:
      entity_id: media_player.echo_show8_flur
      volume_level: "{{ states('input_number.echo_show8_flur_volume') | float }}"
    action: media_player.volume_set
  - data:
      entity_id: media_player.echo_show8_bad
      volume_level: "{{ states('input_number.echo_show8_bad_volume') | float }}"
    action: media_player.volume_set
mode: single

Danke nochmal allen für die tolle Hilfe.

Ich habe deine tolle Arbeit mal für mich ausprobiert mit ein paar Änderungen.
So wird nur eine Person abgefragt ob sie Zuhause ist und es wird auch nicht ausgelesen welche Lautstärke die Alexa hat.
Vielmehr werden alle Alexas bei mir auf 0,6 und nach der Automation wieder auf 0,3 eingestellt.

Leider funktioniert es nicht. Alexa reagiert zwar, aber es erfolgt keine Ansage.
Wo mach ich den Fehler??

alias: Anruf Benachrichtigung Alexa
description: ""
triggers:
  - entity_id: sensor.fritz_box_7590_anrufmonitor_telefonbuch
    to: ringing
    trigger: state
conditions:
  - condition: state
    entity_id: person.marco_schmidtke
    state: home
actions:
  - variables:
      caller_name: >
        {% set name =
        state_attr("sensor.fritz_box_7590_anrufmonitor_telefonbuch",
        "from_name") %} {% if name == "unknown" or name == none %}
          Anruf von Unbekannt
        {% elif name %}
          Anruf von {{ name | trim }}
        {% else %}
          Anruf von {{ state_attr("sensor.fritz_box_7590_anrufmonitor_telefonbuch", "from") }}
        {% endif %}
  - repeat:
      while:
        - condition: state
          entity_id: sensor.fritz_box_7590_anrufmonitor_telefonbuch
          state: ringing
      sequence:
        - data:
            volume_level: 0.6
          action: media_player.volume_set
          target:
            entity_id: media_player.ganzem_haus
        - data:
            message: "{{ caller_name }}"
            target: media_player.ganzem_haus
          action: notify.alexa_media
        - delay:
            seconds: 5
  - action: media_player.volume_set
    metadata: {}
    data:
      volume_level: 0.3
    target:
      entity_id: media_player.ganzem_haus
mode: single

Die weiter oben genannte Version funktioniert. Allerdings mit dem Nachteil das die zweite Ansage immer mit „none“ erfolgt.

Die Ursache ist sehr wahrscheinlich das Problem mit der target:-Angabe bei notify.alexa_media. Bei Alexa-TTS (Text-to-Speech) über notify.alexa_media funktioniert der target:-Block nicht in Kombination mit data: so, wie man es vielleicht erwarten würde. Stattdessen muss target direkt im data:-Block als Liste oder String stehen.

Außerdem:
Die media_player.volume_set-Aktionen funktionieren mit target: ganz normal, aber nicht notify.alexa_media.

Hier das Script:

alias: Anruf Benachrichtigung Alexa
description: ""
trigger:
  - platform: state
    entity_id: sensor.fritz_box_7590_anrufmonitor_telefonbuch
    to: ringing
condition:
  - condition: state
    entity_id: person.marco_schmidtke
    state: home
action:
  - variables:
      caller_name: >
        {% set name = state_attr("sensor.fritz_box_7590_anrufmonitor_telefonbuch", "from_name") %}
        {% if name == "unknown" or name == none %}
          Anruf von Unbekannt
        {% elif name %}
          Anruf von {{ name | trim }}
        {% else %}
          Anruf von {{ state_attr("sensor.fritz_box_7590_anrufmonitor_telefonbuch", "from") }}
        {% endif %}
  - repeat:
      while:
        - condition: state
          entity_id: sensor.fritz_box_7590_anrufmonitor_telefonbuch
          state: ringing
      sequence:
        - service: media_player.volume_set
          target:
            entity_id: media_player.ganzem_haus
          data:
            volume_level: 0.6
        - service: notify.alexa_media
          data:
            message: "{{ caller_name }}"
            data:
              type: tts
            target: 
              - media_player.ganzem_haus
        - delay:
            seconds: 5
  - service: media_player.volume_set
    target:
      entity_id: media_player.ganzem_haus
    data:
      volume_level: 0.3
mode: single

Wichtige Hinweise:

  1. notify.alexa_media:
  • target muss innerhalb von data: stehen, nicht separat oder im target:-Block.
  • Die data:-Unterstruktur muss auch type: tts enthalten, sonst macht Alexa evtl. nichts.
  1. media_player.ganzem_haus muss ein Gerät oder eine Gruppe sein, die auch für TTS geeignet ist.
  • Falls das eine Gruppe ist, stelle sicher, dass sie korrekt definiert ist.
  • Sonst lieber direkt die einzelnen Geräte wie bei mir.