Roborock in Home Assistant — Die Karte, die Räume und was wirklich nützlich ist

Roborock S5 Max mit interaktiver Karte, Raum-Segment-Reinigung und Wartungssensoren, die warnen bevor die Bürste abbrennt.

#roborock #staubsauger #dashboard #home-assistant
4. April 2025
Roborock in Home Assistant — Die Karte, die Räume und was wirklich nützlich ist

Die Roborock-Integration ist direkt in HA eingebaut — kein HACS nötig. Hinzufügen, mit dem Roborock-Konto einloggen (ein Roborock-Cloud-Konto ist erforderlich), der Staubsauger erscheint. Was einem niemand sagt: das Interessante kommt von einer separaten HACS-Karte, die die Live-Karte rendert.

Die Integration

Cloud-Polling mit 5-Sekunden-Aktualisierung. Lokale Kommunikation ist möglich, erfordert aber das Extrahieren von Schlüsseln aus der Geräte-Firmware — das habe ich mir gespart. Für alles Wichtige — Reinigung starten, Akku prüfen, Raumsegmente — ist Cloud-Polling schnell genug.

Entitäten nach der Einrichtung:

vacuum.roborock_s5_max
sensor.roborock_battery
sensor.roborock_status
sensor.roborock_last_clean_area
sensor.roborock_main_brush_left    — verbleibende Lebensdauer in Prozent
sensor.roborock_side_brush_left
sensor.roborock_filter_left
sensor.roborock_sensor_dirty_left

Die Kartenkarte

custom:xiaomi-vacuum-map-card (HACS) ist das, was diese Einrichtung wirklich nützlich macht. Sie rendert die Live-Karte mit beschrifteten Raumzonen, und ein Tippen auf einen Raum startet die Reinigung genau dieses Segments.

type: custom:xiaomi-vacuum-map-card
entity: vacuum.roborock_s5_max
map_source:
  camera: camera.roborock_map
calibration_source:
  auto: true
rooms:
  - id: 16
    name: Wohnzimmer
    icon: mdi:sofa
  - id: 17
    name: Küche
    icon: mdi:silverware-fork-knife
  - id: 18
    name: Schlafzimmer
    icon: mdi:bed
  - id: 19
    name: Büro
    icon: mdi:desk
map_modes:
  - template: vacuum_clean_segment
  - template: vacuum_goto

Raum-IDs finden: Entwicklertools → Template, {{ state_attr('vacuum.roborock_s5_max', 'room_list') }} auswerten. Die IDs sind ganze Zahlen, die beim Erstellen der Karte in der App vergeben wurden. Meins fangen bei 16 an — die eigenen werden wahrscheinlich anders sein.

Die Kartenkarte lebt in einem Glas-stack-in-card. Kartenkarten brauchen border-radius: 0 auf der inneren Karte, und der äußere Container braucht overflow: hidden — sonst stehen die quadratischen Ecken der Karte aus der abgerundeten Glasumhüllung heraus.

type: custom:stack-in-card
card_mod:
  style: |
    ha-card {
      background: rgba(255,255,255,0.05) !important;
      backdrop-filter: blur(15px) !important;
      border: 1px solid rgba(255,255,255,0.10) !important;
      box-shadow: 0 8px 32px rgba(0,0,0,0.3) !important;
      border-radius: 28px !important;
      overflow: hidden !important;
    }
    ha-card::before { display: none !important; }
cards:
  - type: custom:xiaomi-vacuum-map-card
    # ...
    card_mod:
      style: |
        ha-card { border-radius: 0; box-shadow: none; border: none; }

Wartungssensoren

Die Bürsten- und Filtersensoren zählen von 100% auf 0% herunter. Ich ignorierte sie zu lange und bekam dann eine Warnung, dass die Hauptbürste bei 8% war — was sich als viel abgenutzter herausstellte, als eine Prozentzahl vermuten ließ.

Farbige Indikatorkarten für jede Komponente mit custom:mushroom-template-card (HACS, Mushroom-Suite) und card_mod (HACS):

type: custom:mushroom-template-card
primary: "{{ states('sensor.roborock_main_brush_left') }}%"
secondary: Hauptbürste
icon: mdi:brush
icon_color: >
  {% set pct = states('sensor.roborock_main_brush_left') | int(100) %}
  {% if pct > 40 %}green{% elif pct > 20 %}orange{% else %}red{% endif %}

Und eine persistente Benachrichtigung (kein Push — ich brauche mein Telefon nicht für eine Bürste klingeln) wenn etwas unter 20% fällt:

alias: Roborock — Wartungswarnung
trigger:
  - platform: numeric_state
    entity_id: [sensor.roborock_main_brush_left, sensor.roborock_filter_left,
                sensor.roborock_side_brush_left]
    below: 20
action:
  - service: persistent_notification.create
    data:
      title: "Roborock — Wartung prüfen"
      message: >
        {{ trigger.entity_id | replace('sensor.roborock_','') | replace('_left','')
           | replace('_',' ') | title }} bei {{ trigger.to_state.state }}%.
      notification_id: roborock_maintenance

Die Automatisierung, die ich täglich nutze

Reinigen während ich weg bin, andocken bevor ich zurückkomme:

alias: Roborock — Reinigen bei Abwesenheit
trigger:
  - platform: state
    entity_id: person.rolf
    to: not_home
    for:
      minutes: 5
condition:
  - condition: time
    after: "09:00:00"
    before: "18:00:00"
  - condition: state
    entity_id: vacuum.roborock_s5_max
    state: docked
action:
  - service: vacuum.start
    target:
      entity_id: vacuum.roborock_s5_max

alias: Roborock — Andocken bei Rückkehr
trigger:
  - platform: state
    entity_id: person.rolf
    to: home
condition:
  - condition: state
    entity_id: vacuum.roborock_s5_max
    state: cleaning
action:
  - service: vacuum.return_to_base
    target:
      entity_id: vacuum.roborock_s5_max

Die 5-Minuten-Verzögerung beim Abgang ist wichtig. Ohne sie löst ein kurzer GPS-Ausreißer eine Reinigung aus, und der Staubsauger ist auf halbem Weg durch die Küche wenn ich zwei Minuten später wieder reinkomme.

Die Andock-bei-Rückkehr-Automatisierung hat mich genau einmal davor bewahrt, im Dunkeln auf den Staubsauger zu treten. Es war es wert.