Xiaomi Vacuum cleaner Card

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:

36 Likes