{"id":1556,"date":"2026-08-05T13:00:46","date_gmt":"2026-08-05T11:00:46","guid":{"rendered":"https:\/\/www.coremind.ch\/wordpress\/?p=1556"},"modified":"2026-08-05T13:00:46","modified_gmt":"2026-08-05T11:00:46","slug":"switchbot-k10-pro-zwei-mini-sauger-in-ha","status":"publish","type":"post","link":"https:\/\/www.coremind.ch\/wordpress\/switchbot-k10-pro-zwei-mini-sauger-in-ha\/","title":{"rendered":"SwitchBot K10+ Pro: zwei Mini-Sauger in HA"},"content":{"rendered":"<p>Zwei <code>vacuum.minisaugroboter_k10_pro<\/code>-Entit\u00e4ten im Setup sind praktisch \u2013 und im Alltag ein \u00c4rgernis. Beide starten gleichzeitig, beide melden getrennt, beide brauchen ihre eigene Wartung, und in Home Assistant heissen sie standardm\u00e4ssig fast gleich. Wer die kleinen SwitchBot-Sauger auf zwei Etagen verteilt, will keine zwei Bedienoberfl\u00e4chen, sondern eine Logik: einer nach dem anderen, zur richtigen Zeit, mit einer einzigen Meldung am Ende.<\/p>\n<h2>Was die Integration liefert \u2013 und was nicht<\/h2>\n<p>Die K10+ Pro werden \u00fcber die <strong>SwitchBot Cloud<\/strong>-Integration eingebunden. Sie legt f\u00fcr K10+, K10+ Pro, K10+ Pro Combo, K11+, K20+ Pro sowie S10 und S20 je eine <code>vacuum<\/code>-Entit\u00e4t an. Status\u00e4nderungen kommen nicht per Polling, sondern per Webhook aus der SwitchBot-Cloud. Das ist schnell, setzt aber voraus, dass die HA-Instanz von aussen erreichbar ist \u2013 mit Home Assistant Cloud entsteht der Cloudhook automatisch, sonst braucht es eine erreichbare externe URL.<\/p>\n<p>Die lokale Bluetooth-Integration ist die schlechtere Wahl: F\u00fcr K10+ und K10+ Pro liefert die Firmware nur <code>cleaning<\/code> und <code>docked<\/code>. F\u00fcr Automationen mit Ende-Erkennung ist das zu wenig. Wer beide Integrationen parallel laufen l\u00e4sst, sollte die Bluetooth-Variante deaktivieren, sonst konkurrieren zwei Zustandsquellen um dieselbe Wahrheit.<\/p>\n<p>Erster Aufr\u00e4umschritt: Vergeben Sie sprechende Entity-IDs. <code>vacuum.sauger_eg<\/code> und <code>vacuum.sauger_og<\/code> sind in jedem Template lesbarer als eine angeh\u00e4ngte <code>_2<\/code>. Nehmen Sie sich die zwei Minuten, das gleich beim Einbinden zu erledigen \u2013 jede Automation, die sp\u00e4ter auf <code>_2<\/code> referenziert, wird beim n\u00e4chsten Ger\u00e4tewechsel zur Fehlerquelle. Erg\u00e4nzend lohnt sich ein Bereich pro Etage und ein Label wie <code>reinigung<\/code>, damit Skripte und Dashboards die beiden Ger\u00e4te gemeinsam ansprechen k\u00f6nnen, ohne dass Sie IDs pflegen m\u00fcssen.<\/p>\n<h2>Nacheinander statt gleichzeitig<\/h2>\n<p>Zwei Mini-Sauger gleichzeitig sind laut und blockieren sich an T\u00fcrschwellen. Ein Skript, das seriell abarbeitet und auf das Andocken wartet, l\u00f6st das sauber:<\/p>\n<pre><code>\n# scripts.yaml\nsauger_tour:\n  alias: Sauger-Tour EG dann OG\n  sequence:\n    - action: vacuum.start\n      target:\n        entity_id: vacuum.sauger_eg\n    - wait_template: \"{{ is_state('vacuum.sauger_eg', 'docked') }}\"\n      timeout: \"01:30:00\"\n      continue_on_timeout: true\n    - delay: \"00:02:00\"\n    - action: vacuum.start\n      target:\n        entity_id: vacuum.sauger_og\n    - wait_template: \"{{ is_state('vacuum.sauger_og', 'docked') }}\"\n      timeout: \"01:30:00\"\n      continue_on_timeout: true\n  mode: single\n<\/code><\/pre>\n<p><code>mode: single<\/code> verhindert, dass ein zweiter Aufruf die Tour parallel startet. Das Timeout ist Absicht: Bleibt ein Ger\u00e4t h\u00e4ngen, l\u00e4uft das Skript weiter statt ewig zu warten.<\/p>\n<h2>Nur saugen, wenn niemand st\u00f6rt<\/h2>\n<p>Die Tour soll laufen, wenn das Haus leer ist \u2013 aber nicht mitten in der Nacht und nicht, wenn schon gesaugt wurde:<\/p>\n<pre><code>\n# automations.yaml\n- alias: Sauger-Tour bei Abwesenheit\n  triggers:\n    - trigger: state\n      entity_id: zone.home\n      to: \"0\"\n      for: \"00:10:00\"\n  conditions:\n    - condition: time\n      after: \"09:00:00\"\n      before: \"17:00:00\"\n    - condition: template\n      value_template: >\n        {{ as_timestamp(now()) -\n           as_timestamp(states('input_datetime.sauger_letzte_tour')) > 82800 }}\n  actions:\n    - action: script.turn_on\n      target:\n        entity_id: script.sauger_tour\n    - action: input_datetime.set_datetime\n      target:\n        entity_id: input_datetime.sauger_letzte_tour\n      data:\n        timestamp: \"{{ as_timestamp(now()) }}\"\n<\/code><\/pre>\n<p>Der <code>input_datetime<\/code>-Helfer ist die simpelste Form einer Sperrfrist: 82&#8217;800 Sekunden entsprechen 23 Stunden, damit rutscht die Tour nicht Tag f\u00fcr Tag sp\u00e4ter. Wer lieber ohne Helfer arbeitet, kann stattdessen mit einem Trigger-basierten Template-Sensor den letzten Start festhalten \u2013 das Prinzip ist dasselbe wie bei den <a href=\"https:\/\/www.coremind.ch\/wordpress\/skripte-in-ha-wiederverwendbare-bausteine\/\">Skripte in HA: wiederverwendbare Bausteine<\/a> beschriebenen Bausteinen.<\/p>\n<h2>Eine Meldung statt zwei<\/h2>\n<p>Zum Schluss eine gemeinsame R\u00fcckmeldung, statt zweimal dieselbe Push-Nachricht:<\/p>\n<pre><code>\n# template.yaml\n- sensor:\n    - name: Sauger Status gesamt\n      state: >\n        {% set s = [states('vacuum.sauger_eg'),\n                    states('vacuum.sauger_og')] %}\n        {% if 'cleaning' in s %} laeuft\n        {% elif 'error' in s %} stoerung\n        {% else %} fertig {% endif %}\n<\/code><\/pre>\n<p>Auf diesen Sensor l\u00e4sst sich eine einzige Benachrichtigung setzen \u2013 und wenn er auf <code>stoerung<\/code> steht, weiss man, dass einer der beiden Sauger Aufmerksamkeit braucht, ohne die App zu \u00f6ffnen. Wer die Verbrauchsmaterialien ebenfalls im Blick behalten will, erg\u00e4nzt die B\u00fcrsten- und Filter-Sensoren der Integration in derselben Vorlage.<\/p>\n<h2>Fazit<\/h2>\n<p>Zwei K10+ Pro sind kein doppeltes Ger\u00e4t, sondern ein kleines Flottenproblem. Mit sprechenden Entity-IDs, einem seriellen Skript, einer Abwesenheits-Automation mit Sperrfrist und einem zusammengefassten Statussensor verschwindet der Verwaltungsaufwand fast vollst\u00e4ndig. Der Rest ist Feinschliff: Ruhezeiten pro Etage, ein Button auf dem Dashboard f\u00fcr die Sofort-Tour \u2013 und die Gewissheit, dass beide Sauger dann fahren, wenn es niemanden st\u00f6rt.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Zwei vacuum.minisaugroboter_k10_pro-Entit\u00e4ten im Setup sind praktisch \u2013 und im Alltag ein \u00c4rgernis. Beide starten gleichzeitig, beide melden getrennt, beide brauchen ihre eigene Wartung, und in Home Assistant heissen sie standardm\u00e4ssig fast gleich. Wer die kleinen SwitchBot-Sauger auf zwei Etagen verteilt, will keine zwei Bedienoberfl\u00e4chen, sondern eine Logik: einer nach dem anderen, zur richtigen Zeit, mit &#8230; <a title=\"SwitchBot K10+ Pro: zwei Mini-Sauger in HA\" class=\"read-more\" href=\"https:\/\/www.coremind.ch\/wordpress\/switchbot-k10-pro-zwei-mini-sauger-in-ha\/\" aria-label=\"Mehr Informationen \u00fcber SwitchBot K10+ Pro: zwei Mini-Sauger in HA\">Weiterlesen<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[],"class_list":["post-1556","post","type-post","status-publish","format-standard","hentry","category-ha"],"_links":{"self":[{"href":"https:\/\/www.coremind.ch\/wordpress\/wp-json\/wp\/v2\/posts\/1556","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.coremind.ch\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.coremind.ch\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.coremind.ch\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.coremind.ch\/wordpress\/wp-json\/wp\/v2\/comments?post=1556"}],"version-history":[{"count":1,"href":"https:\/\/www.coremind.ch\/wordpress\/wp-json\/wp\/v2\/posts\/1556\/revisions"}],"predecessor-version":[{"id":1584,"href":"https:\/\/www.coremind.ch\/wordpress\/wp-json\/wp\/v2\/posts\/1556\/revisions\/1584"}],"wp:attachment":[{"href":"https:\/\/www.coremind.ch\/wordpress\/wp-json\/wp\/v2\/media?parent=1556"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.coremind.ch\/wordpress\/wp-json\/wp\/v2\/categories?post=1556"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.coremind.ch\/wordpress\/wp-json\/wp\/v2\/tags?post=1556"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}