poisondima / Roidmi-EVE-Plus

Roidmi EVE Plus in Home Assistant
26 stars 15 forks source link

Integration 'xiaomi_vacuum' not found #3

Closed zoologov closed 2 years ago

zoologov commented 2 years ago

@poisondima, привет! Спасибо за мод!

Есть вопрос, использовал твои файлы, но проверка конфига выдаёт:

Package xiaomi_vacuum setup failed. Component xiaomi_vacuum Integration 'xiaomi_vacuum' not found. Integration error: xiaomi_vacuum - Integration 'xiaomi_vacuum' not found.

Робот добавлен: image

В интерфейсе пока тоже сенсоры не видит: image

Подскажи, пожалуйста, куда копать? Заранее благодарю!

poisondima commented 2 years ago

Привет, правильно ли подключен 'packages' в 'configuration.yaml'? Мануал с официального сайта.

Для примера, у меня в файле 'configuration.yaml' в разделе 'homeassistant' прописано: packages: !include_dir_merge_named includes/packages

Создана папка includes, в ней папка packages и уже там лежит файл xiaomi_vacuum.yaml. Снимок экрана 2022-02-05 111632

zoologov commented 2 years ago

@poisondima, у меня было !include_dir_named packages и не хотело работать. Сделал через мердж папки, ha увидел, спасибо!

Теперь другая проблема, интеграция не видит робота и датчики расходников: image

Хотя дефолтная интеграция Xiaomi Miot Auto видит: image

poisondima commented 2 years ago

Посмотри в 'Панели разработчика' или свойствах, как называется объект пылесоса. Во всех скриптах и lovelace я использую vacuum.vacuum_cleaner_robot_cleaner, у тебя оно будет другое, нужно заменить на свое и перезагрузить Home Assistant. Снимок экрана 2022-02-05 175302

zoologov commented 2 years ago

Всё завелось, спасибо за пояснение! Отличная интеграция!

uaaauaaa commented 2 years ago

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

Screenshot 2022-03-12 at 10 49 55
uaaauaaa commented 2 years ago

Да, и еще, могу ошибаться, но ваш did указан в пакедже в скриптах комнат, - нужно менять на свой

poisondima commented 2 years ago

@uaaauaaa, привет, по поводу сенсоров, эти объекты идут вместе с интеграцией 'Xiaomi Miot Auto' и должны быть активированы. Проверить можно в Конфигурации (должно быть 11 объектов): изображение Убедиться, что все объекты включены: изображение

По поводу DID, он у меня убран в файл секретов: did: !secret xiaomi_cloud_did mapId - это номер карты в облаке xiaomi, да он должен быть у каждого свой и после перенастройки карты он меняется.

uaaauaaa commented 2 years ago

Приветствую, с сенсорами разобрался - оин просто имели другие названия. В общем завелось практически все за исключением скриптов уборки комнат. Правильно ли я понимаю, что mapId имеет к этому непосредственное отношение? Проблема в том, что инфы пока очень мало, components-Xiaomi-Cloud-Map-Extractor для определения калибрации использует calibration_points. Нужен ли он для этого? В связи с этим, подскажите, каким дальше путем идти чтобы инфу по room1,2,3...получить с аккаунта xiaomi. Сорри, может все очень очевидно, но процедура для меня незнакомая, концов найти мне пока трудно. Благодарю

poisondima commented 2 years ago

mapId - обязателен, т.к. это ID карты. Для получения did, siid, aiid, mapId нужно сделать следующее:

  1. Использовать модифицированный Mi Home от Vevs для сбора необходимых данных. Установите мод и создайте папки для журналов: /vevs/logs/. После создания папки - войдите в свой аккаунт. Если вы уже вошли - сделайте перелогин, для создания логов.
  2. Откройте страницу Roidmi EVE и начните очистку сегмента.
  3. Найдите в папке /vevs/logs/miio/ txt-файл с DID вашего устройства.
  4. В нем найдете всю нужно информацию. P.S. к сожалению уборка по комнатам работает только через облако
uaaauaaa commented 2 years ago

mapId - обязателен, т.к. это ID карты. Для получения did, siid, aiid, mapId нужно сделать следующее:

  1. Использовать модифицированный Mi Home от Vevs для сбора необходимых данных. Установите мод и создайте папки для журналов: /vevs/logs/. После создания папки - войдите в свой аккаунт. Если вы уже вошли - сделайте перелогин, для создания логов.
  2. Откройте страницу Roidmi EVE и начните очистку сегмента.
  3. Найдите в папке /vevs/logs/miio/ txt-файл с DID вашего устройства.
  4. В нем найдете всю нужно информацию. P.S. к сожалению уборка по комнатам работает только через облако

Не смог я победить старичка vevs чтобы добыть логи. Что было сделано: -снес с андройда оригинал Mihime, установил по ссылке выше модифицированный Mi Home от Vevs -перезагрузил сотку -создал папку на внешней SD card/vevs/logs/ -создал папку во внутренней памяти (на свякий случай) Main Storage/vevs/logs/ -залогинился в Mi Home от Vevs, запустил плагин Eve plus -еще раз перезагрузился, перелогинился 2022-03-14 22 11 58

-запустил пылик через Mi Home от Vevs в сегменте (Некоторые пишут что после этого логи приходят)

но ничего не помогло - папки /vevs/logs/ не имеют файлов. Есть идеи?

ЗЫ то, что работает только через облако - не смущает, главное что в ХА появилась ПОЛНАЯ работоспособность с низким временем отклика и это очень и очень радует!

uaaauaaa commented 2 years ago

В общем, спустя сутки мучений отписываюсь, может кому и пригодится - vevs нынче в свете текущих политических событий закрыл чат в группе - поэтому инфы у него 0. Последняя его версия для раскрытия логов должна быть хорошенько задоначена, чтобы в настройках софтины (в экспериментальных функциях) заработала опция показа логов. В связи с этим у него на сайте путем нескольких попыток была выбрана версия 6.8.601_64302. Более ранние - не имеют в наличии eve plus (пыль не отображается среди девайсов). Чтобы появились логи - нужно в корне Main Storage создать папки /vevs/logs/ заранее, и сразу же после установки этой версии в логах уже будет инфа. Нужная нам в подпапке /miio/ и в заголовке txt будет указано имя пыля roidmi.vacuum.v60

А вот дальше уже сложнее ибо буков там много: что нашел? did-он неизменный, судя по анализу txt mapID - тоже aiid - также двухзначное число, постоянное во всех строках. siid - а вот тут интереснее - цифры разные, полагаю что связано с номерами сегментов? 2, 3, 8, 13 и тд. Как определить, что именно к чему привязано чтобы заполнить данные о rooms в package? c segmentID тоже не совсем понял, на что завязывается цифра?

Спасибо за помощь автору интеграции -респект

uaaauaaa commented 2 years ago

ЗЫ, оставив siid и segmentID неизменными в вашего примера, по комнатам прошелся без ошибок. Так что вопросов нет. Полагаю, он тут скорее привязывается к room1, room2 и тд, которые были уже вбиты мной ранее в соответствии с названиями комнат. Два вопроса пока для меня задака 1 - не нашел возможности изменения мощности 2 - карты по выполению работ (скрины) в телегу иногда приходят без фактических изменений - "Пылесос убрал 0 м² за 0.1 минут." и старый скрин

также интересует момент с обновлением карты. Есть смысл создать скрипт, который будет каждые 5 сек (условно) посылать запрос на скачивание карты с облака для визульного понимания?

poisondima commented 2 years ago

siid и aiid можно посмотреть на сайте miot, но для уборки комнаты используются siid: 14 и aiid: 1

В MiHome отправляешь пылесос, например, на кухню, жмешь стоп. Отправляешь в коридор, жмешь стоп и т.д. Как раз в логах и нужно искать строчку типо такого: {"params":{"did":"ХХХХХХХ","siid":14,"aiid":1,"in":[2,"{\"mapId\":ХХХХХХХ,\"segmentId\":[3]}"]}} /miotspec/action И смотришь их по порядку как запускал, segmentId в первой будет Кухня, в следующей строке segmentId будет коридор и так сможешь определить все комнаты.

Еще один вариант в MiHome заходишь в Карты -> Изменить сегмент, там под номерами будут комнаты, если ты их еще не переименовал. Правда после разделения/объединения они как-то сбиваются, поэтому способ так себе.

Спасибо за уточнение про версию vevs у меня стоит 6.7.700

poisondima commented 2 years ago
  1. Поле статус это кнопка: объект твой пылесос, там можно менять мощность. изображение
  2. Принудительно скачать карту можно через скрипт. изображение Постоянное обновление карты отключено, т.к. связь с облаком Китая оставляет желать лучшего и часто бьет ошибку в логе, что не может скачать. Т.к. не всегда удается скачать карту с 1 раза в скрипте vacuum_download_map реализовал несколько попыток с задержкой. После окончания уборки как раз и вызывается этот скрипт, должен скачать и отправить в телегу картинку.
uaaauaaa commented 2 years ago

siid и aiid можно посмотреть на сайте miot, но для уборки комнаты используются siid: 14 и aiid: 1

В MiHome отправляешь пылесос, например, на кухню, жмешь стоп. Отправляешь в коридор, жмешь стоп и т.д. Как раз в логах и нужно искать строчку типо такого: {"params":{"did":"ХХХХХХХ","siid":14,"aiid":1,"in":[2,"{"mapId":ХХХХХХХ,"segmentId":[3]}"]}} /miotspec/action И смотришь их по порядку как запускал, segmentId в первой будет Кухня, в следующей строке segmentId будет коридор и так сможешь определить все комнаты.

Еще один вариант в MiHome заходишь в Карты -> Изменить сегмент, там под номерами будут комнаты, если ты их еще не переименовал. Правда после разделения/объединения они как-то сбиваются, поэтому способ так себе.

Спасибо за уточнение про версию vevs у меня стоит 6.7.700

Понял, благодарю

ialtuhov commented 2 years ago

Прошу помощи, что то не едет у меня ничего. Вроде все сделал правильно, но при проверке выдает: expected a dictionary for dictionary value @ data['packages']['automation'] Я понять ничего не могу что делать???

poisondima commented 2 years ago

@ialtuhov эта очень общая ошибка... Убедись, что правильно подключены packages - мой пример, не менялись ли отступы для автоматизаций.

ivanptz commented 2 years ago

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

{"params":{"did":"****","siid":13,"aiid":9,"in":["{\"Operate\":\"setmap\",\"Type\":\"11\",\"MapId\":1657305222,\"OperateId\":80328}"]}} /miotspec/action

{"params":{"did":"****","siid":13,"aiid":9,"in":["{\"Operate\":\"setmap\",\"Type\":\"11\",\"MapId\":1659248457,\"OperateId\":510534}"]}} /miotspec/action

Но мне не ясны последние цифры после двоеточия в скобках : ":80328}" и ":510534}" ибо в логах они меняются каждый раз. Не могу понять что это.

0wnjei commented 2 years ago

Hi, very nice and useful thread. But i'm missing some sensors, for example, i miss station sensors and vacuum cleaner sensors (see image). How can i get this information?

image image

Regarding the DID should i keep it on the secrets.yaml file or not?

Thanks in advance for he help!

poisondima commented 2 years ago

@0wnjei, Hi. Example from the text, here you need to change the variable "vacuum.vacuum_cleaner_robot_cleaner" to your own (the name of the vacuum cleaner).

        - name: "vacuum_fan_speed"
          state: "{{ state_attr('vacuum.vacuum_cleaner_robot_cleaner','fan_speed') }}"
        - name: "vacuum_status"
          state: "{{ state_attr('vacuum.vacuum_cleaner_robot_cleaner','vacuum.status') }}"

You can always check how it works through "Developer-Tools/Template"

It is more convenient about "DID" here, if no one has access to personal data, you can not hide :)

0wnjei commented 2 years ago

Thanks for the reply. I had it changed, what i hadn't were the helpers, now everything is working fine, except for the scripts since i've yet to get all those IDs from app. Thanks a lot for the help :)

4ex88 commented 2 years ago

Подскажите в чем заключается ошибка, не могу сам разобраться: image

Сенсоры через миот рабатают. Старт и пауза также работают image

poisondima commented 2 years ago

@4ex88 для того, чтобы все сенсоры работали, необходимо заменить переменную названия пылесоса "vacuum.vacuum_cleaner_robot_cleaner" на свою, как он у вас прописан в HA. изображение Хотя с учетом того, что даже скрипт не отображается, нужно проверять правильно ли подключен пакедж. По ошибке конфига, проверить указана ли переменная "xiaomi_vacuum_token" в "secrets.yaml". Еще можно попробовать убрать с конфига раздел по "camera", чтобы убедиться в правильности всего остального.

lutroner commented 1 year ago

подскажите, пожалуйста, настроил все с использованием ваших файлов, все статусы отображаются верно. Не работает уборка комнат по списку - при выборе комнат и нажатии на кнопку в логе вижу ERROR (MainThread) [homeassistant.components.script.vacuum_start_clean] Уборка комнат по списку: Error executing script. Invalid data for call_service at pos 2: must contain at least one of entity_id, device_id, area_id. . Насколько я понял, номера комнат можно взять из объекта camera.xiaomi_cloud_map_extractor. У меня получились следующие: room_numbers: '1': Детская '2': спальня '5': Кухня '6': 'Коридор ' '7': Гостиная Правильно ли я понял, что в дополнение к инструкции нужно поменять комнаты в соответствии с их id и названиями и mapId {%- set text = '[2,"{\\"mapId\\":1626189155,\\"segmentId\\":[' + text + ']}"]' %} из вашего примера на свой как описано выше, а все остальное оставить неизменным?

UPD: разобрался. mapID который указан в примере xiaomi_vacuum.yaml заменил на тот, что в файле yandex_station и все заработало! Спасибо за отличный пример)

poisondima commented 1 year ago

@lutroner В разделе input_boolean создаются 6 комнат: vacuum_room1 -> vacuum_room6, там номера переменных не важны, можно просто поменять названия на свои.

input_boolean.vacuum_room1 - Детская
input_boolean.vacuum_room2 - Спальня
input_boolean.vacuum_room3 - Кухня
input_boolean.vacuum_room4 - Коридор 
input_boolean.vacuum_room5 - Гостиная

В скрипте vacuum_start_clean в разделе condition идет проверка какие из input_boolean (комнаты) включены. А вот уже дальше важно какие будут прописаны цифры в "set text = text+'2'", по сути это номер сегмента для уборки. Пример по вашим данным (mapId, указать свой):

        - service: script.turn_on
          entity_id: script.vacuum_clean_select_room
          data_template:
            variables:
              rooms: |
                {%- set text = '' -%}
                {%- if is_state('input_boolean.vacuum_room1','on') %}{%- set text = '1' %}{% endif %}
                {%- if is_state('input_boolean.vacuum_room2','on') %}
                  {%- if text != '' %}{%- set text = text+',' %}{% endif %}
                  {%- set text = text+'2' %}{% endif %}
                {%- if is_state('input_boolean.vacuum_room3','on') %}
                  {%- if text != '' %}{%- set text = text+',' %}{% endif %}
                  {%- set text = text+'5' %}{% endif %}
                {%- if is_state('input_boolean.vacuum_room4','on') %}
                  {%- if text != '' %}{%- set text = text+',' %}{% endif %}
                  {%- set text = text+'6' %}{% endif %}
                {%- if is_state('input_boolean.vacuum_room5','on') %}
                  {%- if text != '' %}{%- set text = text+',' %}{% endif %}
                  {%- set text = text+'7' %}{% endif %}
                {%- set text = '[2,"{\\"mapId\\":1626189155,\\"segmentId\\":[' + text + ']}"]' %}
                {{text}}

Можно ли просто закомментировать строчки с telegram Конечно!

lutroner commented 1 year ago

@poisondima все получилось и заработало, спасибо большое! У меня работает mapID , который указан в вашем примере yandex_station.yaml. Я также указал его в конфиге xiaomi_vacuum.yaml Так и должно быть? (просто прочитав переписку подумал, что он уникальный и для каждого свой)

poisondima commented 1 year ago

@lutroner mapID должен быть у каждой карты свой, его генерит облако и достать его можно через MiHome от vevs

C4ncerr commented 1 year ago

Для интеграции в HA мне не нужна большая часть функциональности интеграции, а требуется только возможность выбора комнат для уборки. Пытаюсь самостоятельно урезать код в xiaomi_vacuum.yaml до минимально необходимого, но получается не очень). Если не сложно, подскажите какие секции нужно оставить в коде ,чтобы осталась только возможность уборки по выбранным комнатам

poisondima commented 1 year ago

@C4ncerr, думаю этих компонентов должно быть достаточно для уборки:

homeassistant.customize.vacuum.vacuum_cleaner_robot_cleaner
xiaomi_miot
input_boolean.vacuum_room1
input_boolean.vacuum_room2
input_boolean.vacuum_room3
input_boolean.vacuum_room4
input_boolean.vacuum_room5
script.vacuum_start_clean
script.vacuum_clean_select_room
st-pavel commented 1 year ago

Добрый день! Хотел уточнить - службы vacuum.clean_spot и vacuum.locate должны работает с этой интеграцией? 2023-10-04_20-07-07

poisondima commented 1 year ago

Добрый день! Хотел уточнить - службы vacuum.clean_spot и vacuum.locate должны работает с этой интеграцией? 2023-10-04_20-07-07 Привет, для отправки команд на пылесос используется интеграция https://github.com/al-one/hass-xiaomi-miot, если посмотреть исходный код https://github.com/al-one/hass-xiaomi-miot/blob/9daa24784ed74f4e1ed68d98396ed547e19c74eb/custom_components/xiaomi_miot/vacuum.py#L205C12-L205C12 то видно, что функция clean_spot - пустышка, возможно задел на будущее. По функции locate в теории должно работать, но у меня он молчит. Есть второй пылесос Xiaomi Mi Robot Vacuum Cleaner 1S, работает через другую интеграцию и там по этой функции робот произносит фразу: "Привет, я здесь".

st-pavel commented 1 year ago

service: xiaomi_miot.call_action data: entity_id: vacuum.roidmi_v60_0d0b_robot_cleaner did: 408379677 siid: 8 aiid: 1 Добавил скрипт с таким вызовом для поиска Только нужно заменить на свой entity_id

poisondima commented 1 year ago

изображение Да, должно такое работать, проверю позже и добавлю, спасибо.