NEWS
Test Adapter Mihome-vacuum v3.1.6 Next Generarition
-
@dirkhe
Danke.Ein iob fix hat nicht geholfen. Das Problem ist scheinbar redis.
Das System sieht von der Konfiguration so aus:
iobroker is running on this host. At least one iobroker host is running. Objects type: redis States type: redis
Nach dem ich die Konfiguration auf file/file umgestellt habe hat wieder alles funktioniert. Wieder auf redis/redis umgestellt funktioniert das Speichern der Karte nicht.
Eine Idee wie man das lösen könnte? Ich nutze die png nur um mir nach dem Saugvorgang ein Bild des gesaugten Bereichs per Telegram zu senden. Lässt sich das auch mit base64 lösen? Dann hätte ich einen Workaround.
-
laeuft denn dein Redis-Server?
-
@ilovegym
Der Dienst läuft und wenn ich die redis-cli starte kann ich auch ganz normal z. B. "info server" mir anzeigen lassen.
Ich suche gerade eine Möglichkeit mittels Javascript Daten aus der Redis-DB auszulesen. Ich denke, dass das mein Problem ist da die Daten nicht mehr im Filesystem abgelegt werden. Oder habe ich redis falsch verstanden? -
hast du richtig verstanden, deine Daten liegen bei redis/redis in der Redis-Datenbank. Zugriff hast du damit mit bei iobroker javascript mit readfile / writefile, im Gegenzug zu readfilefs/writefilefs was aufs Filesystem zugreift.
-
hmm ich habe gerade mit den Räumen bisschen rumgespielt. Ich bekomme nur IDs angezeigt keine Namen.
Wie finde ich nun raus was welcher Raum ist? So weiss ich ja welcher Mapindex dann der Raum ist und dann den Staubsauger zum Mapindex schicken.
Leider kann man wohl auch nicht erkennen in welchem Raum er gerade ist? Ich bekomme in dem Räumen leider keine änderungen wenn er sich darin befindet. -
@chrisxy da hilft nur den Raum einmal mit dem Button roomclean reinigen zu lassen, dann siehst du, welcher das ist..
oder hat jemand ne andere Idee ??? -
@ilovegym
Dann war die Überlegung nicht ganz falsch. Aber nächstes Problem. Ich bekomme die Daten aus Redis nicht raus.In den Beispielen in der Dokumentation (https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md#readfile) würde es wie folgt aussehen:
readFile('mihome-vacuum.admin', '/actualMap_0.png', function (error, data) { console.log(data.substring(0, 50)); });
oder
readFile('/../mihome-vacuum.admin/actualMap_0.png', function (error) { console.log(data.substring(0, 50)); });
Bei beiden Abfragen kommt die Meldung
TypeError: Cannot read properties of undefined (reading 'substring')
zusätzlich stürzt der komplette javascript-Adapter ab. Das Beispiel 1 aus der Dokumentation funktioniert. Das Beispiel zwei nicht.
Hab jemand das schon hinbekommen und kann mir mitteilen wo ich den Fehler habe?
-
@ilovegym ja nun hat es geklappt ich musste jeweils den Staubsauger zur Ladestation schicken. Sonst hat er es nicht angekommen. Noch ein Tipp? Wie kann ich nun per Control eine ID angeben? Geht das? Also Mapindex 12 soll er reinigen? Oder muss ich dies zwingend über den room.71284738.clean.. gehen ?
Plan war es eine Dropdown im VIS oder ähnliches zu machen wo man den Raum nur auswählen muss. Notlösung jeder Raum ein Schalter.
Den Status in welchem Raum er ist kann man nicht sehen? Außer die MAP
-
@chrisxy mit den ID's hab ich noch nie gearbeitet .. k.a.
Ich hab das gar nicht in der VIS drin, nur die Raeume mit dem iot-Adapter verknuepft, Alexa reinige Wohnzimmer, und fertich.. mehr brauchen wir hier nicht.. der Rest geht automatisch, wenn keiner Zuhause ist mit den 4 Saugern..
@tazdevil20
was hast du denn vor?Ich lasse mir nur Statusmeldungen und die Map aufs Handy schicken per SynoChat..
Und wenn der Staubbehaelter voll ist, fahren se zum Muelleimer.. dazu hab ich ein Script, dass zu jedem vollendeten Saugvorgang einen Zaehler hochsetzt, bis der Behaelter voll ist ( hab ich selbst rausklabustert wieviel das bei welchem Sauger ist).. Wenn der Behaelter geleert ist, muss ich den Datenpunkt dann wieder manuell auf 0% setzen, was ich zu 99% vergesse und er beim naechsten mal wieder zum Muelleimer faehrt.. er vergisst ja nix..
-
@chrisxy
In vis so:
und mit einem Script:
// Mihome - Staubsauger var request = require('request'), logging = true, Auto_Sprache = 'javascript.0.System.Automatik.Sprachausgabe'; var ID_Wz = "2803", ID_Kueche = "2831", ID_Buero = "2832", ID_Flur = "5081", ID_Sz = "2868", ID_Bad = "2870", ID_GaesteWC = "2902", ID_Arbeitsz = "3924" // Räume: Erdgeschoss Kellergeschoss // 451001032803 Wohnzimmer 451001035078 ??? // 451001032831 Küche 451001035079 ??? // 451001032832 Büro 451001035080 ??? // 451001035081 Flur // 451001032868 Schlafzimmer // 451001032870 Bad // 451001032902 Gäste WC // 451001033924 Arbeitszimmer // Zonen - Reinigung ---------------------------------------------------------------------------------------------- on({id: "javascript.0.Geräte.Staubsauger.Taster_Zone", change: "ne", val:true}, function() { // Taster wurde gedrückt var Zone = []; setState('mihome-vacuum.0.cleanmap.actualMap', 0); // 0 = Erdgeschoss, 1 = Kellergeschoss setTimeout(function() { if (getState("javascript.0.Geräte.Staubsauger.Zone_Arbeitszimmer").val) { setState('mihome-vacuum.0.rooms.45100103' + ID_Arbeitsz + '.roomClean', true); Zone.push("Arbeitszimmer"); }}, 500); setTimeout(function() { if (getState("javascript.0.Geräte.Staubsauger.Zone_Bad").val) { setState('mihome-vacuum.0.rooms.45100103' + ID_Bad + '.roomClean', true); Zone.push("Bad"); }}, 1000); setTimeout(function() { if (getState("javascript.0.Geräte.Staubsauger.Zone_Büro").val) { setState('mihome-vacuum.0.rooms.45100103' + ID_Buero + '.roomClean', true); Zone.push("Büro"); }}, 1500); setTimeout(function() { if (getState("javascript.0.Geräte.Staubsauger.Zone_Flur").val) { setState('mihome-vacuum.0.rooms.45100103' + ID_Flur + '.roomClean', true); Zone.push("Flur"); }}, 2000); setTimeout(function() { if (getState("javascript.0.Geräte.Staubsauger.Zone_GästeWC").val) { setState('mihome-vacuum.0.rooms.45100103' + ID_GaesteWC + '.roomClean', true); Zone.push("Gäste WC"); }}, 2500); setTimeout(function() { if (getState("javascript.0.Geräte.Staubsauger.Zone_Küche").val) { setState('mihome-vacuum.0.rooms.45100103' + ID_Kueche + '.roomClean', true); Zone.push("Küche"); }}, 3000); setTimeout(function() { if (getState("javascript.0.Geräte.Staubsauger.Zone_Schlafzimmer").val) { setState('mihome-vacuum.0.rooms.45100103' + ID_Sz + '.roomClean', true); Zone.push("Schlafzimmer"); }}, 3500); setTimeout(function() { if (getState("javascript.0.Geräte.Staubsauger.Zone_Wohnzimmer").val) { setState('mihome-vacuum.0.rooms.45100103' + ID_Wz + '.roomClean', true); Zone.push("Wohnzimmer"); }}, 4000); setTimeout(function() { if (Zone.length == 0) { if (Sprache === true || Sprache === 1) { Tablet_Lautstaerke(getState("javascript.0.System.Sonstige.Laut_Gong").val); setState('sayit.3.tts.text', '/opt/iobroker/iobroker-data/files/vis.0/mp3/tos-computer-03.mp3'); setTimeout(function() { Tablet_Lautstaerke(getState("javascript.0.System.Sonstige.Laut_Text").val); }, 2800); setTimeout(function() { setState('sayit.4.tts.text', "Achtung, zur Zonenreinigung muss mindestens 1 Raum angeklickt sein!")}, 3000); } log ("Zonenreinigung: Es wurde kein Raum angeklickt!"); } else { var Sprache = getState(Auto_Sprache).val; var Str_Zone = Zone.join(', '); if (Sprache === true || Sprache === 1) { Tablet_Lautstaerke(getState("javascript.0.System.Sonstige.Laut_Gong").val); setState('sayit.3.tts.text', '/opt/iobroker/iobroker-data/files/vis.0/mp3/tos-computer-03.mp3'); setTimeout(function() { Tablet_Lautstaerke(getState("javascript.0.System.Sonstige.Laut_Text").val); }, 2800); setTimeout(function() { setState('sayit.4.tts.text', "ok, Die Zonenreinigung wird im " + Str_Zone + " ausgeführt!")}, 2000); } log ("Zonenreinigung wird im " + Str_Zone + " durchgeführt!"); } }, 5000); }); // Fahre zum Mülleimer ---------------------------------------------------------------------------------------------- on({id: "javascript.0.Geräte.Staubsauger.Taster_Muell", change: "ne", val:true}, function() { // Taster wurde gedrückt var Sprache = getState(Auto_Sprache).val; if (Sprache === true || Sprache === 1) { Tablet_Lautstaerke(getState("javascript.0.System.Sonstige.Laut_Gong").val); setState('sayit.3.tts.text', '/opt/iobroker/iobroker-data/files/vis.0/mp3/tos-computer-03.mp3'); setTimeout(function() { Tablet_Lautstaerke(getState("javascript.0.System.Sonstige.Laut_Text").val); }, 2800); setTimeout(function() { setState('sayit.4.tts.text', "ok, Der Staubsauger fährt zum Mülleimer!")}, 2000); } //setState('mihome-vacuum.0.control.fan_power', 104); // Beschleunige die Fahrt auf 100% setStateDelayed('mihome-vacuum.0.control.goTo', "17500,29300", 3000); //setStateDelayed('mihome-vacuum.0.control.X_send_command','app_goto_target; [17350,22600]', 3000); //setStateDelayed('mihome-vacuum.0.control.fan_power', 102, 300000); // nach 5 Minuten die Power wieder auf 50% });
-
warum machst du das aller per script? Du hast doch für jeden raum deine datenpunkte und kansst die starten, sauglevel einstelle usw. Dax fanze kannst du auch für eine zone machen, einfach addroom ancklicken ubd koordinaten eingeben
-
@dirkhe sagte in Test Adapter Mihome-vacuum v3.1.6 Next Generarition:
warum machst du das aller per script? Du hast doch für jeden raum deine datenpunkte und kansst die starten, sauglevel einstelle usw. Dax fanze kannst du auch für eine zone machen, einfach addroom ancklicken ubd koordinaten eingeben
addroom ging bei mir nicht (oder ich hab es nicht hinbekommen).
Deshalb hab ich mir ein Script geschrieben. -
@ilovegym
Habe es aufgegeben mit Redis das ganze zu lösen. Schlussendlich habe ich die Funktion wie in der Doku (umwandlung in eine jpg-Datei im Filesystem) eingebaut:function send(text) { request.get({url: 'http://iobroker.fritz.box:8082/mihome-vacuum.admin/actualMap_0.png', encoding: 'binary'}, function (err, response, body) { fs.writeFile("/tmp/roborock.jpg", body, 'binary', function(err) { if (err) { console.error(err); } else { sendTo('telegram.0', { text: '/tmp/roborock.jpg', caption: text }); } }); }); }
Zumindest funktioniert es wieder so wie ich wollte.
Vielen Dank an alle für die Hinweise und Hilfe. -
@tazdevil20 ja, entweder so, dann kannst du dir das Bild auch weiter aufs NAS oder so kopieren, oder ueber den Weg ins iobroker-filesystem-Redis, dann musst du es erst holen mit request dann mit writefile wohinschreiben und dann kannst du es dir fuer Telegram wieder holen und senden.. da ist deine jetzige Methode einfacher, da Telegram das direkte versenden von files supported..
-
@dirkhe Eingeloggt muss er sein zumindest immer dann wenn Kartenupdates kommen. Es klemmt ja nicht permanent sondern meist 2-x minuten. Zum Teil aber eben auch >10min.
Wird nur die Karte selbst vom Cloudserver geholt und alles andere wie Zeit, Fläche usw. direkt lokal vom Sauger? -
@diginix soweit ich weiß und den code überschaue, wird die karte aus der coud geholt.
-
@dirkhe Ja, das ist klar. Ging eher um die restlichen Werte. Aber da ja die lokale IP mit Token im Adapter stehen, wird das sicher auch alles direkt lokal geholt.
Die neuen imho zu dunklen Map Farben für Sauger ohne Teppicherkennung oder Wischfunktion habe ich in der mapCreator.js Zeile 18-23 wieder auf die aus v3.6.0 gestellt. Bis auf die falschen zu früh geleerten room.states ist die 3.8.4 ansonsten nun wieder brauchbar.
-
@diginix ich denke die farben sind auch in der app geändert, oder? Das könnte man aber konfigurierbar machen, entweder alle werte oder sowas wie farbthemes
-
@dirkhe Nein, in der App sind sie bei mir immer gleich seit Jahren. Die Mapfarben des Adapters kommen aus ihm, nicht von Xiaomi. Vllt haben Sauger mit Teppicherkennung andere Farben für die Bereiche im Raum, in dem Teppich erkannt wurde. Aber das ist ja für Modelle ohne diese Funktion belanglos. Wäre also tatsächlich eine individualisierbare Sache für die Instanz.
-
@dirkhe Mit 3.8.4, die seit gestern 09:28 Uhr lief, hatte ich heute morgen wieder den Fall, dass aus unbekanntem Grund die CPU Last um 10% steigt.
Der Sauger war gestern zuletzt 20:30 Uhr unterwegs und stand seit dem im Dock. 11 Stunden später steigt die CPU Last spürbar an (Pfeil im Bild) und 10:30 Uhr habe ich die Instanz dann beendet und man sieht den deutlichen Abfall auf ein niedrigeres Niveau als zuvor wo die Instanz ruhig vor sich hinlief (blaue Linie). Die Instanz selbst braucht also klar etwas CPU (1-4%) wenn sie normal läuft. Aber was ab 07:30 Uhr im Adpater schief läuft, wäre interessant. Im Netzwerk steigt zu der Zeit auch der ausgehende Traffic deutlich an. Mit 3.6.0 ist das noch nie passiert.