ECOVACS Deebot – Vollautomatischer Reinigungsplan - Mit Release 2026.3

Ich möchte hier mein fertiges Setup vorstellen, mit dem ich meinen ECOVACS Deebot T10 Omni vollständig über Home Assistant steuere.

Das System beinhaltet:

  • :sparkles: Plan 1 (Zeitgesteuert)

  • :sparkles: Plan 2 (Zeitgesteuert)

  • :sparkles: Plan 3 (Sofortstart über Button)

  • :world_map: Raum‑Mapping (Helper → Ecovacs‑Areas)

  • :cyclone: Modus‑Mapping (z.B. „Nur Saugen“ → „Vacuum‑Only“)

  • :compass: Wochentag‑Steuerung

  • :control_knobs: Mushroom‑Dashboard für die komplette Bedienung

Da viele Ecovacs‑Modelle andere Area‑IDs und andere Modus‑Bezeichnungen verwenden, ist eine Anpassung nötig.

:camera_with_flash: Mein Dashboard

Das Dashboard besteht aus:

  • Plan 1 & Plan 2 (jeweils Zeit + Räume)

  • Sofortstart Plan 3 mit eigener Raumauswahl

  • Wochentagsauswahl

  • Aktueller Status

  • Action‑Buttons (Pause, Stop, Dock → Start)

:puzzle_piece: 1. Benötigte Helfer (alle manuell anlegen)

:pushpin: Wochentage Plan 1

input_boolean.sr_plan1_mo
input_boolean.sr_plan1_di
input_boolean.sr_plan1_mi
input_boolean.sr_plan1_do
input_boolean.sr_plan1_fr
input_boolean.sr_plan1_sa
input_boolean.sr_plan1_so

:pushpin: Wochentage Plan 2

analog zu Plan 1:

input_boolean.sr_plan2_mo
...
input_boolean.sr_plan2_so

:pushpin: Raumauswahl Plan 1/2/3

Die Namen müssen exakt so heißen:

input_boolean.sr_planX_ankleide
input_boolean.sr_planX_kueche
input_boolean.sr_planX_wohnzimmer
input_boolean.sr_planX_schlafzimmer
input_boolean.sr_planX_flur
input_boolean.sr_planX_flur_eingang
input_boolean.sr_planX_bad
input_boolean.sr_planX_buero_rene
input_boolean.sr_planX_buero_sandra

(X = 1, 2 oder 3)

:pushpin: Reinigungsmodus pro Plan

input_select.sr_planX_modus

Mit den Optionen:

Saugen & Wischen
Nur Saugen
Nur Wischen
Wischen nach Saugen

:brain: 2. Ecovacs Modus → internes Mapping

Der Deebot akzeptiert nur:

Vacuum & Mop
Vacuum-Only
Mopping
Mop after Vacuum

Dazu später im Code der passende Mapper.

:world_map: 3. Raum‑Mapping auf Ecovacs Areas

Der Roboter versteht z. B.:

kuche
badezimmer
arbeitszimmer
arbeitszimmer_dg

Daher müssen wir Hilfsvariablen → Ecovacs‑Areas zuordnen.

:timer_clock: 4. Plan 1 & Plan 2 – komplette Zeitplan‑Automatisierung

:light_bulb: Diese Version enthält:

  • Zeit‑Trigger per time_pattern (moderne HA‑Methode)

  • Wochentags‑Mapping

  • Bereichs‑Mapping

  • Ecovacs‑Modus‑Mapping

  • cleaning_area_id (sehr wichtig!)

  • startet den Roboter genau zur eingestellten Zeit

:check_mark: Komplette Automation für Plan 1 & 2

alias: "Staubsauger: Zeitplan Steuerung Plan 1 & 2"
description: >
  Führt die Reinigung basierend auf den Dashboard-Einstellungen für Plan 1 und 2 aus.
mode: parallel

##############################################################
# ZEIT-TRIGGER – moderne & zuverlässige Methode
##############################################################
trigger:
  - platform: time_pattern
    minutes: "*"
    seconds: 0

##############################################################
# VARIABLEN – Zeitvergleich & aktiver Plan
##############################################################
variables:
  aktuelle_zeit: "{{ now().strftime('%H:%M') }}"
  plan1_zeit: "{{ states('input_datetime.sr_plan1_zeit')[:5] }}"
  plan2_zeit: "{{ states('input_datetime.sr_plan2_zeit')[:5] }}"

  aktiver_plan: >
    {% if aktuelle_zeit == plan1_zeit %}
      plan1
    {% elif aktuelle_zeit == plan2_zeit %}
      plan2
    {% else %}
      none
    {% endif %}

##############################################################
# CONDITIONS – nur weitermachen, wenn Plan aktiv + Wochentag aktiv
##############################################################
condition:
  - condition: template
    value_template: "{{ aktiver_plan != 'none' }}"

  - condition: template
    value_template: >
      {% set tage = {
        'mon': 'mo',
        'tue': 'di',
        'wed': 'mi',
        'thu': 'do',
        'fri': 'fr',
        'sat': 'sa',
        'sun': 'so'
      } %}
      {% set heute = tage[now().strftime('%a') | lower] %}
      {{ is_state('input_boolean.sr_' ~ aktiver_plan ~ '_' ~ heute, 'on') }}

##############################################################
# ACTIONS
##############################################################
action:
  - variables:

      ########################################################
      # ROOM MAPPING – Helper → Ecovacs Area-ID
      ########################################################
      area_map:
        ankleide: ankleide
        kueche: kuche
        wohnzimmer: wohnzimmer
        schlafzimmer: schlafzimmer
        flur: flur
        flur_eingang: flur_eingang
        bad: badezimmer
        buero_rene: arbeitszimmer
        buero_sandra: arbeitszimmer_dg

      ########################################################
      # DEINE gewünschte Reinigungsreihenfolge (1–9)
      ########################################################
      sortierte_reihenfolge:
        - wohnzimmer
        - kueche
        - bad
        - schlafzimmer
        - flur_eingang
        - flur
        - ankleide
        - buero_rene
        - buero_sandra

      ########################################################
      # Räume prüfen in exakt deiner Wunschreihenfolge
      ########################################################
      gewaehlte_bereiche: >
        {% set ns = namespace(found=[]) %}
        {% for helper in sortierte_reihenfolge %}
          {% if is_state('input_boolean.sr_' ~ aktiver_plan ~ '_' ~ helper, 'on') %}
            {% set ns.found = ns.found + [area_map[helper]] %}
          {% endif %}
        {% endfor %}
        {{ ns.found }}

      ########################################################
      # Reinigungsmodus lesen & korrekt mappen
      ########################################################
      dashboard_modus: "{{ states('input_select.sr_' ~ aktiver_plan ~ '_modus') }}"

      ecovacs_modus: >
        {% set map = {
          'Saugen & Wischen': 'Vacuum & Mop',
          'Nur Saugen': 'Vacuum-Only',
          'Nur Wischen': 'Mopping',
          'Wischen nach Saugen': 'Mop after Vacuum'
        } %}
        {{ map[dashboard_modus] }}

  ##############################################################
  # Abbrechen wenn kein Raum gewählt
  ##############################################################
  - condition: template
    value_template: "{{ gewaehlte_bereiche | count > 0 }}"

  ##############################################################
  # Roboter-Modus setzen
  ##############################################################
  - action: select.select_option
    target:
      entity_id: select.ecodeebot_reinigungsmodus_2
    data:
      option: "{{ ecovacs_modus }}"

  ##############################################################
  # Reinigung starten – wichtig: cleaning_area_id
  ##############################################################
  - action: vacuum.clean_area
    target:
      entity_id: vacuum.ecodeebot_2
    data:
      cleaning_area_id: "{{ gewaehlte_bereiche }}"

:high_voltage: 5. Sofortstart – Plan 3

Für manuelles Starten per Button.

alias: "Staubsauger: Sofortstart Plan 3"
description: Startet sofort die Reinigung basierend auf den ausgewählten Plan-3-Bereichen.
mode: single

trigger:
  - platform: event
    event_type: plan3_start

action:
  - variables:

      # Mapping Helper → Ecovacs-Area-ID
      area_map:
        ankleide: ankleide
        kueche: kuche
        wohnzimmer: wohnzimmer
        schlafzimmer: schlafzimmer
        flur: flur
        flur_eingang: flur_eingang
        bad: badezimmer
        buero_rene: arbeitszimmer
        buero_sandra: arbeitszimmer_dg

      # Deine gewünschte Reinigungsreihenfolge (1–9)
      sortierte_reihenfolge:
        - wohnzimmer
        - kueche
        - bad
        - schlafzimmer
        - flur_eingang
        - flur
        - ankleide
        - buero_rene
        - buero_sandra

      # aktive Räume in definierter Reihenfolge sammeln
      gewaehlte_bereiche: >
        {% set ns = namespace(found=[]) %}
        {% for helper in sortierte_reihenfolge %}
          {% if is_state('input_boolean.sr_plan3_' ~ helper, 'on') %}
            {% set ns.found = ns.found + [area_map[helper]] %}
          {% endif %}
        {% endfor %}
        {{ ns.found }}

      # Dashboard-Modus lesen
      dashboard_modus: "{{ states('input_select.sr_plan3_modus') }}"

      # Ecovacs-Modus korrekt mappen
      ecovacs_modus: >
        {% set map = {
          'Saugen & Wischen': 'Vacuum & Mop',
          'Nur Saugen': 'Vacuum-Only',
          'Nur Wischen': 'Mopping',
          'Wischen nach Saugen': 'Mop after Vacuum'
        } %}
        {{ map[dashboard_modus] }}

  # wenn keine Räume ausgewählt → abbrechen
  - condition: template
    value_template: "{{ gewaehlte_bereiche | count > 0 }}"

  # Modus am Roboter setzen
  - action: select.select_option
    target:
      entity_id: select.ecodeebot_reinigungsmodus_2
    data:
      option: "{{ ecovacs_modus }}"

  # Reinigung starten
  - action: vacuum.clean_area
    target:
      entity_id: vacuum.ecodeebot_2
    data:
      cleaning_area_id: "{{ gewaehlte_bereiche }}"

:control_knobs: 6. Start‑Button (Mushroom)

type: custom:mushroom-template-card
primary: "JETZT STARTEN"
icon: mdi:play-circle
tap_action:
  action: fire-dom-event
  browser_mod:
    event: plan3_start

:tada: 7. Fazit

Dieses Setup erlaubt:

  • vollautomatische Reinigungspläne (Plan 1 & 2)

  • manuellen Sofortstart (Plan 3)

  • frei konfigurierbare Räume

  • frei wählbaren Reinigungsmodus

  • perfekte Kompatibilität mit Ecovacs

  • vollständig konfigurierbares Dashboard

Und das Ganze ohne App‑Cloud, komplett lokal über Home Assistant.

2 „Gefällt mir“

Wie realisierst du das ohne Cloud?

Alle Integrationen, die ich gefunden habe, wurden zugunsten der offiziellen(?) Ecovacs Integration eingestampft und diese läuft über die Cloud.

Mit den Optionen:

Momentan ist genau das mein Hauptproblem: Ich schaffe es nicht, meinen T30c nur saugen zu lassen. Welche Entität nutzt du dafür?

Ich nutze keine Ecovacs‑Integration, sondern habe meinen T50 direkt per Matter in Home Assistant eingebunden und so wie ich es verstehe läuft alles lokal, ohne Cloud, ohne Ecovacs‑Account.

Der Reinigungsmodus wird bei mir über eine Matter‑Select‑Entität gesteuert:

select.ecodeebot_reinigungsmodus_2

Dort stehen die Modi zur Verfügung:

  • Vacuum-OnlyNur Saugen

  • Mopping → Nur Wischen

  • Vacuum & Mop

  • Mop after Vacuum

In der Automatisierung setze ich vor dem Start explizit:

action: select.select_option

target:

 entity_id: select.ecodeebot_reinigungsmodus_2

data:

 option: Vacuum-Only

→ Dann saugt der T50 wirklich nur, ohne Wischen.

Das funktioniert zuverlässig, weil Matter direkt mit dem Gerät spricht und nicht über die Ecovacs‑Cloud geht.

Sehr spannende Sache.

Ich hab bisschen was ähnliches vor, aber deutlich weniger komplex. Wir haben einen Ecovacs T10, intern auch Otto genannt. :wink:

Durch die reguläre Integration ist er als Button im Dashboard. Und bei Buttonklick öffnet sich diese Ansicht:

Ich hätte nun gern in meinem HA Dashboard 2 Buttons, wo ich zwei Gebiete im aktuellen Stockwerk saugen lassen möchte. Warum sag ich Gebiete? Ich meine damit mehrere Bereiche.

Ich habe bereits ein Homeassistant-Bereich←>Ecovacs Raum Mapping durchgeführt.

Nun hätte ich gern bsw. einen Button der da heißt “Küche und Esszimmer reinigen”. Und bei Klick saugt er die 2 in der Ecovacseigenen Karte hinterlegten Räume Küche und Esszimmer. Und so beliebig anders fortsetzbar…

Ich habe kein Matter, kenne mich damit auch (noch) nicht aus.

Hat jemand ne Idee für ne alternative Lösung, um das zu realisieren? MQTT gibts da glaub ich nicht.

Schau mal hier rein:

Wenn der T10 die neue API nutzt, sollte der “freeClean” Befehl funtionieren.

Dann legst du Küche und Esszimmer mit den gewünschen Settings pro Raum in der App als Szenarioreinigung an und ziehst dir die CQID aus dem Debug Log.

Alternativ, wenn er die beiden Räume einfach mit den Standardsettings reinigen soll, kannst du auch bei freeclean einfach alle Räume auflisten (“1,1;1,4”) je nach Raumnummern.

Die Buttons fürs Dashboard kannst du dir easy per KI bauen lassen, bei mir sieht das so aus:

type: custom:button-card
            color: auto-no-temperature
            name: Szenarios
            styles:
              card:
                - font-size: 18px
                - height: 30px
              name:
                - color: var(--primary-color)
          - type: horizontal-stack
            cards:
              - type: custom:button-card
                icon: mdi:door-open
                name: Eingang (5420)
                tap_action:
                  action: call-service
                  service: vacuum.send_command
                  service_data:
                    entity_id: vacuum.t30cgen2
                    command: clean_V2
                    params:
                      act: start
                      content:
                        type: qcClean
                        value: '5420'
                styles:
                  card:
                    - font-size: 12px
                    - height: 80px
              - type: custom:button-card
                icon: mdi:desk
                name: Büro (5449)
                tap_action:
                  action: call-service
                  service: vacuum.send_command
                  service_data:
                    entity_id: vacuum.t30cgen2
                    command: clean_V2
                    params:
                      act: start
                      content:
                        type: qcClean
                        value: '5449'
                styles:
                  card:
                    - font-size: 12px
                    - height: 80px
              - type: custom:button-card
                icon: mdi:home-floor-a
                name: Alles außer Büro (5571)
                tap_action:
                  action: call-service
                  service: vacuum.send_command
                  service_data:
                    entity_id: vacuum.t30cgen2
                    command: clean_V2
                    params:
                      act: start
                      content:
                        type: qcClean
                        value: '5571'
                styles:
                  card:
                    - font-size: 12px
                    - height: 80px

Soweit ich weiß gibts die Matter-Fähigkeit für Ecovacs erst für die neueren Modelle >/= 2025