just like you’re doing the whole time?
ok, but jokes aside and in all seriousness - I wish you all the best in fighting those anger issues, so you can have a normal conversation with other users.
just like you’re doing the whole time?
ok, but jokes aside and in all seriousness - I wish you all the best in fighting those anger issues, so you can have a normal conversation with other users.
Thanks for that awesome template snippet that creates a single card for all room settings (dreame-vacuum/docs/room_entities.md at fe3133384e14b0d9b2da6cca2c794d1507a39f98 · Tasshack/dreame-vacuum · GitHub)! I’ve slightly edited that one to also include the cleaning mode, maybe somebody finds that useful:
{# ----------------- PROVIDE YOUR OWN ENTITY ID AND ROOM COUNT HERE ----------------- #}
{% set vacuum_entity = "vacuum." %}
{# ------------------- DO NOT CHANGE ANYTHING BELOW ------------------- #}
{%- set vacuum_name = states[vacuum_entity].entity_id.replace('vacuum.', '') %}
{%- set friendly_vacuum_name = states[vacuum_entity].attributes.friendly_name %}
{%- set mop_pad = ('mop_pad_humidity' in states[vacuum_entity].attributes)|bool %}
{% set rooms = namespace(list=[]) %}
{%- if 'rooms' in states[vacuum_entity].attributes %}
{%- for map in states[vacuum_entity].attributes.rooms.values() %}
{%- for room in map %}
{%- if room.id not in rooms.list %}
{%- set rooms.list = rooms.list + [room.id] %}
{%- endif %}
{%- endfor %}
{%- endfor %}
{%- endif %}
{%- set rooms.list = rooms.list|sort() %}
type: entities
title: '{{ friendly_vacuum_name }} Room Settings'
show_header_toggle: false
entities:
{%- for room in rooms.list %}
{%- set room_exists = "states['" + vacuum_entity + "'].attributes.cleaning_sequence && states['" + vacuum_entity + "'].attributes.cleaning_sequence.length > " + (loop.index - 1)|string %}
{%- set room_id = "(" + room_exists + " ? (states['" + vacuum_entity + "'].attributes.cleaning_sequence[" + (loop.index - 1)|string + "]) : " + room|string + ")" %}
{%- set current_room = "(vars[6].state == 'unavailable' && states['select." + vacuum_name + "_cleaning_mode'].state == 'unavailable' && states['" + vacuum_entity + "'].attributes.current_segment == vars[0])" %}
- type: custom:config-template-card
variables:
- >-
{{ room_id }}
- states['select.{{ vacuum_name }}_room_' + vars[0] + '_name']
- states['select.{{ vacuum_name }}_room_' + vars[0] + '_cleaning_mode']
- states['select.{{ vacuum_name }}_room_' + vars[0] + '_suction_level']
{%- if mop_pad %}
- states['select.{{ vacuum_name }}_room_' + vars[0] + '_mop_pad_humidity']
{%- else %}
- states['select.{{ vacuum_name }}_room_' + vars[0] + '_water_volume']
{%- endif %}
- states['select.{{ vacuum_name }}_room_' + vars[0] + '_cleaning_times']
- states['select.{{ vacuum_name }}_room_' + vars[0] + '_order']
- >-
states['{{ vacuum_entity }}']
- >-
(vars[7].attributes.rooms && vars[7].attributes.selected_map ? vars[7].attributes.rooms[vars[7].attributes.selected_map].length : 1)
- >-
({{ current_room }} ? 'var(--state-icon-active-color)' : 'var(--primary-text-color)')
- >-
(vars[7].attributes.cleaning_sequence ? 'inherit' : 'none')
- >-
(vars[6].state != 'unavailable' ? 'inherit' : 'none')
- >-
(vars[7].attributes.customized_cleaning && (!vars[7].attributes.active_segments || states['{{ vacuum_entity }}'].attributes.active_segments.includes(vars[0])) ? 'inherit' : 'none')
entities:
- ${vars[1].entity_id}
- ${vars[2].entity_id}
- ${vars[3].entity_id}
- ${vars[4].entity_id}
- ${vars[5].entity_id}
- ${vars[6].entity_id}
- ${vars[7].entity_id}
card:
type: conditional
conditions:
- entity: ${vars[1].entity_id}
state_not: unavailable
card:
type: custom:multiple-entity-row
entity: ${vars[1].entity_id}
show_state: false
name: ${vars[1].state}
entities:
- icon: ${vars[2].attributes.icon}
entity: ${vars[2].entity_id}
name: ' '
tap_action:
action: call-service
service: dreame_vacuum.select_select_next
service_data:
entity_id: ${vars[2].entity_id}
double_tap_action:
action: call-service
service: dreame_vacuum.select_select_previous
service_data:
entity_id: ${vars[2].entity_id}
hold_action:
action: more-info
styles:
display: ${vars[12]}
pointer-events: >-
${vars[2].state != 'unavailable' ? 'inherit' : 'none'}
width: 28px
'--paper-item-icon-color': ${vars[9]}
- icon: ${vars[3].attributes.icon}
entity: ${vars[3].entity_id}
name: ' '
tap_action:
action: call-service
service: dreame_vacuum.select_select_next
service_data:
entity_id: ${vars[3].entity_id}
double_tap_action:
action: call-service
service: dreame_vacuum.select_select_previous
service_data:
entity_id: ${vars[3].entity_id}
styles:
display: ${vars[12]}
pointer-events: >-
${vars[3].state != 'unavailable' ? 'inherit' : 'none'}
width: 28px
'--paper-item-icon-color': ${vars[9]}
- icon: ${vars[4].attributes.icon}
entity: ${vars[4].entity_id}
name: ' '
tap_action:
action: call-service
service: dreame_vacuum.select_select_next
service_data:
entity_id: ${vars[4].entity_id}
double_tap_action:
action: call-service
service: dreame_vacuum.select_select_previous
service_data:
entity_id: ${vars[4].entity_id}
hold_action:
action: more-info
styles:
display: ${vars[12]}
pointer-events: >-
${vars[4].state != 'unavailable' ? 'inherit' : 'none'}
width: 28px
'--paper-item-icon-color': ${vars[9]}
- icon: ${vars[5].attributes.icon}
entity: ${vars[5].entity_id}
name: ' '
tap_action:
action: call-service
service: dreame_vacuum.select_select_next
service_data:
entity_id: ${vars[5].entity_id}
double_tap_action:
action: call-service
service: dreame_vacuum.select_select_previous
service_data:
entity_id: ${vars[5].entity_id}
hold_action:
action: more-info
styles:
display: ${vars[12]}
pointer-events: >-
${vars[5].state != 'unavailable' ? 'inherit' : 'none'}
width: 28px
'--paper-item-icon-color': ${vars[9]}
- icon: mdi:chevron-down
entity: ${vars[6].entity_id}
name: ' '
tap_action:
action: call-service
service: dreame_vacuum.select_select_next
service_data:
entity_id: ${vars[6].entity_id}
cycle: false
hold_action:
action: more-info
styles:
display: ${vars[10]}
margin-right: 0
margin-left: 8px
'--paper-item-icon-color': >-
${(vars[8] > {{ loop.index }} ? 'var(--primary-color)' : 'var(--state-unavailable-color)')}
pointer-events: >-
${(vars[8] > {{ loop.index }} ? vars[11] : 'none')}
- icon: mdi:chevron-up
entity: ${vars[6].entity_id}
name: ' '
tap_action:
action: call-service
service: dreame_vacuum.select_select_previous
service_data:
entity_id: ${vars[6].entity_id}
cycle: false
hold_action:
action: more-info
styles:
display: ${vars[10]}
'--paper-item-icon-color': {{ 'var(--primary-color)' if loop.index > 1 else 'var(--state-unavailable-color)' }}
pointer-events: {{ "${vars[11]}" if loop.index > 1 else 'none' }}
{%- endfor %}
- type: divider
- entity: switch.{{vacuum_name}}_customized_cleaning
name: Customized Cleaning
- entity: switch.{{vacuum_name}}_cleaning_sequence
name: Cleaning Sequence
Note: I’ve also fixed the icon color when using the light theme. You used --text-primary-color
which is just white in light theme. You need to use --primary-text-color
. Stupid variable naming This now works in all themes
[EDIT]: Remember that this is not the final card code! This needs to be pasted into “Developer Tools” → “Template” and this will spit out the card code on the right!
Yikes, I just ordered an X30 Ultra after watching the pinned X40 unboxing video here thinking the X30 was an X40 with a lower price and kPa, and without the extending side brush.
But, is the X30 really a one-off integration-wise and unsupported by this apparently wonderful integration? The video makes a big point about the X40s’ integration with this project. What to do?
Dev
branch already has the card template with cleaning mode
but I will fix the icon color, thanks.
That was a very old post, it is currently supported on Beta.
Could not login to Xiaomi Miio Cloud, check the credentials.
100% sure I have correct login, password, and server selected. Any tips to login for the first time?
Good afternoon, I have S30 Pro Ultra, HA version 2024.9.1, Dreame vacuum integration version 2.0.0.16b. I can’t add work to the integration in HA. Everything works in the program on the Dreame phone, the Dreamer and Xiaomi accounts are linked. I’m trying to log in with both a Dream home Account and a MiHome account. The robot + server and even the laptop from which I work all sit on the same network under VPN China (they have an IP on the same network on the router, and one IP on the Internet). I tried to take the server out from under the VPN, but I left it in the same subnet, there is no result.
Please help me to launch the integration.
Updated:
I checked the version of the robot in the list of supported models, and it is dreame.vacuum.r2310d.
I tried to make the first login via phone number+ password and email + password. I have an account in dreamecloud of mainland China, I also choose CN, I tried b15 and b16, there is no difference, the first login still does not work.
Other users even have a server and work in different networks on different routers and everything is connected and working, I do not.
I did a complete removal of all versions from acs and installing from scratch only b16 without the main version also does not work.
For the test, I made a bundle of the account together with the mihome account, I thought it would work in this application.
In Myhome, there is a connection between the systems, but there are no devices in the list, then the MiHome sent to Alice Yandex (voice assistant) the robot appeared in Yandex, but there it is limited in functionality by 99%.
I am 100% sure of the correctness of passwords and logins. It was the fifth day… I read the entire thread of this topic, everything that was suggested did not fit.
By the way, where can I clean the cache from which b16 can be installed with an error?
Hi im having some issues with the integration that i dont know how to solve. I only have some basic controls available. Most of them are greyed out. Could you please point me in the right direction?
I lost connection with the cloud. It keeps retrying. I tried to configure a new one, and it fails on 2FA (keep asking me to confirm my email). Even after confirming it (using the link popping up - the web page says “OK” after entering the 2FA code), again and again it asks it.
I deleted my device from HA, and try to re-add it → same problem.
I’ll have to try later, when I copy-paste the link to a computer within the same public IP space. I tried from work computer, but that is indeed a different public IP.
Update: I’ve been trying for 3 days now, even from the same subnet/public IP → no success.
Hi fellow Dreamers and @tasshack .
I’m really looking forward to using this component consistently, but for now I’ve removed it since it makes my HA crash regularly.
It crashed when first adding the device. It crashes every night when I have it installed. HA does not crash after removing it.
I am using the current 2b16 version with a Dreame L10s Ultra Pro Heat, current firmware.
I’m running HA in Docker on a Raspberry Pi 4 (4GB RAM).
Mostly the crash shows up as HA is unavailable - website and app won’t load. If I’m connected via SSH I can usually restart HA but the console is less responsive than usual.
If I’m not already logged in with an SSH terminal open, then I can ping the RPi but not SSH into it, so I have to turn it off and on again to restart the system.
What can I do to help troubleshoot this? Thanks.
Thanks for the reply. Are you suggesting that it’s a lack of memory?
Is there’s a way to troubleshoot this more specifically?
I will try with the low memory option.
EDIT/UPDATE: It’s been running without problem for 2 days now. Thanks.
I did see that issue you referenced, but it was about a 1GB RPi and my 4GB did not seem to be the issue.
UPDATE 2: My Pi is responsive, but not Home Assistant.
It’s still running, and when I tail
the log, I see ONLY messages from the dreame component. Usually I would see all kinds of things including motion sensor updates, time changes, etc.
This implies to me that the component is blocking everything else maybe…?
htop
shows HA using 95%+ CPU and 26% memory. Total memory is 2.5/4GB, so probably not a memory issue.
A restart of HA fixed the problem, at least for now.
Is there any way to troubleshoot further?
Log:
Changed: 20 -> 21
2024-09-23 13:50:10.436 INFO (Thread-3 (_thread_main)) [custom_components.dreame_vacuum.dreame.map] New object name received:
ali_dreame/BU062837/789981405/0
2024-09-23 13:50:10.437 INFO (Thread-3 (_thread_main)) [custom_components.dreame_vacuum.dreame.map] Request map data from clou
d https://dreame-sg.iot.dreame.tech/iot/tmp/000000/ali_dreame/BU062837/789981405/0?Expires=1727064051&OSSAccessKeyId=LTAI5t96W
kBXXNzQrX4HtQti&Signature=CEA9XzVKaaM8aHAtzPKPbACbZrU%3D¤t=1727063410
2024-09-23 13:50:13.479 INFO (Thread-3 (_thread_main)) [custom_components.dreame_vacuum.dreame.map] Decode I map 2 80
2024-09-23 13:50:20.145 INFO (Thread-29170) [custom_components.dreame_vacuum.dreame.device] Property STATUS Changed: 3 -> 6
2024-09-23 13:50:20.146 INFO (Thread-29170) [custom_components.dreame_vacuum.dreame.device] Property DUST_COLLECTION Changed:
0 -> 1
2024-09-23 13:50:33.438 INFO (Thread-3 (_thread_main)) [custom_components.dreame_vacuum.dreame.device] Property BATTERY_LEVEL
Changed: 21 -> 22
2024-09-23 13:51:43.451 INFO (Thread-3 (_thread_main)) [custom_components.dreame_vacuum.dreame.device] Property BATTERY_LEVEL
Changed: 22 -> 23
2024-09-23 13:52:54.441 INFO (Thread-3 (_thread_main)) [custom_components.dreame_vacuum.dreame.device] Property BATTERY_LEVEL
Changed: 23 -> 24
Hello @tasshack and thanks for your work
I have the Dreame L10S Ultra
I have an error when connecting with the wizard. I have an error that said that there are no compatible devices in my country
I have tried to reset and connect with xiaomi home and dreameHome account but I have already the same problem.
I use a european server.
I use the latest beta version.
I have checked past errors but didn’t succeed.
Thanks in adavance for your help,
Domotech
I think it is a new model…
I found that it is a dreame.vacuum.r2228z and I just see dreame.vacuum.r2228o or dreame.vacuum.r2228d in the doc
If I can help to integrate it, do not hesitate
@tasshack Found a solution, added this model in the source code and it works.
Sent a pull request : added dreame.vacuum.r2228z by flo7110 · Pull Request #736 · Tasshack/dreame-vacuum · GitHub
Hello,
Can anyone help me on creating an automation ?
I’m trying to send a notification to my mobile when events are triggered by the integration.
I’ve understand that I must use the events sent by the integration as triggers as stated here :
But I don’t understand how to display in the notification what consumable is to replace for example if the dreame_vacuum_consumable
event is triggered…
Or same for the dreame_vacuum_error
event, I’d like to have the error as notification message.
Any help would be greatly appreciated.
Just curious because I saw you previously said it didn’t support the plumbing kit. Was support added or did you give up on that feature?
Hi folks, first of all, thanks for this lovely integration and ui.
I’m having a Dreame D10 Plus and can’t get the “clean selected room from map” running. When I select i.e. the kitchen from the map, it starts with a different room.
When I do the same in the Dreame app, all is working fine. Any ideas how to solve this?
Best regards
Christian
Hi!
First of all, thank you for this huge work. It is AWESOME!
I do have a problem though:
I followed the Italian guide to clean only one room, and it does work…but once the robot is back to the station, it starts again, as if I clicked the button another time.
I can’t understand what’s wrong…
This is my YAML:
alias: Pulisci Soggiorno
sequence:
- action: dreame_vacuum.vacuum_set_custom_cleaning
target:
device_id: c5e029d0b82c8607a3763c843ad2ff5d
data:
segment_id:
- 8
suction_level:
- 3
water_volume:
- 2
repeats:
- 1
cleaning_mode:
- 2
- action: dreame_vacuum.vacuum_clean_segment
target:
device_id: c5e029d0b82c8607a3763c843ad2ff5d
data:
segments: 8
description: ""
icon: mdi:boom-gate
Any suggestions?