Nie wieder Offline-Geräte übersehen: Smarter Lösungsansatz für Home Assistant Ausfälle!

Einleitung

In einem Smart Home ist Zuverlässigkeit entscheidend – doch was passiert, wenn wichtige Geräte plötzlich offline sind? Lampen reagieren nicht, Automationen schlagen fehl, und am Ende bemerkst du den Ausfall erst Tage später. Das Problem ist nicht neu, aber mit einem pfiffigen Template Sensor und der richtigen Automation kannst du dies ganz einfach lösen.

In diesem Artikel zeige ich dir, wie du nicht verfügbare Entitäten überwachen, Benachrichtigungen in Echtzeit erhalten und unnötige Ausfälle frühzeitig verhindern kannst.

Link zum Video: https://youtu.be/1jjeN6e3C7E

Das Problem: Nicht verfügbare Entitäten erkennen und darauf reagieren

Als Smart Home-Enthusiasten kennen wir es alle: Automationen, die plötzlich nicht funktionieren, Geräte, die offline gehen – und das, ohne uns zu informieren. Doch die manuelle Überwachung jeder einzelnen Entität in Home Assistant ist schlichtweg ineffizient.
Was wir brauchen, ist eine intelligente, zentrale Lösung.


Die Lösung: Template Sensor und Automation

Glücklicherweise gibt es in Home Assistant die Möglichkeit, über benutzerdefinierte Template Sensors zu arbeiten. Diese analysieren regelmäßig den Zustand sämtlicher Entitäten und Geräte. Sobald eine Entität als „unavailable“ erkannt wird, wird eine Benachrichtigung ausgelöst.

Datengrundlage: https://github.com/jazzyisj/unavailable-entities-sensor/blob/main/package_unavailable_entities.yaml

So funktioniert es:

  1. Template Sensor erstellen
    Im Bereich deiner Configuration.yaml hinterlegst du einen Sensor, der alle „Unavailable“-Entities bündelt.
  2. Gruppe für ignorierte Entitäten
    Optional kannst du Domains oder spezifische Geräte aus der Überwachung herausnehmen.
  3. Automationen für Benachrichtigungen
    Automatische Updates und Benachrichtigungen halten dich informiert, ohne dass du manuell suchen oder prüfen musst.

Bessere Benachrichtigung:

Quelle: https://github.com/jazzyisj/unavailable-entities-sensor/blob/main/examples/detailed_persistent_notification.yaml

Update auf Version 1.1 nach einem hilfreichen Hinweis von Wolfgang! Lieben Dank!

alias: Unavailable Entities Notification Device
description: Create persistent notification if unavailable entities, dismiss if none.
triggers:
  - trigger: state
    entity_id: group.unavailable_entities
    attribute: entity_id
    to: null
    for: 5
conditions:
  - condition: template
    alias: Sensor state is a valid numerical value
    value_template: "{{ is_number(states('sensor.unavailable_entities')) }}"
  - condition: template
    value_template: "{{ states('sensor.unavailable_entities') |  int > 0 }}"
    alias: mindestens ein Device verfügbar ist
actions:
  - action: persistent_notification.create
    data:
      notification_id: unavailable_entities
      title: "Nicht verfügbare Geräte / Entitäten "
      message: >
        {% set ns = namespace(result=[]) %} {% for s in
        expand(state_attr('group.unavailable_entities', 'entity_id')) %}
          {% set ns.result = ns.result + [
              device_attr(s.entity_id, "name") ~ "|" ~ device_id(s.entity_id) ~ "|- **" ~ s.name ~ "**\n"
              ~ "  - *entity_id*: " ~ s.entity_id ~ "\n"
            ]
          %}
        {% endfor %} {% set ns.result = ns.result | sort %} {% set lastdev =
        namespace( id="" ) %} {% set tarr = ns.result %} {% set ns.result = []
        %} {% for item in tarr %}
          {% set dev = namespace( id="" ) %}
          {% set entity = namespace( data="" ) %}
          {% set dev.id = item.split("|")[1] %}
          {% set entity.data = item.split("|")[2] %}
          {% if lastdev.id != dev.id %}
            {% if dev.id != 'None' %}
              {% set ns.result = ns.result + [ "**<a href=\"/config/devices/device/" ~ dev.id ~ "\">" ~ device_attr(dev.id, "name") ~ "</a>**" ] %}
            {% else %}
              {% set ns.result = ns.result + [ "**Keine Device-Entitäten**" ] %}
            {% endif %}
            {% set lastdev.id = dev.id %}
          {% endif %}
        {% endfor %} {{ ns.result | join('\n') }}
mode: restart

Dashboard-Optimierung für Übersicht

Ein effizientes Dashboard ist essenziell:

  • Mit Frontend-Cards wie AutoEntities und Fold Entity Row kannst du nicht verfügbare Entitäten übersichtlich darstellen. Diese Karten machen es einfacher, offline Geräte gezielt zu identifizieren und deren Status zu überprüfen.

Vorher die folgenden beiden Karten über HACS installieren:

https://github.com/thomasloven/lovelace-auto-entities

https://github.com/thomasloven/lovelace-fold-entity-row

Quelle: https://github.com/jazzyisj/unavailable-entities-sensor/blob/main/examples/auto_entities_card.yaml

type: entities
title: "Unavailable Entities Example"
state_color: true
show_header_toggle: false
entities:
  - type: custom:auto-entities
    show_empty: true
    unique: true
    filter:
      include:
        - group: group.unavailable_entities
    sort:
      method: state
    card:
      type: custom:fold-entity-row
      padding: 0
      head:
        entity: sensor.unavailable_entities

„Unavailable Devices Plus Entität“ zur Darstellung der nicht verfügbaren/unbekannten Geräte

Quelle: https://github.com/jazzyisj/unavailable-entities-sensor/issues/48#issuecomment-2570410403

template:
  - sensor:
      - name: "Unavailable Devices Plus"
        unique_id: unavailable_devices_plus
        icon: "{{ iif(states(this.entity_id)|int(-1) > 0, 'mdi:alert-circle', 'mdi:check-circle') }}"
        state: >
          {% set devices = state_attr(this.entity_id, 'devices') %}
          {{ devices | count if devices != none else -1 }}
        attributes:
          devices: >
            {%- set items = namespace(value=[]) %}
            {%- for entity in expand(state_attr('group.unavailable_entities', 'entity_id')) %}
            {%- set items.value = items.value + [device_attr(entity.entity_id, "name") ~ '|' ~ device_id(entity.entity_id) ~ '|' ~ entity.entity_id] %}
            {%- endfor %}
            {%- set items.value = items.value | sort %}
            {%- set lastdev = namespace(id='') %}
            {%- set lastname = namespace(value='') %}
            {%- set devices = namespace(items=[]) %}
            {%- set entities = namespace(items=[]) %}
            {%- set device_entities = namespace(count=0) %}
            {%- for item in items.value %}
              {%- set device = item.split("|")[0] %}
              {%- set device_id = item.split("|")[1] %}
              {%- set entity =  item.split("|")[2] %}
              {%- if device | lower == 'none' %}
                {%- set entities.items = entities.items + [entity] %}
              {%- elif lastdev.id != device_id and lastdev.id != "" %}
                {%- set devices.items = devices.items + [lastname.value ~ ' [' ~ device_entities.count ~']'] %}
                {%- set device_entities.count = 0 %}
              {%- endif %}
              {%- set lastdev.id = device_id %}
              {%- set lastname.value = device %}
              {%- set device_entities.count = device_entities.count + 1 %}
            {%- endfor %}
            {{ devices.items + entities.items }}

Benachrichtigungen aufs Handy: Immer informiert

Neben dem Dashboard können permanente Benachrichtigungen oder Push-Nachrichten aufs Handy eingerichtet werden. Damit bleibst du jederzeit aktuell informiert und kannst bei Bedarf direkt reagieren.

Automation für’s Handy

alias: Nicht verfügbare Geräte mobil melden
description: ""
triggers:
  - trigger: time
    at: "18:00:00"
conditions:
  - condition: template
    alias: Sensor state is a valid numerical value
    value_template: "{{ is_number(states('sensor.unavailable_entities')) }}"
actions:
  - action: notify.mobile_app_tristaniphone16
    metadata: {}
    data:
      title: "Nicht verfügbare Geräte / Entitäten "
      message: >
        {% set ns = namespace(result=[]) %} {% for s in
        expand(state_attr('group.unavailable_entities', 'entity_id')) %}
          {% set ns.result = ns.result + [
              device_attr(s.entity_id, "name") ~ "|" ~ device_id(s.entity_id) ~ "|- **" ~ s.name ~ "**\n"
            ]
          %}
        {% endfor %} {% set ns.result = ns.result | sort %} {% set lastdev =
        namespace( id="" ) %} {% set tarr = ns.result %} {% set ns.result = []
        %} {% for item in tarr %}
          {% set dev = namespace( id="" ) %}
          {% set entity = namespace( data="" ) %}
          {% set dev.id = item.split("|")[1] %}
          {% if lastdev.id != dev.id %}
            {% if dev.id != 'None' %}
              {% set ns.result = ns.result + [ "  " ~ device_attr(dev.id, "name")] %}
            {% else %}
              {% set ns.result = ns.result + [ "**Entitäten ohne Gerät**" ] %}
            {% endif %}
            {% set lastdev.id = dev.id %}
          {% endif %}
        {% endfor %} {{ ns.result | join('\n') }}
    alias: Nachricht ans Handy
mode: restart

Entitäten besser organisieren

Was ist mit Geräten, die nur vorübergehend offline sind oder bewusst ignoriert werden sollen? Hier bietet sich die Verwendung von Labels an. Ein Beispiel: Du kannst Entitäten mit „Status ignorieren“ markieren, sodass diese nicht weiter geprüft werden. Das spart Zeit und sorgt für eine strukturierte Übersicht.


Vorteile des Systems

  • Sofortige Benachrichtigungen bei kritischen Gerät-Ausfällen.
  • Klar strukturierte Übersicht über offline Geräte und Entitäten.
  • Möglichkeit zur gezielten Ignorierung irrelevanter Daten.
  • Optimierung von Home Assistant Automationen und Stabilisierung des Smart Homes.

Fazit

Die Überwachung nicht verfügbarer Entitäten in Home Assistant muss nicht kompliziert sein. Mit einem Template Sensor, einer klar strukturierten Automation und einem angepassten Dashboard hast du die perfekte Lösung – einfach zu implementieren und maximal effizient.

Hast du eigene Tipps oder Verbesserungsideen für diese Methode? Kommentiere gerne unten oder teile sie in der Community. Denn zusammen machen wir unsere Smart Homes noch smarter!


Kommentare

Eine Antwort zu „Nie wieder Offline-Geräte übersehen: Smarter Lösungsansatz für Home Assistant Ausfälle!“

  1. Avatar von Wolfgang Wendefeuer
    Wolfgang Wendefeuer

    Es bleib eine leere Benachrichtig stehen, wenn das Gerät wieder online ist.
    Hier meine Lösung:

    alias: Group unavailable Entities Notification
    description: Create persistent notification if unavailable entities, dismiss if none.
    triggers:
    – trigger: state
    entity_id: group.unavailable_entities
    attribute: entity_id
    to: null
    for: 5
    conditions: []
    actions:
    – if:
    – condition: template
    value_template: „{{ states(’sensor.unavailable_entities‘) | int > 0 }}“
    then:
    – action: persistent_notification.create
    metadata: {}
    data:
    notification_id: unavailable_entities
    title: „Nicht verfügbare Geräte / Entitäten “
    message: >
    {% set ns = namespace(result=[]) %} {% for s in
    expand(state_attr(‚group.unavailable_entities‘, ‚entity_id‘)) %}
    {% set ns.result = ns.result + [
    device_attr(s.entity_id, „name“) ~ „|“ ~ device_id(s.entity_id) ~ „|- **“ ~ s.name ~ „**\n“
    ]
    %}
    {% endfor %} {% set ns.result = ns.result | sort %} {% set lastdev =
    namespace( id=““ ) %} {% set tarr = ns.result %} {% set ns.result =
    [] %} {% for item in tarr %}
    {% set dev = namespace( id=““ ) %}
    {% set entity = namespace( data=““ ) %}
    {% set dev.id = item.split(„|“)[1] %}
    {% set entity.data = item.split(„|“)[2] %}
    {% if lastdev.id != dev.id %}
    {% if dev.id != ‚None‘ %}
    {% set ns.result = ns.result + [ „**“ ~ device_attr(dev.id, „name“) ~ „**“ ] %}
    {% else %}
    {% set ns.result = ns.result + [ „**Non-Device Entities**“ ] %}
    {% endif %}
    {% set lastdev.id = dev.id %}
    {% endif %}
    {% set ns.result = ns.result%}
    {% endfor %} {{ ns.result | join(‚\n‘) }}
    else:
    – action: persistent_notification.dismiss
    metadata: {}
    data:
    notification_id: unavailable_entities
    mode: restart

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert