Fritzbox Call Home Feed Karte

Hallo, für alle, die die Home-Feed-Karte genutzt haben: Ich habe eine alternative Lösung entwickelt, da die Home-Feed-Karte ab Home Assistant 2026 nicht mehr funktioniert.

Dafür nutze ich die bereits in Home Assistant integrierte Markdown-Karte. Für die Anzeige der letzten fünf Anrufe – angenommene und verpasste – habe ich fünf Helper eingerichtet.

Zusätzlich habe ich eine Ampelfunktion integriert sowie Filter eingebaut, damit die Ansicht übersichtlich bleibt.

Hier ist mein Code

Markdown Karte:

{%- set raw = \[
states(‚input_text.google‘),
states(‚input_text.google1‘),
states(‚input_text.google2‘),
states(‚input_text.google3‘),
states(‚input_text.google4‘)
\] | reject(‚in‘, \[“, ‚unknown‘, ‚unavailable‘, ’none‘, ‚None‘\])
| join(‚\\n‘)
| replace(‚\\r\\n‘, ‚\\n‘)
| replace(‚\\r‘, ‚\\n‘)
-%}

{%- set lines = raw.splitlines() | map(‚trim‘) | reject(‚equalto‘, “) | list -%}
{%- set gesehen = namespace(namen=\[\], unterdrueckt=0) -%}
{%- set ausgabe = namespace(zeilen=\[\]) -%}

{%- for line in lines -%}
{%- set lower_line = line | lower -%}
{%- set datum_roh = line.split(‚ – ‚)\[0\] | trim -%}

{%- if ‚-‚ in datum_roh and ‚ ‚ in datum_roh -%}
{%- set teile = datum_roh.split(‚ ‚) -%}
{%- set datum_teile = teile\[0\].split(‚-‚) -%}
{%- set zeit_teile = teile\[1\].split(‚:‘) -%}
{%- set datum = datum_teile\[2\] \~ ‚.‘ \~ datum_teile\[1\] \~ ‚ ‚ \~ zeit_teile\[0\] \~ ‚:‘ \~ zeit_teile\[1\] -%}

{%- elif ‚.‘ in datum_roh and ‚ ‚ in datum_roh -%}
{%- set teile = datum_roh.split(‚ ‚) -%}
{%- set datum_teile = teile\[0\].split(‚.‘) -%}
{%- set zeit_teile = teile\[1\].split(‚:‘) -%}
{%- set datum = datum_teile\[0\] \~ ‚.‘ \~ datum_teile\[1\] \~ ‚ ‚ \~ zeit_teile\[0\] \~ ‚:‘ \~ zeit_teile\[1\] -%}

{%- else -%}
{%- set datum = datum_roh -%}
{%- endif -%}

{%- if ‚ – ‚ in line -%}
{%- set inhalt = line.split(‚ – ‚, 1)\[1\] | trim -%}
{%- else -%}
{%- set inhalt = line | trim -%}
{%- endif -%}

{%- if ‚(‚ in inhalt and ‚)‘ in inhalt -%}
{%- set klammer = inhalt.split(‚(‚, 1)\[1\].split(‚)‘, 1)\[0\] | trim -%}

{%- if ’nicht im telefonbuch‘ in (klammer | lower) -%}
{%- set name = inhalt.split(‚(‚, 1)\[0\] | trim -%}
{%- else -%}
{%- set name = klammer -%}
{%- endif -%}
{%- else -%}
{%- set name = inhalt -%}
{%- endif -%}

{%- set name = name
| replace(‚Verpasster Anruf von ‚, “)
| replace(‚Verpasster Anruf ‚, “)
| replace(‚Angenommener Anruf von ‚, “)
| replace(‚Angenommener Anruf ‚, “)
| replace(‚Gespräch mit ‚, “)
| replace(‚+49 ‚, ‚0‘)
| replace(‚+49‘, ‚0‘)
| trim
-%}

{%- if name not in \[“, ‚unknown‘, ‚unavailable‘, ’none‘, ‚None‘\] -%}

{%- if ‚unterdrückte nummer‘ in lower_line or ‚unbekannt‘ in lower_line or ‚privat‘ in lower_line -%}
{%- set gesehen.unterdrueckt = gesehen.unterdrueckt + 1 -%}
{%- set name = ‚unterdrückte Nummer‘ -%}
{%- set name_key = ‚unterdrueckte_nummer\_‘ \~ gesehen.unterdrueckt -%}
{%- else -%}
{%- set name_key = name | lower -%}
{%- endif -%}

{%- if name_key not in gesehen.namen and gesehen.namen | length < 5 -%}
{%- set gesehen.namen = gesehen.namen + \[name_key\] -%}

{%- if 'gespräch mit' in lower_line or 'angenommener anruf' in lower_line -%}
{%- set ampel = '🟢' -%}
{%- elif 'verpasster anruf' in lower_line -%}
{%- set ampel = '🔴' -%}
{%- else -%}
{%- set ampel = '🟢' -%}
{%- endif -%}

{%- set ausgabe.zeilen = ausgabe.zeilen + \[ampel \~ ' ' \~ datum \~ ' ' \~ name\] -%}
{%- endif -%}
{%- endif -%}
{%- endfor -%}

{{ ausgabe.zeilen | join('‘) }}

Automatition:
alias: Telefonbuch mit Benachrichtigung test
description: „“
triggers:
– trigger: state
entity_id: sensor.fritz_box_7590_anrufmonitor_google_2
to: ringing
id: eingehend
– trigger: state
entity_id: sensor.fritz_box_7590_anrufmonitor_google_2
to: talking
id: ausgehend
conditions: \[\]
actions:
– choose:
– conditions:
– condition: trigger
id: eingehend
sequence:
– variables:
nummer: „{{ trigger.to_state.attributes.get(‚from‘, “) }}“
name: „{{ trigger.to_state.attributes.get(‚from_name‘, “) }}“
– wait_for_trigger:
– trigger: state
entity_id: sensor.fritz_box_7590_anrufmonitor_google_2
to: talking
id: angenommen
– trigger: state
entity_id: sensor.fritz_box_7590_anrufmonitor_google_2
to: idle
id: beendet
timeout: „02:00:00“
continue_on_timeout: false
– choose:
– conditions:
– condition: template
value_template: „{{ wait.trigger.id == ‚beendet‘ }}“
sequence:
– variables:
kontakt: >-
{% set nr = nummer | string | trim %} {% set kontaktname
= name | string | trim %} {% set ungueltig = \[“,
‚unknown‘, ‚unbekannt‘, ’none‘, ’null‘\] %} {% if
kontaktname | lower not in ungueltig %}
{{ nr }} ({{ kontaktname }})
{% elif nr | lower not in ungueltig %}
{{ nr }} (nicht im Telefonbuch)
{% else %}
unterdrückte Nummer
{% endif %}
neuer_eintrag: >-
{{ now().strftime(‚%d.%m.%Y %H:%M:%S‘) }} – Verpasster
Anruf von {{ kontakt | trim }}
– action: input_text.set_value
target:
entity_id: input_text.google4
data:
value: „{{ states(‚input_text.google3‘) }}“
– action: input_text.set_value
target:
entity_id: input_text.google3
data:
value: „{{ states(‚input_text.google2‘) }}“
– action: input_text.set_value
target:
entity_id: input_text.google2
data:
value: „{{ states(‚input_text.google1‘) }}“
– action: input_text.set_value
target:
entity_id: input_text.google1
data:
value: „{{ states(‚input_text.google‘) }}“
– action: input_text.set_value
target:
entity_id: input_text.google
data:
value: „{{ neuer_eintrag | trim }}“
– parallel:
– action: notify.mobile_app_bm_sindy
data:
message: „{{ neuer_eintrag | trim }}“
– action: notify.mobile_app_mitarbeiter01
data:
message: „{{ neuer_eintrag | trim }}“
– action: notify.mobile_app_mitarbeiter02
data:
message: „{{ neuer_eintrag | trim }}“
– action: notify.mobile_app_mitarbeiter03
data:
message: „{{ neuer_eintrag | trim }}“
– action: notify.mobile_app_mitarbeiter04
data:
message: „{{ neuer_eintrag | trim }}“
– action: notify.mobile_app_bm_tablet
data:
message: „{{ neuer_eintrag | trim }}“
– conditions:
– condition: template
value_template: „{{ wait.trigger.id == ‚angenommen‘ }}“
sequence:
– variables:
kontakt: >-
{% set nr = nummer | string | trim %} {% set kontaktname
= name | string | trim %} {% set ungueltig = \[“,
‚unknown‘, ‚unbekannt‘, ’none‘, ’null‘\] %} {% if
kontaktname | lower not in ungueltig %}
{{ nr }} ({{ kontaktname }})
{% elif nr | lower not in ungueltig %}
{{ nr }} (nicht im Telefonbuch)
{% else %}
unterdrückte Nummer
{% endif %}
neuer_eintrag: >-
{{ now().strftime(‚%d.%m.%Y %H:%M:%S‘) }} – Angenommener
Anruf von {{ kontakt | trim }}
– action: input_text.set_value
target:
entity_id: input_text.google4
data:
value: „{{ states(‚input_text.google3‘) }}“
– action: input_text.set_value
target:
entity_id: input_text.google3
data:
value: „{{ states(‚input_text.google2‘) }}“
– action: input_text.set_value
target:
entity_id: input_text.google2
data:
value: „{{ states(‚input_text.google1‘) }}“
– action: input_text.set_value
target:
entity_id: input_text.google1
data:
value: „{{ states(‚input_text.google‘) }}“
– action: input_text.set_value
target:
entity_id: input_text.google
data:
value: „{{ neuer_eintrag | trim }}“
– parallel:
– action: notify.mobile_app_bm_sindy
data:
message: „{{ neuer_eintrag | trim }}“
– action: notify.mobile_app_mitarbeiter01
data:
message: „{{ neuer_eintrag | trim }}“
– action: notify.mobile_app_mitarbeiter02
data:
message: „{{ neuer_eintrag | trim }}“
– action: notify.mobile_app_mitarbeiter03
data:
message: „{{ neuer_eintrag | trim }}“
– action: notify.mobile_app_mitarbeiter04
data:
message: „{{ neuer_eintrag | trim }}“
– action: notify.mobile_app_bm_tablet
data:
message: „{{ neuer_eintrag | trim }}“
– conditions:
– condition: trigger
id: ausgehend
– condition: template
value_template: |-
{{ trigger.from_state is not none and
trigger.from_state.state not in \[‚ringing‘\] }}
sequence:
– variables:
nummer: „{{ trigger.to_state.attributes.get(‚with‘, “) }}“
name: „{{ trigger.to_state.attributes.get(‚with_name‘, “) }}“
kontakt: >-
{% set nr = nummer | string | trim %} {% set kontaktname = name
| string | trim %} {% set ungueltig = \[“, ‚unknown‘,
‚unbekannt‘, ’none‘, ’null‘\] %} {% if kontaktname | lower not in
ungueltig %}
{{ nr }} ({{ kontaktname }})
{% elif nr | lower not in ungueltig %}
{{ nr }} (nicht im Telefonbuch)
{% else %}
unterdrückte Nummer
{% endif %}
neuer_eintrag: >-
{{ now().strftime(‚%d.%m.%Y %H:%M:%S‘) }} – Gespräch mit {{
kontakt | trim }}
– action: input_text.set_value
target:
entity_id: input_text.google4
data:
value: „{{ states(‚input_text.google3‘) }}“
– action: input_text.set_value
target:
entity_id: input_text.google3
data:
value: „{{ states(‚input_text.google2‘) }}“
– action: input_text.set_value
target:
entity_id: input_text.google2
data:
value: „{{ states(‚input_text.google1‘) }}“
– action: input_text.set_value
target:
entity_id: input_text.google1
data:
value: „{{ states(‚input_text.google‘) }}“
– action: input_text.set_value
target:
entity_id: input_text.google
data:
value: „{{ neuer_eintrag | trim }}“
– parallel:
– action: notify.mobile_app_bm_sindy
data:
message: „{{ neuer_eintrag | trim }}“
– action: notify.mobile_app_mitarbeiter01
data:
message: „{{ neuer_eintrag | trim }}“
– action: notify.mobile_app_mitarbeiter02
data:
message: „{{ neuer_eintrag | trim }}“
– action: notify.mobile_app_mitarbeiter03
data:
message: „{{ neuer_eintrag | trim }}“
– action: notify.mobile_app_mitarbeiter04
data:
message: „{{ neuer_eintrag | trim }}“
– action: notify.mobile_app_bm_tablet
data:
message: „{{ neuer_eintrag | trim }}“
mode: parallel
max: 20

:crayon:by HarryP: Code-/Logzeilen formatiert (bitte immer in </> einbinden)
s.a.: (Neues Update & Features - Hier in der Community 🫶)

2 „Gefällt mir“

Hi.

Welche Helfer hast du dir eingerichtet und wie sehen die aus?

Ich steh jetzt gewaltig auf dem Schlauch. Hab auch heute erst herausgefunden das die Telefonbuchanzeige der Grund fürs defekte Dashboard war.

Wenn ich deinen Code in die Markdown-Karte einfüge, dann bekomme ich folgenden Fehler:

TemplateSyntaxError: unexpected char ‘\\’ at 14

Liegt das evtl an den fehlenden Helfern?

Hast du alles in die Markdown kopiert? Das sind eigentlich 2 Codes.

  1. Markdown
  2. Automation

@GF-Admin hat es leider nicht richtig formatiert/eingefügt. Dadurch ist der ganze Code irgendwie Mist, denn viele \ sind überflüssig

1 „Gefällt mir“

Markdownkarte:

Automatition:

Automatition:
alias: Telefonbuch mit Benachrichtigung test
description: „“
triggers:
– trigger: state
entity_id: sensor.fritz_box_7590_anrufmonitor_google_2
to: ringing
id: eingehend
– trigger: state
entity_id: sensor.fritz_box_7590_anrufmonitor_google_2
to: talking
id: ausgehend
conditions: \[\]
actions:
– choose:
– conditions:
– condition: trigger
id: eingehend
sequence:
– variables:
nummer: „{{ trigger.to_state.attributes.get(‚from‘, “) }}“
name: „{{ trigger.to_state.attributes.get(‚from_name‘, “) }}“
– wait_for_trigger:
– trigger: state
entity_id: sensor.fritz_box_7590_anrufmonitor_google_2
to: talking
id: angenommen
– trigger: state
entity_id: sensor.fritz_box_7590_anrufmonitor_google_2
to: idle
id: beendet
timeout: „02:00:00“
continue_on_timeout: false
– choose:
– conditions:
– condition: template
value_template: „{{ wait.trigger.id == ‚beendet‘ }}“
sequence:
– variables:
kontakt: >-
{% set nr = nummer | string | trim %} {% set kontaktname
= name | string | trim %} {% set ungueltig = \[“,
‚unknown‘, ‚unbekannt‘, ’none‘, ’null‘\] %} {% if
kontaktname | lower not in ungueltig %}
{{ nr }} ({{ kontaktname }})
{% elif nr | lower not in ungueltig %}
{{ nr }} (nicht im Telefonbuch)
{% else %}
unterdrückte Nummer
{% endif %}
neuer_eintrag: >-
{{ now().strftime(‚%d.%m.%Y %H:%M:%S‘) }} – Verpasster
Anruf von {{ kontakt | trim }}
– action: input_text.set_value
target:
entity_id: input_text.google4
data:
value: „{{ states(‚input_text.google3‘) }}“
– action: input_text.set_value
target:
entity_id: input_text.google3
data:
value: „{{ states(‚input_text.google2‘) }}“
– action: input_text.set_value
target:
entity_id: input_text.google2
data:
value: „{{ states(‚input_text.google1‘) }}“
– action: input_text.set_value
target:
entity_id: input_text.google1
data:
value: „{{ states(‚input_text.google‘) }}“
– action: input_text.set_value
target:
entity_id: input_text.google
data:
value: „{{ neuer_eintrag | trim }}“
– parallel:
– action: notify.mobile_app_bm_sindy
data:
message: „{{ neuer_eintrag | trim }}“
– action: notify.mobile_app_mitarbeiter01
data:
message: „{{ neuer_eintrag | trim }}“
– action: notify.mobile_app_mitarbeiter02
data:
message: „{{ neuer_eintrag | trim }}“
– action: notify.mobile_app_mitarbeiter03
data:
message: „{{ neuer_eintrag | trim }}“
– action: notify.mobile_app_mitarbeiter04
data:
message: „{{ neuer_eintrag | trim }}“
– action: notify.mobile_app_bm_tablet
data:
message: „{{ neuer_eintrag | trim }}“
– conditions:
– condition: template
value_template: „{{ wait.trigger.id == ‚angenommen‘ }}“
sequence:
– variables:
kontakt: >-
{% set nr = nummer | string | trim %} {% set kontaktname
= name | string | trim %} {% set ungueltig = \[“,
‚unknown‘, ‚unbekannt‘, ’none‘, ’null‘\] %} {% if
kontaktname | lower not in ungueltig %}
{{ nr }} ({{ kontaktname }})
{% elif nr | lower not in ungueltig %}
{{ nr }} (nicht im Telefonbuch)
{% else %}
unterdrückte Nummer
{% endif %}
neuer_eintrag: >-
{{ now().strftime(‚%d.%m.%Y %H:%M:%S‘) }} – Angenommener
Anruf von {{ kontakt | trim }}
– action: input_text.set_value
target:
entity_id: input_text.google4
data:
value: „{{ states(‚input_text.google3‘) }}“
– action: input_text.set_value
target:
entity_id: input_text.google3
data:
value: „{{ states(‚input_text.google2‘) }}“
– action: input_text.set_value
target:
entity_id: input_text.google2
data:
value: „{{ states(‚input_text.google1‘) }}“
– action: input_text.set_value
target:
entity_id: input_text.google1
data:
value: „{{ states(‚input_text.google‘) }}“
– action: input_text.set_value
target:
entity_id: input_text.google
data:
value: „{{ neuer_eintrag | trim }}“
– parallel:
– action: notify.mobile_app_bm_sindy
data:
message: „{{ neuer_eintrag | trim }}“
– action: notify.mobile_app_mitarbeiter01
data:
message: „{{ neuer_eintrag | trim }}“
– action: notify.mobile_app_mitarbeiter02
data:
message: „{{ neuer_eintrag | trim }}“
– action: notify.mobile_app_mitarbeiter03
data:
message: „{{ neuer_eintrag | trim }}“
– action: notify.mobile_app_mitarbeiter04
data:
message: „{{ neuer_eintrag | trim }}“
– action: notify.mobile_app_bm_tablet
data:
message: „{{ neuer_eintrag | trim }}“
– conditions:
– condition: trigger
id: ausgehend
– condition: template
value_template: |-
{{ trigger.from_state is not none and
trigger.from_state.state not in \[‚ringing‘\] }}
sequence:
– variables:
nummer: „{{ trigger.to_state.attributes.get(‚with‘, “) }}“
name: „{{ trigger.to_state.attributes.get(‚with_name‘, “) }}“
kontakt: >-
{% set nr = nummer | string | trim %} {% set kontaktname = name
| string | trim %} {% set ungueltig = \[“, ‚unknown‘,
‚unbekannt‘, ’none‘, ’null‘\] %} {% if kontaktname | lower not in
ungueltig %}
{{ nr }} ({{ kontaktname }})
{% elif nr | lower not in ungueltig %}
{{ nr }} (nicht im Telefonbuch)
{% else %}
unterdrückte Nummer
{% endif %}
neuer_eintrag: >-
{{ now().strftime(‚%d.%m.%Y %H:%M:%S‘) }} – Gespräch mit {{
kontakt | trim }}
– action: input_text.set_value
target:
entity_id: input_text.google4
data:
value: „{{ states(‚input_text.google3‘) }}“
– action: input_text.set_value
target:
entity_id: input_text.google3
data:
value: „{{ states(‚input_text.google2‘) }}“
– action: input_text.set_value
target:
entity_id: input_text.google2
data:
value: „{{ states(‚input_text.google1‘) }}“
– action: input_text.set_value
target:
entity_id: input_text.google1
data:
value: „{{ states(‚input_text.google‘) }}“
– action: input_text.set_value
target:
entity_id: input_text.google
data:
value: „{{ neuer_eintrag | trim }}“
– parallel:
– action: notify.mobile_app_bm_sindy
data:
message: „{{ neuer_eintrag | trim }}“
– action: notify.mobile_app_mitarbeiter01
data:
message: „{{ neuer_eintrag | trim }}“
– action: notify.mobile_app_mitarbeiter02
data:
message: „{{ neuer_eintrag | trim }}“
– action: notify.mobile_app_mitarbeiter03
data:
message: „{{ neuer_eintrag | trim }}“
– action: notify.mobile_app_mitarbeiter04
data:
message: „{{ neuer_eintrag | trim }}“
– action: notify.mobile_app_bm_tablet
data:
message: „{{ neuer_eintrag | trim }}“
mode: parallel
max: 20

Input Helper:

Und bei der Automation muss das noch angepasst werden für die App Benachrichtigung:

– action: notify.mobile_app_bm_sindy
data:
message: „{{ neuer_eintrag | trim }}“
– action: notify.mobile_app_mitarbeiter01
data:
message: „{{ neuer_eintrag | trim }}“
– action: notify.mobile_app_mitarbeiter02
data:
message: „{{ neuer_eintrag | trim }}“
– action: notify.mobile_app_mitarbeiter03
data:
message: „{{ neuer_eintrag | trim }}“
– action: notify.mobile_app_mitarbeiter04
data:
message: „{{ neuer_eintrag | trim }}“
– action: notify.mobile_app_bm_tablet
1 „Gefällt mir“

@GF-Admin
warum schreibst du z. B.
conditions: \[\]
???

Und auch die und sind falsch.

So wäre es vermutlich besser, damit man es kopieren kann

type: markdown
content: |
  {%- set raw = [
    states('input_text.google'),
    states('input_text.google1'),
    states('input_text.google2'),
    states('input_text.google3'),
    states('input_text.google4')
  ]
    | reject('in', ['', 'unknown', 'unavailable', 'none', 'None'])
    | join('\n')
    | replace('\r\n', '\n')
    | replace('\r', '\n')
  -%}

  {%- set lines = raw.splitlines()
    | map('trim')
    | reject('equalto', '')
    | list
  -%}

  {%- set gesehen = namespace(
    namen=[],
    unterdrueckt=0
  ) -%}

  {%- set ausgabe = namespace(
    zeilen=[]
  ) -%}

  {%- for line in lines -%}
    {%- set lower_line = line | lower -%}
    {%- set datum_roh = line.split(' – ')[0] | trim -%}

    {%- if '-' in datum_roh and ' ' in datum_roh -%}
      {%- set teile = datum_roh.split(' ') -%}
      {%- set datum_teile = teile[0].split('-') -%}
      {%- set zeit_teile = teile[1].split(':') -%}

      {%- set datum =
        datum_teile[2]
        ~ '.'
        ~ datum_teile[1]
        ~ ' '
        ~ zeit_teile[0]
        ~ ':'
        ~ zeit_teile[1]
      -%}

    {%- elif '.' in datum_roh and ' ' in datum_roh -%}
      {%- set teile = datum_roh.split(' ') -%}
      {%- set datum_teile = teile[0].split('.') -%}
      {%- set zeit_teile = teile[1].split(':') -%}

      {%- set datum =
        datum_teile[0]
        ~ '.'
        ~ datum_teile[1]
        ~ ' '
        ~ zeit_teile[0]
        ~ ':'
        ~ zeit_teile[1]
      -%}

    {%- else -%}
      {%- set datum = datum_roh -%}
    {%- endif -%}

    {%- if ' – ' in line -%}
      {%- set inhalt = line.split(' – ', 1)[1] | trim -%}
    {%- else -%}
      {%- set inhalt = line | trim -%}
    {%- endif -%}

    {%- if '(' in inhalt and ')' in inhalt -%}
      {%- set klammer =
        inhalt.split('(', 1)[1].split(')', 1)[0] | trim
      -%}

      {%- if 'nicht im telefonbuch' in (klammer | lower) -%}
        {%- set name = inhalt.split('(', 1)[0] | trim -%}
      {%- else -%}
        {%- set name = klammer -%}
      {%- endif -%}

    {%- else -%}
      {%- set name = inhalt -%}
    {%- endif -%}

    {%- set name = name
      | replace('Verpasster Anruf von ', '')
      | replace('Verpasster Anruf ', '')
      | replace('Angenommener Anruf von ', '')
      | replace('Angenommener Anruf ', '')
      | replace('Gespräch mit ', '')
      | replace('+49 ', '0')
      | replace('+49', '0')
      | trim
    -%}

    {%- if name not in ['', 'unknown', 'unavailable', 'none', 'None'] -%}

      {%- if
        'unterdrückte nummer' in lower_line
        or 'unbekannt' in lower_line
        or 'privat' in lower_line
      -%}
        {%- set gesehen.unterdrueckt = gesehen.unterdrueckt + 1 -%}
        {%- set name = 'unterdrückte Nummer' -%}
        {%- set name_key =
          'unterdrueckte_nummer_' ~ gesehen.unterdrueckt
        -%}
      {%- else -%}
        {%- set name_key = name | lower -%}
      {%- endif -%}

      {%- if
        name_key not in gesehen.namen
        and gesehen.namen | length < 5
      -%}
        {%- set gesehen.namen = gesehen.namen + [name_key] -%}

        {%- if
          'gespräch mit' in lower_line
          or 'angenommener anruf' in lower_line
        -%}
          {%- set ampel = '🟢' -%}
        {%- elif 'verpasster anruf' in lower_line -%}
          {%- set ampel = '🔴' -%}
        {%- else -%}
          {%- set ampel = '🟢' -%}
        {%- endif -%}

        {%- set ausgabe.zeilen = ausgabe.zeilen + [
          ampel ~ ' ' ~ datum ~ ' ' ~ name
        ] -%}
      {%- endif -%}
    {%- endif -%}
  {%- endfor -%}

  {{ ausgabe.zeilen | join('\n') }}
alias: Telefonbuch mit Benachrichtigung test
description: ""

triggers:
  - trigger: state
    entity_id: sensor.fritz_box_7590_anrufmonitor_google_2
    to: "ringing"
    id: eingehend

  - trigger: state
    entity_id: sensor.fritz_box_7590_anrufmonitor_google_2
    to: "talking"
    id: ausgehend

conditions: []

actions:
  - choose:
      # Eingehender Anruf
      - conditions:
          - condition: trigger
            id: eingehend

        sequence:
          - variables:
              nummer: "{{ trigger.to_state.attributes.get('from', '') }}"
              name: "{{ trigger.to_state.attributes.get('from_name', '') }}"

          - wait_for_trigger:
              - trigger: state
                entity_id: sensor.fritz_box_7590_anrufmonitor_google_2
                to: "talking"
                id: angenommen

              - trigger: state
                entity_id: sensor.fritz_box_7590_anrufmonitor_google_2
                to: "idle"
                id: beendet

            timeout: "02:00:00"
            continue_on_timeout: false

          - choose:
              # Eingehender Anruf wurde nicht angenommen
              - conditions:
                  - condition: template
                    value_template: "{{ wait.trigger.id == 'beendet' }}"

                sequence:
                  - variables:
                      kontakt: >-
                        {% set nr = nummer | string | trim %}
                        {% set kontaktname = name | string | trim %}
                        {% set ungueltig = [
                          '',
                          'unknown',
                          'unbekannt',
                          'none',
                          'null'
                        ] %}

                        {% if kontaktname | lower not in ungueltig %}
                          {{ nr }} ({{ kontaktname }})
                        {% elif nr | lower not in ungueltig %}
                          {{ nr }} (nicht im Telefonbuch)
                        {% else %}
                          unterdrückte Nummer
                        {% endif %}

                      neuer_eintrag: >-
                        {{ now().strftime('%d.%m.%Y %H:%M:%S') }}
                        – Verpasster Anruf von {{ kontakt | trim }}

                  - action: input_text.set_value
                    target:
                      entity_id: input_text.google4
                    data:
                      value: "{{ states('input_text.google3') }}"

                  - action: input_text.set_value
                    target:
                      entity_id: input_text.google3
                    data:
                      value: "{{ states('input_text.google2') }}"

                  - action: input_text.set_value
                    target:
                      entity_id: input_text.google2
                    data:
                      value: "{{ states('input_text.google1') }}"

                  - action: input_text.set_value
                    target:
                      entity_id: input_text.google1
                    data:
                      value: "{{ states('input_text.google') }}"

                  - action: input_text.set_value
                    target:
                      entity_id: input_text.google
                    data:
                      value: "{{ neuer_eintrag | trim }}"

                  - parallel:
                      - action: notify.mobile_app_bm_sindy
                        data:
                          message: "{{ neuer_eintrag | trim }}"

                      - action: notify.mobile_app_mitarbeiter01
                        data:
                          message: "{{ neuer_eintrag | trim }}"

                      - action: notify.mobile_app_mitarbeiter02
                        data:
                          message: "{{ neuer_eintrag | trim }}"

                      - action: notify.mobile_app_mitarbeiter03
                        data:
                          message: "{{ neuer_eintrag | trim }}"

                      - action: notify.mobile_app_mitarbeiter04
                        data:
                          message: "{{ neuer_eintrag | trim }}"

                      - action: notify.mobile_app_bm_tablet
                        data:
                          message: "{{ neuer_eintrag | trim }}"

              # Eingehender Anruf wurde angenommen
              - conditions:
                  - condition: template
                    value_template: "{{ wait.trigger.id == 'angenommen' }}"

                sequence:
                  - variables:
                      kontakt: >-
                        {% set nr = nummer | string | trim %}
                        {% set kontaktname = name | string | trim %}
                        {% set ungueltig = [
                          '',
                          'unknown',
                          'unbekannt',
                          'none',
                          'null'
                        ] %}

                        {% if kontaktname | lower not in ungueltig %}
                          {{ nr }} ({{ kontaktname }})
                        {% elif nr | lower not in ungueltig %}
                          {{ nr }} (nicht im Telefonbuch)
                        {% else %}
                          unterdrückte Nummer
                        {% endif %}

                      neuer_eintrag: >-
                        {{ now().strftime('%d.%m.%Y %H:%M:%S') }}
                        – Angenommener Anruf von {{ kontakt | trim }}

                  - action: input_text.set_value
                    target:
                      entity_id: input_text.google4
                    data:
                      value: "{{ states('input_text.google3') }}"

                  - action: input_text.set_value
                    target:
                      entity_id: input_text.google3
                    data:
                      value: "{{ states('input_text.google2') }}"

                  - action: input_text.set_value
                    target:
                      entity_id: input_text.google2
                    data:
                      value: "{{ states('input_text.google1') }}"

                  - action: input_text.set_value
                    target:
                      entity_id: input_text.google1
                    data:
                      value: "{{ states('input_text.google') }}"

                  - action: input_text.set_value
                    target:
                      entity_id: input_text.google
                    data:
                      value: "{{ neuer_eintrag | trim }}"

                  - parallel:
                      - action: notify.mobile_app_bm_sindy
                        data:
                          message: "{{ neuer_eintrag | trim }}"

                      - action: notify.mobile_app_mitarbeiter01
                        data:
                          message: "{{ neuer_eintrag | trim }}"

                      - action: notify.mobile_app_mitarbeiter02
                        data:
                          message: "{{ neuer_eintrag | trim }}"

                      - action: notify.mobile_app_mitarbeiter03
                        data:
                          message: "{{ neuer_eintrag | trim }}"

                      - action: notify.mobile_app_mitarbeiter04
                        data:
                          message: "{{ neuer_eintrag | trim }}"

                      - action: notify.mobile_app_bm_tablet
                        data:
                          message: "{{ neuer_eintrag | trim }}"

      # Ausgehender Anruf
      - conditions:
          - condition: trigger
            id: ausgehend

          - condition: template
            value_template: >-
              {{
                trigger.from_state is not none
                and trigger.from_state.state not in ['ringing']
              }}

        sequence:
          - variables:
              nummer: "{{ trigger.to_state.attributes.get('with', '') }}"
              name: "{{ trigger.to_state.attributes.get('with_name', '') }}"

              kontakt: >-
                {% set nr = nummer | string | trim %}
                {% set kontaktname = name | string | trim %}
                {% set ungueltig = [
                  '',
                  'unknown',
                  'unbekannt',
                  'none',
                  'null'
                ] %}

                {% if kontaktname | lower not in ungueltig %}
                  {{ nr }} ({{ kontaktname }})
                {% elif nr | lower not in ungueltig %}
                  {{ nr }} (nicht im Telefonbuch)
                {% else %}
                  unterdrückte Nummer
                {% endif %}

              neuer_eintrag: >-
                {{ now().strftime('%d.%m.%Y %H:%M:%S') }}
                – Gespräch mit {{ kontakt | trim }}

          - action: input_text.set_value
            target:
              entity_id: input_text.google4
            data:
              value: "{{ states('input_text.google3') }}"

          - action: input_text.set_value
            target:
              entity_id: input_text.google3
            data:
              value: "{{ states('input_text.google2') }}"

          - action: input_text.set_value
            target:
              entity_id: input_text.google2
            data:
              value: "{{ states('input_text.google1') }}"

          - action: input_text.set_value
            target:
              entity_id: input_text.google1
            data:
              value: "{{ states('input_text.google') }}"

          - action: input_text.set_value
            target:
              entity_id: input_text.google
            data:
              value: "{{ neuer_eintrag | trim }}"

          - parallel:
              - action: notify.mobile_app_bm_sindy
                data:
                  message: "{{ neuer_eintrag | trim }}"

              - action: notify.mobile_app_mitarbeiter01
                data:
                  message: "{{ neuer_eintrag | trim }}"

              - action: notify.mobile_app_mitarbeiter02
                data:
                  message: "{{ neuer_eintrag | trim }}"

              - action: notify.mobile_app_mitarbeiter03
                data:
                  message: "{{ neuer_eintrag | trim }}"

              - action: notify.mobile_app_mitarbeiter04
                data:
                  message: "{{ neuer_eintrag | trim }}"

              - action: notify.mobile_app_bm_tablet
                data:
                  message: "{{ neuer_eintrag | trim }}"

mode: parallel
max: 20
1 „Gefällt mir“

conditions: [] bedeutet: Es gibt keine globalen Bedingungen. Die Automation darf bei jedem definierten Trigger starten.

ja das weiß ich aber warum soviele Escape-Zeichen? Die sind komplett sinnlos.

Vielen Dank.

Die Anzeige “Abgehender Anruf” (wie mit der alten Version im Callmonitor ) wäre toll :wink:

Mit diesem Code bleibt der Syntaxfehler jedoch bestehen.

Wenn keine Benachrichtigung benötigt wird, dann kann die Anpassung ignoriert werden, oder sollte sie entfernt werden?

Super :+1:

So klappt die Karte schon mal. Fehlt nur noch der Inhalt. :sweat_smile:

Im Grunde soll einfach nur wieder der Anrufmonitor funktionieren. Geht ja nur nicht weil die Home Feed Karte nicht mehr geht.

Aus deinem Bild sehe ich, dass du den ganzen Code der Markdown-Card in die Markdown kopiert hast. Das funktioniert nicht. Nur der Inhalt gehört da rein. Oder du bearbeitest die Markdown im Yaml und kopierst dann den ganzen Code da rein

Diese hier funktioniert 1A, einfach tauschen gegen die nicht mehr funktionierende/gepflegte von gadgetchnnel

So hab ich das gemacht…
Oder verwechsel ich da was?

Den Sensor in der Automation muss noch angepasst werden. So wie er hier steh hab ich den ja nicht.

Edit:
Senso ersetz, macht nur nichts.

  • sensor.fritz_box_7590_anrufmonitor_google_2
    ersetzt mit:
  • sensor.fritz_box_7590_ax_anrufmonitor_telefonbuch

Wenn man nicht ständig was in HA macht, Code usw schreibt, kommt man schneller raus als man denk :roll_eyes:

Nein hast du nicht gemacht. Im Bild sieht man, dass du alles in “Inhalt” eingefügt hast. Da gehört aber nur der “Content” rein.

1 „Gefällt mir“

Doch, hab ich :slight_smile:

Ich bin links unten auf den Code-Editor. Siehe Bild. Und dort hab ich eingefügt.
Steht halt dann so in “Inhalt”.
Ja, ist in der Tat etwas unklar gemacht.
Code-Editor:

Und wie man sieht, geht auch alles.
Nachdem ich mich selbst mal angerufen hatte kam eine Fehlermeldung bezüglich des Abschnittes “notify…”
Ich habe den Abschnitt entfernt und… Tataaaa… es läuft.

Das hast du offensichtlich nicht gemacht:

Ich habe noch eine Lösung entwickelt, um AB-Nachrichten auf dem Dashboard über eine 2 Markdown-Karten anzeigen zu lassen. Wichtig ist dabei, dass ihr in der Fritzbox den AB eingerichtet und unter Einstellungen „Nachrichten per Mail“ konfiguriert habt.

  1. Helper einrichten

    2. Automation:

alias: Anrufbeantworter
description: Speichert die letzten fünf aus dem Betreff ermittelten Namen

triggers:
  - trigger: event
    event_type: imap_content
    event_data:
      initial: true

conditions:
  - condition: template
    value_template: >-
      {% set parts = trigger.event.data.parts | default({}, true) %}
      {{ parts.values()
         | selectattr('filename', 'defined')
         | map(attribute='filename')
         | select('match', '.*\.(wav|WAV)$')
         | list
         | count > 0 }}

  - condition: template
    value_template: >-
      {{ trigger.event.data.custom | default('', true) | trim != '' }}

actions:
  - action: input_text.set_value
    target:
      entity_id: input_text.bm_anrufbeantworter_letzter_absender5
    data:
      value: "{{ states('input_text.bm_anrufbeantworter_letzter_absender4') }}"

  - action: input_text.set_value
    target:
      entity_id: input_text.bm_anrufbeantworter_letzter_absender4
    data:
      value: "{{ states('input_text.bm_anrufbeantworter_letzter_absender3') }}"

  - action: input_text.set_value
    target:
      entity_id: input_text.bm_anrufbeantworter_letzter_absender3
    data:
      value: "{{ states('input_text.bm_anrufbeantworter_letzter_absender2') }}"

  - action: input_text.set_value
    target:
      entity_id: input_text.bm_anrufbeantworter_letzter_absender2
    data:
      value: "{{ states('input_text.bm_anrufbeantworter_letzter_absender1') }}"

  - action: input_text.set_value
    target:
      entity_id: input_text.bm_anrufbeantworter_letzter_absender1
    data:
      value: >-
        {{ now().strftime('%d.%m %H:%M') }}
        {{ trigger.event.data.custom | trim }}

mode: single

      entity_id: input_text.bm_anrufbeantworter_letzter_absender3
    data:
      value: "{{ states('input_text.bm_anrufbeantworter_letzter_absender2') }}"
  - action: input_text.set_value
    target:
      entity_id: input_text.bm_anrufbeantworter_letzter_absender2
    data:
      value: "{{ states('input_text.bm_anrufbeantworter_letzter_absender1') }}"
  - action: input_text.set_value
    target:
      entity_id: input_text.bm_anrufbeantworter_letzter_absender1
    data:
      value: >-
        {{ now().strftime('%d.%m %H:%M') }} {{ trigger.event.data.custom | trim
        }}
mode: single


  1. Markdown Karte:
type: markdown
title: Anrufbeantworter
entity_id:
  - input_text.bm_anrufbeantworter_letzter_absender1
  - input_text.bm_anrufbeantworter_letzter_absender2
  - input_text.bm_anrufbeantworter_letzter_absender3
  - input_text.bm_anrufbeantworter_letzter_absender4
  - input_text.bm_anrufbeantworter_letzter_absender5
content: |-
  {%- set helfer = [
    states.input_text.bm_anrufbeantworter_letzter_absender1,
    states.input_text.bm_anrufbeantworter_letzter_absender2,
    states.input_text.bm_anrufbeantworter_letzter_absender3,
    states.input_text.bm_anrufbeantworter_letzter_absender4,
    states.input_text.bm_anrufbeantworter_letzter_absender5
  ] -%}
  {%- set ausgabe = namespace(zeilen=[]) -%}
  {%- for eintrag in helfer -%}
    {%- set nachricht = eintrag.state -%}
    {%- if nachricht not in ['', 'unknown', 'unavailable'] -%}
      {%- set ausgabe.zeilen = ausgabe.zeilen + [nachricht] -%}
    {%- endif -%}
  {%- endfor -%}
  {%- if ausgabe.zeilen | length > 0 -%}
    {{ ausgabe.zeilen | join('<br>') }}
  {%- else -%}
    Keine neue Nachricht vorhanden.
  {%- endif -%}


Jain… Erst nicht, dann schon. Bzw. den Teil ganz entfernt. Vor lauter hin&her kopieren wieder vergessen.
Im Nachhinein war das sicher die Fehlermeldung.

Was allerdings wichtig war, war das auslösen des Sensors. Sprich, mich selbst anrufen.

@GF-Admin

Schick wäre es noch den Text feiner formatieren zu können. Du hast Datum und Zeit zusammengefasst. Ich hab nur die Telefonnummer im Text formatieren können.
Gibts einen Grund das nicht getrennt zu machen? Vielleicht überseh ichs im Code, bin nicht so fit da drin :wink:

Weiteres:
Wenn eine Nummer mehrmals anruft, dann wird das nicht ersichtlich. Es wird nur die Uhrzeit im der ersten Zeile aktualisiert. Wäre super zu sehen wenn schon mehrmals angerufen wurde.

Meinst du jetzt die Anruferliste oder AB?

Die Liste mein ich.
AB hab ich raus.