Die HA Add-ons verfügen ja alle über einen einfachen Schalter, mit dem ein Watchdog aktiviert werden kann. HA selbst hat so einen Schalter jedoch nicht, da die Sache hier etwas komplexer ist.
Mein Watchdog Konzept sieht mehrere Überwachungsebenen vor, z.B.
Ebene 1: Wenn HA selbst der Meinung ist, es geht ihm nicht mehr so gut, dann soll zumindest mal der HA-Core Container neu starten, aber bitte nicht zu häufig.
Ebene 2: Wenn eine übergeordnete Instanz (z.B. Proxmox) der Meinung ist, es geht HA nicht mehr so gut, dann soll das gesamte HA-OS neu gestartet werden.
Hier geht es im ersten Schritt jetzt nur mal um die Ebene 1, der Rest kommt erst später.
Basis für meinen Code ist die System Monitor Integration.
In der Standard-Einstellung liefert sie Sensoren für Arbeitsspeicher, Massenspeicher, usw.
Wenn man rechts oben auf das Zahnrad klickt, dann kommt man in den Dialog: Konfigurieren eines Überwachungssensors für einen laufenden Prozess
Dort habe ich als Prozess noch python3 hinzugefügt.
System-Monitor - Optionen.png
Im Diagnose-Fenster kann man weitere deaktivierte Entitäten scharfschalten, dort habe ich den "letzten Systemstart" und die "Offenen Datedeskriptoren python3" geholt.
System-Monitor - Diagnose.png
Da ich auch die Möglichkeit haben will, den Watchdog zu deaktivieren, hab ich einen input_boolean dafür erstellt.
Ich bin übrigens vor kurzem auf die Packages umgestiegen (danke an Tom Bombadil für den Tipp), daher gibt es jetzt die Domäne in der obersten Zeile von jedem Code.
Wer das nicht benötigt, einfach die Zeile wieder löschen.
Bei der Condition "aber bitte nicht zu häufig" bin ich draufgekommen, dass der Sensor "letzter Systemstart" für meine Anforderung wertlos ist.
Bei einem kompletten HA-OS Neustart (System neu starten) wird dieser Sensor zwar gesetzt, ich mache aber nur ein HA-Core restart (HA neu starten), und das ignoriert dieser Sensor.
HA - Neustart.png
Aus diesem Grund hab ich den benötigten Template Sensor selbst erstellt.
Jetzt können wir eine Automation erstellen, die erkennen soll, wenn es HA schlecht geht. Das ist jetzt zwar einfach gesagt, aber nicht so leicht umzusetzen.
Als ersten Schritt überwache ich mal die offenen Dateideskriptoren von python3. Diese pendeln so um einen Wert von 100 und ab 1000 kann man davon ausgehen, da hat's was.
Damit hat der Trigger noch 2 Conditions, einmal den globalen Schalter und dann die Überprüfung, ob der letzte HA-Core Neustart mehr als 1h her ist, um laufende Neustarts zu vermeiden.
Und Action:
Ursprünglich wollte ich wie üblich eine persistent_notification schreiben, aber das erscheint mir sinnlos. Wenn ich sie vor dem Restart schreibe, dann wird sie durch den Restart gleich wieder gelöscht, und nach dem Restart-Befehl werden keine weiteren Aktionen mehr abgesetzt.
Bis jetzt hatte ich nur Test-Neustarts (mit Wert above: 105) und solange HA so stabil läuft, erwarte ich auch keine häufigen Watchdog Aktionen. Mir ist in diesem Jahr HA erst ein einziges mal wirklich abgestürzt, mal sehen, ob der Watchdog in so einem Fall dann auslöst.
Wenn jemand Ideen hat, was man außer dem python3 Zähler noch überwachen kann, der Trigger kann ja auf mehrere Ereignisse auslösen. Wichtig ist halt, man muss bei diesem Konzept den Ausfall vorab erkennen und nicht erst, wenn sich nichts mehr rührt. Die Watchdog Ebene 2 wird das dann komplett anders lösen.
Zuletzt gibt es noch eine simple Karte, um diese Sensoren anzuzeigen. Sie wird's aber nicht auf mein Haupt-Dashboard schaffen.
Hier geht's zum nächsten Beitrag: (coming soon)
hier zur HA Kurzeinführung
und hier zur Liste aller Beiträge dieser Serie
Mein Watchdog Konzept sieht mehrere Überwachungsebenen vor, z.B.
Ebene 1: Wenn HA selbst der Meinung ist, es geht ihm nicht mehr so gut, dann soll zumindest mal der HA-Core Container neu starten, aber bitte nicht zu häufig.
Ebene 2: Wenn eine übergeordnete Instanz (z.B. Proxmox) der Meinung ist, es geht HA nicht mehr so gut, dann soll das gesamte HA-OS neu gestartet werden.
Hier geht es im ersten Schritt jetzt nur mal um die Ebene 1, der Rest kommt erst später.
Basis für meinen Code ist die System Monitor Integration.
In der Standard-Einstellung liefert sie Sensoren für Arbeitsspeicher, Massenspeicher, usw.
Wenn man rechts oben auf das Zahnrad klickt, dann kommt man in den Dialog: Konfigurieren eines Überwachungssensors für einen laufenden Prozess
Dort habe ich als Prozess noch python3 hinzugefügt.
System-Monitor - Optionen.png
Im Diagnose-Fenster kann man weitere deaktivierte Entitäten scharfschalten, dort habe ich den "letzten Systemstart" und die "Offenen Datedeskriptoren python3" geholt.
System-Monitor - Diagnose.png
Da ich auch die Möglichkeit haben will, den Watchdog zu deaktivieren, hab ich einen input_boolean dafür erstellt.
Ich bin übrigens vor kurzem auf die Packages umgestiegen (danke an Tom Bombadil für den Tipp), daher gibt es jetzt die Domäne in der obersten Zeile von jedem Code.
Wer das nicht benötigt, einfach die Zeile wieder löschen.
HTML-Code:
input_boolean:
ha_auto_restart:
name: "HA Auto-Restart"
icon: mdi:home-assistant
Bei einem kompletten HA-OS Neustart (System neu starten) wird dieser Sensor zwar gesetzt, ich mache aber nur ein HA-Core restart (HA neu starten), und das ignoriert dieser Sensor.
HA - Neustart.png
Aus diesem Grund hab ich den benötigten Template Sensor selbst erstellt.
HTML-Code:
template:
# HA-Core letzter Neustart
- triggers:
- trigger: homeassistant
event: start
sensor:
- name: "HA-Core letzter Neustart"
# Der sensor.system_monitor_letzter_systemstart erfasst nur vollständige Restarts von HA-OS.
# Dieser Sensor hier erfasst auch Teil-Restarts nur vom Core.
unique_id: 3a0cf6a5-21c5-466f-b512-08d13a8b6f87
icon: mdi:home-assistant
device_class: timestamp
state: "{{ now().isoformat(timespec='seconds') }}"
attributes:
description: "HA-OS letzter Neustart siehe: sensor.system_monitor_letzter_systemstart"
Als ersten Schritt überwache ich mal die offenen Dateideskriptoren von python3. Diese pendeln so um einen Wert von 100 und ab 1000 kann man davon ausgehen, da hat's was.
HTML-Code:
automation:
- alias: "System-Monitor - Auto restart"
id: bafd32e9-e12a-4e45-9067-831f54342f5f
description: "Auto restart of HA, when file descriptors python3 too high"
mode: single
triggers:
trigger: numeric_state
entity_id: sensor.system_monitor_offene_dateideskriptoren_python3
above: 1000
# regulär um die 100, Soft Limit ist meist 1024, Hard Limit ist weit höher (524288)
conditions:
- condition: state
# nur wenn Auto-Restart erlaubt ist
entity_id: input_boolean.ha_auto_restart
state: 'on'
- condition: template
# Auto-Restart nur dann, wenn der letzte Neustart mehr als 1h her ist, um laufende Restarts zu vermeiden
value_template: >
{% if has_value('sensor.ha_core_letzter_neustart') %}
{% set last_start = states('sensor.ha_core_letzter_neustart') %}
{{ (now() - as_datetime(last_start)).total_seconds() > 3600 }}
{% else %}
false
{% endif %}
Damit hat der Trigger noch 2 Conditions, einmal den globalen Schalter und dann die Überprüfung, ob der letzte HA-Core Neustart mehr als 1h her ist, um laufende Neustarts zu vermeiden.
Und Action:
HTML-Code:
actions:
- action: notify.send_message
target:
entity_id: notify.telegram_bot_<ID>
# schnell noch eine Telegram Nachricht senden
data:
title: HA Auto-Restart
message: >
Watchdog laut Automation: System-Monitor - Auto restart
{{- '\n' -}}
Zeitpunkt: {{ now().strftime('%Y-%m-%d %H:%M') }}
- action: homeassistant.restart
# restart nur vom Core, nicht des gesamten OS
Bis jetzt hatte ich nur Test-Neustarts (mit Wert above: 105) und solange HA so stabil läuft, erwarte ich auch keine häufigen Watchdog Aktionen. Mir ist in diesem Jahr HA erst ein einziges mal wirklich abgestürzt, mal sehen, ob der Watchdog in so einem Fall dann auslöst.
Wenn jemand Ideen hat, was man außer dem python3 Zähler noch überwachen kann, der Trigger kann ja auf mehrere Ereignisse auslösen. Wichtig ist halt, man muss bei diesem Konzept den Ausfall vorab erkennen und nicht erst, wenn sich nichts mehr rührt. Die Watchdog Ebene 2 wird das dann komplett anders lösen.
Zuletzt gibt es noch eine simple Karte, um diese Sensoren anzuzeigen. Sie wird's aber nicht auf mein Haupt-Dashboard schaffen.
HTML-Code:
type: entities
title: Home Assistant
entities:
- entity: sensor.system_monitor_letzter_systemstart
name: letzter HA-OS System-Start
- entity: sensor.ha_core_letzter_neustart
- entity: sensor.system_monitor_offene_dateideskriptoren_python3
name: Open file descriptors python3 (< 1000)
- entity: input_boolean.ha_auto_restart
Hier geht's zum nächsten Beitrag: (coming soon)
hier zur HA Kurzeinführung
und hier zur Liste aller Beiträge dieser Serie

