Ich würde mir gerne Benachrichtigungen schicken lassen wenn eine Wartung fällig ist.
Aktuell habe ich für jedes Wartungsereignis ein input_datetime damit ich tracken, kann wann die letzte Wartung war z.B. vor 4 Wochen.
Da es einige Sensoren sind hätte ich gerne eine generische Lösungen gefunden, anstatt stupide für jeden Sensor eine eigene Automation anzulegen.
Erste Idee war ein Attribut im Sensor zu setzen, nach wieviel Monaten benachrichtigt werden soll, aber leider kann man im input_datetime keine eigene attribute hinterlegen.
Gehe ich richtig in der Annahme, dass die input date_time, das Datum der letzten Wartung repräsentieren. Jedes Gerät hast unterschiedliche Wartungsintervalle.
Bsp. an 2 Geräten
input_datetime.wartung_1 → Gerät 1 → Wartungsintervall 30 d
input_datetime.wartung_2 → Gerät 2 → -> Wartungsintervall 60 d
Du kannst alles in eine Automation packen und arbeitest mit Templates als Auslöser:
Also input datetime + 30 Tage als Auslöser
Mit id: definierst Du für jeden Auslöser den Gerätenamen und kannst mit diesem Template den Gerätenamen ausgeben.
Das war gestern noch mein 1. Versuch. Ein wenig fehleranfällig weil man viel Copy Paste mit dem Template machen muss, aber ein Anfang und besser als x Automationen.
Wenn Du soviel Geräte hast, dann kannst Du Dir auch ein Marco schreiben und dann in der Automation nur noch das Marco aufrufen und den Input date_time übergeben. Oder die Deluxe Version, Du erstellst Dir ein Blueprint.
Du könntest dir jeweils einen weiteren input_datetime-Helfer anlegen und dort schon das neue Datum über z. B. Automationen setzen. Ich habe etwas ähnliches, vielleicht kannst du das gebrauchen
alias: "Steckdose: Tapo Wäschezimmer aus set Zeitstempel"
description: >-
Schreibt die Aus-Zeit in eine Helper um spätestens 1 Woche später die
Steckdose wieder einzuschalten.
mode: single
triggers:
- entity_id:
- switch.tapo_waschezimmer
from: "on"
to: "off"
trigger: state
conditions: []
actions:
- target:
entity_id: input_datetime.steckdose_tapo_waschezimmer
data:
datetime: "{{ (now() + timedelta(days=7)).strftime('%Y-%m-%d %H:%M:%S') }}"
alias: Setzt den Wert eines Helper auf Datum/Uhrzeit der Aktion + 7 Tage
action: input_datetime.set_datetime
blueprint:
name: Maintenance interval
description: Actions to perform when the maintenance interval is due
author: MelleD
domain: automation
input:
wartung_sensors:
name: Wartung Sensoren
selector:
entity:
multiple: true
domain: binary_sensor
due_notification:
name: Maintenance Interval Due Notification
description: Create a persistent notification when the maintenance is due.
default: True
selector:
boolean:
high_notification:
name: Remove Due Notification
description: Remove the persistent notification when the maintenance is done.
default: True
selector:
boolean:
additional_conditions:
name: Additional conditions
description: |
Extra conditions you may want to add to this automation
(Example: Home occupied)
default: []
selector:
condition:
on_due_actions:
name: On Low Actions
description: User actions to run on battery low. Use any event data via trigger.event.data.xxx
default: []
selector:
action:
on_high_actions:
name: On High Actions
description: User actions to run on battery returning from low. Use any event data via trigger.event.data.xxx
default: []
selector:
action:
variables:
due_notification: !input due_notification
high_notification: !input high_notification
triggers:
- trigger: state
id: due
entity_id: !input wartung_sensors
from: "off"
to: "on"
- trigger: state
id: high
entity_id: !input wartung_sensors
from: "on"
to: "off"
conditions:
#- condition: template
# alias: Only problem device class and entity id which contains 'wartung'
# value_template: |-
# {{ 'wartung' in trigger.entity_id and state_attr(trigger.entity_id, 'device_class') == 'problem' }}
- alias: User pick
condition: !input additional_conditions
actions:
- choose:
- conditions:
- condition: trigger
id:
- due
sequence:
- if:
- condition: template
value_template: "{{ due_notification }}"
then:
- action: persistent_notification.create
data:
title: |
Wartung fällig
notification_id: "maintenance_interval_{{ trigger.entity_id }}"
message: >
Wartung von {{state_attr(trigger.entity_id,'friendly_name')}} ist fällig!
- alias: "Run user on due actions"
choose: []
default: !input "on_due_actions"
- conditions:
- condition: trigger
id:
- high
sequence:
- if:
- condition: template
value_template: "{{ due_notification }}"
then:
- action: persistent_notification.dismiss
data:
notification_id: "maintenance_interval_{{ trigger.entity_id }}"
- alias: "Run user on high actions"
choose: []
default: !input "on_high_actions"
mode: queued
Was habe ich gemacht:
Ich habe mir zu jeder Wartung einen binary sensor angelegt
Zusätzlich kann man eine Action noch angeben ich lasse mir noch eine Nachricht aufs Handy schicken
Wenn es von off auf on geht wird die wieder gelöscht
Was mir aktuell nicht gefällt:
a) Man muss alle binary sensor immer der automation hinzufügen.
Ich hätte gerne einen dynamischen trigger sobald irgendein binary sensor auf on geht, dass dann getriggert wird, aber das klappt nicht
b) Ich hätte gerne noch ein blueprint sobald die Nachricht gelöscht wird, dass das input_datetime automatisch auf das aktuelle Datum gesetzt wird.