ZHA не предлагает обновления из файлов OTA

OTA - обновление прошивки устройства по радиоканалу, а OTA-файл - готовый образ такой прошивки. Начиная с версии Home Assistant 2024.1 интеграция ZHA не предлагает обновления из внешних OTA-файлов. Пользователям форума помогало включить файловые обновления в конфигурации zigpy (библиотека Zigbee, на которой работает ZHA): ключи allow_file_providers и otau_directory, плюс файл прошивки в указанном каталоге. Отдельно на форуме описан ручной запуск обновления командой кластера OTA.

Как выглядит проблема

В обсуждениях ZHA не предлагает обновление прошивки. Описаны три варианта симптома:

  • ZHA не предлагает внешние OTA-файлы для обновления устройств начиная с версии 2024.1.
  • Лампа ThirdReality ZL1 показывается с актуальной прошивкой, обновление не предлагается.
  • У Sonoff TRVZB версия прошивки отображается как неизвестная, и официальный источник OTA обновление тоже не предлагает.

В тех же обсуждениях появляется сообщение об ошибке:

No OTA image is available

Причина

В одной ветке причиной названо отключение обновлений из файлов в ZHA. Заметили это на версии Home Assistant 2024.1. В ветке дана ссылка на pull request home-assistant/core №111159.

ПричинаКак проверитьЧто сделать
OTA-обновления из файлов отключены в ZHAZHA не предлагает обновление из файла (с версии 2024.1); у TRVZB версия прошивки показывалась неизвестнойВключить файловые обновления в конфигурации zigpy и указать каталог с OTA-файлами

Причина названа в одной ветке форума.

Что помогло

Помогли два способа: включение файловых OTA в конфигурации zigpy и ручной запуск обновления командой кластера из Инструментов разработчика (Developer tools). Оба известны только с форума.

Включить файловые OTA в конфигурации zigpy

Основной рабочий вариант: помог в 2 ветках форума из 2, где его пробовали, - 3 сообщения об успехе и ни одного о неудаче.

Работающая конфигурация из форума выглядит так:

zigpy_config:
  ota:
    allow_file_providers: "I understand I can *destroy* my devices by enabling OTA updates from files. Some OTA updates can be mistakenly applied to the wrong device, breaking it. I am consciously using this at my own risk."
    otau_directory: /config/zha/ota

Файл прошивки кладут в каталог из otau_directory. Для Sonoff TRVZB в ветке использовали файл trvzb_v1.2.1.ota из репозитория zigbee-OTA.

В форумных ветках встречается другая форма той же настройки, через extra_providers, вместе с провайдером Sonoff:

zha:
  custom_quirks_path: /config/custom_zha_quirks/
  zigpy_config:
    ota:
      extra_providers:
        - type: sonoff
        - type: advanced
          warning: I understand I can *destroy* my devices by enabling OTA updates from
            files. Some OTA updates can be mistakenly applied to the wrong
            device, breaking it. I am consciously using this at my own risk.
          path: /config/zigpy_ota

В ветках попадались и такие ключи, без пояснений в документации:

    allow_advanced_ota_dir: 'I understand I can *destroy* my devices by enabling OTA
        updates from files. Some OTA updates can be mistakenly applied to the
        wrong device, breaking it. I am consciously using this at my own risk.'
    advanced_ota_dir: '/path/to/ota/files' # Like `/config/zha_ota/`

Запустить обновление командой кластера

Запасной вариант: помог в 1 ветке форума из 1, где его пробовали, - одно сообщение об успехе. Обновление запускают сервисом zha.issue_zigbee_cluster_command из Инструментов разработчика, устройству отправляется команда кластера OTA с cluster_id: 25:

service: zha.issue_zigbee_cluster_command
data: 
  ieee:  <INSERT IEEE OF DEVICE HERE>
  endpoint_id: 1
  cluster_type: out
  command_type: client
  cluster_id: 25
  command: 0
  args:
    - 0
    - 100

Вместо <INSERT IEEE OF DEVICE HERE> подставляют IEEE-адрес (уникальный адрес Zigbee-устройства) нужного устройства.

Если не помогло

Не сработало включение отдельного провайдера 3REALITY: в ветке про лампу ThirdReality ZL1 после настройки ключом thirdreality_provider со значением true обновление так и не появилось, зафиксирован один отчет о неудаче. Совет устарел. В документации ZHA сказано: «OTA for a few manufacturers is enabled by default, currently Ledvance, Sonoff, Inovelli, and ThirdReality». OTA для ThirdReality уже включена по умолчанию, а ключа thirdreality_provider в документации нет, так что дополнительная настройка не нужна.

Если ZHA вообще не управляет устройством, это другой случай - например, с клапаном полива GIEX GX-02.

Частые вопросы

С какой версии ZHA не предлагает файлы OTA?

Начиная с Home Assistant 2024.1. На этой версии пользователи заметили, что внешние OTA-файлы перестали предлагаться. При этом OTA для ряда производителей включена по умолчанию: в документации ZHA перечислены Ledvance, Sonoff, Inovelli и ThirdReality. Для файлов, которые пользователь добавляет сам, помогала отдельная настройка в конфигурации zigpy с подтверждением риска.

Какие устройства затронуты?

В ветках упомянуты четыре устройства: датчик движения Aqara P1 (lumi.motion.ac02), Sonoff TRVZB, лампа ThirdReality ZL1 (3RCB01057Z) и устройство Philips без указания модели. Симптомы описаны для двух из них: у TRVZB версия прошивки показывается неизвестной, лампа ZL1 отображается обновленной.

Где взять файл прошивки для Sonoff TRVZB?

В репозитории zigbee-OTA на GitHub опубликован файл trvzb_v1.2.1.ota, в каталоге images/Sonoff. Именно его использовали в ветке про TRVZB. Скачанный файл кладут в каталог, указанный в otau_directory.

Что означает ошибка No OTA image is available?

Дословно это «нет доступного образа OTA»: для устройства нет файла прошивки, который можно предложить. Сообщение приводится в обсуждениях, где обновления не предлагались. Наличие OTA по умолчанию его не исключает: у ThirdReality она включена, а обновление все равно не предлагалось.

Андрей Ковалев, редактор. Собирает решения из веток форума Home Assistant и сверяет команды и настройки с официальной документацией.