Приручи Home Assistant. Пылесос: управление, интерактивная карта, уведомления.

16 октября 2021, 17:00

Рассмотрим интеграцию умного пылесоса на примере Xiaomi Mijia Sweeping Vacuum Cleaner 1C. Этим пылесосом можно управлять как локально, так и через экосистему MiHome. Аналогично можно поступить и с вашими моделями.

Мы займемся решением следующих задач:

  • Обновим звуковой пакет пылесоса.
  • Проведем интеграцию пылесоса в Home Assistant, управление локальное.
  • Настроим карточку управления.
  • Сделаем интерактивную карту вызова зон уборки.
  • Организуем уведомления о начале/завершении уборки.

Меняем звуковой пакет

  • Скачиваем и устанавливаем кастомное приложение от 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 зайти в настройку языка, выбрать загруженный звуковой пакет.

Проведем интеграцию в Home Assistant

  • Скачиваем и устанавливаем кастомное приложение от 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

Советую покопаться, настраивается много удобных представлений и элементов управления.

k01-1.jpg
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: sscript.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”}]}}

Скрин из приложения MiHome от Vevs. У каждого пылесоса плагин и отображение свои.

1600x_image.png?1634285480

С полученными координатами заводим скрипты. Они как раз и будут отправлять пылесос на нужную площадь. Скрипты прикручиваем к карточке управления и карте.

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 плагин. 

Итого что получилось у меня, пример на одной комнате:

1600x_image.png?1634287050
Основная картинка
1600x_image.png?1634287051
Накладывается сверху при активации.

Пример настройки карточки, управляется через кастомный элемент - github.com/iantrich/config-template-card

card:
  elements:
    - action: none #реакция картинки
      entity: vacuum.xiaomi_vacuum_cleaner
      hold_action:
        action: none
      image: /local/floorplan/clean_room.png
      style:
        filter: >-
          ${ "hue-rotate("   (states['script.vacuum_room'].attributes.hs_color ?
          states['script.vacuum_room'].attributes.hs_color[0] : 0)   "deg)"}
        left: 50%
        mix-blend-mode: lighten
        opacity: >-
          ${states['script.vacuum_room'].state === 'on' ?
          (states['script.vacuum_room'].attributes.brightness / 255) : '0'}
        top: 50%
        width: 100%
      tap_action:
        action: none
      type: image
    - entity: vacuum.xiaomi_vacuum_cleaner #настройка кнопки
      hold_action:
        action: none
      icon: mdi:broom
      style:
        '--iron-icon-height': 2vw
        '--iron-icon-width': 2vw
        '--paper-item-icon-active-color': '#000000'
        '--paper-item-icon-color': darkgrey
        align-items: center
        background-color: '#FFFFFF'
        border-radius: 100%
        box-shadow: 0px 0px 28px 0px rgba(0,0,0,0.39)
        display: flex
        height: 2vw
        justify-content: center
        left: 69%
        margin-left: '-1.5vw'
        margin-top: '-1.5vw'
        top: 65%
        transform: scale(1)
        width: 2vw
      tap_action:
        action: call-service
        service: script.vacuum_room
      type: state-icon
  image: /local/floorplan/0_day_clean_1.jpg
  style: |
    ha-card:first-child {
      background: rgba(42, 46, 48, 1)
    }
  type: picture-elements
entities:
  - vacuum.xiaomi_vacuum_cleaner
type: custom:config-template-card

Добавим уведомления

Когда пылесос начинает или заканчивает что-то делать, он сообщает это через свой звуковой пакет, Яндекс станцию и отправляет уведомления в Телеграм. Также, в случае простоя больше 2-х дней, пылесос предлагает убраться.

sensor:
  - platform: template
    sensors:
      vacuum_filter:
        friendly_name: Пылесос. Статус фильтра.
        value_template: "{{ states.vacuum.xiaomi_vacuum_cleaner.attributes.filter_life_level }}"
        unit_of_measurement: '%'

      vacuum_main_brush:
        friendly_name: Пылесос. Главной щетки.
        value_template: "{{ states.vacuum.xiaomi_vacuum_cleaner.attributes.main_brush_life_level }}"
        unit_of_measurement: '%'

      vacuum_side_brush:
        friendly_name: Пылесос. Боковая щетка.
        value_template: "{{ states.vacuum.xiaomi_vacuum_cleaner.attributes.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: >
            Состояние фильтра: {{states.sensor.vacuum_filter.state}} %.
            Состояние главной  щетки: {{states.sensor.vacuum_main_brush.state}} %.
            Состояние боковой  щетки: {{states.sensor.vacuum_side_brush.state}} %.
      - service: notify.telegram_liza
        data_template:
          title: '*Тимон: уборка завершена.*'
          message: >
            Состояние фильтра: {{states.sensor.vacuum_filter.state}} %.
            Состояние главной  щетки: {{states.sensor.vacuum_main_brush.state}} %.
            Состояние боковой  щетки: {{states.sensor.vacuum_side_brush.state}} %.

#Долго без уборки - Реакция. Проверяет каждый день в 15:00 сколько пылесос не убирался.
#Направляет в Телеграм кнопки для выбора реакции.
  - id: vacuum_not_cleaning
    alias: Пылесос. Простой. Реакция.
    trigger:
      platform: time
      at: '15:00:00'
    condition:
      condition: state
      entity_id: vacuum.xiaomi_vacuum_cleaner
      state: 'off' #простой может по другому указываться...
      for:
        hours: 40
    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: '0: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

Все новости мира умных домов - t.me/SprutAI_News или Instagram
Остались вопросы? Мы в Telegram - @SprutAI

Хочешь умный дом но нет времени разбираться?
Посмотри примеры работ и выбери себе интегратора.
К списку статей
Россия, г. Санкт-Петербург

Устройства в материале

Xiaomi Mi 1C

Производитель: Xiaomi

Скидки для сообщества

Интернет-магазин yourhomekit.ru

+7 914 550-51-11
Промокод:
SPRUT-BLG
Размер скидки:
8%
Cамый большой ассортимент в России аксессуаров Apple HomeKit

Похожие статьи

17 декабря 2019, 17:49
Универсальный привод для автоматического удаленного открытия окон с простой интеграцией в умные дома.
09 ноября 2018, 20:54
Кейс создания умного дома без каких либо прокладок в виде Raspberry pi
20 октября 2018, 22:57
Теоретические основы протокола MQTT и описание того, как он работает и для чего используется
30 августа 2019, 07:28
Несколько нетривиальных способов использования датчика открытия окон/дверей от Xiaomi/Aqara.
24 августа 2018, 12:18
Пошаговая установка HomeAssistant
15 ноября 2018, 13:11
Xiaomi Mi Remote 360 добавляем Apple HomeKit
15 ноября 2018, 09:42
Способы автоматизации механических ворот
27 августа 2018, 10:14
Интегрируем ХА в HomeKit
28 августа 2018, 09:48
От голого Raspbian до веб-интерфейса homebridge за четыре команды в терминале.
19 марта 2019, 22:19
Обзор долгожданного 2х канального zigbee реле от Aqara, сравнение с конкурентами и небольшой тест на Deconz, Mi Hub и Aqara Hub.