Зональная уборка Xiaomi Vacuum 1S в Home Asisstant v2

Зональная уборка Xiaomi Vacuum 1S в Home Asisstant v2


Решил обновить статью написанную мной 04-04-2020 на сайте sprut.ai

Прошло уже почти два года и много что изменилось.

  • Во первых я немного поменял у себя концепцию уборки
  • Во вторых интеграция Xiaomi Miio немного поменялась, ранее доставал сенсоры из атрибутов в ноябре или декабре они стали сенсорами.
  • В третьих я наконец таки сделал карту для пылесоса в Home Assistant
  • В четвертых добавил карточку Vacuum Card
На данный момент вкладка с пылесосом выглядит так

Ссылку на мой пример прикрепляю lovelace

Для построения такой карточки необходимы следующие интеграции

В стандартной интеграции Xiaomi Miio видим следующие сенсоры

Сенсоры интеграции

Определяем ID комнат

На данный момент есть достаточно много способов получить ID, я буду рассматривать самые простые и быстрые варианты. Мне нравятся 2 способа

  1. Xiaomi Gateway 3 for Home Assistant - Самый простой способ
  2. Xiaomi Cloud Map Extractor
Xiaomi Gateway 3 for Home Assistant
Xiaomi Cloud Map Extractor

Кнопки input_boolean

input_boolean

Добавляем стандартную интеграцию через меню добавить интеграцию

вводим учетные данные от MiHome и сущность vacuum добавляется автоматически.

vacuum

В конфигурационном файле configuration.yaml включаем поддержку питон скриптов.

python_script:

Помимо включения python скриптов нужно создать папку в корне "/config/python_script".

В созданной папке /config/python_script нужно создать файл "xiaomi.py". В квадратных скобках указываем полученные id комнат.

args = {"entity_id": "vacuum.xiaomi_vacuum_cleaner", "command" : "app_segment_clean", "params": []}
params_lera = hass.states.get("input_boolean.lera_vacuum").state
params_artem = hass.states.get("input_boolean.artem_vacuum").state
params_kitchen = hass.states.get("input_boolean.kitchen_vacuum").state
params_koridor = hass.states.get("input_boolean.koridor_vacuum").state
params_spalnya = hass.states.get("input_boolean.spalnya_vacuum").state
params_zal = hass.states.get("input_boolean.zal_vacuum").state

if params_lera == 'on':
 args["params"].extend([20])
if params_artem == 'on':
 args["params"].extend([19])
if params_kitchen == 'on':
 args["params"].extend([16])
if params_koridor == 'on':
 args["params"].extend([17])
if params_spalnya == 'on':
 args["params"].extend([18])
if params_zal == 'on':
 args["params"].extend([21])
hass.services.call('vacuum', 'send_command', args)

Для Алисы отдельные 6 скриптов для уборки указанных комнат.

vacuum_segment.yaml


Также не стоит забывать, что у пылесоса есть счетчики до обслуживания и замены расходных материалов. После замены и очистки просто запускаем необходимый скрипт.

vacuum_reset_sensor.yaml

Сенсоры пылесоса /config/includes/sensor/mirobot.yaml

Автоматизация  /config/includes/automation/vacuum.yaml

Lovelace  /config/ui-lovelace.yaml

Автоматизации, опять же, каждый может делать на свой вкус. Мне, к примеру, не нужно запускать пылесос пока все на работе или по расписанию. Кому-то это важно. Мне важно, чтобы я мог сказать Алисе - уберись на кухне, либо зайти в приложение HA и выбрать необходимые комнаты для уборки, что собственно и сделал. Но еще есть один важный и актуальный вопрос, возможно кто-то из читателей сможет на него ответить.  Вопрос: "Если отключатся сервера Mihome, сможет ли пылесос определить id комнат, ну т.е хранятся они в облаке или в пылесосе локально?" Они хранятся локально.  Без интернета все прекрасно работает

Карта пылесоса


Ставим интеграцию xiaomi_cloud_map_extractor, инструкция в репозитории есть не буду углубляться.

В файле конфигурации прописываем доступ к MiHome и остальные опции о них можно почитать в репозитории прикладываю свой пример /config/configuration.yaml

Ставим, правим конфиг, перезагружаем...

    host: ip-адрес
    token: token от пылесоса, получаем в интеграции Xiaomi Gateway 3
    username: логин MiHome
    password: пароль от MiHome
    country: "cn" - Страна которая указана в михоум


В итоге должна появиться сущность камеры с кучей данных

Панель разработчика

Если данных мало то неправильный токен, страна, логин либо пароль

Далее ставим lovelace-xiaomi-vacuum-map-card

Конфиг карточки

В карточке указаны мои ID комнат и координаты кнопок для уборки комнат. Необходимо будет указать свои.

UPD: 19.03.2023

Для того чтобы не использовать python_script, вместо него нам потребуется простая автоматизация:

alias: Уборка выбранных комнат - Автоматизацией
description: ""
trigger:
 - platform: state
  entity_id: input_boolean.start_vacuum_clean_zone
  to: "on"
condition:
 - condition: or
  conditions:
   - condition: state
    entity_id: input_boolean.lera_vacuum
    state: "on"
   - condition: state
    entity_id: input_boolean.artem_vacuum
    state: "on"
   - condition: state
    entity_id: input_boolean.kitchen_vacuum
    state: "on"
   - condition: state
    entity_id: input_boolean.koridor_vacuum
    state: "on"
   - condition: state
    entity_id: input_boolean.spalnya_vacuum
    state: "on"
   - condition: state
    entity_id: input_boolean.zal_vacuum
    state: "on"
action:
 - service: vacuum.send_command
  data:
   command: app_segment_clean
   params: >
    {% set ids = [] %} {% if is_state('input_boolean.kitchen_vacuum', 'on')
    %}
     {% set ids = ids + [16] %}
    {% endif %} {% if is_state('input_boolean.artem_vacuum', 'on') %}
     {% set ids = ids + [19] %}
    {% endif %} {% if is_state('input_boolean.koridor_vacuum', 'on') %}
     {% set ids = ids + [17] %}
    {% endif %} {% if is_state('input_boolean.lera_vacuum', 'on') %}
     {% set ids = ids + [20] %}
    {% endif %} {% if is_state('input_boolean.spalnya_vacuum', 'on') %}
     {% set ids = ids + [18] %}
    {% endif %} {% if is_state('input_boolean.zal_vacuum', 'on') %}
     {% set ids = ids + [21] %}
    {% endif %} {{ ids }}
  target:
   entity_id: vacuum.xiaomi_vacuum_cleaner
 - service: notify.telegram
  data:
   title: Внимание!
   message: >-
    Пылесос начал уборку в комнатах: {% if
    is_state('input_boolean.kitchen_vacuum', 'on') %}

    - Кухня{% endif %} {% if is_state('input_boolean.artem_vacuum', 'on') %}

    - Комната Артема{% endif %} {% if
    is_state('input_boolean.koridor_vacuum', 'on') %}

    - Коридор{% endif %} {% if is_state('input_boolean.lera_vacuum', 'on')
    %}

    - Комната Леры{% endif %} {% if is_state('input_boolean.spalnya_vacuum',
    'on') %}

    - Спальня{% endif %} {% if is_state('input_boolean.zal_vacuum', 'on') %}

    - Зал{% endif %}
initial_state: true

Также переделал автоматизацию уведомлений от пылесоса

Евгений Демин


Report Page