Trigger
Heute Nacht hatte ich Streß mit meiner Frau wegen Homeassi … sie mußte früh raus, Klima ging nicht an und Lichter im Flur nicht aus… selber schon schlafend, sah ich, daß Z2M einen Menge Offline Geräte anzeigte, ok HA durchstarten, keine Besserung, ok ab zum Stromstecker, HA vom Strom trennen, kurz warten und wieder einstecken…nach ein paar Minuten wurden in Z2M wieder alle Geräte erkannt. Licht ging aus und Klima an und meine Frau schlief wieder ein, puhh.
Das habe ich gefühlt alle 2 Monate und ich vermute, der Speicher des Sonoff Zigbee 3.0 Sticks läuft voll mit Meldungen und das Stromausschalten reseted den (Firmware 20240710). Ein Software Durchstart macht das nicht. Einzige Auffälligkeit gestern frühen Abend: Es standen unerledigte 11 Hue OTA Updates an
Im Nachhinein hätte sicher auch gereicht den Stick einmal rauszuziehen und so vom Strom zu trennen. Ist sicher auch gesunder für Raspi und SSD.
Egal, fürs den Moment. Ich muß das mal mehr beobachten.
Vorgehen
Dafür will ich erst einmal wissen, wie oft HA durch Stromtrennen neugestartet wurde. Sensor.system_monitor_last_boot nehme ich als Indikator weil dieser sich bei HA Software Neustarts nicht verändert, nur bei Strom aus/an. Er enthält selber schon die Datums, die ich brauche, natürlich limitiert durch die eingestellten purge days im Rekorder.
Über eine Automatisation schreibe ich die Werte bei jeder Änderung in ein Text-Helfer in einem Semikolon getrenntem Format
Zusammenfassung
alias: om_aut_tech_ha_strom_aus_neustart_time_recording
description: >-
## Speichert das Datum des letzten Hardware Neustarts
- Eigentlich liefert sensor.system_monitor_last_boot bereits diese Information
aber ältere Info überlebt recorder purge nicht
triggers:
- trigger: state
entity_id:
- sensor.system_monitor_last_boot
conditions:
- condition: template
value_template: >-
{# aber nur wenn ein gültiges Datumsformat vorliegt #}
{{ (states('sensor.system_monitor_last_boot') |
as_datetime(default=false)) is not false }}
actions:
- action: input_text.set_value
metadata: {}
data:
value: >-
{#speichert 10 Zeitstrings im Format "2025-10-10 10:10;"#}
{% set number_of_entries = 10 %} {#achte auf 255 Beschränkung#}
{% set raw = states('input_text.homeassi_hardware_starts') %}
{% set new_entry =
as_local(as_datetime(states('sensor.system_monitor_last_boot'))).strftime('%Y-%m-%d
%H:%M') %}
{% if not raw or raw == '' %}
{{ new_entry ~ ';' }}
{% else %}
{% set existing = raw.split(';') | reject('equalto', '') | list %}
{% if existing | length >= number_of_entries %}
{% set existing = existing[1:] %}
{% endif %}
{{ (existing + [new_entry]) | join(';') ~ ';' }}
{% endif %}
target:
entity_id: input_text.homeassi_hardware_starts
mode: single
Dieses Format lese ich in einer Dashboard Markdown Karte wieder aus.
Zusammenfassung
type: markdown
content: >
{% set raw = states('input_text.homeassi_hardware_starts') -%}
{% set eintraege = raw.split(';') -%}
{% set eintraege = eintraege | map('trim') | select('string') |
reject('equalto', '') | reverse | list -%}
{% for eintrag in eintraege[-10:] -%}
{% set ts = strptime(eintrag, '%Y-%m-%d %H:%M') -%}
{% set diff = (now().replace(tzinfo=None) - ts).days -%}
- {{ ts.strftime('%d.%m um %H:%M Uhr') }} (vor {{ diff }} Tag{{ 'en' if diff
!= 1 else '' }})
{% endfor %}
title: Die letzten 10 Strom-Aus Neustarts

