ha:raderbroich:logik:automationen_ueberwachung
Inhaltsverzeichnis
Automationen – Code: Überwachung und Tests
← zurück zur Automationen-Übersicht
Stand: 25.09.2026. YAML wie in HA unter ⋮ → „In YAML bearbeiten“.
NAS: Synology-Warnungen an Norbert melden
id: "1790320220049" alias: "NAS: Synology-Warnungen an Norbert melden" description: >- Meldet Warnungen und Fehler der Synology DS920+ (nasnbruch) nur an Norbert: Telegram (Chat-ID zentral in input_text.telegram_chat_id_norbert) und kritische Push-Nachricht aufs iPhone (kommt auch bei Lautlos/Fokus durch). Auslöser: Volume- oder Festplattenstatus wechselt von 'normal' auf etwas anderes (2 min stabil), SMART-Warnung (fehlerhafte Sektoren / Restlebensdauer), Sicherheitsstatus unsicher, NAS-Temperatur > 60 °C oder Plattentemperatur > 50 °C (je 10 min), NAS 10 min nicht im Netz. Bereits bestehende Warnzustände lösen nicht erneut aus, nur neue Wechsel. triggers: - trigger: state entity_id: - sensor.nasnbruch_volume_1_status - sensor.nasnbruch_volume_2_status - sensor.nasnbruch_volume_3_status - sensor.nasnbruch_volume_4_status - sensor.nasnbruch_volume_5_status - sensor.nasnbruch_volume_6_status - sensor.nasnbruch_drive_1_status - sensor.nasnbruch_drive_2_status - sensor.nasnbruch_drive_3_status - sensor.nasnbruch_drive_4_status not_from: - unavailable - unknown not_to: - normal - unavailable - unknown for: minutes: 2 id: status - trigger: state entity_id: - binary_sensor.nasnbruch_drive_1_max_fehlerhafte_sektoren_uberschritten - binary_sensor.nasnbruch_drive_2_max_fehlerhafte_sektoren_uberschritten - binary_sensor.nasnbruch_drive_3_max_fehlerhafte_sektoren_uberschritten - binary_sensor.nasnbruch_drive_4_max_fehlerhafte_sektoren_uberschritten - binary_sensor.nasnbruch_drive_1_unterhalb_der_mindestrestlebensdauer - binary_sensor.nasnbruch_drive_2_unterhalb_der_mindestrestlebensdauer - binary_sensor.nasnbruch_drive_3_unterhalb_der_mindestrestlebensdauer - binary_sensor.nasnbruch_drive_4_unterhalb_der_mindestrestlebensdauer - binary_sensor.nasnbruch_sicherheitsstatus from: "off" to: "on" id: warnung - trigger: numeric_state entity_id: sensor.nasnbruch_temperatur above: 60 for: minutes: 10 id: temp - trigger: numeric_state entity_id: - sensor.nasnbruch_drive_1_temperatur - sensor.nasnbruch_drive_2_temperatur - sensor.nasnbruch_drive_3_temperatur - sensor.nasnbruch_drive_4_temperatur above: 50 for: minutes: 10 id: temp - trigger: state entity_id: device_tracker.nasnbruch from: home to: not_home for: minutes: 10 id: offline conditions: - condition: template value_template: "{{ trigger.id != 'temp' or trigger.from_state.state not in ['unavailable', 'unknown'] }}" variables: was: "{{ trigger.to_state.name | replace('nasnbruch ', '') | trim }}" zustand: >- {% set s = trigger.to_state.state %}{% set t = {'attention': 'Achtung', 'warning': 'Warnung', 'degraded': 'beeinträchtigt', 'crashed': 'abgestürzt', 'failing': 'fällt aus', 'not_use': 'nicht in Benutzung', 'on': 'ja', 'not_home': 'nicht erreichbar'} %}{% if trigger.id == 'temp' %}{{ s }} °C{% elif trigger.id == 'warnung' and 'sicherheit' in trigger.entity_id %}unsicher{% else %}{{ t.get(s, s) }}{% endif %} actions: - action: telegram_bot.send_message continue_on_error: true data: chat_id: >- {% set raw = states('input_text.telegram_chat_id_norbert') %}{{ [ (raw if raw not in ['', 'unknown', 'unavailable'] else '851603710') | int ] }} message: |- *⚠️ Synology nasnbruch* {{ was }}: {{ zustand }} {{ now().strftime('%d.%m. %H:%M') }} Uhr – Details im DSM (Speicher-Manager / Sicherheitsberater). parse_mode: markdown - action: notify.mobile_app_iphone_von_norbert continue_on_error: true data: title: ⚠️ Synology nasnbruch message: "{{ was }}: {{ zustand }}" data: push: sound: critical: 1 name: default volume: 1 tag: NAS_WARNUNG mode: queued max: 20
Proxmox: Warnungen an Norbert melden
Siehe auch Proxmox-Server.
id: "1790322543101" alias: "Proxmox: Warnungen an Norbert melden" description: >- Meldet Probleme des Proxmox-Servers pve (192.168.192.3) nur an Norbert: Telegram (Chat-ID zentral in input_text.telegram_chat_id_norbert) und kritische Push-Nachricht aufs iPhone (kommt auch bei Lautlos/Fokus durch). Aufbau wie 'NAS: Synology-Warnungen an Norbert melden'. Auslöser: Node-Status offline (5 min), Proxmox 10 min nicht im Netz, DokuWiki-Container gestoppt (5 min), CPU oder RAM > 90 % (je 10 min), Storage local oder local-lvm > 90 % belegt (10 min). Bereits bestehende Warnzustände lösen nicht erneut aus, nur neue Wechsel. Die HA-VM selbst wird nicht überwacht, weil HA bei deren Ausfall nichts senden kann; haos14.2 ist bewusst aus und wird ebenfalls nicht überwacht. triggers: - trigger: state entity_id: binary_sensor.tools_pve_status from: "on" to: "off" for: minutes: 5 id: status - trigger: state entity_id: device_tracker.proxmox from: home to: not_home for: minutes: 10 id: offline - trigger: state entity_id: binary_sensor.dokuwiki_status from: "on" to: "off" for: minutes: 5 id: status - trigger: numeric_state entity_id: - sensor.tools_pve_cpu_auslastung - sensor.tools_pve_arbeitsspeicher_auslastung_2 above: 90 for: minutes: 10 id: prozent - trigger: numeric_state entity_id: - sensor.storage_local_speicherauslastung_in_prozent - sensor.storage_local_lvm_speicherauslastung_in_prozent above: 90 for: minutes: 10 id: prozent conditions: - condition: template value_template: "{{ trigger.id != 'prozent' or trigger.from_state.state not in ['unavailable', 'unknown'] }}" variables: was: >- {% set n = {'binary_sensor.tools_pve_status': 'Node pve', 'device_tracker.proxmox': 'Proxmox-Server', 'binary_sensor.dokuwiki_status': 'DokuWiki (CT 102)', 'sensor.tools_pve_cpu_auslastung': 'CPU-Auslastung', 'sensor.tools_pve_arbeitsspeicher_auslastung_2': 'RAM-Auslastung', 'sensor.storage_local_speicherauslastung_in_prozent': 'Storage local (Backups/ISOs)', 'sensor.storage_local_lvm_speicherauslastung_in_prozent': 'Storage local-lvm (VM-Disks)'} %}{{ n.get(trigger.entity_id, trigger.to_state.name) }} zustand: >- {% if trigger.id == 'prozent' %}{{ trigger.to_state.state | float(0) | round(0) | int }} %{% elif trigger.id == 'offline' %}nicht erreichbar{% else %}gestoppt / offline{% endif %} actions: - action: telegram_bot.send_message continue_on_error: true data: chat_id: >- {% set raw = states('input_text.telegram_chat_id_norbert') %}{{ [ (raw if raw not in ['', 'unknown', 'unavailable'] else '851603710') | int ] }} message: |- *⚠️ Proxmox pve* {{ was }}: {{ zustand }} {{ now().strftime('%d.%m. %H:%M') }} Uhr – Details in der Proxmox-Oberfläche (https://192.168.192.3:8006). parse_mode: markdown - action: notify.mobile_app_iphone_von_norbert continue_on_error: true data: title: ⚠️ Proxmox pve message: "{{ was }}: {{ zustand }}" data: push: sound: critical: 1 name: default volume: 1 tag: PVE_WARNUNG mode: queued max: 20
USV: Stromausfall melden und protokollieren
id: "1790317242293" alias: "USV: Stromausfall melden und protokollieren" description: >- Wenn die USV (APC Back-UPS ES 700G an der Synology, per NUT) auf Batteriebetrieb umschaltet (binary_sensor.usv_batteriebetrieb an): Beginn speichern, Zähler counter.usv_stromausfalle erhöhen, offenen Eintrag im Störungsprotokoll (todo.storungsprotokoll) anlegen, Telegram an Norbert und Ute (Skript) und Push mit 'Kenntnis genommen'-Knopf an Norberts iPhone. Wenn der Strom zurück ist: Ende speichern, den laufenden Protokolleintrag mit Zeitraum und Dauer umbenennen und Entwarnung senden. Die Kenntnisnahme läuft über die bestehenden Automationen des Störungsprotokolls (Push-Knopf STOERUNG_OK oder Häkchen im Dashboard). triggers: - trigger: state entity_id: binary_sensor.usv_batteriebetrieb from: "off" to: "on" id: start - trigger: state entity_id: binary_sensor.usv_batteriebetrieb from: "on" to: "off" id: ende variables: akku: "{{ states('sensor.ups_batterie_ladung') | int(0) }}" laufzeit: "{{ (states('sensor.ups_batterielaufzeit') | float(0) / 60) | round(0) | int }}" actions: - choose: - conditions: - condition: trigger id: start sequence: - action: input_datetime.set_datetime target: entity_id: input_datetime.usv_stromausfall_beginn data: timestamp: "{{ as_timestamp(now()) | int }}" - action: counter.increment target: entity_id: counter.usv_stromausfalle - action: todo.add_item continue_on_error: true target: entity_id: todo.storungsprotokoll data: item: "🔌 Stromausfall · {{ now().strftime('%d.%m. %H:%M') }} Uhr – läuft" description: Offen – noch nicht zur Kenntnis genommen - action: script.telegram_universal_versand continue_on_error: true data: message: |- *🔌 Stromausfall – USV läuft auf Batterie* Seit {{ now().strftime('%H:%M') }} Uhr · Akku {{ akku }} %{{ ' · Restlaufzeit ca. ' ~ laufzeit ~ ' min' if laufzeit > 0 else '' }} Bitte im Dashboard zur Kenntnis nehmen. parse_mode: markdown - action: notify.mobile_app_iphone_von_norbert continue_on_error: true data: title: 🔌 Stromausfall – USV auf Batterie message: "Seit {{ now().strftime('%H:%M') }} Uhr · Akku {{ akku }} %{{ ' · ca. ' ~ laufzeit ~ ' min' if laufzeit > 0 else '' }}" data: tag: STOERUNG actions: - action: STOERUNG_OK title: Kenntnis genommen - conditions: - condition: trigger id: ende sequence: - action: input_datetime.set_datetime target: entity_id: input_datetime.usv_stromausfall_ende data: timestamp: "{{ as_timestamp(now()) | int }}" - variables: b: "{{ state_attr('input_datetime.usv_stromausfall_beginn', 'timestamp') | float(0) }}" e: "{{ as_timestamp(now()) }}" zeitraum: >- {% set m = ((e - b) / 60) | round(0) | int %}{{ b | timestamp_custom('%d.%m. %H:%M') }} – {{ e | timestamp_custom('%H:%M') }} Uhr ({{ (m // 60) ~ ' h ' ~ (m % 60) ~ ' min' if m >= 60 else m ~ ' min' }}) - action: todo.get_items continue_on_error: true target: entity_id: todo.storungsprotokoll data: status: - needs_action - completed response_variable: liste - repeat: for_each: >- {{ (liste['todo.storungsprotokoll']['items'] if liste is defined else []) | selectattr('summary', 'search', '^🔌 Stromausfall .*– läuft$') | map(attribute='uid') | list }} sequence: - action: todo.update_item continue_on_error: true target: entity_id: todo.storungsprotokoll data: item: "{{ repeat.item }}" rename: "🔌 Stromausfall · {{ zeitraum }}" - action: script.telegram_universal_versand continue_on_error: true data: message: |- *✅ Strom ist wieder da* {{ zeitraum }} Akku {{ akku }} % parse_mode: markdown - action: notify.mobile_app_iphone_von_norbert continue_on_error: true data: title: ✅ Strom ist wieder da message: "{{ zeitraum }}" data: tag: STOERUNG actions: - action: STOERUNG_OK title: Kenntnis genommen mode: queued
Test: Push-Nachricht an Norberts iPhone (deaktiviert)
id: "1790168002091" alias: "Test: Push-Nachricht an Norberts iPhone" description: Einfache Test-Automatisierung für Norberts iPhone. triggers: - trigger: homeassistant event: start actions: - action: notify.mobile_app_iphone_von_norbert data: title: Testalarm message: Push-Nachricht an Norberts iPhone funktioniert! data: push: sound: name: default critical: 1 volume: 1 - action: notify.mobile_app_iphone_13_ute data: title: Testalarm message: Push-Nachricht an Utes iPhone funktioniert! data: push: sound: name: default critical: 1 volume: 1 mode: single
Test: Ute betritt/verlässt Zuhause (kritische Benachrichtigung)
id: "1790246724878" alias: "Test: Ute betritt/verlässt Zuhause (kritische Benachrichtigung)" description: >- Testautomation: Kritische Push-Benachrichtigung an Norberts iPhone, wenn Ute (person.ute) die Zone Home betritt oder verlässt. triggers: - trigger: state entity_id: person.ute to: home not_from: - unavailable - unknown id: betreten - trigger: state entity_id: person.ute from: home not_to: - unavailable - unknown id: verlassen conditions: [] actions: - action: notify.mobile_app_iphone_von_norbert data: title: 📍 Ute message: >- Ute hat die Zone Home {% if trigger.id == 'betreten' %}betreten 🏠{% else %}verlassen 🚗{% endif %} ({{ now().strftime('%H:%M') }} Uhr). data: push: sound: critical: 1 name: default volume: 1 mode: queued
Norbert verlässt Raderbroich (kritische Benachrichtigung)
id: "1790424265316" alias: Norbert verlässt Raderbroich (kritische Benachrichtigung) description: 'Kritische Push-Benachrichtigung an Norberts iPhone (kommt auch bei Lautlos/Fokus durch), wenn Norbert (person.norbert) die Zone Raderbroich (zone.home) verlässt. Pendant zu ''Test: Ute betritt/verlässt Zuhause''.' triggers: - trigger: state entity_id: person.norbert from: home not_to: - unavailable - unknown id: verlassen conditions: [] actions: - action: notify.mobile_app_iphone_von_norbert data: title: 📍 Raderbroich verlassen message: Du hast die Zone Raderbroich verlassen 🚗 ({{ now().strftime('%H:%M') }} Uhr). data: push: sound: name: default critical: 1 volume: 1 mode: queued
Zone: Willkommen im Alten Brauhaus (kritische Benachrichtigung)
id: "1790431953337" alias: "Zone: Willkommen im Alten Brauhaus (kritische Benachrichtigung)" description: >- Wer die Zone 'Zum alten Brauhaus' (Gaststätte Zum Alten Brauhaus Dresen, Raderbroich 13) betritt, bekommt eine kritische Push-Nachricht auf das eigene iPhone – Norbert auf das iPhone von Norbert, Ute auf das iPhone 13 Ute. Jeder nur für sich. triggers: - trigger: zone entity_id: person.norbert zone: zone.zum_alten_brauhaus event: enter id: norbert - trigger: zone entity_id: person.ute zone: zone.zum_alten_brauhaus event: enter id: ute conditions: [] actions: - choose: - conditions: - condition: trigger id: norbert sequence: - action: notify.mobile_app_iphone_von_norbert data: title: 🍺 Zum alten Brauhaus message: Herzlich willkommen in der Gaststätte Zum alten Brauhaus. PROST 🍺 data: push: sound: name: default critical: 1 volume: 1 - conditions: - condition: trigger id: ute sequence: - action: notify.mobile_app_iphone_13_ute data: title: 🍺 Zum alten Brauhaus message: Herzlich willkommen in der Gaststätte Zum alten Brauhaus. PROST 🍺 data: push: sound: name: default critical: 1 volume: 1 mode: parallel max: 5
ha/raderbroich/logik/automationen_ueberwachung.txt · Zuletzt geändert: von nbadm
