Blog Post

Automatischer Staubsauger ohne Cloud-Zwang: Roborock S5 im KNX-Smarthome


I’m a sucker for you
You say the word and I’ll go anywhere blindly
I’m a sucker for you, yeah
Any road you take, you know that you’ll find me
I’m a sucker for all the subliminal things

(Sucker, Jonas Brothers)

Sehr lange schlummerte das folgende Projekt auf unserer TODO-Liste. Das Ziel: Integration eines Staubsaugerroboters in die Heimsteuerung zur automatischen/intelligenten Reinigung (des relativ hoch-frequentierten Untergeschosses). Die besondere Herausforderung dabei:

Vollständige Unabhängigkeit von externen Diensten (Cloud-Services)
Lokale Anbindung an die zentrale Smart-Home-Instanz zur flexiblen Automatisierung
Wahrung der vollumfänglichen Funktionsteuerung bei manuellem Eingriff

Die Lösung führt mit Hilfe eines chinesischen Roboters über eine simulierte “Pseudo-Cloud” in die absolute Staubsauger-Glückseligkeit. Von Hersteller-Zwängen befreit, können wir unser Gerät bei Sicherung unserer Privatsphäre innerhalb unserer “Vier Wände” autark betreiben. Wie das geht? Wir haben es für uns so eingerichtet:

Zutaten

Unser Lösungsvorschlag basiert auf den folgenden Ingredienzien:

  1. Roborock S5 / S50 / S55: Ein vergleichsweise preisgünstiges Gerät mit weiter Verbreitung und leicht erhältlichem Zubehör
  2. Android-App ( Mi Home Version 5.4.54.apk, 55 MB): Eine ältere Version der Original-Hersteller-App zur Extraktion des Geräte-Tokens (Token = Eindeutiger Identifikationscode zur Steuerung des Geräts)
  3. Linux (Debian)-Umgebung (Raspberry Pi oder Virtual Machine): Die “Werkstatt” zum Bau und Transfer unserer eigenen Firmware auf den Saugroboter
  4. Laufende Edomi-Instanz

Selbstgebaute Firmware

Damit wir den Sauger autark betreiben können, bauen wir uns mit Valetudo/Dustcloud eine eigene Firmware, die auf dem Gerät läuft, die Funktionen der Hersteller-Cloud vortäuscht und somit die “Telefonie nach Hause” unterbindet. Bei Bedarf kann die hausgemachte Firmware über die Rücksetzung auf die Werkseinstellungen des Geräts wieder rückstandslos entfernt werden. Somit ist die Gefahr das Gerät nachhaltig unbrauchbar zu machen verhältnismäßig gering.

Die Valetudo-Firmware bildet die Funktionen der Original-Firmware fast vollständig, inklusive der interaktiven Karten-Darstellung, ab.

Wir beginnen mit der Anleitung des Valetudo-Machers. Wer noch kein digitales Schlüssel-Paar zur SSH-Kommunikation besitzt, kann das gemäß Anleitung tun:

https://github.com/Hypfer/Valetudo/wiki/Installation-Instructions

Token-Extraktion

Falls die Token-Extraktion laut Valetudo-Anleitung – wie bei unseren Versuchen – nicht funktionieren sollte, greifen wir auf folgende Methode zurück:

  1. Android App Mi Home Version 5.4.54.apk installieren
  2. Gerät laut Anweisungen in der App einbinden
  3. Logfile auf dem Android in /sdcard/SmartHome/logs/Plug_Devicemanager/ auf "token:" absuchen

Für den Fall, dass kein Android-Device verfügbar sein sollte, kann man auf zahlreiche, andere Methoden zur Anzeige des Token zurückgreifen:

Ist die Custom-Firmware erst auf dem Gerät installiert, kann man bereits auf die Konsole zugreifen:

Per ssh verbinden – aus der Linux-Umgebung heraus:
ssh root@rockrobo -i ~/.ssh/id_ed25519

id_ed25519 ist dabei der im Vorfeld generierte, private Schlüssel.

Die Web-Bedien-Oberfläche von Valetudo ist nun auch über die IP-Adresse des Geräts in eurem Netzwerk erreichbar.

Einbindung ins Smart-Home mittels MQTT

Die frische Firmware des Geräts stellt per MQTT-Protokoll alle Attribute, bzw. Status-Informationen bereit. Ebenso nimmt es auch Befehle (Start/Stopp, Saugstufe, Zonen-Reinigung, …) von einem MQTT-Broker entgegen.

Mehr als das benötigen wir zur Steuerung/Automatisierung über unsere Smart-Home-Zentrale nicht.

Wer noch keinen MQTT-Broker auf seinem System hat, kann das für Edomi (Centos6.5) etwa so einrichten:

wget http://packages.psychotic.ninja/6/base/x86_64/RPMS/psychotic-release-1.0.0-1.el6.psychotic.noarch.rpm
rpm -Uvh psychotic-release*rpm
yum --enablerepo=psychotic install mosquitto
service start mosquitto

Sowohl Benutzername als auch Passwort sind so bei unserem lokalen Broker in der Standard-Konfiguration leer. Bei Bedarf bitte anpassen.

Haupt-Funktionen

Die Abbildung der Befehle und Status-Infos in der Visu sowie die Automatik-Logik(en) sind so nur noch Formsache:

Bei uns führt zum beispiel der Roboter die Reinigung automatisch bei Abwesenheit durch sofern sämtliche Voraussetzungen hierfür erfüllt sind:

  • Automatik-iKO: Aktiv
  • Abwesend > 3 h
  • Letzte Reinigung > 8 h
  • Aktuelle Uhrzeit zwischen 09:00 – 15:00
  • Aktueller Status: Lade Akku
  • Anzahl-Auto-Reinigungen am Tag < 1

Karte

Die Kartenübersicht mit dem Standort sowie der Wegstrecke des Geräts wird auch durch Valetudo bereitgestellt. Da die Rechenpower des Robotors für die Erzeugung der Map nicht überbeansprucht werden soll, bereiten wir die Reinigungs-Map gesondert einem “mächtigeren” Gerät auf:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install nodejs npm

cd ~
mkdir valetudomap
cd valetudomap
git clone https://github.com/Hypfer/ICantBelieveItsNotValetudo.git
cd ICantBelieveItsNotValetudo/
npm install
npm start
[STRG + C]
nano config.json

Der erste Start initialisiert die config.json-Datei für uns.
Anschließend kann man die config-Datei nach seinen Bedürfnissen bearbeiten; Die IP-Adresse des MQTT-Brokers anpassen sowie Webserver auf aktiv setzen:

{
  "mqtt": {
    "identifier": "rockrobo",
    "topicPrefix": "valetudo",
    "autoconfPrefix": "homeassistant",
    "broker_url": "mqtt://:@192.168.0.30",
    "caPath": "",
    "mapSettings": {
      "drawPath": true,
      "drawCharger": true,
      "drawRobot": true,
      "border": 2,
      "scale": 4
    },
    "mapDataTopic": "valetudo/rockrobo/map_data",
    "minMillisecondsBetweenMapUpdates": 10000,
    "publishMapImage": true
  },
  "webserver": {
    "enabled": true,
    "port": 3000
  }
}

Dienst zur Kartenbereitstellung starten:

nohup nmp start &
disown

Die Karte ist dann über die IP-Adresse des Devices und der Portangabe verfügbar.

Fallstricke & Workarounds

STAND: November 2019, Valetudo 0.4.0, Firmware v11_001886.fullos.pkg
Saug-Stufe “whisper” ist über MQTT noch nicht implementiert!

Sporadische, nächtliche Neustarts:
Der Sauger führt ggf. sporadisch und eigenmächtig einen Betriebssystem-Reset zwischen 03:00-04:00 durch. Es gibt Berichte dazu, dass dadurch ggf. auch ein Reinigungsvorgang unaufgefordert ausgelöst werden kann! 😱 Das ist ein bekanntes Problem, für das es zum gegebenen Zeitpunkt noch keine (zuverlässige) Lösung gibt:

Wir versuchen diesem Glitch in der Matrix mit einer eigenen Logik zu begegnen:

No Map Data:
Die Kartendarstellung funktioniert ggf. nicht richtig. Lediglich “No Map Data” ist zu sehen.
Die Lösung hier bringt ein Neustart des Betriebssystems des Roboters.

Um das Gerät (remote) via Edomi-LBS neustarten zu können, sind ein paar wenige Schritte vorbereitend auszuführen:

Auf der Edomi-Konsole (RSA-Schlüssel-Paar erzeugen):
ssh-keygen -t rsa -C "edomi roborock key"
cat ~/.ssh/id_rsa sollte erste Zeile mit “—–BEGIN RSA PRIVATE KEY—–“ ausgeben
Inhalt der Ausgabe von cat ~/.ssh/id_rsa.pub kopieren

Auf der Roborock-Konsole (RSA-Schlüssel autorisieren):
nano ~/.ssh/authorized_keys
Inhalt der Ausgabe von cat ~/.ssh/id_rsa.pub einfügen
Mit [STRG+ X] , Y beenden/speichern

Somit hat auch nun Edomi Vollzugriff auf das System und kann den Restart etwa so auslösen:
sudo shutdown -r now

Fazit

Ein Traum wird wahr! Der Sauger verrichtet inzwischen zuverlässig seinen Dienst. Die Reinigungsergebnisse sind gut – besonders die kurzweilige Zonenreinigung des exponierten Eingangs-Bereichs ist ein Segen! Wir bleiben mit unseren Daten privat und unabhängig von Hersteller-Diensten/-Launen.

In your face, Beijing! 😛

Comments (10)

  1. Mike Freitag, 29UTCFri, 29 Nov 2019 16:38:40 +0000 29. November 2019 at 16:38 Antworten

    In your face, Beijing!

    made my day .. sehr geil und danke für die Anleitung

  2. Sebastian Samstag, 07UTCSat, 07 Dec 2019 23:48:27 +0000 7. Dezember 2019 at 23:48 Antworten

    Danke für deinen Beitrag! Ich kämpfe gerade mit mqtt/edomi/centos6.5
    Habe einen externen MQTT-Broker laufen, aber die MQTT-LBS (subscriber/publisher) bekomme ich nicht installiert, da Mosquitto unter Cents 6.5 nicht verfügbar.

    Jetzt habe ich es nach deiner Anleitung versucht, den broker direkt auf 6.5 zu installieren – da startet er aber leider den service nicht mit dem Hinweis “start: unbekannter Dienst”

    Hast du en gute Idee für mich? Danke und Grüße!

    1. smarthomebau.de Sonntag, 08UTCSun, 08 Dec 2019 20:17:15 +0000 8. Dezember 2019 at 20:17 Antworten

      Sebastian,
      eine Ferndiagnose ist immer schwierig. Scheint so als wäre der Dienst nicht (korrekt) installiert. Die PHP-MQTT-Komponenten für die LBS können scheinbar nicht mehr auf Centos 6.5 installiert werden, da inzwischen die notwendigen Repositories nicht mehr verfügbar sind… 🙁 Wenn möglich auf Centos 7 wechseln – mehr fällt mir da leider nicht ein. Viel Erfolg!

      1. Sebastian Sonntag, 08UTCSun, 08 Dec 2019 23:43:08 +0000 8. Dezember 2019 at 23:43 Antworten

        Danke dir – ich hatte befürchtet dass ein Wechsel auf CentOs 7 ansteht. Aber was neues hat ja auch immer was gutes ;-). Viele Grüße und weiter so mit dem Blog. Ich habe hier im letzten Jahr so viel gelesen und Input für unsere KNX-Kernsanierung bekommen – Daumen hoch!

  3. red Sonntag, 12UTCSun, 12 Apr 2020 14:19:19 +0000 12. April 2020 at 14:19 Antworten

    Tolle Arbeit!!
    Gibt es bereits Erfahrungen bzw. Intensionen, den Cloud-Zwang auch für den “S5 Max” zu unterbinden? Falls ja, wäre ich auch sehr daran interessiert. Grüße

    1. smarthomebau.de Sonntag, 12UTCSun, 12 Apr 2020 18:16:54 +0000 12. April 2020 at 18:16 Antworten

      Danke! Meines Wissens gibt es aktuell (Apr. 2020) noch keine Cloud-Befreiung für die aktuellen Geräte (S5 Max, S6, etc.)… 🙁

  4. Unser Haus | smarthomebau.de Montag, 06UTCMon, 06 Jul 2020 11:31:01 +0000 6. Juli 2020 at 11:31 Antworten

    […] Saugroboter-Steuerung […]

  5. Automatische Tür(-Schließung) | smarthomebau.de Montag, 15UTCMon, 15 Mar 2021 14:23:21 +0000 15. März 2021 at 14:23 Antworten

    […] (Saug-)Roboter/Haustiere bleiben machmal ungewollt ausgesperrt… Dies muss man dann je nach Bedarf […]

  6. Jochen Dienstag, 08UTCTue, 08 Mar 2022 12:06:21 +0000 8. März 2022 at 12:06 Antworten

    saucool! Das würd mir auch taugen… aber unserem Roboter (und das ist inzwischen der 2.) muss eigentlich für jeden Saugvorgang der Staubbehälter geleert werden. Wir haben einen Hund, der offensichtlich sehr haart… aber auch ohne Hund kommt ja immer überraschend viel zusammen. Wie habt ihr das gelöst? Werdet ihr beim Verlassen des smart Homes daran erinnert, dass der Saugi noch geleert werden muss??? 😉

    Gruß
    Jochen

    1. smarthomebau.de Dienstag, 08UTCTue, 08 Mar 2022 12:24:29 +0000 8. März 2022 at 12:24 Antworten

      Wir bekommen eine Email, dass der Roboter fertig ist: Behälter leeren, Mail löschen. Das war’s.🙂

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Verwandte Themen

LED-Matrix als vielseitiges Info-Display im Smart-Home

Die Tatsache, dass die (Haus-)Technik Zuhause viel zu berichten hat, macht es notwendig eine…

KNX Sprachsteuerung – Der Vergleich: 1Home KNX Bridge vs. Thinka for KNX

Versprochen ist versprochen und wird nicht gebrochen: Wir wurden mehrfach darauf angesprochen, welche KNX-Sprachsteuerung…

ETS5 Home – Die günstige Lösung für den Otto-Normalverbraucher?

Wer in der KNX-Welt unterwegs ist, weiss: Man kommt ohne das Programmier- und Provisions-Tool…

Kurzrezension: Heimautomation mit Arduino, ESP8266 und Raspberry Pi

Der Markt für Smart-Home-Geräte ist leider derzeit noch nicht soweit etwwickelt, dass er sämtlich…

Im Test: Thinka – Sprachsteuerung für KNX (Siri + Alexa + Google)

Unser Ruf über wertvolle Expertise u. a. im Zusammenhang mit der Sprachsteuerung im KNX-Umfeld…

Automatische Tür(-Schließung)

Man unterschätzt oft die Tatsache, dass es auch nicht-elektronische/elektrische Dinge gibt, die automatisiert werden…

Smart Watch + Smart Home = Super Home!

Die digitalen, tragbaren Helferlein haben sich wohl leider noch nicht überall durchgesetzt. Überraschenderweise nutzen…

Smart-Home-Intelligenz auf Reisen: Geofencing ganz einfach!

Die Intelligenz deines smarten Zuhauses muss nicht an der eigenen Grundstücksgrenze enden. Wie wäre…

VPN-Tunnel: Sicherer Fernzugang zu unserem Smart Home

Wer kennt das nicht? Du bist unterwegs, (weit) weg von deinem smarten Zuhause. Wie…

Unsere smarte Kaffee-Maschine

“Deutschland liegt mit rund 6 Kilogramm Kaffee Pro-Kopf-Absatz (2019) im oberen Mittelfeld der Konsum-stärksten…

Smart mit KNX: Automatische Gartenbewässerung mit Hunter-Ventilen

Nichts hat mich Anfang dieses Sommers mehr genervt als den frisch gesäten Rasen mehrmals…

Im Test: 1HOME KNX Bridge – Smart Home Sprachsteuerung leicht gemacht

Im Rahmen einer Vorab-Vorführ-Aktion hat 1HOME Inc. aus Slovenien das neu entwickelte 1HOME Bridge…

KNX Secure in a Nutshell: Fragen & Antworten

Seien wir ehrlich: Das ursprüngliche Design zu Übertragungszwecken im KNX-Standard war schlicht und einfach…

#Corona – Intermezzo

Wir erleben alle derzeit bewegte Zeiten. Wir hoffen euch und eure Nächsten bei…

KNX: ETS 5 – Tipps & Tricks & FAQs (Demo/Lite/Professional)

Yeah bitches! Was KNX/ETS-Know-How angeht, sind wir the hottest shit on the internetz™®©!11!! Nur…

Speedtest Chart
UPDATE | Raspberry Pi: Internet-Geschwindigkeit-Tests automatisieren (quick & dirty)

Unser Erster Beitrag zur Internet-Geschwindigkeitsmessung ist auf sehr viel Zuspruch gestoßen – die dort…

Schicksalsschlag: Unser Plan zur Notfall-/Nachlass-Vorsorge

“Das einzig Gute am eigenen Tod ist es, dass man ihn selbst verpasst.” So…

KNX: “ETS Inside” – UPDATE – Endlich brauchbare Alternative zu “ETS Professional”?

Wir wollen uns heute erneut in aller Kürze mit der neuesten Version des KNX…

Ein schwedisches Heim für einen toten Franzosen

Liebe Freunde, es gibt eine gute und eine schlechte Nachricht. Die Gute ist: Ein…

Kostengünstig & Cloud-unabhängig: Smart-Home-Sprachsteuerung mit Snips

Liebe Freunde – es wird euch kaum entgangen sein: Wir haben uns erst vor…

Elektrischer Türöffner im Heimnetzwerk

Nicht selten hat man (in einem Smart-Home) den Wunsch sich selbst oder einem Gast…

Die Sprachsteuerung des “Kleinen Mannes” (Respeaker Core V2 + Kalliope + Edomi)

Liebe Freunde der Sonne! Ihr habt ein Smart Home mit erlesensten Technik-Spielereien vom Feinsten,…

(Fast) Jedes Haushaltsgerät ins (KNX-)Smart-Home direkt einbinden!

Leider kann man im Leben zum Einen nicht alles vorplanen und berücksichtigen, zum Anderen…

“Visu Porn”: Visualisierung in unserem Smart-Home

Ich schaue mir gerne förmlich recht voyeuristisch andere Visus an. Eine sehr gute Inspirationsquelle…

Magic Mirror im KNX-Smart-Home

Wenn es eine Sache im Internet gibt, die das Pornografie-Angebot übersteigt, dann sind es…

KNX Visualisierung – Erste Gehversuche

Liebe Freunde der optischen Leckerlies – das hier könnte hässlich werden… Denn heute geht…

Heim-LAN: Netzwerkschrank, Switch, Patchpanel & Co.

Das Netzwerk-Thema ist doch größer, als man es anfangs einschätzt: Nachdem wir die Netzwerkverkabelung…

KNX: ETS-Gruppenadressen – Die geordnete Struktur im Einfamilienhaus

Jedes ernsthaft betriebene KNX-Projekt benötigt eine geordnete Gruppenadressen-Struktur. Es sei denn ihr setzt die…

KNX: “ETS Inside” – Heilsbringer oder Mogelpackung?

Wir wollen uns heute in aller Kürze mit dem neuen KNX Inbetriebnahme-Tool ETS Inside…

ETS5 Professional (fast) kostenlos? KNX kostengünstig konfigurieren

Liebe KNX-Freunde, ich muss es euch eigentlich nicht erklären: Jede KNX-Installation benötigt zur (initialen)…

Netzwerkleitung verlegen: Schritt-für-Schritt-Anleitung

Letzes Mal sprachen wir über die theoretischen Grundlagen der Netzwerk-Vekabelung (LAN). Wie versprochen beschäftigen…