Рассмотрим интеграцию умного пылесоса на примере Xiaomi Mijia Sweeping Vacuum Cleaner 1C. Этим пылесосом можно управлять как локально, так и через экосистему MiHome. Аналогично можно поступить и с вашими моделями.
Мы займемся решением следующих задач:
Скачиваем и устанавливаем кастомное приложение от Vevs – kapiba.ru (Только Android).Скачиваем подходящий звуковой пакет на 4PDA для вашего пылесоса.Скачиваем и меняем файл main.bundle (предварительно скаченный звуковой пакет переименовываем в
main.bundle) в своем телефоне по пути (цифры в конце буду различаться):
/storage/emulated/0/Android/data/com.xiaomi.smarthome/files/plugin/install/rn/1000004/1003860/android
В меню MiHome от Vevs зайти в настройку языка, выбрать загруженный звуковой пакет.
Добавим и настроим карточку управленияДобавим и настроим карточку управленияСкачиваем и устанавливаем кастомное приложение от Vevs kapiba.ru (Только Android).Заходим в приложение и вытаскиваем токен: долгим нажатием на пылесосе, изменить имя…Добавляем интеграцию через HACS в Home Assistant, для моего пылесоса это xiaomi_vacuum. У меня не самая распространенная модель, пробуйте сначала штатную интеграцию в HA.Указываем параметры подключения:
vacuum: – platform: xiaomi_vacuum host: <ip> token: “<token>” name: <name>
Используется кастомная интеграция, добавленная через HACS:
github.com/denysdovhan/vacuum-card
Советую покопаться, настраивается много удобных представлений и элементов управления.
compact_view: false
entity: vacuum.xiaomi_vacuum_cleaner
image: /local/vacuum.png
show_name: true
show_status: true
show_toolbar: true
stats:
cleaning:
- attribute: cleaned_area
subtitle: Cleaning area
unit: m2
- attribute: cleaning_time
subtitle: Cleaning time
unit: minutes
default:
- attribute: filter_life_level
subtitle: Фильтр
unit: '-%'
- attribute: side_brush_life_level
subtitle: Бок. щетка
unit: '-%'
- attribute: main_brush_life_level
subtitle: Гл. щетка
unit: '-%'
actions:
- name: Очистка квартиры без подготовки
service: script.vacuum_all
icon: mdi:floor-plan
- name: Очистка комнаты
service: script.vacuum_room
icon: mdi:bed-empty
- name: Очистка кухни
service: script.vacuum_kitchen
icon: mdi:silverware-fork-knife
- name: Очистка холла
service: script.vacuum_hall
icon: mdi:door
type: custom:vacuum-card
ВАЖНО! У меня не самая распространенная версия пылесоса, я не могу вытащить карту из облака Mi, поэтому делал свою, она не отображает в реальном времени движение пылесоса.
Для начала пробуйте пользоваться этим:
github.com/PiotrMachowski/lovelace-xiaomi-vacuum-map-card
github.com/PiotrMachowski/Home-Assistant-custom-components-Xiaomi-Cloud-Map-Extractor
Если не подходит, мой пример для вас.
Для начала выловим координаты наших зон уборки:
Снова используем кастомное приложение MiHome от Vevs.Заходим в приложение и отправляем пылесос на нужную нам площадь.Через проводник в телефоне, лезем в логи приложения
“/vevs/logs/miio”и получаем координаты:
{“id”:9556,“method”:“action”,“params”:{“did”:“292175500”,“siid”:18,“aiid”:1,“in”:[{“piid”:1,“value”:19},{“piid”:21,“value”:“2213,4329,9706,5834”}]}}
С полученными координатами заводим скрипты. Они как раз и будут отправлять пылесос на нужную площадь. Скрипты прикручиваем к карточке управления и карте.
Пример скрипта с использованием координат:
script:
vacuum_room:
alias: "Пылесос. Комната"
sequence:
#Запускаем пылесос по координатам
- service: xiaomi_vacuum.vacuum_clean_zone
data_template:
entity_id: vacuum.xiaomi_vacuum_cleaner
repeats: 1
zone: "-2146,-2414,722,3497"
#Настраиваем громкость на колонке и озвучиваем запуск
- service: media_player.volume_set
data:
entity_id: media_player.yandex_station
volume_level: 0.4
- delay: "00:00:05"
- service: media_player.play_media
entity_id: media_player.yandex_station
data:
media_content_id: "Уборка будет произведена только в комнате."
media_content_type: text
#Отправляем уведомления в Телеграм
- service: notify.telegram_nikita
data_template:
title: "*Тимон:*"
message: "Уборка будет произведена только в комнате."
- service: notify.telegram_liza
data_template:
title: "*Тимон:*"
message: "Уборка будет произведена только в комнате."
Создадим саму карту.
3D модель советую делать в ScetchUP, рендер картинки через Vray плагин.
Итого что получилось у меня, пример на одной комнате:
Пример настройки карточки, управляется через кастомный элемент – github.com/iantrich/config-template-card
type: custom:config-template-card
entities:
- vacuum.xiaomi_vacuum_cleaner
card:
type: picture-elements
image: /local/floorplan/0_day_clean_1.jpg
style: |
ha-card:first-child {
background: rgba(42, 46, 48, 1);
}
elements:
- type: image
entity: vacuum.xiaomi_vacuum_cleaner
image: /local/floorplan/clean_room.png
left: 50%
top: 50%
width: 100%
mix-blend-mode: lighten
action: none
tap_action:
action: none
hold_action:
action: none
style:
filter: >
${ "hue-rotate(" + (states['script.vacuum_room'].attributes.hs_color ? states['script.vacuum_room'].attributes.hs_color[0] : 0) + "deg)" }
- type: state-icon
entity: vacuum.xiaomi_vacuum_cleaner
icon: mdi:broom
tap_action:
action: call-service
service: script.vacuum_room
hold_action:
action: none
style:
left: 69%
top: 65%
width: 2vw
height: 2vw
transform: scale(1)
margin-left: "-1.5vw"
margin-top: "-1.5vw"
display: flex
align-items: center
justify-content: center
background-color: "#FFFFFF"
border-radius: "100%"
box-shadow: "0px 0px 28px 0px rgba(0,0,0,0.39)"
--iron-icon-height: 2vw
--iron-icon-width: 2vw
--paper-item-icon-color: darkgrey
--paper-item-icon-active-color: "#000000"
Когда пылесос начинает или заканчивает что-то делать, он сообщает это через свой звуковой пакет, Яндекс станцию и отправляет уведомления в Телеграм. Также, в случае простоя больше 2-х дней, пылесос предлагает убраться.
sensor:
#Создаем сенсоры фильтра и щеток для отправки уведомления при завершении уборки
- platform: template
sensors:
vacuum_filter:
friendly_name: "Пылесос. Статус фильтра"
value_template: "{{ state_attr('vacuum.xiaomi_vacuum_cleaner', 'filter_life_level') }}"
unit_of_measurement: "%"
vacuum_main_brush:
friendly_name: "Пысос. Главная щетка"
value_template: "{{ state_attr('vacuum.xiaomi_vacuum_cleaner', 'main_brush_life_level') }}"
unit_of_measurement: "%"
vacuum_side_brush:
friendly_name: "Пылесос. Боковая щетка"
value_template: "{{ state_attr('vacuum.xiaomi_vacuum_cleaner', 'side_brush_life_level') }}"
unit_of_measurement: "%"
automation:
#Общее уведомление о начале уборки
- id: vacuum_start_telegram
alias: "Пылесос. Начало уборки, уведом.телеграм"
trigger:
- platform: state
entity_id: vacuum.xiaomi_vacuum_cleaner
to: "cleaning"
condition:
- condition: time
after: "09:00:00"
before: "00:00:00"
action:
- delay: "00:00:10"
- service: notify.telegram_nikita
data_template:
title: "*Тимон:*"
message: "Начинаю уборку."
- service: notify.telegram_liza
data_template:
title: "*Тимон:*"
message: "Начинаю уборку."
#Общее уведомление о конце уборки
- id: vacuum_end
alias: "Пылесос. Окончание"
trigger:
- platform: state
entity_id: vacuum.xiaomi_vacuum_cleaner
from: "cleaning"
condition:
- condition: time
after: "09:00:00"
before: "00:00:00"
action:
- service: media_player.volume_set
data:
entity_id: media_player.yandex_station
volume_level: 0.3
- delay: "00:00:01"
- service: media_player.play_media
entity_id: media_player.yandex_station
data:
media_content_id: "Уборка завершена"
media_content_type: text
- service: notify.telegram_nikita
data_template:
title: "*Тимон: уборка завершена.*"
message: >
Состояние фильтра: {{ state_attr('vacuum.xiaomi_vacuum_cleaner', 'filter_life_level') }} %.
Состояние главной щетки: {{ state_attr('vacuum.xiaomi_vacuum_cleaner', 'main_brush_life_level') }} %.
Состояние боковой щетки: {{ state_attr('vacuum.xiaomi_vacuum_cleaner', 'side_brush_life_level') }} %.
- service: notify.telegram_liza
data_template:
title: "*Тимон: уборка завершена.*"
message: >
Состояние фильтра: {{ state_attr('vacuum.xiaomi_vacuum_cleaner', 'filter_life_level') }} %.
Состояние главной щетки: {{ state_attr('vacuum.xiaomi_vacuum_cleaner', 'main_brush_life_level') }} %.
Состояние боковой щетки: {{ state_attr('vacuum.xiaomi_vacuum_cleaner', 'side_brush_life_level') }} %.
#Уведомление о простое больше 2х дней с передачей клавиш на выбор типа уборки/помещений
- id: vacuum_not_cleaning
alias: "Пылесос. Простой. Реакция."
trigger:
- platform: time
at: "15:00:00"
condition:
- condition: state
entity_id: vacuum.xiaomi_vacuum_cleaner
state: "off"
- condition: template
value_template: "{{ as_timestamp(now()) - as_timestamp(state_attr('vacuum.xiaomi_vacuum_cleaner', 'last_cleaned')) > 144000 }}"
action:
- service: notify.telegram_nikita
data:
title: "*Тимон: вы не убирались больше 2х дней.*"
message: "Что хотите очистить?"
data:
inline_keyboard:
- "Вся квартира:/command1, Комната:/command2"
- "Кухня:/command3, Прихожая:/command4"
- service: notify.telegram_liza
data:
title: "*Тимон: вы не убирались больше 2х дней.*"
message: "Что хотите очистить?"
data:
inline_keyboard:
- "Вся квартира:/command1, Комната:/command2"
- "Кухня:/command3, Прихожая:/command4"
- delay: "00:00:10"
- service: input_boolean.turn_off
data:
entity_id: input_boolean.vacuum_cleaning
- id: vacuum_telegram_command1
alias: "Пылесос. Выбор всей квартиры"
trigger:
- platform: event
event_type: telegram_callback
event_data:
command: "/command1"
action:
- service: script.vacuum_all
- id: vacuum_telegram_command2
alias: "Пылесос. Выбор комнаты"
trigger:
- platform: event
event_type: telegram_callback
event_data:
command: "/command2"
action:
- service: script.vacuum_room
- id: vacuum_telegram_command3
alias: "Пылесос. Выбор кухни"
trigger:
- platform: event
event_type: telegram_callback
event_data:
command: "/command3"
action:
- service: script.vacuum_kitchen
- id: vacuum_telegram_command4
alias: "Пылесос. Выбор коридора"
trigger:
- platform: event
event_type: telegram_callback
event_data:
command: "/command4"
action:
- service: script.vacuum_hall