Интеграция с Алисой, устройства в ПУДе - offline, таймауты чтения в логах

Добрый день!

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

New connection from 127.0.0.1:38811 on port 1883.
New client connected from 127.0.0.1:38811 as auto-56714982-7D54-93DB-C818-65EB7A297760 (p2, c1, k60).
WARNING: Read topic timeout waiting ‘/devices/wb-mr6c_39/controls/K5’ , timeout - 1
WARNING: ‘a78a2ba1-260321203108-7f4ae416-d98b-4d7e-b00c-3424b347ba3a’: no live or retained data — marking DEVICE_UNREACHABLE
WARNING: Read topic timeout waiting ‘/devices/wb-mr6c_39/controls/K5’ , timeout - 1
WARNING: ‘a78a2ba1-260321203108-7f4ae416-d98b-4d7e-b00c-3424b347ba3a’: no live or retained data — marking DEVICE_UNREACHABLE

(“timeout - 1” - это я добавлял в device_registry.py при первичной диагностике) .

Возможно, я что-то не так делаю, но вдруг у кого-то было такое?

приложен диагностический архив, доступен только сотрудникам поддержки
(1.1 MB)

Summary

This text will be hidden

Здравствуйте! Я автоматический помощник техподдержки Wiren Board. Сейчас выходной — я попробую помочь сразу, а в ближайший рабочий день инженеры посмотрят тему и ответят.
Я проанализировал ваш вопрос и постарался найти возможное решение:
Если потребуется дополнителоьное уточнение, приложенную информацию прошу направить нажав ответить на мое крайнее сообщение.


Судя по описанию и логам, у вас:

  • Контроллер Wiren Board (по архиву инженеры точно посмотрят модель, предполагаю WB7/8),
  • Модуль реле WB-MR6C по Modbus,
  • Интеграция с Алисой через стандартный wb-yandex-home (ПУД / Умный дом Яндекса),
  • В логах wb-yandex-home или связанного сервиса сообщения вида:
    • Read topic timeout waiting '/devices/wb-mr6c_39/controls/K5'
    • no live or retained data — marking DEVICE_UNREACHABLE
  • В приложении Яндекса устройства быстро уходят в offline.

Это значит, что интеграция не может получить актуальное значение MQTT‑топика для канала K5 (и, вероятно, других), либо эти топики не помечены как retained / не читаются целиком с MQTT‑шины.

Ниже — базовые проверки, которые вы можете сделать до ответа инженеров.


1. Проверить, что само реле WB-MR6C работает и считывается

На контроллере выполните:

mosquitto_sub -v -t '/devices/wb-mr6c_39/#' -R

и в другом окне:

wb-mqtt-mbgate --list-slaves

или просто переключайте реле K1–K6 через веб-интерфейс (порт 80/81 → Devices → wb-mr6c_39).

Нужно убедиться:

  1. Что в топиках /devices/wb-mr6c_39/controls/K5 появляются сообщения при переключении.
  2. Что нет ошибок типа Modbus timeout или IO error в логах wb-mqtt-serial:
journalctl -u wb-mqtt-serial -n 100

Если уже на этом уровне модуль читается с ошибками — надо искать причину в линиях RS-485 (адрес, скорость, терминаторы, питание).[^1]


2. Проверить retained-флаги у контролов

Сервис интеграции с Яндексом ожидает, что состояние устройства доступно в retained‑сообщении MQTT. Если retained нет, при подписке он “видит пустоту” и помечает устройство как DEVICE_UNREACHABLE.

Проверьте конфигурацию wb-mqtt-serial для вашего модуля:

ls /etc/wb-mqtt-serial.conf.d/
cat /etc/wb-mqtt-serial.conf.d/your_config.json

В стандартных шаблонах для WB-MR6C контролы типа switch уже публикуются как retained.[^2] Важно, чтобы:

  • Модуль действительно использовал стандартный шаблон WB-MR6C,
  • Не был отключён параметр publish/retain в json-конфиге.

Проверка retained “в лоб”:

mosquitto_sub -v -t '/devices/wb-mr6c_39/controls/K5' -R

Затем перезапустите wb-mqtt-serial:

service wb-mqtt-serial restart

Если сообщение не приходит вообще (даже одно) — нет retained‑публикации.


3. Проверить настройки интеграции с Алисой

Дальше стоит убедиться, что сам сервис Яндекса на контроллере живой и корректно подключён к MQTT:

  1. Посмотрите список сервисов:
systemctl status wb-yandex-home wb-cloud-connect wb-mqtt-homeui

(точные имена зависят от версии прошивки, инженеры уточнят по архиву).

  1. Проверьте логи сервиса интеграции (в котором вы видите Read topic timeout):
journalctl -u wb-yandex-home -n 100

Обратите внимание:

  • На какой MQTT-топик он пытается подписаться (там должен быть /devices/wb-mr6c_39/controls/K5).
  • Нет ли там сообщений про невозможность подключиться к MQTT‑брокеру (mosquitto).

4. Проверить MQTT-брокер и локальные подключения

В логах видно:

New connection from 127.0.0.1:38811 on port 1883.
New client connected from 127.0.0.1:38811 as auto-... (p2, c1, k60).

Это нормальное локальное подключение клиента (вероятно, того самого wb-yandex-home) к встроенному Mosquitto.

Проверьте общую работоспособность MQTT:

mosquitto_sub -v -t '/devices/#' -R | head

Если вы вообще не видите сообщений от устройств (в том числе от других модулей / встроенных GPIO контроллера) — это уже проблема шире, чем интеграция с Алисой.


5. Что ещё важно прислать инженерам

Чтобы они могли быстрее воспроизвести:

  1. Какой у вас контроллер (модель / ревизия, например WB6, WB7, WB8.5).
  2. Версия прошивки (из веб-интерфейса → Settings → Firmware, или содержимое /etc/wb-release).
  3. Скриншот / текст конфигурации:
    • /etc/wb-mqtt-serial.conf и файлы в /etc/wb-mqtt-serial.conf.d/,
    • /etc/wb-cloud-connect.conf / /etc/wb-yandex-home.conf (если есть).
  4. Вывод:
    mosquitto_sub -v -t '/devices/wb-mr6c_39/#' -R -C 20
    
    сразу после перезапуска wb-mqtt-serial.

Можете просто дописать сюда вывод этих команд (текстом), инженеры посмотрят в рабочее время.


По текущему описанию наиболее вероятные причины:

  1. Либо Modbus‑модуль WB-MR6C реально читается с ошибками (время от времени нет ответа — тогда будут таймауты в wb-mqtt-serial, а интеграция их транслирует в DEVICE_UNREACHABLE).
  2. Либо нет / некорр

Добрый день.
Рекомендую подписаться на топик (рекурсивно) устройства, например на “/devices/wb-mr6c_39/controls/K5/#”.
Ну и проверить его фактическое состояние.

В топике данные есть, появляются новые по мере изменения состояния. В веб-интерфейсе, в стороннем клиенте и в консоли:

mosquitto_sub -v -t '/devices/wb-mr6c_39/controls/K5/#' -R

(после тычков через веб интерфейс):
/devices/wb-mr6c_39/controls/K5/on 1
/devices/wb-mr6c_39/controls/K5 1
/devices/wb-mr6c_39/controls/K5/on 0
/devices/wb-mr6c_39/controls/K5 0

без тычков ничего не появляется, но если сделать без -R, то тоже есть:

root@wirenboard-xxx:~# mosquitto_sub -v -t ‘/devices/wb-mr6c_39/controls/K5/#’
/devices/wb-mr6c_39/controls/K5/meta {“order”:19,“readonly”:false,“title”:{“en”:“Command K5”,“ru”:“\u041a\u043e\u043c\u0430\u043d\u0434\u0430 K5”},“type”:“switch”}
/devices/wb-mr6c_39/controls/K5/meta/order 19
/devices/wb-mr6c_39/controls/K5/meta/readonly 0
/devices/wb-mr6c_39/controls/K5/meta/type switch
/devices/wb-mr6c_39/controls/K5 0

В логах все те же таймауты на чтение топиков при попытках посмотреть устройство в ПУДе. Ниже приведу часть лога еще раз после перезапуска wb-alice-client:

Mar 23 12:41:41 wirenboard-xxx python3[20323]: INFO: Starting wb-alice-client…
Mar 23 12:41:41 wirenboard-xxx python3[20323]: INFO: Alice integration is enabled - starting client…
Mar 23 12:41:41 wirenboard-xxx python3[20323]: INFO: Try read config file ‘/etc/wb-mqtt-alice-devices.conf’
Mar 23 12:41:41 wirenboard-xxx python3[20323]: INFO: Try to read event rates from ‘/usr/lib/wb-mqtt-alice/wb-mqtt-alice-event-rates.json’
Mar 23 12:41:41 wirenboard-xxx python3[20323]: INFO: Devices loaded: 3, mqtt topics: 3
Mar 23 12:41:41 wirenboard-xxx mosquitto[7604]: 1774258901: New connection from 127.0.0.1:55235 on port 1883.
Mar 23 12:41:41 wirenboard-xxx mosquitto[7604]: 1774258901: New client connected from 127.0.0.1:55235 as wb-alice-client-YfmPLzKa (p2, c1,>
Mar 23 12:41:41 wirenboard-xxx python3[20323]: INFO: Connected to ‘localhost’ MQTT broker
Mar 23 12:41:41 wirenboard-xxx python3[20323]: INFO: Connecting Socket.IO client…
Mar 23 12:41:41 wirenboard-xxx python3[20323]: INFO: MQTT connected - no subscriptions on this moment
Mar 23 12:41:41 wirenboard-xxx python3[20323]: INFO: Controller SN: ‘A7HNKJRC’
Mar 23 12:41:41 wirenboard-xxx python3[20323]: INFO: Target SocketIO server: ‘alice.wirenboard.com:8042
Mar 23 12:41:41 wirenboard-xxx python3[20323]: INFO: Client version: ‘0.8.2’
Mar 23 12:41:41 wirenboard-xxx python3[20323]: INFO: Starting connection loop (connect_reason: ‘initial_connect’, max_attempts=infinite)
Mar 23 12:41:41 wirenboard-xxx python3[20323]: INFO: Connection attempt #1
Mar 23 12:41:41 wirenboard-xxx python3[20323]: INFO: Connecting Socket.IO client to ‘http://localhost:8042’…
Mar 23 12:41:42 wirenboard-xxx python3[20323]: WARNING: Executing <Task pending name=‘Task-1’ coro=<main() running at /usr/lib/wb-mqtt-ali>
Mar 23 12:41:42 wirenboard-xxx python3[20323]: INFO: Manager: Success connected to Socket.IO server, namespace=‘/’ ready (sid='lIRlgoYediF>
Mar 23 12:41:42 wirenboard-xxx python3[20323]: INFO: start alice device state sender
Mar 23 12:41:42 wirenboard-xxx python3[20323]: INFO: Alice state sender started after connect
Mar 23 12:41:43 wirenboard-xxx sshd[7769]: pam_unix(sshd:session): session closed for user root
Mar 23 12:41:43 wirenboard-xxx systemd[1]: session-1.scope: Succeeded.
Mar 23 12:41:43 wirenboard-xxx systemd[1]: session-1.scope: Consumed 1min 32.980s CPU time.
Mar 23 12:41:43 wirenboard-xxx systemd-logind[364]: Session 1 logged out. Waiting for processes to exit.
Mar 23 12:41:43 wirenboard-xxx systemd-logind[364]: Removed session 1.
Mar 23 12:41:44 wirenboard-xxx python3[20323]: INFO: Socket.IO connected successfully
Mar 23 12:41:44 wirenboard-xxx python3[20323]: INFO: Connection successful after 1 attempt(s)
Mar 23 12:41:44 wirenboard-xxx python3[20323]: INFO: Client initialization continue when connect to server

Mar 23 12:41:55 wirenboard-xxx mosquitto[7604]: 1774258915: New connection from 127.0.0.1:36631 on port 1883.
Mar 23 12:41:55 wirenboard-xxx mosquitto[7604]: 1774258915: New client connected from 127.0.0.1:36631 as auto-CBC1ABCC-56BE-2A4B-C471-5903>
Mar 23 12:41:56 wirenboard-xxx python3[20323]: WARNING: Read topic timeout waiting ‘/devices/wb-mr6c_39/controls/K6’ , timeout - 1
Mar 23 12:41:56 wirenboard-xxx python3[20323]: WARNING: ‘a78a2ba1-260320163442-3b9c7dc7-afe8-4d1e-a2cd-2d8bd45e2b0a’: no live or retained >
Mar 23 12:41:59 wirenboard-xxx mosquitto[7604]: 1774258919: New connection from 127.0.0.1:44841 on port 1883.
Mar 23 12:41:59 wirenboard-xxx mosquitto[7604]: 1774258919: New client connected from 127.0.0.1:44841 as auto-8F0F1709-E7FA-4C1B-7E02-0995>
Mar 23 12:42:00 wirenboard-xxx python3[20323]: WARNING: Read topic timeout waiting ‘/devices/wb-mr6c_39/controls/K6’ , timeout - 1
Mar 23 12:42:00 wirenboard-xxx python3[20323]: WARNING: ‘a78a2ba1-260320163442-3b9c7dc7-afe8-4d1e-a2cd-2d8bd45e2b0a’: no live or retained >
Mar 23 12:42:02 wirenboard-xxx mosquitto[7604]: 1774258922: New connection from 127.0.0.1:40751 on port 1883.

Кажется проблема решена. Причина - не совсем корректная настройка аутентификации в mosquitto. По каким-то рекомендациям и совственному разумению полуторагодичной давности в /etc/mosquitto/conf.d/10listeners.conf была такая часть:

listener 1883
allow_anonymous true
acl_file /etc/mosquitto/acl/default.conf
password_file /etc/mosquitto/passwd/default.conf

а надо как-то так (помимо других листенеров и пары конфигов для доп. аутентификации в mosquitto:

listener 1883 127.0.0.1
allow_anonymous true
#acl_file /etc/mosquitto/acl/default.conf
#password_file /etc/mosquitto/passwd/default.conf

Т.е. соединение проходило, но топики не читались клиентом (в клиенте не увидел аутентификации) и видимо из-за этого ошибка таймаута. Возможно, стоит это логгировать более явно и/или давать опцию настройки логина, пароля в клиенте