@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 dem import 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