Seit einiger Zeit nutze ich für meine Roborock Saugroboter Valetudo als Firmware. Natürlich habe ich meine Valetudos mittels MQTT auch an Home Assistant angebunden. In diesem Beitrag erkläre ich, wie man mit sehr wenigen Zeilen Code automatische Benachrichtigungen erhält, wenn die Consumables (also Verbrauchsteile des Saugroboters) Aufmerksamkeit benötigen. Sobald Home Assistant dies feststellt, erhältst du also eine Push-Benachrichtigung!
Tatsächlich nutze ich die folgende Automation bereits für die Batterie-Zustände verschiedener Sensoren. Das Vorgehen ist eigentlich immer das Gleiche: 1. Man legt eine Gruppe bestehend aus den zu überwachenden Entitäten an. 2. Man erstellt eine Automation, die regelmäßig die Zustände der Gruppenmitglieder prüft.
Bei Batterie-betriebenen Geräten kann man entsprechend den Ladezustand der Batterien prüfen (sofern die Entität diesen übermittelt) und bei einem mit Valetudo geflashten Saugroboter kann man die noch verbleibende Zeit bis zum Wechsel eines Verbrauchteils überwachen.
Da ich meine Valetudos mittels MQTT an mein Home Assistant angebunden habe, erhalte ich je Valetudo Sensoren für die verbleibenden Zeiten von:
- Hauptbürste
- rechte Bürste
- Hauptfilter
- Sensorreinigung
In Home Assistant heißen diese Sensoren dann beispielsweise sensor.main_brush, sensor.main_filter, sensor.right_brush und sensor.sensor_cleaning. Jeder dieser Sensoren liefert einen Wert in Minuten, welcher für die verbleibende Zeit bis zu einem Wechsel beziehungsweise einer notwendigen Reinigung steht.
Du magst Home Assistant? Dann abonniere kostenlos meine Beiträge mit Tipps, Tricks und Anleitungen rund um Home Assistant:
Follow Home Assistant
Garantiert kein Spam, keine Werbung und immer mit Abmelde-Link, solltest du es dir anders überlegen!
Diese Entitäten packe ich zunächst in eine neue Gruppe:
valetudo_status:
name: Valetudo Zustände
entities:
- sensor.sensor_cleaning_2
- sensor.right_brush_2
- sensor.main_filter_2
- sensor.main_brush_2
- sensor.main_brush
- sensor.main_filter
- sensor.right_brush
- sensor.sensor_cleaning
Da derzeit zwei unserer Saugroboter mit Valetudo geflasht sind, gibt es jeden Sensor zweimal („…_2“)!
Nun erstellen wir noch eine Automation, die die Zustände (also Minutenangaben) der Mitglieder der Gruppe „Valetudo Zustände“ überwacht. Anstelle jeden Sensor einzeln zu überprüfen, „loopen“ wir durch die Gruppenmitglieder und prüfen für jedes Gruppenmitglied, ob ein Schwellwert unterschritten wird:
- id: notify_valetudo_status
alias: Notification-Alert for Valetudo Status
initial_state: 'on'
trigger:
- platform: time
at: '10:00:00'
condition:
condition: or
conditions:
- condition: template
value_template: >
{% set min_time = 10 -%}
{% set ns = namespace(found=false) -%}
{% for entity_id in states.group.valetudo_status.attributes.entity_id -%}
{% set parts = entity_id.split('.') -%}
{% if (states(entity_id) | replace("%","") | int) < min_time -%}
{% set ns.found = true -%}
{% endif -%}
{% endfor -%}
{{ ns.found }}
action:
- service: notify.telegram
data_template:
title: Valetudo-Alarm!
message: >
{%- set min_time = 10 -%}
{%- for entity_id in states.group.valetudo_status.attributes.entity_id -%}
{%- set parts = entity_id.split('.') -%}
{%- if (states(entity_id) | replace("%","") | int) < min_time -%}
{{ states[parts[0]][parts[1]].name }} remaining minutes: {{ states(entity_id) }}.{{ '\n' }}
{%- endif -%}
{%- endfor -%}
Jeden Tag um 10 Uhr wird die Automation abgefeuert und es ist eine Condition, dass mindestens ein Gruppenmitglied weniger als 10 Minuten übrig hat. Trifft dies auf ein Gruppenmitglied zu, wird der Name des Gruppenmitglieds sowie die verbleibenden Minuten ausgegeben „… remaining minutes: …“.
Das Ganze kann dann wie folgt aussehen, wenn man, wie in meinem Code-Beispiel, Telegram als Push-Kanal nutzt:
Produktempfehlungen
Sehr hilfreich, generell das ganze Konstrukt. Kann ich gut auf andere Sensoren anwenden!