Aktualisierter Code ersetzt den von oben
Moin
Es war am Wochenende mal wieder soweit. HA/Raspi stand still und konnte nur durch Strom ab- und anschalten reanimiert werden. Und ich dachte, guter Test für obige Automatisation … aber es wurde kein Strombedingter HA Neustart erkannt, hm.
Also, nochmal Code überarbeitet und diesmal mit Software-reboot und auch wenn es weh tat mit Strom im laufendem Betrieb abgeschaltet.
Automatisation (startet vor dem HA Herunterfahren und nach dem Hochfahren)
Zusammenfassung
alias: om_aut_tech_ha_strom_aus_neustart_time_recording
description: >-
## Speichert und liest das Datum/Zeit des letzten Neustarts und vergleicht
Zeiten
- Eigentlich liefert sensor.system_monitor_last_boot bereits diese Information
aber ältere Info überlebt recorder purge nicht
- Sofern system_monitor_last_boot vorhanden, werden Zeiten verglichen
- Ansonsten wird geprüft ob ein normales Herunterfahren vor dem Neustart
innerhalb von 2 Min stattfand
triggers:
- event: shutdown
trigger: homeassistant
id: NormalesHerunterfahren
- event: start
trigger: homeassistant
id: Hochfahren
conditions: []
actions:
- choose:
- conditions:
- condition: trigger
id:
- NormalesHerunterfahren
sequence:
- action: input_datetime.set_datetime
metadata: {}
data:
datetime: "{{now()}}"
target:
entity_id: input_datetime.ha_zeit_von_normalem_herunterfahren
- action: notify.gmxolaf3
metadata: {}
data:
title: >-
{{states.sensor.uhrzeit_momentan_formatiert_hh_mm.state}} HA
normal heruntergefahren (Zeit weurde gespeichert)
message: >-
{{states.sensor.uhrzeit_momentan_formatiert_hh_mm.state}} HA
normal heruntergefahren (Zeit weurde gespeichert)
- conditions:
- condition: trigger
id:
- Hochfahren
sequence:
- if:
- condition: template
value_template: >
{#
True = normales Herunterfahren
False = Stromausfall bedingtes Herunterfahren
#}
{% set time_for_restart_sec = 120 | int %}
{% set shutdown_normal =
as_local(as_datetime(states('input_datetime.ha_zeit_von_normalem_herunterfahren')))
%}
{% set ha_start =
as_local(as_datetime(states('sensor.uptime'))) %}
{% set hw_raw = states('sensor.system_monitor_last_boot') %}
{% set valid_hw_starttime = (hw_raw |
as_datetime(default=false)) is not false %}
{# System_monitor_last_boot ist valide #}
{% if valid_hw_starttime %}
{% set ha_start_hw = as_local(as_datetime(hw_raw)) %}
{% set is_normal_restart = (ha_start_hw < shutdown_normal < ha_start) %}
{#
System_monitor_last_boot ist nicht valide aber shutdown_normal
ist < ha_start < 120 s
Annahme: Es wurde normal gestartet
#}
{% else %}
{% set is_normal_restart = (
(ha_start - shutdown_normal).total_seconds() | int < time_for_restart_sec
) %}
{% endif %}
{{ is_normal_restart }}
then:
- action: notify.gmxolaf3
metadata: {}
data:
title: >-
{{states.sensor.uhrzeit_momentan_formatiert_hh_mm.state}} HA
gestartet nach normalem Herunterfahren
message: >-
{{states.sensor.uhrzeit_momentan_formatiert_hh_mm.state}} HA
gestartet nach normalem Herunterfahren
else:
- action: notify.gmxolaf3
metadata: {}
data:
title: >-
{{states.sensor.uhrzeit_momentan_formatiert_hh_mm.state}} HA
gestartet nach Stromausfall !!!
message: >-
{{states.sensor.uhrzeit_momentan_formatiert_hh_mm.state}} HA
gestartet nach Stromausfall
- 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
enabled: true
mode: single
- Zeit Helfer input_datetime.ha_zeit_von_normalem_herunterfahren muß angelegt werden
- Text Helfer input_text.homeassi_hardware_starts muß angelegt werden
- Die Email Benachrichtigungen könnt Ihr rausnehmen, ist ein Art Debugging für mich
Markdown-Karte
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
