NEWS
[Frage] Xiaomi Vacuum cleaner
-
Mein Gen1 lädt irgendwie keine map mehr. Kann mich am Xiaomi server anmelden und der Sauger wird auch gefunden aber die map wird nicht mehr geladen.
EDIT: Betritt den mihome-vacuum adapter. Hab mal im richtigen Bereich gepostet.
-
@ntsa86 das Problem hatte ich auch. Valetudu zeigt die y-Koordinaten in die falsche Richtung an.
Valetudo x1,y1,x2,y2 muss zu x1,51000-y2,x2,51000-y1 werden.Also die y Werte von 51000 abziehen und y1/y2 austauschen, so das y1 immer der niedrigere Wert ist.
-
Könntest du vlt dein Skript hier posten? Würde es gerne so wie du umsetzen.
Danke und Gruß,
Seppel -
@der-eine sagte in [Frage] Xiaomi Vacuum cleaner:
@ntsa86 nein, wurde es nicht. Ich löse das Problem in dem ich nur noch Zonenreinigungen anstosse. Auch für eine Komplettreinigung!
Das funktioniert sehr gut und in Verbindung mit einer VIS auch gut steuerbar.Was ist das für eine coole VIS?
-
@seppel786 klar
-
-
Super...Danke Dir
-
Kurze Frage zum Verständnis - Warum machst du diese Abfrage?
-
@seppel786 da wird geprüft, ob der Roboter nach 60 min immer noch läuft. Wenn ja hängt er irgendwo und soll stehen bleiben. Das hab ich hin und wieder wenn er am Eck vom Teppich hängen bleibt. Leider ist mit der Zonenreinigung die Intelligenz beim Teufel...
-
Edit: Beitrag im neuen Vacuum Adapter 2.0 gepostet (verschoben)
https://forum.iobroker.net/post/445731 -
@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.