Integrar Xiaomi MOP P en Home Assistant

Home Assistant no integra de forma nativa este modelo tal como hacia con el modelo Vacuum 2 , para ello copiaremos en custom_components/miio2 los cuatro ficheros que encontraremos en este enlace.

Añadiremos en configuration.yaml la configuración del robot

vacuum:
  - platform: miio2
    # https://github.com/nqkdev/home-assistant-vacuum-styj02ym
    host: 192.168.1.204
    token: !secret vacuum_token
    name: Robot Mop Pro

El token lo podemos sacar de varias maneras , pero la mas cómoda es con la aplicación mi Home vevs que nos lo da directamente.

Una vez lo vemos ya en nuestro Home Assistant podemos empezar a crear los sensores para nuestras tarjetas y automatizaciones.

Lo primero un sensor que nos guarde el valor de la bateria para poder controlar su estado.

      mayordomo_battery_level:
        friendly_name: Robot Chu-Li
        value_template: "{{ states.vacuum.robot_mop_pro.attributes.battery_level|default(-1)| int(0)  if states.vacuum.robot_mop_pro is not none }}"
        unit_of_measurement: '%'
        icon_template: '{% if states.vacuum.robot_mop_pro.attributes.battery_level == 100 %}
                          mdi:battery
                       {% elif states.vacuum.robot_mop_pro.attributes.battery_level >= 90 %}
                          mdi:battery-90
                       {% elif states.vacuum.robot_mop_pro.attributes.battery_level >= 80 %}
                          mdi:battery-80
                       {% elif states.vacuum.robot_mop_pro.attributes.battery_level >= 70 %}
                          mdi:battery-70
                       {% elif states.vacuum.robot_mop_pro.attributes.battery_level >= 60 %}
                          mdi:battery-60
                       {% elif states.vacuum.robot_mop_pro.attributes.battery_level >= 50 %}
                          mdi:battery-50
                       {% elif states.vacuum.robot_mop_pro.attributes.battery_level >= 40 %}
                          mdi:battery-40
                       {% elif states.vacuum.robot_mop_pro.attributes.battery_level >= 30 %}
                          mdi:battery-30
                       {% elif states.vacuum.robot_mop_pro.attributes.battery_level >= 20 %}
                          mdi:battery-20
                       {% elif states.vacuum.robot_mop_pro.attributes.battery_level >= 10 %}
                          mdi:battery-10
                       {% else %}
                          mdi:battery-outline
                       {% endif %}'

Esto nos permitirá ver por ejemplo que cuando estaba al 6% ha vuelto ,se ha recargado hasta el 60% y entonces ha acabado el ciclo de limpieza volviendo al dock a cargarse completamente

Crearemos unos sensores extras para poder ver los valores en nuestra tarjeta del robot.

  # Estado de la aspiradora
  - platform: template
    sensors:
      vacuum_status:
        value_template: '{{states.vacuum.robot_mop_pro.state}}'
        friendly_name: Estado de la aspiradora
        icon_template: mdi:information-variant
            
  # Nivel de batería de la aspiradora      
  - platform: template
    sensors:
      vacuum_battery_level:
        value_template: '{{ states.vacuum.robot_mop_pro.attributes.battery_level | int(0) }}'
        unit_of_measurement: '%'
        friendly_name: Batería restante
        icon_template: mdi:battery
        
  # Velocidad de Aspiración     
  - platform: template
    sensors:
      vacuum_fan_speed:
        friendly_name: Velocidad Aspiración
        value_template: 'Modo Aspiración: {{ states.vacuum.robot_mop_pro.attributes.fan_speed }}'
        icon_template: 'mdi:speedometer'

Quedaria algo asi

Y a partir de ahí ya podemos empezar a programar nuestras automatizaciones , esta por ejemplo es parte del bot de Telegram que nos da información del robot y nos permite interactuar con el desde Telegram.

telegram_estado_robot_aspirador:
  alias: telegram_estado_robot_aspirador
  sequence:
    
    - service: notify.notif_telegram_bot
      data:
        message: "*Pulsado estado robot*"
        
    - service: notify.notif_telegram_bot
      data_template:
        # title: 'Menú'
        message: |
          {{"\U0001F300"}} *Estado robot aspirador* {{"\U0001F300"}}
          
          {{"\U0001f50b"}} *Bateria:* {{ states.vacuum.robot_mop_pro.attributes.battery_level }}%
          {{"\U0001F300"}} *Velocidad aspirado:* {{states.vacuum.robot_mop_pro.attributes.fan_speed}}
          {{"\U0001f4ab"}} *Estado actual:* {{states.vacuum.robot_mop_pro.state}}    
        data:
          inline_keyboard:
            - 'Aspirador ON:/estado_robot_on, Aspirador OFF:/estado_robot_off'
            - 'Aspirador Pausa:/estado_robot_pause, Aspirador BASE:/estado_robot_base'
            - 'Principal:/cancel'

Y esta por ejemplo para que nos avise por Telegram , y también nos de un mensaje via TTS a traves de los altavoces de los dos Google Home.

- alias: Empezando a limpiar
  initial_state: 'on'
  trigger:
  - entity_id: vacuum.robot_mop_pro
    platform: state
    to: cleaning
  condition:
    condition: state
    entity_id: input_boolean.int_menos_notificaciones
    state: 'off'    
  action:
    - service: notify.notif_telegram_bot
      data:
        message: "Robot Xiaomi *comenzando* limpieza"


- alias: Limpieza Acabada
  initial_state: 'on'
  trigger:
  - entity_id: vacuum.robot_mop_pro
    platform: state
    from: cleaning
    to: idle
  condition:
    condition: state
    entity_id: input_boolean.int_menos_notificaciones
    state: 'off'    
  action:
    - service: notify.notif_telegram_bot
      data:
        message: "Robot Xiaomi *limpieza acabada*"

    - service: tts.google_cloud
      entity_id: media_player.lenovocd_24502f2519
      data:
        message: 'Robot Xiaomi limpieza acabada'

    - service: tts.google_cloud
      entity_id: media_player.googlehome2670
      data:
        message: 'Robot Xiaomi limpieza acabada'

Y con esto y un bizcocho ….