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: