Статья

Добавляем робот пылесос Xiaomi Vacuum 1s в Node-Red

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

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

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

В общем, для добавления пылесоса в HomeKit нам потребуется:

  • Xiaomi Vacuum 1s или любой другой с поддержкой уборки в отдельных комнатах.
  • Token пылесоса (посмотреть как его получить, например, можно тут).
  • Установленный Node Red.

Дальше следуем такой логике - создаем нужное количество обычных выключателей, равных количеству комнат, добавляем функцию для обработки ответов от HomeKit и ноду для общения с пылесосом. Можно взять за основу мой flow и просто переделать под себя. 

В функции id комнат выставить по возрастанию, и потом методом научного тыка определить, какой id к какой комнате относится. Также можно воспользоваться способом, указанным в этой статье. Для этого потребуется телефон с Android или эмулятор Android для компьютера, я делал проще - отправлял по id на уборку и в родном приложении смотрел , какая комната отметилась. Добавляем настройки для пылесоса - ip адрес и token. Для работы данной ноды больше ничего и не надо, все остальное передается от функции. 

// Код для функции из flow function AddRoom(RoomID){ if(flow.rooms === undefined){ flow.rooms=[]; flow.rooms.push(RoomID); } else { flow.rooms.push(RoomID); } } if((msg.name === "Корридор")&&(msg.payload.On === true)){ AddRoom(21); } if((msg.name === "Спальня")&&(msg.payload.On === true)){ AddRoom(22); } if((msg.name === "Зал")&&(msg.payload.On === true)){ AddRoom(19); } if((msg.name === "Детская")&&(msg.payload.On === true)){ AddRoom(24); } if((msg.name === "Столовая")&&(msg.payload.On === true)){ AddRoom(20); } if((msg.name === "Ванная")&&(msg.payload.On === true)){ AddRoom(16); } if((msg.name === "Прихожка")&&(msg.payload.On === true)){ AddRoom(23); } if((msg.name === "Кухня")&&(msg.payload.On === true)){ AddRoom(17); } if((msg.name === "Старт")&&(msg.payload.On === true)){ return [{"payload":{"command":"app_segment_clean","args":flow.rooms}},{"payload":{"On":false}}]; } if((msg.name === "Отмена")&&(msg.payload.On === true)){ flow.rooms = undefined; return [null,{"payload":{"On":false}}]; } if((msg.name === "Домой")&&(msg.payload.On === true)){ flow.rooms = undefined; return [{"payload":{"command":"app_charge"}},{"payload":{"On":false}}]; }

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


За статью спасибо, но вопрос? А чем тебе нода для пылесоса от Андрея Попова не зашла? Почему выбор пал на этот плагин?

Пробовал его ноду, она не поддерживает именно уборку по комнатам. Даже issue на github создал по этому поводу.

А кнопку «полной уборки» можно реализовать или это делается просто нажатием Старт без выбора комнат?

А голосом как просить уборку конкретных комнат?

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

Можно и полной уборки реализовать, добавить ещё одну ноду/выключатель и функцию немного отредактировать если будет нужно пиши в телегу помогу. Голосом да, скорее всего только через сценарии как уже ответили.

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

Народ!
У меня чего-то на app_segment_clean ошибку выдает  "Method `app_segment_clean` is not supported"

При этом 

"stop_segment_clean" проглатывает...

Что не так делаю?

Попробуй вот этот флоу, тут уже переработан, использован другой плагин, на данный момент у меня все работает без замечаний, менять значения комнат в функции... https://pastebin.com/tpekX8pW">HomeKit, https://pastebin.com/n6FcisLc">Алисаhttps://pastebin.com/tpekX8pW">https://pastebin.com/tpekX8pW">

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

красненькая нода роборока выдает вот такую ошибку: "TypeError: Cannot read property 'call' of undefined"

Все, разобрался.
Нода miio-roborock отвалилась просто. Ребутнул node-red, удлил все неиспользуемые палитры, настроил все заново и теперь работает как надо!

Я правда сделал персональный выключатель уборки в каждой комнате, чтобы Сири можно было дать команду "Включи уборку в кухне!".
Год уже пользуемся пыликом и только один раз запускали уборку нескольких комнат выбором на карте. Основные сценарии - автоматическая уборка прихожей по расписанию перед моим приходом с работы, уборка конкретной комнаты и полная уборка квартиры.


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