NEWS
[Frage] Xiaomi Vacuum cleaner
-
@seppel786 der Richtigkeit halber sollte der timeout4 gestoppt werden wenn der Status 8 ist.
-
All vacuum cleaners operate based on air flowing from the opening at the cleaning head or tool, through the best and most powerful canister vacuum and the bag and/or filter system and then out the exhaust port.
-
Wie habt ihr das gelöst, dass es eine Rückmeldung gibt, dass der Roboter fertig ist mit der Reinigung? Ich sehe keinen Datenpunkt dazu
-
@JohnnyBahama mit was willst Du darauf reagieren? Willst wissen wann er fertig ist und das in der Vis anzeigen oder andere Aktion starten?
-
//-------- Klasse zur wiederholten Ausgabe von Warnungen auf den Lautsprechern ----- function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } class Repeat_Warning { constructor() { this.text = ""; this.duration = 0; this.repeat = true; this.first_duration = 0; } start(text,duration,first_duration) { this.text = text; this.duration = duration * 60000; this.repeat = true; if (first_duration != undefined) this.first_duration = first_duration* 60000; (async () => { if (this.first_duration != 0) await sleep(this.first_duration); while (this.repeat) { setState("speechout",JSON.stringify({text:this.text,device:"ALL",vol:70})); await sleep(this.duration); } })(); } stop() { this.repeat = false; } } /* ---------------------------- Status Meldungen ---------------------------------- Ausgabe von Telegram und Sprachnachricht, wenn Staubsauger Reinigung abge- schlossen hat. "states": { "0": "Unknown", "1": "Initiating", "2": "Sleeping", "3": "Waiting", "4": "?", "5": "Cleaning", "6": "Back to home", "7": "Manuell mode", "8": "Charging", "9": "Charging Error", "10": "Pause", "11": "Spot Cleaning", "12": "In Error", "13": "Shutting down", "14": "Updating", "15": "Docking", "16": "Going to Spot", "17": "Zone cleaning", "18": "Room cleaning" } */ var vacuum_states = { "0": "hat einen unbekannten Status", "1": "wird initialisiert", "2": "schäft", "3": "wartet", "4": "?", "5": "reinigt", "6": "geht zur Docking Station", "7": "ist im manuellen Modus", "8": "wird geladen", "9": "hat einen Ladefehler", "10": "hat Pause", "11": "führt Punkt Reinigung durch", "12": "hat einen Fehlerzustand", "13": "wird heruntergefahren", "14": "wird upgedatet", "15": "verbindet sich mit der Docking Station", "16": "geht zum Zielpunkt", "17": "reinigt den ausgewählten Bereich", "18": "reinigt den Raum" }; var sauger_path = "javascript.0.sauger."; var sauger_status = sauger_path + "status"; createState(sauger_status,''); on({id:"mihome-vacuum.0.info.state", change: 'ne'}, function(obj) { var state = getState("mihome-vacuum.0.info.state").val; if ((state >= 0) && (state <= 18)) { setState(sauger_status,vacuum_states[state]); setState("speechout",JSON.stringify({text:"Staubsauger " + vacuum_states[state] + '!',device:"HausohneKZ",vol:70})); } }); //------------------------- Fehler beim Reinigen ---------------------------------- //Einmalige Benachrichtung per Telegram und wiederholte Ausgabe von Sprach- //nachricht, dass Staubsauger einen Fehler hat /* "states": { "0": "No error", "1": "Laser distance sensor error", "2": "Collision sensor error", "3": "Wheels on top of void, move robot", "4": "Clean hovering sensors, move robot", "5": "Clean main brush", "6": "Clean side brush", "7": "Main wheel stuck?", "8": "Device stuck, clean area", "9": "Dust collector missing", "10": "Clean filter", "11": "Stuck in magnetic barrier", "12": "Low battery", "13": "Charging fault", "14": "Battery fault", "15": "Wall sensors dirty, wipe them", "16": "Place me on flat surface", "17": "Side brushes problem, reboot me", "18": "Suction fan problem", "19": "Unpowered charging station" } */ var vacuum_error_states = { "0": "Es liegt kein Fehler vor.", "1": "Laserabstandsmessung hat einen Fehler.", "2": "Der Kollisionssensor hat einen Fehler.", "3": "Die Räder sind auf der Spitze eines Hindernisses.", "4": "Die Sensoren zur Stufenerkennung sind unsauber.", "5": "Die Hauptbürste muss gereinigt werden.", "6": "Die Seitenbürste muss gereinigt werden.", "7": "Das Hauptantriebsrad ist verklemmt.", "8": "Der Staubsauger ist verklemmt.", "9": "Der Staubbehälter fehlt.", "10": "Der Filter muss gereinigt werden.", "11": "Ein magnetisches Hindernis hat blockiert.", "12": "Der Akku hat keine Ladung.", "13": "Das Laden ist fehlerhaft.", "14": "Der Akku hat einen Fehler.", "15": "Die Wandsensoren sind schmutzig und müssen gereinigt werden.", "16": "Der Untergrund ist zu steil.", "17": "Die Seitebürste hat ein Problem. Staubsauger neustarten!", "18": "Der Saugventilator hat ein Problem.", "19": "Die Ladestation hat keinen Strom." }; var sauger_error = sauger_path + "error"; createState(sauger_error,''); var Saugerladen_Fehler = new Repeat_Warning(); on({id:"mihome-vacuum.0.info.error", change: 'ne'}, function(obj) { var state = getState("mihome-vacuum.0.info.error").val; if ((state >= 1) && (state <= 19)) { setState(sauger_error,vacuum_error_states[state]); Saugerladen_Fehler.start("Staubsaugerfehler: " + vacuum_error_states[state] + '!',15); } else if (state == 0) { Saugerladen_Fehler.stop(); setState(sauger_error,vacuum_error_states[state]); } }); //------------------------- Verschleißteile melden ---------------------------------- //Einmalige Benachrichtung per Telegram bei verschleiß var sauger_wearout = "javascript.0.sauger.wearout"; createState(sauger_wearout,''); function wearout(id,text) { if (getState(id).val < 5) { setState("speechout",JSON.stringify({text:text,device:"HausohneKZ",vol:70})); setState('Botschaft', text); setState(sauger_wearout, text); } else setState(sauger_wearout, "OK"); } on({id:"mihome-vacuum.0.consumable.filter", change: 'ne'}, function(obj) { wearout("mihome-vacuum.0.consumable.filter","Der Filter ist verschlissen!"); }); on({id:"mihome-vacuum.0.consumable.main_brush", change: 'ne'}, function(obj) { wearout("mihome-vacuum.0.consumable.main_brush","Die Hauptbürste ist verschlissen!"); }); on({id:"mihome-vacuum.0.consumable.sensors", change: 'ne'}, function(obj) { wearout("mihome-vacuum.0.consumable.sensors","Die Sensoren müssen gereinigt werden!"); }); on({id:"mihome-vacuum.0.consumable.side_brush", change: 'ne'}, function(obj) { wearout("mihome-vacuum.0.consumable.side_brush","Die Seitenbürste ist verschlissen!"); }); //----------------------- Warnung Saubsauger zu lange online ----------------------- var Sauger_lange_an = new Repeat_Warning(); on({ id: "mihome-vacuum.0.info.connection", change: 'gt' }, function (obj) { Sauger_lange_an.start("Der Staubsauger sollte abgeschaltet werden!",30,5*60) setState(sauger_status,'online'); }); on({ id: "mihome-vacuum.0.info.connection", change: 'lt' }, function (obj) { Sauger_lange_an.stop(); Saugerladen_zu_ende_warning.stop(); setState(sauger_path + "Putzdatum",new Date().toISOString().slice(0,10)); past(); setState(sauger_status,'offline'); }); //------------------------- Laden abgeschlossen ---------------------------------- var Saugerladen_zu_ende_warning = new Repeat_Warning(); on({id:"mihome-vacuum.0.info.battery", change: 'ne'}, function(obj) { if (getState("mihome-vacuum.0.info.battery").val === 100) Saugerladen_zu_ende_warning.start("Der Staubsauger ist aufgeladen und kann abgeschaltet werden!",30); }); //------------------------- Putzdatum und vergangene Zeit aktualisieren ---------- createState(sauger_path + "Putzdatum",'2020-05-01'); createState(sauger_path + "Putzdatum_formatiert",'am 01.05.2020 (vor 1 Tagen)'); function past() { var last_date = getState(sauger_path + "Putzdatum").val; var last_date_format = last_date.slice(0,10).split("-"); var last_date_german = last_date_format[2] + "." + last_date_format[1] + "." + last_date_format[0]; var vergangen = Math.floor((new Date().getTime() - new Date(last_date).getTime())/(24*60*60*1000)); setState(sauger_path + "Putzdatum_formatiert",last_date_german + " vor " + vergangen + " Tagen"); } past(); on({time: {hour: 10, minute: 0}}, function(obj){past()});
-
@der-eine Ich habe mir ein zyklisches blockly gebaut, indem der Sauger nur läuft wenn keiner zu Hause ist und mehr als 48Std nach der letzten komplett Reinigung vergangen sind. Jetzt kann es vorkommen, dass jemand während der Reinigung nach Hause kommt und dadurch der Sauger seinen Dienst unterbricht, indem er wieder zur Station geschickt wird mit GoHome Datenpunkt. Nachteil, er kann nicht mehr losgeschickt werden, um dort weiter zu machen, wo er aufgehört hat.
Leider hat sich der selbsterstellte Datenpunkt ´Wohnung gereinigt` wegen dem Startskript schon auf true gesetzt, also fährt er kein zweites Mal raus bis wieder alle Bedingungen erfüllt sind. Was dazu führt, das er erst wieder in zwei tagen fährt. Daher würde ich den Datenpunkt Wohnung gereingt vom Roboter haben wollen, um eine Prüfsumme zu haben.Momentan probiere ich rum und glaube ich könnte es umgehen, wenn ich ihn erst an eine Koordinate schicke und dann auf Pause setze. Aber auch hier müsste ich dann wissen, wann er fertig ist, um die nächste Startzeit zu bekommen.
-
@Marty56 Bin in Java nicht so fit, aber ich versuch mich mal reinzufuchsen. Danke dir.
Edit: Ich habe mir das mal angeschaut, sehe aber auch dort keinen Punkt indem der Roboter die Meldung sendet: Reinigung abgeschlossen.
-
@JohnnyBahama Stimmt!
Der Staubsauger sagt nur, dass er wieder im Standby oder auch an der Dockingstation ist, wenn er mit der Reinigung fertig ist.Man müsste sich also eine kleine Statemachine programmieren, die erst bemerkt, dass der Staubsauger reinigt (das wird ja auch signalisiert) und wenn dann die Meldung kommt, dass Staubsauger in Standby oder an der Dockingstation ist, könnte "Wohnung gereinigt" ausgeben.
-
@JohnnyBahama um festzustellen ob die ganze Wohnung gereinigt wurde, habe ich die gereinigten qm2 angeschaut. Wenn die über wert x waren, dann wurde die ganze Wohnung gereinigt wenn nicht dann war es nur eine Zonenreinigung. Dieser Wert wird ja pro fahrt generiert.
Edit: Unter dem Punkt Info -> Cleaned Area
dieser wird vor der nächsten Reinigung auf 0 gesetzt. -
Ich trigger auf Wertänderung des Status Objektes und in Abhängigkeit vom vorherigen Wert weiß ich was der Staubsauger gemacht hat.
-
@Diginix Das ist auch nicht schlecht, ich könnte so den Start registrieren und wenn er zurück in die Station fährt das laden und somit Schlussfolgern das er fertig ist so wie @Marty56 das auch beschrieben hat.
Danke für den Hinweis.Es wäre natürlich komfortabler wenn man den Trigger hat, den auch der Roboter von sich gibt, aber so sollte es auch gehen.
-
@der-eine Nicht das was ich mir erhoffte, weil auch Türen ab und zu geschlossen sind und somit ich die kleinstmögliche qm Zahl nehmen müsste. Aber jetzt hast du mich auf die Idee gebracht mir eine Meldung schicken zu lassen, dass die Reinigung zwar abgeschlossen ist, aber Räume fehlen und ich manuel nach reinigen kann.
By the way, kann man irgendwo feststellen, welche Räume ausgelassen worden sind oder welche gereinigt wurden bei einer Komplettreinigung? Als Datenpunkt natürlich.
-
Für jemanden den es interessiert. Es ist nicht möglich den roboter während einer komplett Reinigung zu pausieren und ihn an eine andere Position zu schicken. Dadurch verliert er den Reinigungszustand, sobald er einen anderen Befehl bekommt. GoHome und goTo löscht den Reinigungsvorgang.
Also müssen Umwege her, indem ich eine Routine schreibe, die qm pro Raum abgleicht und somit die restlichen Räume reinigt nach einer unterbrechung. Hat den Vorteil, dass er zwischen laden kann. -
Wie kann ich den den Standort bzw den Raum erkennen wo er ist ? Es gibt zwar Rooms das geht aber nur wenn ich es dort über rooms Objekte auch starte. Bei einer Auto Reinigung oder Manuellen Renigung kann ich nicht sehen wo der Staubsauger gerade ist.
Hab ich etwas übersehen? -
@ChrisXY Wenn du ihn nicht über den Adapter gezielt in einem Raum schickst, z.B. eben bei einer Komplettreinigung oder über die App, bekommst du das nicht raus.
Richtig kreativ, aber auch aufwändig, wäre es das Bild der Karte zu analysieren um die Pixelkoordinaten des Saugericons zu ermitteln und darüber die Position innerhalb der Wohnung.
Schöner wäre es wenn die API die Koordinaten jederzeit mit senden würde. Wäre das so, wäre es sicher auch im Adapter. -
@Diginix Okay danke für die Info.
Hat da schon jemand was mit blockly gemacht ? Da starten ist ja nicht das Problem ich klick die Objekte von Rooms per Blockly. Aber in zusammenhang mit Alexa ? Die rooms haben ja keinen "Brauchbaren" Namen
-
@ChrisXY Du holst dir alle Raum-Start-Buttons als virtuelle Geräte zu Alexa, z.B. über iot und legst jeweils eine Routine mit einem stimmigen Sprachbefehl an, die dann diesen Button auf true setzt.
Das ganze dann noch für Pause, GoHome usw.
So kann ich den Sauger komplett über Alexa steuern.
Ich sage nacheinander z.B. "Alexa, Wohnzimmer saugen", dann "Alexa, Küche saugen" und so werden die Räume in die Warteliste geschrieben und abgearbeitet. Am Ende wurde auch die ganze Wohnung gesaugt aber in meiner Wunsch Reihenfolge und ioBroker wusste wo der Sauger ist. Nach Fertigstellung jedes Raumes bekomme ich die Karte mit Angabe zur Fläche und Zeit als Email und Telegram. -
Hallo zusammen,
ich bin gerade dabei meinen S5 in meine VIS einzubinden und dabei auf das Problem gestoßen, dass er keine Mehretagenkarte kann - für nen neuen bin ich zu geizig
Deswegen die Frage:- Gibt's mittlerweile für den Roborock S5(0) out of the box eine Lösung, 2 Etagen in Iobroker zu realisieren/abzubilden?
- Falls nicht - mein Ansatz wäre, die Ladestation im EG so zu platzieren, dass sie theoretisch im OG den gleichen Platz hätte. Dann im EG eine Komplettreinigung über die App anstoßen, Karte erstellen lassen, dann das EG in Zonen einteilen, Koords über FloleVac auslesen und die Größe der Zonen so wählen, dass sie im EG und OG nahezu identisch die Räume abdecken (geht natürlich nur, weil Grundriss der beiden Stockwerke fast identisch sind)
Wenn das funktioniert könnte ich den Robbi aus der Ladestation nehmen, ins OG tragen und dann dort die EG Zonenreinugung für bspweise den Flur starten. Wenn die identisch übereinander liegen, dann sollten die Koords des Flurs ja identisch sein. Oder hab ich da nen Denkfehler?
VG
Volx -
Hi, ich habe neu einen Roborock S7. Eingebunden habe ich ihn in der MiHome-App. Adapter im ioBroker installiert, Login-Daten eingegeben, Gerät ausgewählt. Als ich dann speichern wollte kommt nachfolgenden Meldung - der Adapter bleibt auf Gelb. Woran kann es liegen? Ich habe die Version 2.1.1 als auch die 2.2.4 probiert.
mihome-vacuum.0 2021-03-28 17:49:35.314 info (20592) set nächster Timer: Nicht verfügbar mihome-vacuum.0 2021-03-28 17:49:34.821 debug (20592) No suitable Lua script, fallback to keys!: function(doc) { if (doc.type === 'state') emit(doc._id, doc) } mihome-vacuum.0 2021-03-28 17:49:34.810 debug (20592) server started on 0.0.0.0:53421 mihome-vacuum.0 2021-03-28 17:49:34.806 info (20592) Cloud control disabled mihome-vacuum.0 2021-03-28 17:49:34.806 info (20592) Expert mode disabled, states deleted mihome-vacuum.0 2021-03-28 17:49:34.791 info (20592) starting. Version 2.2.4 in /opt/iobroker/node_modules/iobroker.mihome-vacuum, node: v12.21.0, js-controller: 3.2.16 mihome-vacuum.0 2021-03-28 17:49:34.671 debug (20592) statesDB connected mihome-vacuum.0 2021-03-28 17:49:34.670 debug (20592) States connected to redis: 127.0.0.1:9000 mihome-vacuum.0 2021-03-28 17:49:34.625 debug (20592) States create User PubSub Client mihome-vacuum.0 2021-03-28 17:49:34.624 debug (20592) States create System PubSub Client mihome-vacuum.0 2021-03-28 17:49:34.619 debug (20592) Redis States: Use Redis connection: 127.0.0.1:9000 mihome-vacuum.0 2021-03-28 17:49:34.619 debug (20592) objectDB connected mihome-vacuum.0 2021-03-28 17:49:34.616 debug (20592) Objects connected to redis: 127.0.0.1:9001 mihome-vacuum.0 2021-03-28 17:49:34.606 debug (20592) Objects client initialize lua scripts mihome-vacuum.0 2021-03-28 17:49:34.605 debug (20592) Objects create User PubSub Client mihome-vacuum.0 2021-03-28 17:49:34.605 debug (20592) Objects create System PubSub Client mihome-vacuum.0 2021-03-28 17:49:34.604 debug (20592) Objects client ready ... initialize now mihome-vacuum.0 2021-03-28 17:49:34.591 debug (20592) Redis Objects: Use Redis connection: 127.0.0.1:9001
-
@steimi Bist du der Fehlermeldung mit der Tokenlänge mal nachgegangen und hast den evtl. nochmal eingegeben?