NEWS
[PROJEKT] Xiaomi Roborock S50 Staubsaugersteuerung mit Alexa
-
Hallo allerseits!
Nachdem ich mir hier im Forum bereits viel Hilfe erhalten, mir so einiges abgeguckt, Erfolge gehabt und natürlich auch mal gescheitert bin möchte ich mich doch auch mal für das Forum etwas nützlich machen und mein (noch WIP) Blockly Script zur Steuerung vom Roborock S50 per Alexa zur Verfügung stellen.
Da der offizielle Alexa Skill bisher nur "An/Aus" kann war dies mein erstes "größeres" IOBroker Projekt.
Ich nenne den Roborock ab hier manchmal "Saugi". (Ganz trivial und nach Inspiration meiner Tante hab ich meinen so getauft.)Also was kann das Skript bisher?
- Saugvorgang starten / pausieren / wieder aufnehmen mit Alexa
- Saugkraft steuern (in 4 Stufen. dazu später mehr)
- Saugi aufspüren
- Alexa informiert vor dem Saugstart über eingestellte Saugkraft und Saugi's Akkustand als auch erfolgt eine
Prüfung der Wartungszustände (Sensoren, Haupt-/Nebenbürste, HEPA-Filter)
damit einhergehende Warnung bei niedrigem Zustand bzw. Arbeitsverweigerung bei kritischem Zustand. - Störung/Fehler vom Saugi quittieren (z. B. "Alexa, ich habe Saugi's Störung behoben)
- Automatisches (einmaliges!) quittieren einer bestimmten Störung (dazu später mehr)
Und was wird dafür gebraucht?
- Selbstredend eine Alexa sowie den Roborock
- Laufende IOBroker Installation sowie den installierten und konfigurierten "mihome-vacuum" Adapter
- Installierter Cloud / Alexa Adapter
- Laufende javascript Instanz
- Ein wenig Geduld beim Erstellen der Datenpunkte und umbauen des Skripts für den korrekten Zugriff der Blockly's.
- Spaß an der Freude
Bevor es nun an die Sache geht will ich noch sagen, ich habe noch ein Video gemacht was das alles hier verdeutlicht. Ein Bild sagt ja bekanntlich mehr als tausend Worte.
Also dann, legen wir los und erstellen erstmal die benötigten Datenpunkte!
Schritt 1:
Legt folgende Datenpunkte an:Erklärung zu den Datenpunkten:
Schritt 2:
Legt zwei Blockly Skripte an. Der Übersicht halber habe ich sie aufgeteilt in eines für die vollautomatische Steuerung und DP Änderungen und eines für die Steuerung mit Alexa.Skript 1 Saugersteuerung mit Alexa:
Als Blockly:
Für den Import:
Skript 2 Saugereinstellungen:
Als Blockly:
Für den Import:
Wie funktioniert die Alexa Ansprache?:
Das Skript überwacht Alexa's "summary" welches immer das zuletzt gesprochene anzeigt. Es reagiert dann nicht auf feste vordefinierte Sätze sondern auf Schlüsselwörter.
Beispiel:
Zum Starten des Skripts reicht die Aussage "Alexa, staubsaugen" da Alexa hier das Schlüsselwort "staubsaugen" in der summary entdeckt hat.
Alternativ sucht Alexa nach den Wörtern "mach" und "sauber". Man könnte jetzt also sagen "Alexa, bitte die Wohnung sauber machen." oder "Alexa, mach bitte sauber".Daraus ergibt sich allerdings ein kleines Problem und somit kommen wir zu
Schritt 3:
Das Skript wird reagieren aber die eigentliche Alexa weiß nicht was sie tun soll!
Das heißt sie spuckt immer wieder als Antwort so etwas wie "Das weiß ich leider nicht". Oder "Ich kann kein Gerät mit dem Namen ... finden" aus.Dazu gab es mehrere Lösungsansätze wie wir in diesem Thread diskutiert haben klicke hier
Die derzeit wohl anscheinend einzige funktionierende Lösung ist in diesem Fall also dass wir zur Cloud Instanz navigieren und unter den "Smart Geräten" einen "Dummy" hinzufügen. Ich habe ihn bei mir Ghost genannt.
Diesen Dummy müssen wir aber jetzt noch steuern. Dazu nehme ich meine Android-Alexa App und füge Routinen hinzu.
Nun kann für jeden gesagten Satz definiert werden, dass Alexa das Dummy Gerät "Ghost" einschaltet. Puff .... und das wars mit der Flexibilität in der Ansprache. Zumindest so lange bis es eine bessere Lösung gibt. Alexa wird jetzt nurnoch einen Signalton senden oder "Okay" sagen.
Nun kann man sich überlegen welche Sätze man am häufigsten sagt und sich mit solchen Routinen dann vor "Fehlalarmen" schützen. Ich ergänze einfach im Laufe der Zeit immer wieder Sätze, wenn mir auffällt, dass Alexa wieder anfängt Blödsinn zu antworten.
Außerdem ist es bei mir sowieso nicht so störend, da die Sprachausgabe aus Skripten über einen bestimmten Echo Dot im Raum läuft, der selbst nicht angesprochen wird. (Der Angesprochene und damit selbstständig reagierende/antwortende Dot ist meistens sehr leise eingestellt)
Was hat es mit dem automatischen Störung quittieren auf sich?
Mein Saugi hat immer wieder mal Probleme mit meinem Teppich. Hier meldet er, dass die Hauptbürste verstopft ist und geht dann auf Störung. Manuell behebe ich das in dem ich nachschaue und ihn einfach wieder starte. Damit ich das umgehe hab ich eingebaut, dass der Roborock sich selbst ein mal quittiert (nur bei Störung der Hauptbürste / Error 5).
Um zu verhindern, dass er sich immer wieder selbst quittiert, auch wenn die Bürste wirklich verstopft ist bleibt er beim wiederholten melden des Fehlers (selber Saugvorgang, reset in Ladestation) stehen und lässt sich jetzt nur noch via manueller quittierung ("Alexa, Störung behoben!") starten.
Das lässt sich natürlich entsprechend umbauen wenn man die automatische quittierung bei jeder Art von Error wünscht.
Welche Befehle / Schlüsselwörter gibt es bisher?
Starten / saugen fortführen - "staubsaugen", "sauber" + "mach"
Pausieren - "saug" + "pause", "halt", "warte"
Stoppen und zur Station - "saug" + "stop", "ende", "lade", "brech"
Störung bereinigt - "fehler" / "störung" + "behoben", "weg"
Sauger finden - "saug" + "wo ist", "finde", "lokal", "suche"
Saugkraft verringern - "weniger" + "saug"
Saugkraft erhöhen - "mehr" + "saug"
Saugkraft auf Stufe einstellen - "saugkraft" + "stufe", "level" + "eins", "zwei", "drei", "vier"Was noch geplant ist / TODO Liste:
- Wischmodus über Alexa einstellen
- Zonen anlegen zu können und zu reinigen - "Alexa, mach das Wohnzimmer sauber"
- Staubbehälter Füllstand prüfen (Berechnung wann dieser das letzte mal entfernt wurde und nach x weiteren Reinigungen warnen)
- Alexa optional immer mit dem Dot antworten zu lassen der angesprochen wurde.
BUGS
Zurzeit keine bekannt!
Ich würde mich über Anregungen, Kritik, Tipps und alles weitere sehr freuen!
Ich weiß nicht ob das so angebracht ist hier danach zu fragen aber wenn mir der ein oder andere auf Youtube ein Abo dalassen würde, würd mir das den Start dort sehr vereinfachen. Zum Thema IoBroker und co. werde ich demnächst weitere Videos veröffentlichen.
Wer es noch nicht gesehen hat, hier gehts entlang zum Video: youtu.be/_x7Dn5cYb4k
Vielen Dank und beste Grüße
Chris
-
@nurChris said in [PROJEKT] Xiaomi Roborock S50 Staubsaugersteuerung mit Alexa:
Hallo Chris,
wollte gerade mal dein Blockly testen. Bei dem Versuch das Blockly Saugeinstellungen zu kopieren kam bei mir die Fehlermeldung:"Fehler beim Importieren";"TypeError: Unknown block type: pushover"
Eine Ahnung was der Fehler sein könnte?
Gruß
CHris
-
@nurChris said in [PROJEKT] Xiaomi Roborock S50 Staubsaugersteuerung mit Alexa:
Alles klar Fehler gefunden. Musste Pushover Adapter installieren.
Das mit dem Ghost habe ich noch nicht ganz verstanden. Wie lege ich den jetzt genau an?
Script läuft nun möchte ich dieses auch über Alexa steuern. -
@Chris71 Hallo, wie du einen datenpunkt anlegen kannst habe ich in einem Video an dieser Stelle erklärt:
https://www.youtube.com/watch?v=oN71WVgeK4c#t=4m16Das mit dem pushover übernehme ich noch in die Anleitung.
Viele Grüße
Chris -
@nurChris Hallo, erst einmal Respekt für so ein langes, ausführliches Script. Leider finde ich nichts genaueres zum Anlegen der SucPowerLevelName... Ich kann den Punkt zwar anlegen, aber nirgens etwas, wo ich die Stufen Leise:Leise usw eintragen kann. Ebenso beim LevelPercent kommt nur yes oder no....
Wo finde ich eine entsprechende Anleitung? -
@guergen said in [PROJEKT] Xiaomi Roborock S50 Staubsaugersteuerung mit Alexa:
@nurChris Hallo, erst einmal Respekt für so ein langes, ausführliches Script. Leider finde ich nichts genaueres zum Anlegen der SucPowerLevelName... Ich kann den Punkt zwar anlegen, aber nirgens etwas, wo ich die Stufen Leise:Leise usw eintragen kann. Ebenso beim LevelPercent kommt nur yes oder no....
Wo finde ich eine entsprechende Anleitung?Wenn man mal eine Nacht drüber geschlafen hat geht es seltsamerweise....
Dankenochmal für das Script!
Super Arbeit! -
@nurChris Jetzt hab ich doch etwas seltsames gefunden:
Wenn der Sauger in Pause ist muss ich ihn erst wieder in die Station zurückholen, sonst läuft er nicht mehr.
Deweiteren habe ich scheinbar einen Fehler im Saugereinstelllungsscript, ich be´komme lauter Fehler:
javascript.0 at Object.<anonymous> (script.js.common.Saugroboter.Einstellungen:16:5)
Und mein Log läuft mit warnungen voll; wahrscheinlich weil das Script alles blockiert.
Dieser Fehler läuft mir auch nach:You are assigning a number to the state <td class="log-column-4" title="You are assigning a number to the state 'javascript.0.Eigene_Datenpunkte.ROBOROCK.SucPowerLevelNr' which expects a boolean. Please fix your code to use a boolean or change the state type to number. This warning might become an error in future versions.">You are assigning a number to the state "javascript.0.Eigene_Datenpunkte.ROBOROCK.SucPowerLevelNr" which expects a boolean. Please fix your code to use a boolean or change the state type to number.
Was kann das sein?
-
@guergen Hey,
ich schau nicht so oft hier ins Forum darum sorry für die späte Antwort. Ich versuchs mal... Zu deinem ersten Problem. Ich kann es nicht rekonstruieren, wenn ich meinen Sauger pausiere kann ich ihm mit dem Befehl "Alexa, weiter saugen" wieder starten.
Vielleicht beobachtest du da mal die Datenpunkte ob die nach Spracheingabe richtig schalten."javascript.0 at Object.<anonymous> (script.js.common.Saugroboter.Einstellungen:16:5)", ehrlich gesagt: Keine Ahnung. Auch diesen Fehler erhalte ich nicht. Deine npm Version ist aber nicht outdatet oder?
Zu dem letzter Fehler (bzw der warning) sieht das danach aus als ob dein Datenpunkt "SucPowerLevelNr" als state nicht auf "level" festgelegt ist?
Ehrlich gesagt bin ich auch ziemlich ratlos, vielleicht hilfts ja trotzdem.
Viele Grüße
Chris -
Ob dein Sceipt auch mit dem S6 laufen würde. Leider habe ich noch keinen bin aber am überlegen mir diesen zuzulegen.
Wäre schön wenn dieses möglich wäre.MFG Maggi
-
@csamaggi sagte in [PROJEKT] Xiaomi Roborock S50 Staubsaugersteuerung mit Alexa:
Ob dein Sceipt auch mit dem S6 laufen würde. Leider habe ich noch keinen bin aber am überlegen mir diesen zuzulegen.
Wäre schön wenn dieses möglich wäre.MFG Maggi
Hallo,
dazu müsste man wissen ob der s6 über den roborock Adapter angesteuert werden kann. Wenn das wie beim s50 gleichermaßen möglich ist sollte das Skript auch für den s6 funktionieren.
Viele Grüße
Chris -
Vorab vielen Dank für die tolle Arbeit und auch dass du uns alle daran teilhaben lässt.
Hat alles super geklappt. Anleitung ist wirklich sehr gut und super gemacht.Bezüglich deiner ToDu-Liste und "Zonen" gibt es ein gute Anleitung hier im Forum.
Vielleicht kannst du es ja irgendwie integrieren, ist halt etwas komplexer die Zonen zu ermitteln...
Setze mal den Link (ist ab #291):
https://www.roboter-forum.com/index.php?thread/26292-zonen-reinigung-per-iobroker-alexa-steuern-schritt-für-schritt-anleitung/&pageNo=15Hat bei mir auch wunderbar geklappt und das Szenen anlegen kannte ich gar nicht ... und dass es so einfach rübergeht zu Alexa!
Super wäre noch Punkt 4 auf deiner Liste, also die Zuordnung eines beliebigen, gerade angesprochenen Echos!
Damit es dir nicht langweilig wirdGruß
Wolfgang -
Hi, mittlerweile habe ich den Sauge schon gut im Griff, ich frage mich allerdings, was die Werte Vacuum State =5 und ungleich 5 zu sagen haben (siehe Bild)
-
Jupp - habe ich auch gesehen, aber keine Ahnung. Gibt ja nur 4 Saugstufen. Vielleicht für „nur wischen“?!
Mich hat immer gestört, dass der Sauger nach dem reinigen eines Bereichs immer zum Dock gefahren ist, obwohl ich noch einen anderen Bereich saugen wollte. Er hat einfach nicht gehört.
Habe jetzt rausgefunden, wenn man ihn auf dem Rückweg pausieren lässt und dann den neuen Bereich über Alexa aufruft, klappt es wunderbar. Aber nicht stoppen, dann fährt er autom. immer zum Dock. -
Hallo nurChris,
Das Anlegen der Datenpunkte kann man auch mit einem Script erledigen.
Fügst du bitte noch ein Script ein, um die Datenpunkte anzulegen.
Dann wird es noch einfacher das nach zu bauen. Das müsste dann nur einmal Laufen.Bitte beschreibe auch das anlegen des Ghosts noch etwas besser.
Danke
-
@guergen @smoker Ich schaue leider zu selten hier rein, habe zuviel anderes um die Ohren in der letzten Zeit! Freut mich sehr dass euch das Skript gefällt und euer Feedback gefällt mir auch.
Der Status "ungleich 5" bzw "gleich 5" ist wie vermutet nur dafür da die richtige Aussage zu treffen da es ja maximal 4 Saugstufen gibt. Um ganz ehrlich zu sein ist es schon zu lange her als ich das geschrieben habe, so dass ich mir da selbst nicht mehr 100%ig sicher binBezüglich der Zonen... Ja das ist eine Sache die ich schon lange auf dem Schirm habe und gerne bald umsetzen möchte, ich hoffe ich finde dazu bald Zeit.
@Tibo
Danke für deine gut gemeinten Ratschläge und Tipps. Ich selbst beherrsche kein Javascript so dass ich mich da sehr schwer tun würde, vielleicht kann das ja jemand hier der auch noch Lust dazu hat und uns das zur Verfügung zu stellen.Zum Ghost muss ich sagen, dass ich den gut beschrieben finde da es wirklich sehr sehr einfache Steps sind die durchzuführen sind, hast du vielleicht den Spoiler für die Alexa-Seitige Einrichtung übersehen?
Viele Grüße an alle und danke für euer Feedback
-
@nurChris Habe Probleme mit dem Improtieren des Blocklyscriptes.
Habe die Datei aus dem Link heruntergeladen und dann geöffnet und den Quelltext kopiert.
Folgender Fehler.Kann mir einer weiterhelfen?
Danke. -
@crabs geh auf Javascript Adapter 4.3.1 da ist der Fehler weg. Die höheren bis 4.3.4 haben den Bug..
-
@ilovegym said in [PROJEKT] Xiaomi Roborock S50 Staubsaugersteuerung mit Alexa:
t der Fehler weg. Die höheren
Habe 4.1.12 woher bekomme ich den höheren?
Bei den Adaptern wird mir kein höherer angezeigt. -
Erstmal vielen Dank dass du dein Script mit uns teilst! Habe heute IO Broker installiert und dies zu meinem ersten Projekt erklärt leider habe ich wohl noch irgendwo was übersehen. Wenn ich sage Alexa mach sauer reagiert das script schon mal, aber es zeigt diese Warnungen an und startet auch keinen Robi. Was mache ich falsch? Oder geht es erst wenn man den Schritt mit Ghost Dummi usw. auch erledigt hat? Hatte es so verstanden, das alexa einfach noch nicht antwortet das Script aber startet. Oder muss ich noch wo die IP Adresse vom Rockrobo festlegen? Oder liegt es an den Datenpunkten? Muss ich die Werte unter Wert dort selbst festlegen? Bei mir steht überall no(false) drin?!
-
@furchtlos76
Hast du den mihome vacuum Adapter korrekt mit Token für deinen S50 eingerichtet?
In deinem Screenshot ist noch der selbe Alexa Datenpunkt wie bei anderen zuvor. Ihr könnt schlecht alle das selbe Echo Gerät mit der selben ID besitzen. Am wahrscheinlichsten ist dass du die Objekte im Skript noch nicht auf deine eigenen umgestellt hast.