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









