NEWS
[Vorlage] Roborock Gen1 - Einzelraumreinigung mit Valetudo
-
@ntsa86 Das Skript geht davon aus, dass der Roboter normalerweise links steht. Könnte ich ggf noch anpassbar machen.
Ändere bitte folgende Zeilen bei dir (angenommen du verwendest Version 3):
Zeilen 95-98:
"0": "Robo unten vom Dock", "90": "Robo rechts vom Dock", "180": "Robo oben vom Dock", "270": "Robo links vom Dock",
Zeilen 142-153:
if (angle <= 45 && angle >= -45) { // Sauger steht rechts return 90; } else if (angle > 45 && angle < 135) { // Sauger steht oben return 180; } else if (angle < -45 && angle > -135) { // Sauger steht unten return 0; } else { // Sauger steht links return 270; }
-
@ntsa86 sagte in [Vorlage] Roborock Gen1 - Einzelraumreinigung mit Valetudo:
[[29479,30010,2271819005] -> 51200 - "Valetudo-Korrdinaten"
Und das gilt nur für die y-Werte, also den 2. und 4.
Die x-Koordinaten darfst du nicht anfassen! -
@AlCalzone Danke, jetzt hat es geklappt!
-
Hallo,
habe Valetudo RE 0.8.1 auf meinem Gen1. Kann mir jemand sagen wie ich dort die Koordinaten meiner angelegten Zonen auslesen kann, damit ich diese im Skript eintragen kann?
-
@0018 Ich weiß nicht ob es einen einfachereren Weg gibt, aber wenn du eine Zone anlegst, anschließend die Developer-Tools (F12) öffnest und dort die Netzwerkanalyse startest, dann die Seite neu lädst, gibt es eine Anfrage an "get_config". Dort sind die Zonen enthalten:
-
Zonen in Valetudo anlegen und dann im Browser http://<ip>/api/get_config aufrufen. Natürlich die IP deines Robbi verwenden.
-
@ntsa86 sagte in [Vorlage] Roborock Gen1 - Einzelraumreinigung mit Valetudo:
http://<ip>/api/get_config
Wunderbar, hat direkt geklappt! Danke
-
Zu Früh gefreut. Er kommt mit den GoTo nicht zurecht. Die Zonen werden aber richtig ausgerichtet. Gibts die Möglichkeit den GoTo Befehl auszukommentieren (zum Test).
Aktuell fährt er nur rum und sucht seinen Punkt:
-
@ntsa86 Der GoTo-Punkt liegt immer in der Mitte der Zone (bzw. des ersten Abschnitts). Vermutlich ist das bei dir hinter einer Wand. Kommentiere folgende Zeilen aus:
-
Moin!
Ich habe es heute endlich geschafft, Valetudo auf meinen Vacuum v1 zu bekommen.
So weit so gut....Leider habe ich Probleme mit dem Script - es wird folgender Fehler ausgegeben:
javascript.0 (30625) script.js.Test.Rockrobo2: TypeScript compilation failed: import axios from "axios"; ^ ERROR: Cannot find module 'axios'.
Nun meine vllt. etwas doofe Frage:
Wo muss ich dieses Modul installieren?
Habe mich über ssh beim iobroker eingeloggt und mitnpm install axios -S
eigentlich (so dachte ich) axios installiert.
Habe ich da etwas falsch verstanden?
Edit: Im Javascript-Adapter habe ich unter "Zusätzliche NPM-Module" auch axios eingetragen. Hilft trotzdem nix....
Grüße!
-
@TemPeck sagte in [Vorlage] Roborock Gen1 - Einzelraumreinigung mit Valetudo:
eigentlich (so dachte ich) axios installiert.
So nicht, so:
Im Javascript-Adapter habe ich unter "Zusätzliche NPM-Module" auch axios eingetragen
Eigentlich müsste es so funktionieren. Hast du bei der richtigen Instanz installiert? Gewartet, bis die Installation im Log als abgeschlossen steht?
-
Ich habe nur eine Javascript-Instanz. Und laut log müsste es auch installiert sein:
2020-03-28 22:20:37.561 - info: host.iobroker instance system.adapter.javascript.0 started with pid 30625 2020-03-28 22:20:40.422 - info: javascript.0 (30625) starting. Version 4.4.3 in /opt/iobroker/node_modules/iobroker.javascript, node: v10.17.0 2020-03-28 22:20:40.454 - info: javascript.0 (30625) npm install axios --production --prefix "/opt/iobroker/node_modules/iobroker.javascript" (System call) 2020-03-28 22:20:42.755 - info: javascript.0 (30625) + axios@0.19.2 added 4 packages from 7 contributors and audited 29 packages in 1.399s 2020-03-28 22:20:42.756 - info: javascript.0 (30625) found 0 vulnerabilities 2020-03-28 22:20:42.811 - info: javascript.0 (30625) requesting all states 2020-03-28 22:20:42.813 - info: javascript.0 (30625) requesting all objects
Meinst du, dass die Installation über "npm install axios -S" irgendwelche Probleme verursacht haben könnte?
-
@TemPeck Ich vermute eher, dass TypeScript sich an etwas verschluckt hat - obwohl die Fixes schon länger im Adapter enthalten sein müssten. Setz mal
//@ts-ignore
über die Import-Zeile. -
Erledigt - nun taucht kein Fehler auf.
16:06:26.443 info javascript.0 (1227) script.js.Test.Rockrobo2: compiling TypeScript source... 16:06:26.599 info javascript.0 (1227) script.js.Test.Rockrobo2: TypeScript compilation successful 16:06:26.611 info javascript.0 (1227) script.js.Test.Rockrobo2: registered 7 subscriptions and 0 schedules
Ob alles klappt, kann ich erst später testen.
Vielen Dank für den Support!
-
Okay ich habe jetzt mal nur den Raum "Küche" angelegt und mit den umgerechneten Koordinaten im Script eingefügt.
Sobald ich den Datenpunkt Küche unter javascript.0.Staubsauger mit "wahr" belege, sollte er anfangen, oder hab ich da was falsch verstanden?
Im log passiert daraufhin lediglich folgendes:
javascript.0 2020-03-29 17:12:13.285 info (1227) script.js.Test.Rockrobo2: Teste Kartenorientierung...
danach passiert nichts mehr.
Wenn ich das im Script richtig sehe, sollte danach etwas mit axios "passieren".
Scheint mir, als wäre der Fehler daher nicht behoben, oder?Grüße!
-
@TemPeck sagte in [Vorlage] Roborock Gen1 - Einzelraumreinigung mit Valetudo:
Wenn ich das im Script richtig sehe, sollte danach etwas mit axios "passieren".
Ja, sollte es. Bekommst du eine Antwort, wenn du manuell im Browser
http://<dein-robo-hostname>/api/map/latest
öffnest? -
Ja, er lädt eine 1KB große Datei mit dem Namen "latest"
-
Ich hab da noch ne Idee: Du hast keine Authentifizierung aktiviert, aber im Skript die Zeilen 5-8 drin gelassen?
const valetudoAuth = { username: "valetudo-username", password: "valetudo-password" };
Lösch die mal raus oder kommentiere sie aus (
//
davor) -
@AlCalzone Das Auskommentieren (später - bei mir Zeile 107 - muss dann in der Folge auch noch einmal ausgeklammert werden) sowie der Versuch, die HTTP-Authentifizierung zu aktivieren und die Zugangsdaten einzutragen, haben jeweils wieder das selbe Ergebnis erbracht...
-
@AlCalzone
Vielen Dank für das Script bzw. die Idee, wie die Sache mit der gelegentlichen Kartenrotation gelöst werden könnte.
Sieht spannend aus.
Allerdings habe ich mit dem Script (Version 1) diverse Probleme, die ich noch gelöst bekommen muss:(0) Ich habe auch ein
//@ts-ignore
vor demimport axios from "axios";
gebraucht, damit das Script überhaupt läuft. OK.(1) Wenn ich den Sauger in einem Raum ohne die Dockingstation laufen lasse und danach auf die Station zurückstelle, enthält die letzte Karte keine Position "charger" und das Script hängt. Das Hängen kann ich programmatisch lösen, indem ich für charger und robot irgendwelche Werte vordefiniere, die dann überschrieben werden, wenn etwas zurückkommt. Ich weiß nur noch nicht, wie ich darauf sinnvoll reagieren könnte. Vielleicht kurz zum Saugen schicken und wieder heim, damit er die Karte neu aufbaut. Vielleicht reicht auch ein "Home"-Befehl. Muss ich noch ausprobieren.
(2) Problematischer ist, dass die Funktion setStateAsync nicht zuverlässig funktioniert.
function setStateAsync(id: string, state: any): Promise<void> { return new Promise(res => { setState(id, state, () => res()); }); }
Nicht zuverlässig funktioniert heißt in dem Fall, es wartet nicht und dann erhalte ich als Kartenrotation für die Raumreinigung manchmal (meistens) -1 anstatt dem berechneten Wert. Das lässt sich auch lösen, indem ich den Wert nicht mit der Kombination aus
function rememberMapRotation(rotation: number): Promise<void> { return setStateAsync(idMapRotated, rotation); //Funktioniert nicht zuverlässig }
und
function getMapRotation(): number { return getState(idMapRotated).val; }
schreibe und wieder hole, sondern die Raumreinigung so starte:
cleanRoom(room,await testMapRotation());
aber das kommt mir doch recht seltsam vor. Da kann man sich den zusätzlichen state ja gleich sparen.
Und Du hättest es ja wohl nicht so gemacht, wenn es nicht eigentlich funktionieren würde.
Was habe ich übersehen?Beste Grüße