Зональная уборка Xiaomi Vacuum 1S в Home Asisstant v2
Решил обновить статью написанную мной 04-04-2020 на сайте sprut.ai
Прошло уже почти два года и много что изменилось.
- Во первых я немного поменял у себя концепцию уборки
- Во вторых интеграция Xiaomi Miio немного поменялась, ранее доставал сенсоры из атрибутов в ноябре или декабре они стали сенсорами.
- В третьих я наконец таки сделал карту для пылесоса в Home Assistant
- В четвертых добавил карточку Vacuum Card
Ссылку на мой пример прикрепляю lovelace
Для построения такой карточки необходимы следующие интеграции
В стандартной интеграции Xiaomi Miio видим следующие сенсоры
Определяем ID комнат
На данный момент есть достаточно много способов получить ID, я буду рассматривать самые простые и быстрые варианты. Мне нравятся 2 способа
- Xiaomi Gateway 3 for Home Assistant - Самый простой способ
- Xiaomi Cloud Map Extractor
Кнопки input_boolean
Добавляем стандартную интеграцию через меню добавить интеграцию
вводим учетные данные от MiHome и сущность 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 скриптов для уборки указанных комнат.
Также не стоит забывать, что у пылесоса есть счетчики до обслуживания и замены расходных материалов. После замены и очистки просто запускаем необходимый скрипт.
Сенсоры пылесоса /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
Также переделал автоматизацию уведомлений от пылесоса