NEWS
Test DreameHome: 3D-Visualisierung und Alexa-Steuerung
-
Laut deinem Log
2025-10-16 05:30:00.638 - error: dreamehome.0 (326583) TypeError: Cannot read properties of undefined (reading 'map')stürzt der Adapter im folgenden Abschnitt ab:
${wallsInfo.doors.map(door => { const [x1, y1] = toCanvas(door.beg_pt_x, door.beg_pt_y); const [x2, y2] = toCanvas(door.end_pt_x, door.end_pt_y); return ` <svg class="door" style="position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none"> <line x1="${x1}" y1="${y1}" x2="${x2}" y2="${y2}" stroke="#ffffff" stroke-width="6" stroke-dasharray="8,4"/> </svg>`; }).join('')}Der Fehler tritt auf, weil
wallsInfo.doorsin deiner Map nicht vorhanden ist.
Wenn der Sauger keine Türeninformationen liefert, istdoorseinfachundefined, und der Aufruf von.map()führt zum Absturz.Zum Vergleich: Im Abschnitt für die Teppiche passiert das nicht, da dort mit
Object.entries(elements.carpets)gearbeitet wird, was auch funktioniert, wenn keine Teppiche vorhanden sind.Das deutet also darauf hin, dass in deiner aktuellen Karte keine Türdaten enthalten sind.
Schau bitte in der Dreame Home App unter Karten anzeigen ? 3D-Karte, ob dort Türen dargestellt werden.
Wenn keine zu sehen sind, liefert der Sauger diese Informationen schlichtweg nicht an die API.Ich werde den Code in der nächsten Version des Adapters entsprechend absichern, damit der Abschnitt nur ausgeführt wird, wenn
wallsInfo.doorsauch wirklich existiert.
Dann läuft der Adapter auch weiter, wenn keine Türen-Daten in der Map enthalten sind. -
@ltsalvatore
Um eine gezielte Raumreinigung zu starten, hast du aktuell drei Möglichkeiten:
1. Über den Map-Ordner
a. Gehe in
dreamehome.0.xxxxx.map.0.<Raumname>und passe dort die gewünschten Reinigungseinstellungen (z. B. Saugleistung, Wischintensität, Durchgänge) an.

b. Setze anschließenddreamehome.0.xxxxx.map.0.<Raumname>.Cleaningauf true.
c. Wiederhole das für alle Räume, die du reinigen möchtest.
d. Starte die Reinigung, indem dudreamehome.0.xxxxx.map.StartCleaningByRoomConfigauf true setzt.

2. Über die VIS-Oberfläche
a. Räume direkt in der VIS-Karte auswählen (durch Anklicken).
b. Im Menü die gewünschten Einstellungen ändern.

c. Unter dem Reinigungsmenü „Selected“ auswählen, um die gewählten Räume zu starten.

3. Über natürliche Sprache
Du kannst auch Sprachbefehle über den Datenpunkt
dreamehome.0.xxxxx.control.NaturalLanguageCommand
verwenden.

Beispiel:
Wohnzimmer stark saugen und Küche feucht wischen -
@mrhenker27
Wenn du zwei Roboter hast, brauchst du auch zwei Instanzen des Adapters.
Bitte konfiguriere in jeder Instanz unter den Einstellungen den Punkt „Bevorzugter Geräteindex“ – dort kannst du festlegen, welcher Roboter von dieser Instanz angesprochen werden soll.
So stellst du sicher, dass Befehle wie Testsound oder Reinigung starten immer an den richtigen Roboter gesendet werden.
-
Bitte ändere den Datenpunkt
dreamehome.0.xxxxx.map.MapNumberauf die richtige Map-Nummer (die deiner aktuellen Karte entspricht).
Danach setzedreamehome.0.xxxxx.map.NewMapauf true, damit die Karte neu geladen wird.Dadurch werden die Daten unter
dreamehome.0.xxxxx.vis.vishtml0generiert und stehen anschließend in der VIS zur Verfügung.
-
@wawyo said in Test DreameHome: 3D-Visualisierung und Alexa-Steuerung:
Bitte ändere den Datenpunkt
dreamehome.0.xxxxx.map.MapNumberauf die richtige Map-Nummer (die deiner aktuellen Karte entspricht).
Danach setzedreamehome.0.xxxxx.map.NewMapauf true, damit die Karte neu geladen wird.Dadurch werden die Daten unter
dreamehome.0.xxxxx.vis.vishtml0generiert und stehen anschließend in der VIS zur Verfügung.
bei mir kann ich nur Map 1 (0) auswählen. Da läd er aber keine Daten, da meiner Meinung nach 0 die falsche ist.
bei dem anderen Dreme Adapter habe ich MAP 2 ..... -
@mrhenker27 said in Test DreameHome: 3D-Visualisierung und Alexa-Steuerung:
@muuulle
Bitte ändere den Datenpunkt dreamehome.0.xxxxx.map.MapNumber auf die richtige Map-Nummer (die deiner aktuellen Karte entspricht).
Danach setze dreamehome.0.xxxxx.map.NewMap auf true, damit die Karte neu geladen wird.
Dadurch werden die Daten unter dreamehome.0.xxxxx.vis.vishtml0 generiert und stehen anschließend in der VIS zur Verfügung.bei mir kann ich nur Map 1 (0) auswählen. Da läd er aber keine Daten, da meiner Meinung nach 0 die falsche ist.
bei dem anderen Dreme Adapter habe ich MAP 2 .....Bitte trotzdem Map 2 auswählen, dann mit „Wert Setzen“ bestätigen, und danach nochmal auf Map 1 ändern, nachdem der Adapter versucht hat, die Daten herunterzuladen.
Danach setze dreamehome.0.xxxxx.map.NewMap auf true, damit die Karte neu geladen wird.

-
würd ich gerne aber ich habe nur MAP 1

-
@mrhenker27
Bitte den Log umgehend löschen, da sensible Daten enthalten sind. Ich melde mich gleich. -
@wawyo said in Test DreameHome: 3D-Visualisierung und Alexa-Steuerung:
@mrhenker27
Bitte den Log umgehend löschen, da sensible Daten enthalten sind. Ich melde mich gleich.erledigt. Dachte ich hatte alles erwischt

-
@mrhenker27
Bitte öffne dreamehome.0.xxxxx.map.MapNumber und schaue nach, was dort unter den States für die verfügbaren Maps steht.

-

ich habe auch schon mal per Hand doe Werte nachgetragen, er springt immer wieder auf Map 1 (0) zurück
admin.0 2025-10-28 13:13:12.603 warn Object dreamehome.0.9xxxxxxxx.map.MapNumber is invalid: Default value has to be type "number" but received type "string" This will throw an error up from js-controller version 7.0.0!dreamehome.0 2025-10-28 13:15:59.593 warn CustomMap is not set to 1. dreamehome.0 2025-10-28 13:15:59.551 warn No rooms found in DH_Map. dreamehome.0 2025-10-28 13:15:59.470 warn Invalid map number, reset to default dreamehome.0 2025-10-28 13:15:59.428 info State value to set for "dreamehome.0.9xxxxxxxxmap.MapNumber" has to be type "sumber" but received type "string" dreamehome.0 2025-10-28 13:15:59.419 info [SUCCESS] Received data: {"mapstr":[{"id":0,"name":"","angle":"180","map":"e .. -
Stimmt, ich habe das Verhalten in Version 0.1.6 geändert, sodass überflüssige Daten jetzt automatisch korrigiert werden.
Wir machen jetzt Folgendes: Bitte gehe in die App und erstelle zusätzlich zu deiner ursprünglichen Karte eine neue Map. Der Zweck ist, dass wir erzwingen, dass mehrere Maps unter der Cloud angelegt werden.
Danach teste es bitte nochmal. -
gemacht. Ich habe zwar jetzt MAP die Ordner 0 und 1 aber außer dreamehome.0.xxxxxxxx.map.Y.MapImage mit den passenden Bild is da mehr nicht drin

die VISHTMLs bleiben auch leer.
das passiert wenn ich dann newmapa uf true setze ( danach darf ich den Adapter dann neu starten )
host.iobroker 2025-10-28 13:49:34.992 warn Do not restart adapter system.adapter.dreamehome.0 because restart loop detected host.iobroker 2025-10-28 13:49:34.992 error instance system.adapter.dreamehome.0 terminated with code 6 (UNCAUGHT_EXCEPTION) dreamehome.0 2025-10-28 13:49:34.447 warn Terminated (UNCAUGHT_EXCEPTION): Without reason dreamehome.0 2025-10-28 13:49:34.447 info terminating dreamehome.0 2025-10-28 13:49:34.447 info Memory manager stopped dreamehome.0 2025-10-28 13:49:34.447 info Resource monitoring stopped dreamehome.0 2025-10-28 13:49:34.447 info Resource monitor stopped dreamehome.0 2025-10-28 13:49:34.447 info Cleaning up resources... dreamehome.0 2025-10-28 13:49:34.446 error Cannot read properties of undefined (reading 'map') dreamehome.0 2025-10-28 13:49:34.445 error TypeError: Cannot read properties of undefined (reading 'map') at Dreamehome.DH_GenerateMap (/opt/iobroker/node_modules/iobroker.dreamehome/lib/generateMap.js:2032:39) at async Dreamehome.onStateChange (/opt/iobroker/node_modules/iobroker.dreamehome/main.js:7345:11) dreamehome.0 2025-10-28 13:49:34.444 error unhandled promise rejection: Cannot read properties of undefined (reading 'map') dreamehome.0 2025-10-28 13:49:34.444 error Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). dreamehome.0 2025-10-28 13:49:34.443 error Error: Cannot read properties of undefined (reading 'map') -
Lade die folgende Datei herunter ( extracktdreameMap.html und pako.js ) und führe die DreameHome JSON Dekompressor.html per Doppelklick aus. Anschließend den Inhalt des Objekts
dreamehome.0.xxxxx.map.CloudDataentschlüsseln, indem du ihn in „Base64-String eingeben:“ kopierst, um zu prüfen, ob die Struktur wie im Screenshot vorhanden ist.
-
@wawyo said in Test DreameHome: 3D-Visualisierung und Alexa-Steuerung:
DreameHome JSON Dekompressor.html
dreamehome.0.9xxxxxxxx.map.CloudData

{"mapstr":[{"id":1,"name":"","angle":"0","map":"eF7tmE2OI0UQhatrzSm8ns30cm7AGdBoFtCglqBBgGAx8sJxkFmzZ8tx2HAJhCP_42VEZVaW22UN_jT-qch4L95k2WW3v5im6cvJ8e_Dw_Tn9Dh9mo7TH3__9Y-v3rnzeUIMFveiikLzPLuEvHAqkX3XgGiGeJyOA57_ndM9ZPZIx0nqSkh32jsdh5EVn44DinC3l64Mt0s6jlFXbiidfFvkdLMId6F04XKgoHW4dIJXTpftJTkdH8Cixs7p3J3N1dOlk8e3uTyNCtdNR-4CQi6Zv5SIl1nFVdPNmIU4r6hIrpsOOYdds3cAzu2DcMgSK9IB10i3CAYS3NMtgoEEe6eDbwHAvunOl5sTJirZMx1fCsX39ood0_nvMydMVLJbOrdxU07H194iVyjC2E4Ih60kZivSTVOZKxVHIBy3juKb8ikHKXOl4giE89aQN27S0oWP2J3SyT8xcjqfJ370n85Ph9MtfrIvI8KV7wr_kBb4N4yycw3UBQZzCJ-Y7hzM34vV7VQRzBXcNwauJOPbZYAZFtLBvgXiOe3cuvLc4FoNZogSqk6stndTPLn96Rp2kqJbSLDOqHb-ChLARYVgxbf2HnJbyep0q-Ak6Aq_0ggIOl813fnVwg-Vrbl_VLXqdcaw6Idmv1Fg6_7yw14HC0SrUWd0hxUQu_Aj4f4Z3mR0YZ3RHVZAzmZyRtJa966uG4vp2m-yZcj7uOezHK16io6yq1qYOV14FBYrCHoXD38TwV5GthRd1cKc0m3eu3nyvyaVKJ78bgFSV7VSpBs9xV5fWGUUK2yZZTrCtapQmnWQ9dW-KFbQweR0DrkmD1XLRZIevdXTUDYEZBe8r8QRF0Rzm6j3v2EWdqpRXk5AH4k1ccQF2dwk6dFJNYIe5ip7VzmpRtDDFH2v-brLHv4YOyfcGU-ZDtcqNNMlCA0imhFh03xPp4FGfEzYNN9MOuVFzuyULqE15qOOdJSf5eYustJCTZfpSddPNlt0zJwVToj1QEe6jOkSGEnnPuSwHEmG9n8g02rBzSNsqCinKu7ufCxt7ipWpyvRI1woGbMpnc7lwr1GugtyTzfOPd0493Q96Jeh_006P0Ads_DxQVgouVI6961AAzslmM4GlWuAKRnCTompQwiVSJ0_V8wpqUPH1CGEyjIOP7uJdOXJzhSOGuYUwk6JqUNIEcRaE3MKYafE1CGkCGKtiTmFsFNi6hBSBLHWxJxC2CkxdQgpglhrYk4h7JSYOoQUQaw1MacQL_KdjqlDSBHEWhNzCvEi3-mYOoQUQaw1MafQvHg9MnUIKYJY8wviSFbMKcQrdj5Th5AiiDW_II5kpTUlNQItXYIUQaw1aU0hFARaugQpglhr0ppCKAi0dAlSBLHWpDWFUBBo6RKkCGKtSWsKoSDQ0iVIEcRak9YUQkGgpUuQIoi1Fs0hhIpAUxghRRBrLZpDCBWBpjBCiiDW3AV_iUKjkoyApjBCiiDW-l0MkhHQ7UuKINb6XQySEdDtS4og1vpdDJIR0O1LiiDW-l0MkhHQ7UuKINb6XQySEdDtS4og1vpdDJIR0O1LiiDW-l0MkhHQ7Ru_rN1mOudAt5uuvu7TehedZARs8qWLuEz3dFtIRsAmX7qIy7SQrn6t90PJBVdWkoxKiG98N2jvpOPyTDJCbjudZ8yeNqkLopHBmD9tUhdEI4Mxf4rq8TeWJxoZjFlTkg9beJKRzpg1JfmwhScZ6YxZ03YLjzCqGbOm7RYeYRSgfD9m7Q0CYxYeYRSg4in2dxE_Bre_Zxtg_53PiI-H334_vPt4-P755enw7qv3bw4_P339q3_2w48_8ZPjm8MvT999eH75lhvf8t3L0_OH52_Oi4-8-ihKb98fj8f_AHhVxvQ="},{"id":0,"name":"","angle":"180","map":"eF7t2M9u2zYAx3E5iV9EZxmIZLtOC_TaopcN27AWRRAUS-t1xmIn2IKtRZEDbelBdtu179TLLgP2BiMlkSJ_oizqjyUl5RdBIIum-IHkyHaOHMd54cT9N5o6n53A-cu5c_7-8u8_yV6b7eEX8nCglzSU8OSE_tBfbP9WSnlWVyWU_K64kPqORD0J9wJlHxUqT-sqxikGyr4hAlXf8IAn9wvY3iUWNzKjGDC358DAbAVMXt2gYmCj-2KI62Qp56e8YqDT5ISGuI6IvjeEsGtvxUD0VirEdUTqK6y8zoFV0wC3R1v5Ya1CXKd2Mo_dCJW3vuEBIQs0CE1KFmgQmpR6B4bwcRDrGUhv6fSet69egYzHPhEgSq5PIP-et-UWHbU_YHL6WFthkWVpvQGlr8lbYeFbUj0Bs9Pn5IHpN_i07HkVC3HRCqn_ZQBgA5NSGOKy5qnfnwQw-SNpyceEUpGcMjBWSwaVA3EgdyqD7ZRTiAEckcZE7JXWGxAGxjog3KtNXoM7ORzMFxUhcgNjPVC9AZoAj7MMhFERIjcw1gOTa8x-md1ZdjLwuPxcRkWI3MBYD6ya4ssaOrDQl3f0BCy8zFERIjdAi1oQ7tCW1RyYDrI7ZHaEiu0AJW_jc51kLZ2hCBixCZ0CQVAClIpqXm9ZxFDyNj7XqXwGlVoD8l0aYN7XITC-ZWcP9UBctEug9DaS7KwIjHAEauU1uJPf-gyBxqeQ_UkrRzMq88SmzKe9T0e4aJwTLxzhbk1NgZQnHqu--D4W39R0Fe3P1RQop57B9PjKajVqE6iewvT4ymo1OjSwcYcDGr_K9vcVA1u6xu0Cea2dPwokZaFvD5DHgLhQ3SIy2t_DBBa-gVQvQhBWD9j8Bi1CEFYHeIyLNAlBmAWWhSDMAstCEGaBZSEIs8CyEIRZYFkIwjoDsi_pughBkpoGWFwjIK6TRlAE5YHF3Utgdq2knbo6BbJPrGrIydctMNsXIaQoC3QsUJ8F8u4vMAldot6BSQRdoqEACcJ4AwEWn0IL5FmgY4H6vh4gfoTNlc3RRRDGaw-Y7asTQRjPAg0jCONZoGEEYTwLNIwgjPcggbvBAnnSvkEBdVmgBRpGEMZLvzeTutCDA0fpN9LhApPqnsHsf6uHBuIEw4TPAnGCYRIwakQkKIJqAzPhGMcqRVAE1f0jUU4hjlWJoAgiI5xhWFfAUd2rLF1jHKoUQU6umhc58x0ciFPMMv_fwf7EW25xOMX2IPvk_vGn--STe7XaLN0n5-cTf7GYeZO5P_e9iR_Mz-LtxYV3PgkWs1P66HQ69ybBNN2OR_wgoPtm82BBR-g-bzJ9_Ci4uPDc35Zvb-lh6db6-oZt3Hnu78v3b1abn9mqU_br9uMNXfrUc1ebd8sP8dbmpzXd5f4YfHN9-fzZerm-ur189fKjS0eWqzerd_RIc3aoQDd_KuZ_t372qzxnxubMdHMCMef79Qf_7funT-V5gRev5utmzsTMH86-PXsd_HKVU85183wx72Xw-Ppyc3Nz-cq_wpV9b-pR9d3d_5BLD9I="}],"curr_id":2}{"mapstr":[{"id":1,"name":"","angle":"0","map":"xyz"},{"id":0,"name":"","angle":"180","map":"abc"}],"curr_id":2} -
Hier ist die entschlüsselte Information:
[ { "id": 1, "name": "", "angle": "0", "map": { "vw": { "line": [], "rect": [], "mop": [] }, "seg_inf": { "1": { "nei_id": [2] }, "2": { "nei_id": [1] } } } }, { "id": 0, "name": "", "angle": "180", "map": { "vw": { "line": [ [-1774, -5151, -1258, -5157], [-2740, -5035, -2340, -5037], [-1225, -4527, -2037, -3962] ], "rect": [], "mop": [] }, "seg_inf": { "1": { "type": 0, "index": 4, "name": "S8O8Y2hl", "nei_id": [5] }, "2": { "type": 0, "index": 3, "name": "QmFk", "nei_id": [4] }, "3": { "type": 0, "index": 0, "name": "U2NobGFmemltbWVy", "nei_id": [5] }, "4": { "type": 0, "index": 2, "name": "Rmx1cg==", "nei_id": [2, 5] }, "5": { "type": 0, "index": 1, "name": "V29obnppbW1lcg==", "nei_id": [1, 3, 4] } } } } ]Mir ist aber aufgefallen, dass der Abschnitt
"whm": "", "walls_info": { "version_flag": 3, "storeys": [ { "rooms": [fehlt.
soll

ist

Das deutet darauf hin, dass dein Roboter die Daten in der Cloud anders speichert. Ich werde das weiter analysieren, um herauszufinden, wie ich es schaffen kann, dass die kompletten Dateien heruntergeladen werden.
Ich kann zwar nichts versprechen, aber es ist nur eine Frage der Zeit, bis ich eine Lösung gefunden habe.
An alle:
Wenn jemand Probleme mit der Map hat, bitte zuerst die Datei „DreameHome JSON Dekoder.zip“ herunterladen und – wie oben beschrieben – zuerst testen, bevor ihr weiterarbeitet oder Fehler meldet. -
Ich hoffe du findest schnell ne Lösung. Aber die IDs passen, ich habe 5 Räume.
Ist ein dreame D10 Plus Gen 2 falls die Info dir weiter hilft.
-
@wawyo sagte in Test DreameHome: 3D-Visualisierung und Alexa-Steuerung:
@ltsalvatore
Um eine gezielte Raumreinigung zu starten, hast du aktuell drei Möglichkeiten:
1. Über den Map-Ordner
a. Gehe in
dreamehome.0.xxxxx.map.0.<Raumname>und passe dort die gewünschten Reinigungseinstellungen (z. B. Saugleistung, Wischintensität, Durchgänge) an.

b. Setze anschließenddreamehome.0.xxxxx.map.0.<Raumname>.Cleaningauf true.
c. Wiederhole das für alle Räume, die du reinigen möchtest.
d. Starte die Reinigung, indem dudreamehome.0.xxxxx.map.StartCleaningByRoomConfigauf true setzt.

2. Über die VIS-Oberfläche
a. Räume direkt in der VIS-Karte auswählen (durch Anklicken).
b. Im Menü die gewünschten Einstellungen ändern.

c. Unter dem Reinigungsmenü „Selected“ auswählen, um die gewählten Räume zu starten.

3. Über natürliche Sprache
Du kannst auch Sprachbefehle über den Datenpunkt
dreamehome.0.xxxxx.control.NaturalLanguageCommand
verwenden.

Beispiel:
Wohnzimmer stark saugen und Küche feucht wischenDanke, dass du dir die Zeit genommen hast, mir das etwas genauer zu erklären. Ich denke, damit kann ich mein Vorhaben nun umsetzen.
Nur der Vollständigkeit halber:
Wenn ich z. B. Küche und Wohnzimmer reinigen möchte, setze ich für beide zuerst den Datenpunkt cleaning auf true und starte anschließend mit StartCleaningByRoomConfig die Reinigung der beiden Räume? So könnte ich das Ganze in einem Script hinterlegen und mit einem extra erstellten Objekt über einen physischen Schalter verknüpfen!?Den NaturalLanguageCommand finde ich auch ganz interessant. Spricht dieser Datenpunkt quasi den von Dreame integrierten Sprachassistenten an? Ich frage mich gerade, wie ich das nutzen kann, um über Alexa die Befehle auszuführen. Braucht man dafür einen extra Alexa-Skill und ein Startwort, so wie bei Dreame mit „OK Dreame“?
-
Ja, genau so ist es

Wenn du z. B. Küche und Wohnzimmer reinigen möchtest, setzt du für beide zuerst den Datenpunkt
...map.0.<Raumname>.Cleaning = true
und startest anschließend mit
...map.StartCleaningByRoomConfig = true
die Reinigung der beiden Räume.Zu den Sprachbefehlen:
Das Ganze läuft bei mir über meinen eigenen Code, der auf alle von mir gepflegten Synonyme reagiert.
Ich habe dazu eine ausführliche Anleitung geschrieben:
Anleitung: Sprachbefehle für deinen Dreame Robot SaugerWichtig ist, dass du den Alexa-Adapter installiert hast.
Frag einfach mal „Alexa, Roboter Hilfe“ – ich habe den Adapter mit möglichst vielen Infos gefüttert, damit er eigenständig viele Fragen beantworten kann.Danach kannst du einfach loslegen mit deinen Befehlen im NaturalLanguageCommand-Objekt oder noch einfacher direkt über Alexa.