Backup der gespeicherten Karte

  • Hallo zusammen,

    hat es jemand schon geschafft die gespeicherte Karte inkl. der No-Go-Zonen zu sichern, bzw. herausgefunden wo und in welcher Datei diese "Main-map" zu finden ist?

    Hier wird beschrieben, wie man die "Cleaning Maps" aus der robot.db extrahieren kann:

    https://github.com/dgiese/dustcloud/wiki/Xiaomi-Vacuum-Maps

    Aber sind das nur die "log-Dateien" bzw. die Karten der letzten Reinigungen?


    Gruß

    Toby

  • Und die Anschlussfrage wäre dann gleich: Schafft man auch ein Restore, falls der Roboter mit einer Irrfahrt die Karte mal wieder verblasen hat.

  • Klar, darauf soll es langfristig hinauslaufen...aber ich dachte wir fangen mal klein an...;)

    Es wundert mich ehrlich gesagt etwas, dass obwohl das Ding quasi bis ins letzte Detail auseinandergenommen und die Software untersucht wurde, anscheinend bisher noch niemand über die "Main-map"-Datei gestolpert ist. Oder derjenige behält diese Information für sich und erfreut sich nicht nur über ein Mehrkarten-Management, sondern auch über "Wischkarten" mit als No-Go-Zonen gekennzeichneten Teppichen...:)


    Gruß

    Toby

  • Klar, darauf soll es langfristig hinauslaufen...aber ich dachte wir fangen mal klein an...;)

    Es wundert mich ehrlich gesagt etwas, dass obwohl das Ding quasi bis ins letzte Detail auseinandergenommen und die Software untersucht wurde, anscheinend bisher noch niemand über die "Main-map"-Datei gestolpert ist. Oder derjenige behält diese Information für sich und erfreut sich nicht nur über ein Mehrkarten-Management, sondern auch über "Wischkarten" mit als No-Go-Zonen gekennzeichneten Teppichen...:)


    Gruß

    Toby

    Ich glaube kaum, dass das nicht schon einer getestet hat. Vll übersehen wir eine Kleinigkeit ....

    Roborock S50 und S6

  • Nachdem ich am Wochenende endlich mal dazu gekommen bin den Roboter zu rooten, konnte ich etwas herumexperimentieren:

    Wenn die Karte bearbeitet wurde, werden im Verzeichnis /mnt/data/rockrobo folgende 5 Dateien angelegt/geändert:

    • user_map0
    • last_map
    • PersistData_1.data
    • PersistData_2.data
    • RoboController.cfg

    Durch "Karte zurücksetzen" werden 4 der Dateien, außer der "RoboController.cfg" gelöscht.


    So konnte ich vom UG eine neue Karte anlegen lassen und jetzt durch das jeweilige Kopieren der 4 Dateien zwischen den Karten wechseln. :)


    Die "Sperrzonen" und "Absperrbänder" werden nicht in der "user_map0" oder der "last_map" abgespeichert, sondern in "PersistData_2.data".


    Noch wichtig: die neu hochgeladene Karte und die Sperrzonen und Bänder erscheinen (zumindest in der Xiaomi-Home-app) erst, wenn man die Komplettreinigung startet, also weder bei der Zonenreinigung noch beim "Bearbeiten der Karte". Man kann diese aber natürlich, sobald die Karte geladen ist ohne Probleme abbrechen und danach z.B. eine Zonenreinigung in der neuen Karte starten.

    Im Moment tausche ich die Dateien einfach mit WinSCP aus, keine Ahnung wie aufwändig es wäre das z.B. in Valetudo zu implementieren?

    Soweit erstmal...


    Gruß

    Toby

  • Super, danke für deine Tests.


    Für Mehretagenfeature wie von NullpointerEx angedacht:


    Zweites Dock Kaufen und bei beiden Docks mit einer schaltbaren Steckdose mit Strommessfunktion im SmartHome (FHEM/iobroker/HomeAssistAnt/...) überwachen in welchem Dock er steht.


    Dockt der Roboter an, und es ist nicht die zuletzt verwendete Station, Dateien per SSH automatisch austauschen, eine Komplettreinigung starten und nach ein paar Sekunden wieder abbrechen.


    Ab da sollte man per App oder SmartHome System ganz normal Zonenreinigungen starten können. Die Sperrzonen sind dann ja auch gleich korrekt gesetzt, womit man auf mehreren Stockwerken getrennte Sperrzonen hinbekommt, was Roborock ja nichtmal im neuen S6 hinbekommen hat. :-)


    Und das alles automatisch nur durch tragen des Robos zur anderen Station.



    Ob man sich die zweite Ladestation sparen kann und der Robo es irgendwie schafft seine Position auf der Karte ohne das Dock zu finden wäre noch die Frage. Karte / Stockwerk müsste dann halt händisch über ein Dropdown in der Bedienoberfläche des SmartHome Systems auswählbar sein.


    Kann aber auch gut sein, dass der Robo nicht überzeugt werden kann, die persistente Karte zu verwenden wenn er nicht vom Dock startet

  • Über ein zweites Dock habe ich auch schon nachgedacht, aber der Preis steht irgendwie in keinem Verhältnis zum Roboterpreis...;)


    Bei mir hat er jetzt auf der geladenen UG-Karte (die ohne Dock) nach kurzem Herausfahren aus dem EG-Dock, in einem Raum, der dem "EG-Dock-Raum" am nächsten kommt, das Dock eingezeichnet. Dafür hat er in der app kurz eine neue Karte generiert, um dann auf dem Dock wieder auf die UG-Karte zu wechseln.


    Ich hab auch noch ein bisschen bei den "issues" bei Valetudo-GitHub gelesen, dort ist das Thema auf mehrere Einträge verteilt. Jemand schrieb dort, dass seine Karten anscheinend nur 6 Wochen "gültig" sind, daher könnte das "alte Karte kopieren" auf Dauer zu Problemen führen.

    Ich werde mich als nächstes mal was mit automatischen Copy/Backup-Scripts auseinandersetzen und dort jeweils vor dem Kopieren der neuen Karte, die Alte sichern. So sollte auf jeden Stockwerk immer die letzte Version verfügbar sein und es, solange man ein Stockwerk innerhalb von 6 Wochen saugt, auch keine Probleme diesbezüglich geben.

    Ich bleibe auf jeden Fall dran... :)


    Gruß

    Toby

  • So, hab meinen gerade auch gerootet und das Ganze getestet.


    Klappt einwandfrei.

    VIelen Dank für deine Vorarbeit Toby.


    Ich denke ich werde mein NAS als NFS-Share auf dem Robo einbinden und per Cron die Daten täglich sichern.

    Dann jeweils die letzten 60 Tage aufheben und ältere automatisch löschen.


    Das sollte als Backup reichen.


    Dann muss ich nur noch ein Restore übers SmartHome Webfronend reinbasteln,

    dass der Rest der Familie das per Knopfdruck auch hinbekommt. :)


    Sehr fein ist, dass man den Reinigungsvorgang (der die Karte dann lädt) so schnell starten und stoppen kann,

    dass der Robo das Dock noch nichtmal verlässt.

    Die Karte taucht dann trotzdem auf.


    Ein komplett automatisierter Reload der Karte sollte also über ein beliebiges Steuersystem wie z.B. eine SmartHome Zentrale problemlos gehen.


    Ganz ohne Usereingriff geht es aber evtl. doch nicht wenn das mit den 6 Wochen stimmt.

    Denn dazu müsste man noch automatisiert herausbekommen welche Karte aus den Backups in Ordnung ist, und welche nicht...

    (Mir geht es ja mehr um den Backup/Restore Gedanken, da wir nur ein Stockwerk haben.)

    Da muss ich mir nochmal ein paar Gedanken zu machen.


    Grüße,

    Tobi

  • Thyraz

    Ich habe jetzt nochmal bei github nachgesehen. Hier vermutet der User ein "Verfallsdatum" der Karten. Allerdings schreibt er ein paar Kommentare weiter oben, dass er immer den gesamten Roborock-Ordner kopiert und wiederherstellt (=O). Ich vermute daher, dass bei ihm nicht die Karten, sondern eher andere Dateien (z.B. die, die jede Nacht um 3:30 Uhr automatisch geändert/aktualisiert werden) die Probleme bzgl. des Datums verursachen. :/


    Gruß

    Toby

  • Ok, dann drücken wir mal die Daumen. ;)


    Werde heute nochmal eine saubere Karte mit allen unnötigen Hindernissen weggeräumt erstellen und die dann mal als initiale Version speichern.

    In c.a. 6 Wochen wissen wir dann mehr. :S

  • Wird denn bei Dir die Karte so oft gelöscht? Das ist mir ehrlich gesagt noch nie passiert, Karte mit falschen Wänden aus einem anderen Stockwerk "ergänzt" ja, aber so richtig gelöscht noch nicht, vielleicht weil ich von Anfang an eine "user_map0" hatte?...:/

    Ich habe bisher die "user_map0" auch nur durch Speichern in der app generieren können, während der normalen Reinigung werden nur "last_map" und "PersistData_1.data" erzeugt/aktualisiert. Ich konnte auch noch nicht herausfinden unter welchen Umständen (außer nach dem Speichern der Sperrzonen) auf die "user_map0" zugegriffen wird. Daher meine Vermutung, dass diese als eine Art "internes Backup" der "last_map" fungiert...aber so richtig weiß das wohl noch nicht mal Roborock, wenn man sich das aktuelle "Kartenmanagement" des S6/T6 ansieht...;)


    Gruß

    Toby

  • Bei mir geht es weniger darum, dass die Karte richtig gelöscht werden würde.

    Aber er zerstört sie manchmal indem er durch irgendwelche Hindernisse sich dreht / verschiebt ohne es mitzubekommen.


    Dann zeichnet er die Karte nochmal schräg drüber, fährt totalen Blödsinn und endet dann meist in irgendeinem Eck und findet nicht mehr nach Hause.


    Wenn man Pech hat ist die Karte beim nächsten komplett neu Erstellen dann anders orientiert und meine Koordinaten für die Zonenreinigungen aus dem SmartHome System heraus passen nicht mehr.


    Das ist aber sicher der Tatsache geschuldet, dass durch den Nachwuchs hier oft irgendwelcher Blödsinn rumliegt. ;)

    Ich will aber eben dennoch nicht auf eine automatische Reinigung durch Anwesenheitserkennung verzichten.

    Mal wird eben hier was nicht gesaugt, mal in einem anderen Zimmer.

    Wenn man jeden 2ten Tag saugen lässt ist das nicht so wild.


    Ich will mit dem regelmäßigen Restore einfach erreichen,

    dass ich den gestrandeten Robo in so einem Fall einfach ins Dock zurücktragen kann und er dann automatisch wieder die richtige Karte geladen bekommt.

  • Ah, verstehe...solche "extremen Umstände" haben wir hier nicht...;)

    Eigentlich müsste ja dann ein restore der Karte aus dem Backup vom Vortag reichen...


    Gruß

    Toby

  • Genau, ich würde das nur eben gerne automatisieren, damit meine Frau auch möglichst wenig genervt wird von irgendwelchen Fehlfunktionen.


    Daher ist die Idee einfach immer wenn der Sauger in der Ladestation landet, das Backup zurückzuspielen und so kurz Reinigung starten und wieder abbrechen, dass die Karte geladen wird ohne, dass der Sauger aus der Station landet.


    Sollte er die Karte also irgerndwie unzulässig erweitern oder gar nicht mehr zurückfinden,

    reicht es wenn meine Frau den Robo zu Station trägt.

    Der Rest läuft dann automatisch und ne Minute später ist in der App wieder die Standardkarte geladen.


    Dann klappt das auch wenn ich mal ein paar Tage außer Haus bin.

  • Hi,


    falls du dann eine funktionierende Lösung gebastelt hast, würde ich mich sehr über eine idiotensichere Schritte-für-Schritt-Anleitung freuen!


    :love:

  • Werde ich machen.


    Noch ein Vorteil der mir gerade aufgefallen ist:


    Wenn man immer mit der selben "Masterkarte" startet, kann man damit auch bei der letzten Reinigung geschlossene Türen wieder resetten.


    Somit wird dann auch eine Zonenreinigung nicht mehr an einer vormals geschlossenen Tür scheitern, nur weil der Robo mal wieder nicht weiß wie er jetzt hinkommen soll.


    Bisherige Lösungsansätze, wie z.B. den Robo immer erst eine Minizone vor der Tür reinigen zu lassen, damit er die offene Tür wieder erkennt, können damit auch entfallen. :)

  • Also ich hab gestern ein wenig gebastelt.


    Hab nun ein NodeJS Script auf dem Robo laufen, welches eine MQTT Verbindung zu einem Broker öffnet und auf Save/Restore Messages lauscht.

    Damit kann man die aktuelle Karte unter einem beliebigen Namen speichern und Karten über diese Namen auch wieder laden.


    Das sollte sowohl zum Laden einer "Default" Map inkl. offener Türen, als auch für mehrere Stockwerke funktionieren.


    MQTT kann man ja an jedes SmartHome System anbinden, in Verbindung mit den Systemen, welche den Sauger sowieso schon überwachen und steuern können (FHEM, iobroker, HomeAssistant, ...) sollte das eine nette Erweiterung sein. :)


    Ich teste das heute Abend noch ein wenig, dann stelle ich es hier zum Download bereit.