Really nice indeed. Is this something you can share with us?
It’s seems really usefull.
It would be possible to share with us?
Dumb question…how would I build the sensor template to get hours in total cleaning time and cleaned are in m²….?
Mine looks like this with appddaemon hadashboard
If you want get area and time for last cleaning session:
sensor:
- platform: template
sensors:
vacuum_cleaned_area:
friendly_name: "Area cleaned"
unit_of_measurement: 'm2'
value_template: "{{ state_attr('vacuum.<your_name>', 'cleaned_area') }}"
vacuum_cleaning_time:
friendly_name: "Time cleaned"
unit_of_measurement: 'm'
value_template: "{{ state_attr('vacuum.<your_name>', 'cleaning_time') }}"
Note that cleaning time is in minutes - if you indeed want this to be in hours, you will have to make conversion additionally to time format you prefer.
If you indeed want total time and area that has been cleaned by vacuums since the century it remembers itself from you can use total_cleaning_time
and total_cleaned_area
attributes respectively.
Thanks for zour response. I already have all thise template sensors set up WHat I want is just the right conversation for it
Will share my config soon, trying to make it smaller and more compact
So this is my card:
Here’s my code,a bit messy tho:
Lovalace UI:
- type: custom:vertical-stack-in-card
cards:
- type: picture-elements
title: Vacuum
image: '/local/vacuum1.jpg'
elements:
- type: icon
icon: mdi:bell-ring
tap_action: call-service
entity: vacuum.xiaomi_vacuum_cleaner
service: vacuum.locate
style:
top: 90%
left: 80%
color: '#3090C7'
- type: icon
icon: mdi:crosshairs
tap_action: call-service
entity: vacuum.xiaomi_vacuum_cleaner
service: vacuum.clean_spot
style:
top: 90%
left: 65%
color: '#3090C7'
- type: icon
tap_action: call-service
icon: mdi:home
entity: vacuum.xiaomi_vacuum_cleaner
service: vacuum.return_to_base
style:
top: 90%
left: 50%
color: '#3090C7'
- type: icon
icon: mdi:stop
tap_action: call-service
entity: vacuum.xiaomi_vacuum_cleaner
service: vacuum.stop
style:
top: 90%
left: 35%
color: '#3090C7'
- type: icon
icon: mdi:play
tap_action: call-service
entity: vacuum.xiaomi_vacuum_cleaner
service: vacuum.start
style:
top: 90%
left: 20%
color: '#3090C7'
- type: state-label
entity: sensor.vacuum_operation
style:
top: 10%
left: 1%
color: rgb(255, 255, 255)
transform: translate(0%,-50%)
pointer-events: none
font-family: Trebuchet MS
font-size: 90%
font-weight: bold
border-color: rgb(34, 154, 210)
background-color: '#3090C7'
border-radius: 6px
- type: state-label
entity: sensor.vacuum_accessories
style:
top: 10%
right: 1%
color: rgb(255, 255, 255)
transform: translate(0%,-50%)
pointer-events: none
font-family: Trebuchet MS
font-size: 90%
font-weight: bold
border-color: rgb(34, 154, 210)
background-color: '#3090C7'
border-radius: 6px
- type: state-label
tap_action: more-info
entity: vacuum.xiaomi_vacuum_cleaner
style:
top: 14%
right: 38%
color: rgb(255, 255, 255)
transform: translate(0%,-50%)
font-family: Trebuchet MS
font-size: 150%
font-weight: bold
border-color: rgb(34, 154, 210)
border-radius: 6px
background-color: '#cccccc'
- type: state-label
entity: sensor.vacuum_cleanmainbrush
style:
top: 35%
right: 1%
color: '#ffffff'
transform: translate(0%,-50%)
pointer-events: none
font-family: Trebuchet MS
font-size: 76%
font-weight: bold
border-right-style: solid
border-color: rgb(34, 154, 210)
- type: state-label
entity: sensor.vacuum_cleansidebrush
style:
top: 45%
right: 1%
color: '#ffffff'
transform: translate(0%,-50%)
pointer-events: none
font-family: Trebuchet MS
font-size: 76%
font-weight: bold
border-right-style: solid
border-color: rgb(34, 154, 210)
- type: state-label
entity: sensor.vacuum_cleanfilter
style:
top: 55%
right: 1%
color: '#ffffff'
transform: translate(0%,-50%)
pointer-events: none
font-family: Trebuchet MS
font-size: 76%
font-weight: bold
border-right-style: solid
border-color: rgb(34, 154, 210)
opacity: 0.8
- type: state-label
entity: sensor.vacuum_sensordirtyleft
style:
top: 65%
right: 1%
color: '#ffffff'
transform: translate(0%,-50%)
pointer-events: none
font-family: Trebuchet MS
font-size: 76%
font-weight: bold
border-right-style: solid
border-color: rgb(34, 154, 210)
- type: state-label
entity: sensor.vacuum_status
style:
top: 40%
left: 1%
color: '#ffffff'
transform: translate(0%,-50%)
pointer-events: none
font-family: Trebuchet MS
font-size: 80%
font-weight: bold
border-left-style: solid
border-color: '#3090C7'
- type: state-label
entity: sensor.vacuum_battery
style:
top: 50%
left: 1%
color: '#ffffff'
transform: translate(0%,-50%)
pointer-events: none
font-family: Trebuchet MS
font-size: 80%
font-weight: bold
border-left-style: solid
border-color: rgb(34, 154, 210)
- type: state-label
entity: sensor.vacuum_fan_speed
style:
top: 60%
left: 1%
color: '#ffffff'
transform: translate(0%,-50%)
pointer-events: none
font-family: Trebuchet MS
font-size: 80%
font-weight: bold
border-left-style: solid
border-color: rgb(34, 154, 210)
- type: state-label
entity: sensor.vacuum_cleaned_area
prefix: "Area:"
style:
top: 79%
left: 31%
color: '#84a6ba'
transform: translate(0%,-50%)
pointer-events: none
font-family: Trebuchet MS
font-size: 80%
font-weight: bold
- type: state-label
entity: sensor.vacuum_cleaning_time
prefix: "Time:"
style:
top: 79%
left: 51%
color: '#84a6ba'
transform: translate(0%,-50%)
pointer-events: none
font-family: Trebuchet MS
font-size: 80%
font-weight: bold
- type: entities
entities:
- entity: input_select.vacuum_room
- type: glance
columns: 2
entities:
- entity: input_boolean.disable_dustbin_notification
name: Disable Notification
- entity: input_boolean.disable_daily_vacuum
name: Disable Daily Cleanup
Configuration yaml areas,
sensor:
platform: template
sensors:
vacuum_status:
friendly_name: Status
entity_id:
- vacuum.xiaomi_vacuum_cleaner
value_template: 'Status: {{ states.vacuum.xiaomi_vacuum_cleaner.attributes.status }}'
icon_template: >
{% set val = states.vacuum.xiaomi_vacuum_cleaner.attributes.status %}
{% if val == 'Charging' %}
mdi:battery-charging
{% elif val == 'Cleaning' %}
mdi:move-resize
{% elif val == 'Returning home' %}
mdi:keyboard-return
{% elif val == 'Idle' %}
mdi:dots-horizontal
{% elif val == 'Paused' %}
mdi:pause-circle
{% else %}
mdi:help-circle
{% endif %}
vacuum_fan_speed:
friendly_name: Fan Speed
entity_id:
- vacuum.xiaomi_vacuum_cleaner
value_template: 'Mode: {{ states.vacuum.xiaomi_vacuum_cleaner.attributes.fan_speed }}'
icon_template: 'mdi:speedometer'
vacuum_battery:
friendly_name: Vacuum Battery
entity_id:
- vacuum.xiaomi_vacuum_cleaner
value_template: 'Battery: {{ states.vacuum.xiaomi_vacuum_cleaner.attributes.battery_level }}'
unit_of_measurement: '%'
icon_template: '{{ states.vacuum.xiaomi_vacuum_cleaner.attributes.battery_icon }}'
vacuum_cleaning_time:
friendly_name: Time of Last Cycle
entity_id:
- vacuum.xiaomi_vacuum_cleaner
value_template: '{{ states.vacuum.xiaomi_vacuum_cleaner.attributes.cleaning_time }}'
icon_template: 'mdi:timer'
vacuum_cleaned_area:
friendly_name: Area of Last Cycle
unit_of_measurement: 'm ²'
entity_id:
- vacuum.xiaomi_vacuum_cleaner
value_template: '{{ states.vacuum.xiaomi_vacuum_cleaner.attributes.cleaned_area }}'
icon_template: 'mdi:ruler'
vacuum_cleanmainbrush:
friendly_name: Replace main brush
unit_of_measurement: 'h'
entity_id:
- vacuum.xiaomi_vacuum_cleaner
value_template: 'Main Brush: {{ states.vacuum.xiaomi_vacuum_cleaner.attributes.main_brush_left }}'
icon_template: 'mdi:screwdriver'
vacuum_cleansidebrush:
friendly_name: Replace side brush
unit_of_measurement: 'h'
entity_id:
- vacuum.xiaomi_vacuum_cleaner
value_template: 'Side brush: {{ states.vacuum.xiaomi_vacuum_cleaner.attributes.side_brush_left }}'
icon_template: 'mdi:screwdriver'
vacuum_cleanfilter:
friendly_name: Replace filter
unit_of_measurement: 'h'
entity_id:
- vacuum.xiaomi_vacuum_cleaner
value_template: 'Filter: {{ states.vacuum.xiaomi_vacuum_cleaner.attributes.filter_left }}'
icon_template: 'mdi:screwdriver'
vacuum_sensordirtyleft:
friendly_name: Replace filter
unit_of_measurement: 'h'
entity_id:
- vacuum.xiaomi_vacuum_cleaner
value_template: 'Sensor: {{ states.vacuum.xiaomi_vacuum_cleaner.attributes.sensor_dirty_left }}'
icon_template: 'mdi:screwdriver'
vacuum_do_not_disturb:
friendly_name: Do Not Disturb
entity_id:
- vacuum.xiaomi_vacuum_cleaner
value_template: '{{ states.vacuum.xiaomi_vacuum_cleaner.attributes.do_not_disturb }}'
icon_template: >
{% set val = states.vacuum.xiaomi_vacuum_cleaner.attributes.do_not_disturb %}
{% if val == 'on' %}
mdi:do-not-disturb
{% else %}
mdi:do-not-disturb-off
{% endif %}
vacuum_operation:
value_template: 'Operation'
vacuum_accessories:
value_template: 'Maintenance'
vacuum:
platform: xiaomi_miio
host: yourvacuumip!
token: yourtoken!
input_boolean:
daily_vacuum_first_run:
name: Daily Vacuum First Run
initial: 'off'
disable_daily_vacuum:
name: Disable Daily Vacuum Automation
initial: 'off'
disable_dustbin_notification:
name: Disable Dustbin Notification
initial: 'off'
input_select:
vacuum_room:
name: Choose a room to clean
options:
- Select Input
- bedroom
- guest room
- dining room
- kitchen
- living room
Automations yaml:
alias: Send alert after daily vacuum to empty the dustbin
trigger:
- platform: state
entity_id: device_tracker.galaxy_note_fan_edition
to: 'home'
for:
minutes: 5
condition:
condition: and
conditions:
- condition: state
entity_id: input_boolean.daily_vacuum_first_run
state: 'on'
- condition: time
after: '08:30:00'
before: '23:30:00'
- condition: template
value_template: >
{% if states.automation.send_alert_after_daily_vacuum_to_empty_the_dustbin.last_triggered is not none %}
{% if as_timestamp(now()) | int - as_timestamp(states.automation.send_alert_after_daily_vacuum_to_empty_the_dustbin.attributes.last_triggered) | int > 1800 %} true {% else %} false
{% endif %}
{% else %}
false
{% endif %}
- condition: state
entity_id: input_boolean.disable_dustbin_notification
state: 'off'
action:
- service: media_player.volume_set
data_template:
entity_id: media_player.living_room_speaker_3
volume_level: 0.7
- service: tts.google_say
entity_id: media_player.living_room_speaker_3
data_template:
message: 'Hey, the vacuum dustbin needs to be emptied!'
cache: false
alias: Reset Daily Vacuum First Run state at midnight
trigger:
- platform: time
at: '0:00:00'
action:
- service: homeassistant.turn_off
entity_id: input_boolean.daily_vacuum_first_run
alias: Start Cleaning Room
hide_entity: True
trigger:
- platform: state
entity_id: input_select.vacuum_room
from: 'Select Input'
action:
- service: script.turn_on
data_template:
entity_id: >
{% if is_state("input_select.vacuum_room", "bedroom") %}
script.vacuum_bedroom
{% elif is_state("input_select.vacuum_room", "guest room") %}
script.vacuum_guestroom
{% elif is_state("input_select.vacuum_room", "dining room") %}
script.vacuum_dining_room
{% elif is_state("input_select.vacuum_room", "kitchen") %}
script.vacuum_kitchen
{% elif is_state("input_select.vacuum_room", "living room") %}
script.vacuum_living_room
{% else %}
{% endif %}
- service: input_select.select_option
entity_id: input_select.vacuum_room
data_template:
option: "Select Input"
alias: Start Daily Vacuum
trigger:
- platform: time
minutes: '/45'
seconds: 00
condition:
condition: and
conditions:
- condition: state
entity_id: device_tracker.galaxy_note_fan_edition
state: 'not_home'
- condition: state
entity_id: input_boolean.daily_vacuum_first_run
state: 'off'
- condition: time
after: '11:00:00'
before: '21:00:00'
- condition: state
entity_id: input_boolean.disable_daily_vacuum
state: 'off'
action:
- delay: '00:00:15'
- service: vacuum.turn_on
entity_id: vacuum.xiaomi_vacuum_cleaner
- service: homeassistant.turn_on
entity_id: input_boolean.daily_vacuum_first_run
Scripts yaml:
vacuum_bedroom:
alias: "Vacuum Bedroom"
sequence:
- service: vacuum.send_command
data:
entity_id: vacuum.xiaomi_vacuum_cleaner
command: app_zoned_clean
params: [[17500,18000,21800,21000,1]]
vacuum_dining_room:
alias: "Vacuum Dining Room"
sequence:
- service: vacuum.send_command
data:
entity_id: vacuum.xiaomi_vacuum_cleaner
command: app_zoned_clean
params: [[22750,23500,26000,26300,1]]
vacuum_kitchen:
alias: "Vacuum Kitchen"
sequence:
- service: vacuum.send_command
data:
entity_id: vacuum.xiaomi_vacuum_cleaner
command: app_zoned_clean
params: [[18800,21500,25500,27500,1]]
vacuum_living_room:
alias: "Vacuum Living Room"
sequence:
- service: vacuum.send_command
data:
entity_id: vacuum.xiaomi_vacuum_cleaner
command: app_zoned_clean
params: [[19500,21180,26000,26300,1]]
vacuum_guestroom:
alias: "Vacuum Guestroom"
sequence:
- service: vacuum.send_command
data:
entity_id: vacuum.xiaomi_vacuum_cleaner
command: app_zoned_clean
params: [[17500,18000,21800,21000,1]]
Here’s the image for my card:
Really nice work
Hi,
Where did you get params to zone cleanup?
You need to get it manually, either get the map from your vacuum or take a screenshot of the map then start plotting the coordinates. Something like 25500,25500 is the starting coordinates.
I can’t recall the measurement but a 1000 is equal to a meter or so, you’ll need to do some Google for that.
Plan B, start doing trial and error. Send the command on Hassio with the coordinates and check at the same time in Mi Home app, the “zone” will show up in the map once the vacuum receives the command.
Then you can hook it up with IFTTT to manage it with Google Assistant via a webhook. “Hey Google, clean my bedroom” or the kitchen, etc. IFTTT receives the command from Google Assistant and sends a HTTP post/request (webhook), which in HA will trigger an specific script to clean an area.
Thank you very much!
thanks!
I keep getting Entity not available: input_select.vacuum_room.
any hints?
is this the part that was missing:
configuration.yaml
input_select:
vacuum_room:
options:
- "bedroom"
- "guestroom"
- "living_room"
- "kitchen"
- "dining_room"
Yes, that’s the part I missed. I just added it to my post. Well, your input_select is loading so it must be something else. Either way here’s the part I missed in my post:
input_select:
vacuum_room:
name: Choose a room to clean
options:
- Select Input
- bedroom
- guest room
- dining room
- kitchen
- living room
Here’s my
I use packages. I’ve uploaded the code to whoever wants to:
https://gist.github.com/abeksis/e5bc33ba5ee5f4235f7040bcfc255652
Background picture:
I like your layout. can you share the lovelace config?
It’s not possible to select rooms with the first generation vacuum cleaner, right? Only for the roborock
Gen1 has exactly the same features as Roborock. Only difference is the improved sensors (which to be honest is hard to tell the difference in real life usage, the navigation is identical), detection of rugs, the mopping and slightly higher clearance (I haven’t had any issues on rugs). I also set up the room cleaning.
If the difference is negligible in price for you, go for Roborock. Some people say the reliability on Gen1 isn’t the best and the vacuum stops working or refuses to clean due to the sensor on top failing which is a bit expensive to replace, aside from that nothing else. I have had it for over a year already, haven’t had any issues at all, I think the same goes for many people
You can’t go wrong with either one, both are a far better purchase than any other robo vacuum out there.