Статья

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

Задался вопросом добавления пылесоса в Home Asisstant и, как любой человек, я полез искать информацию в Google, нашел на эту тематику несколько русскоязычных статей. По аналогии добавил пылесос, но меня интересовала зональная уборка. В большинстве инструкций рекомендовано установить на смартфон android приложение FloleVac, после установки выбрать интересующую вас зону и можно получить координаты. Но таких девайсов, к сожалению, у меня нет. Было принято решение поставить на PC эмулятор android. После установки эмулятора и приложения я был удивлен, поскольку вместо карты я увидел полную ахинею. Было принято решение поискать телефон android у родни. После того как я нашел телефон и установил приложение, я был очень удивлен, поскольку на экране телефона увидел то же самое, что и в эмуляторе. После прочтения еще кучи статей, 4PDA и зарубежных форумов я понял, что причина в модели 1S, так как с обычным пылесосом Xiaomi Vacuum cleaner такой проблемы нет. На фото ниже пример фото экрана.

После этого я решил свою задачу другим методом.

Есть зональная уборка, а есть уборка сегментов. Я решил попытать счастья с уборкой сегментов. Стал вопрос в получении ID комнаты. Для получения ID комнат нам будет необходимо приложение MiHome от vevs, запускаем через него уборку конкретной комнаты и после идем в директорию приложения и находим там файлик логов приложения. И ищем там сообщения типа:

GlobalWorker 20:29:59:322 checkRpcRequst:request: 261363413,333930515a57714e536d76754864784b,app_segment_clean,[20], time = 1583947799321

[20] - это как раз и есть id комнаты. Как правило, там используются id 15, 16, 17, 18, 19, 20. Но это из моего опыта, точных данных у меня нет, интересовался у коллег, у кого есть такие пылесосы, id тоже из этого же диапазона.

Home Asisstant

id комнаты мы вычислили, но что теперь с ним делать? В основном люди делают выбор одной комнаты и запускают уборку, но меня это не устраивало, так как мне нужно убирать конкретно указанные комнаты. 

Схема такая: выбираем интересующие нас комнаты, нажимаем старт и пылесос убирает в указанных комнатах. После того, как статус пылесоса меняется на возврат на док станцию, автоматизация переключает кнопки в состояние "off ".

Ниже привожу примеры конфигов. Для реализации у себя такой же схемы, необходимо сменить название кнопок и id комнат.

#input_boolean: lera_vacuum: name: "Лера" initial: off icon: mdi:cellphone-wireless artem_vacuum: name: "Артем" initial: off icon: mdi:cellphone-wireless zal_vacuum: name: "Зал" initial: off icon: mdi:cellphone-wireless spalnya_vacuum: name: "Спальня" initial: off icon: mdi:cellphone-wireless kitchen_vacuum: name: "Кухня" initial: off icon: mdi:cellphone-wireless koridor_vacuum: name: "Коридор" initial: off icon: mdi:cellphone-wireless start_vacuum_clean_zone: name: "Старт" initial: off

В конфигурационном файле добавляем наш пылесос и включаем поддержку питон скриптов. Помимо включения 

python скриптов нужно создать папку в корне "/config/python_script".

#configuration.yaml vacuum: - platform: xiaomi_miio host: 192.168.1.100 # Указываете адрес своего пылесоса. Посмотреть либо на роутере либо в mihome в разделе сеть token: !secret Mirobot_token # Токен получить в приложении mihome от vevs #Включаем поддержку python скриптов python_script:

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

#/config/python_scripts/xiaomi.py args = {"entity_id": "vacuum.xiaomi_vacuum_cleaner", "command" : "app_segment_clean", "params": []} params_lera = data.get("input_boolean.lera_vacuum") params_artem = data.get("input_boolean.artem_vacuum") params_kitchen = data.get("input_boolean.kitchen_vacuum") params_koridor = data.get("input_boolean.koridor_vacuum") params_spalnya = data.get("input_boolean.spalnya_vacuum") params_zal = data.get("input_boolean.zal_vacuum") 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)

Далее создаем файл clean_xiaomi.yaml в папке скриптов.

#/config/includes/scripts/clean_xiaomi.yaml clean_xiaomi: alias: "xiaomi clean action" sequence: - service: python_script.xiaomi data_template: input_boolean.lera_vacuum: '{{ states.input_boolean.lera_vacuum.state }}' input_boolean.artem_vacuum: '{{ states.input_boolean.artem_vacuum.state }}' input_boolean.kitchen_vacuum: '{{ states.input_boolean.kitchen_vacuum.state }}' input_boolean.koridor_vacuum: '{{ states.input_boolean.koridor_vacuum.state }}' input_boolean.spalnya_vacuum: '{{ states.input_boolean.spalnya_vacuum.state }}' input_boolean.zal_vacuum: '{{ states.input_boolean.zal_vacuum.state }}'

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

#/config/includes/scripts/vacuum_segment.yaml vacuum_artem: alias: "Убрать в комнате у Артема" sequence: - service: vacuum.send_command data: entity_id: vacuum.xiaomi_vacuum_cleaner command: app_segment_clean params: [19] vacuum_lera: alias: "Убрать в комнате у Леры" sequence: - service: vacuum.send_command data: entity_id: vacuum.xiaomi_vacuum_cleaner command: app_segment_clean params: [20] vacuum_zal: alias: "Убрать в зале" sequence: - service: vacuum.send_command data: entity_id: vacuum.xiaomi_vacuum_cleaner command: app_segment_clean params: [21] vacuum_spalnya: alias: "Убрать в спальне" sequence: - service: vacuum.send_command data: entity_id: vacuum.xiaomi_vacuum_cleaner command: app_segment_clean params: [18] vacuum_kitchen: alias: "Убрать в Кухне" sequence: - service: vacuum.send_command data: entity_id: vacuum.xiaomi_vacuum_cleaner command: app_segment_clean params: [16] vacuum_koridor: alias: "Убрать в коридоре" sequence: - service: vacuum.send_command data: entity_id: vacuum.xiaomi_vacuum_cleaner command: app_segment_clean params: [17]

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

reset_main_brush_left: alias: "Сброс счетчиков: Ведущая щетка" sequence: - service: vacuum.send_Command data: entity_id: vacuum.xiaomi_vacuum_cleaner command: reset_consumable params: ['main_brush_work_time'] side_brush_work_time: alias: "Сброс счетчиков: Боковая щетка" sequence: - service: vacuum.send_Command data: entity_id: vacuum.xiaomi_vacuum_cleaner command: reset_consumable params: ['side_brush_work_time'] filter_work_time: alias: "Сброс счетчиков: Сетчатый фильтр" sequence: - service: vacuum.send_Command data: entity_id: vacuum.xiaomi_vacuum_cleaner command: reset_consumable params: ['filter_work_time'] sensor_dirty_time: alias: "Сброс счетчиков: Датчики" sequence: - service: vacuum.send_Command data: entity_id: vacuum.xiaomi_vacuum_cleaner command: reset_consumable params: ['sensor_dirty_time']

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

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

Lovelace  /config/ui-lovelace.yaml

Вот так это выглядит в мобильном приложении HA

Часть 1
Часть 2

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

Надеюсь, что многим будет полезно. Спасибо за внимание. 


Спасибо за статью! Многим думаю будет полезна)



https://sprut.ai/static/media/cache/00/49/79/5/3387361/54858/1000x_image.jpeg?1586017398" alt="1000x_image.jpeg?1586017398" />

А как в HA вот так пылесос интегрируют?

https://github.com/Hypfer/Valetudo">Плагин Valetudo для HA Но тут нужен root пылесоса. Для первой версии не проблема, для 1S проблема

добрый вечер простите за тупизм и не грамотность я просто следую вашим инструкция и у меня не получается а точней не пойму в какую папку или куда вложить это! можете помочь????

#input_boolean:
lera_vacuum:
name: "Лера"
initial: off
icon: mdi:cellphone-wireless
artem_vacuum:
name: "Артем"
initial: off
icon: mdi:cellphone-wireless
zal_vacuum:
name: "Зал"
initial: off
icon: mdi:cellphone-wireless
spalnya_vacuum:
name: "Спальня"
initial: off
icon: mdi:cellphone-wireless
kitchen_vacuum:
name: "Кухня"
initial: off
icon: mdi:cellphone-wireless
koridor_vacuum:
name: "Коридор"
initial: off
icon: mdi:cellphone-wireless
start_vacuum_clean_zone:
name: "Старт"
initial: off
YAMLКОПИРОВАТЬ

и еще вот это :) в какие папки или путь

reset_main_brush_left:
alias: "Сброс счетчиков: Ведущая щетка"
sequence:
- service: vacuum.send_Command
data:
entity_id: vacuum.xiaomi_vacuum_cleaner
command: reset_consumable
params: ['main_brush_work_time']
side_brush_work_time:
alias: "Сброс счетчиков: Боковая щетка"
sequence:
- service: vacuum.send_Command
data:
entity_id: vacuum.xiaomi_vacuum_cleaner
command: reset_consumable
params: ['side_brush_work_time']
filter_work_time:
alias: "Сброс счетчиков: Сетчатый фильтр"
sequence:
- service: vacuum.send_Command
data:
entity_id: vacuum.xiaomi_vacuum_cleaner
command: reset_consumable
params: ['filter_work_time']
sensor_dirty_time:
alias: "Сброс счетчиков: Датчики"
sequence:
- service: vacuum.send_Command
data:
entity_id: vacuum.xiaomi_vacuum_cleaner
command: reset_consumable
params: ['sensor_dirty_time']

Огромное спасибо за статью! Попробую со своим такое провернуть!

Пользуйтесь 

Спасибо за статью. Ждем продолжения!

Большое спасибо! Информация как раз во время, не знал что по id можно убирать и планировал мучиться с определением координат. Пылесос у меня уже давно, но когда столкнулся с такой-же проблемой приложения flolevac, решил забить с зональной уборкой через HA. И вот пока выходные хотел наконец заняться, но теперь уже нет смысла, когда есть способ намного проще.

Остается актуальным вопрос, где он хранит id комнат. Если в mihome, и если обрубят его, то придется с координатами воевать

Я завтра буду разбираться и проверю работу без интернета, потом отпишусь

ок

Выключил пылесос, отключил интернет, включил пылесос, дал команду на уборку - уборка началась. Так что можно сказать, что от интернета он не зависит.

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

Ну так то я несколько комнат сразу и выбираю

Я написал не разбиравшись в ваших скриптах, думал там поочередная уборка. Типа первую зону убрал, начинаем следующую и т.д. 

Потом уже когда у себя настраивал, все понял )

Еще раз спасибо за статью! Теперь намного удобнее стало запускать уборку 👍


не подскажите как подключить irobot roomba 896?

Увы...

Столкнулся с проблемой что FloveVac не работает с S50. Не видит карту(
На заметку: можно немного упростить настройку - вместо использования промежуточного скрипта для передачи состояний input_boolean в python скрипт, можно использовать hass.states.get("input_boolean.name").state в самом python скрипте.

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

Спасибо за статью! Скоро пригодись.

Кто знает, как получить данные от датчика снятия мусорного контейнера?

Прописал вместо id комнаты координаты (использую первое поколение пылика) но ничего не происходит при нажатии кнопки с зоной и старт. Может кто сталкивался?

Я приложил скрин. У вас это будет выглядеть так



https://sprut.ai/static/media/cache/00/51/73/5/3845890/58551/1000x_image.png?1590040782" alt="1000x_image.png?1590040782" />

У меня еще есть пылесос первой версии, никак руки не дойдут написать такую же статью для первой версии только с координатами.

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)

Если это написать в xiaomi.py то от #/config/includes/scripts/clean_xiaomi.yaml можно избавиться. Все будет в рамках одного python скрипта.

Разобрался. Вобщем кто будет интегрировать первое поколение по этой инструкции, достаточно будет привести скрипт xiaomi.py к такому виду:

args = {"entity_id": "vacuum.xiaomi_vacuum_cleaner", "command" : "app_zoned_clean", "params": []}


params_bigsp = data.get("input_boolean.bigsp_vacuum")


params_smsp = data.get("input_boolean.smsp_vacuum")


params_lodg = data.get("input_boolean.lodg_vacuum")


params_koridor = data.get("input_boolean.koridor_vacuum")


params_kuhnya = data.get("input_boolean.kuhnya_vacuum")


params_zal = data.get("input_boolean.zal_vacuum")


if params_smsp == 'on':
  args["params"].extend([[23943,26509,26343,28909,1]])



if params_bigsp == 'on':
  args["params"].extend([[25257,23285,29057,26585,1]])



if params_lodg == 'on':


  args["params"].extend([[23686,22948,25186,25598,1]])


if params_koridor == 'on':
  args["params"].extend([[26411,26757,31661,29357,1]])
if params_kuhnya == 'on':
  args["params"].extend([[31723,26934,34623,29534,1]])




if params_zal == 'on':


  args["params"].extend([[29427,23522,34627,26822,1]])


hass.services.call('vacuum', 'send_command', args)



все переменные input_boolean и координаты зон указать свои

Большое спасибо за статью, давно искал аля чекбоксы ) Только оговорка, в действующем виде он не запускает уборку

   start_vacuum_clean_zone:
name: "Старт"
initial: off

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

При включении (статус ON)

 inputbolean  start_vacuum_clean_zone , запускается python_script.xiaomi

Собственно вызов службы 

python_script.xiaomi  и запускает выбранные нами комнаты.

Ну и при возврате на док станцию ( при статусе returning, кнопку 

start_vacuum_clean_zone перевести в state OFF)

Вот ссылка на автоматизации https://sprut.ai/client/paste/BQKBh2vy">https://sprut.ai/client/paste/...

Сменили бы и название, на уборку Сегментов, то есть комнат, а не зон.

Огромное спасибо 

https://sprut.ai/client/user/profile/5589">(zloy_kaa) за коммент про именно уборку Зон.

Поправьте в статье.


Нужно создавать папку /config/python_scripts




Будьте внимательней

https://sprut.ai/static/media/cache/00/51/73/5/4115887/67560/1000x_image.jpeg?1601828793" alt="1000x_image.jpeg?1601828793" />

Ничего не пойму, во внешней папке скриптов лежит файл 

clean_xiaomi.yaml
Отмечаю любую зону, жму старт и ничего не происходит, а в логах home assistant: 

WARNING (MainThread) [homeassistant.helpers.service] Unable to find referenced entities script.clean_xiaomi

Другие скрипты из этой папки работают прекрасно.

Вызовите скрипт с панели разработчика, есть там этот скрипт?

нет, только

 input_boolean.start_vacuum_clean_zone, странно. буду копать далее, хотя уже всё перерыл(

Если службы нет, значит скрипта нет. Рестартили скрипты после создания? 

Конечно, дала рестарт. Уже сутки бьюсь. Прошил Roborock S50 на valetudo re, а вот заставить его убираться из has не могу, стыдоба)))

UPD.
нашёл, проблема была всего в одной букве, спасибо за помощь!

Не подскажите, где ошибку нашли? А то уже давно воюю и понять не могу в чём проблема.

Доброе время суток. Тоже бы хотел узнать где эта буква. Заранее спасибо за ответ.

А как это директория приложения,  как найти информацию с номерами комнат? Спасибо 

Я описал свой метод, вы можете найти другие варианты с помощью google. 
Как правило, там используются id 15, 16, 17, 18, 19, 20. Но это из моего опыта, точных данных у меня нет. можете подобрать методом тыка.

Понял,  попробую.  Подскажите ещё пожалуйста,  инпут болеан,  не нашёл такого файла, или его нужно создать?  Спасибо.

сделал все ровно до Алисы, эффекта ноль....мануал вообще рабочий?

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

Великолепный ответ...в стиле " иди на...й отсюда"


Спасибо

Давайте может я вам сделаю? Я же просто поделился своим опытом, у вас не работает потому что вы что-то делаете неправильно. Как ставите вопрос такой и ответ. Если предоставите больше данных и посмотрите в логи проблема может быстрее решится

Огромное спасибо, настроил зональную уборку и сообщения в телеграм благодаря вашему гайду без проблем, а не подскажите гайд по которому регистрировать фразы для Алисы и возможно ли это использовать без реального ip?

По тому как добавить ваш умный дом в Яндекс есть статья у @https://t.me/AlexxIT">AlexxIT. Там нужно сначала настроить https. Как сделать это без белого ip у него тоже по-моему есть статейка. Как добавите в Яндекс дальше уже интуитивно понятно 

Спасибо, у провайдера белый ip подключил, по гайду @https://t.me/AlexxIT">AlexxIT сделал вчера без проблем, только вот не пойму почему, но от алисы уже два раза отваливался HA, и пока по новой не авторизировался она не могла вызвать скрипты. От нее Xiaomi иногда отваливается, но редко, а тут несколько раз за день...

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

Вспомнил что я не указал url для refresh токена в яндекс диалогах, теперь должно быть норм

Добрый день. Пытаюсь по вашей технологии получить ID комнаты при зональной уборке... Установил на андроид михоум от вевса, запустил робот убирать в одну из комнат. Он убрал, вернулся, полез в логи и ничего не могу там найти... Перерыл все. Такой строчки как у вас не нашел... Подскажите где искать. Может не там рою...

Привет! Подскажи пожалуйса путь к файлу с логами, посмотрел все директории но файл с такой инфой не нашел. Ми хоум от вевес стоит


id 15, 16, 17, 18, 19, 20 по каким-то из этих айди пробовали пускать?

спасибо автору, все получилось!

Всех приветствую. Кто может подсказать что делать: все создал, разместил и т.д., но при запуске скрипта на старт выдает:


Error executing script. Service not found for call_service at pos 1: Unable to find service python_script.vacuum 

Ничего не пойму, чего не хватает?  

python_script.vacuum 


Не хватает этого скрипта, он тебе говорит, что такой службы нету

он есть, лежит .homeassistant/config/python_scripts/vacuum.py

Рестартовал HA?

в конфиге прописалpython_script:, создал папку, создал файл, отредактировал, создал скрипт запуска с кнопки, но ничего не вышло (((

много раз )))



https://sprut.ai/static/media/cache/00/51/73/5/7474900/75111/1000x_image.png?1614161266" alt="1000x_image.png?1614161266" />

Засада, тут их нет.

Как сделать что бы появились?

Кроме строки python_script: в конфиг еще что то нужно добавить?

Как то влияет наличие в конфиге 
homeassistant:

  packages: !include_dir_named config

Пока тут он не появится, дело дальше не двинется. Дебажь

Народ, помогите!!! 

python_script не появляется в системе!
Куда копать??? 

Корректировка. Проблема в Python: 

Setup failed for python_script: Integration failed to initialize.

Почему то не ставится питон (((

тут ничего нового ))) все прочел, но решения нет

наоборот, есть ответ) папку назови python_scripts, а не python_script



Ввиду выхода обновления интеграции  https://github.com/AlexxIT/XiaomiGateway3">Xiaomi Gateway 3 от https://t.me/AlexxIT_SmartHome">AlexxIT, получение ID Комнаты который используется в статье стал неактуален.

https://sprut.ai/static/media/cache/00/51/73/5/7475720/76611/1000x_image.png?1617098578" alt="1000x_image.png?1617098578" />


Ввиду выхода обновления интеграции  https://github.com/AlexxIT/XiaomiGateway3">Xiaomi Gateway 3 от https://t.me/AlexxIT_SmartHome">AlexxIT, метод получения ID Комнаты который используется в статье стал неактуален.



https://sprut.ai/static/media/cache/00/51/73/5/7917805/76612/1000x_image.png?1617098736" alt="1000x_image.png?1617098736" />

Добрый день! По непонятным причинам перестала работать зональная уборка, стал ругаться на автоматизацию начала зональной уборки. Пишет что сервис скрипт включение не найден

Logger: homeassistant.components.automation.nachinaem_zonalnuiu_uborku
Source: helpers/script.py:1310
Integration: Автоматизация (https://www.home-assistant.io/integrations/automation">documentation, https://github.com/home-assistant/home-assistant/issues?q=is%3Aissue+is%3Aopen+label%3A%22integration%3A+automation%22">issues)
First occurred: 10 апреля 2021 г., 13:07:35 (6 occurrences)
Last logged: 22:22:52


Начинаем зональную уборку: Error executing script. Service not found for call_service at pos 1: Unable to find service script.turn_on

Добрый день. Подскажите в какой файл нужно поместить кусок кода, начинающийся на

#input_boolean:
lera_vacuum:

Я так понял, что это объявления переменных и очищение их первоначальных значений... Или нет?

Пытаюсь повторить реализацию зональной уборки S1 в НА. Пока не получается. Пылик получилось добавить в интеграции и вывести в lovelace. И на этом все. Помогите плз.

И думаю, что будут благодарны новые читатели, если подправите в статье и коде опечатку  python_script и 
python_scripts

И еще... пришел  к выводу, что, в любом случае, придется перейти на ручную кастомизацию интерфейса lovelace. подтвердите, плз...



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

https://sprut.ai/static/media/cache/00/51/73/5/8966732/79442/1000x_image.png?1624959946" alt="1000x_image.png?1624959946" />

Круто! Это именно то, что мне нужно. Плз, ответьте на вопрос про кусок кода выше через один комент.

Немножко актуализировал статью.
https://telegra.ph/Zonalnaya-uborka-Xiaomi-Vacuum-1S-v-Home-Asisstant-v2-01-22
Мой канал https://t.me/djstrayk_ha

Вернуться назад
Вернуться назад