WebUI: MqttConnectionError — JS MQTT клиент не держит соединение

Добрый день! с некоторых пор перестали открываться некоторые страницы интерфейса. Связываю с одним из обновлений. тест ветка. Пытался диагностировать нейросетью - файл-результат прилагаю.
wb-homeui-mqtt-bug-report-forum.md (5,3 КБ)

На странице Устройств ошибка : “Error while checking availableness of service: MQTT client is not connected MqttConnectionError”, В логах mosquitto видно цикл каждые ~15 секунд:

Client wb-mqtt-homeui-xxx closed its connection.
New client connected ... as wb-mqtt-homeui-xxx
Client wb-mqtt-homeui-xxx closed its connection

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

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

архив с диагностикой

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

Отключите пожалуйста стороннее ПО перед перезагрузкой.

вы имеете в виду SprutHub?

Если процесс java его - да.

без спрута. ошибка так же воспроизводится.

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

  1. После systemctl restart mosquitto WebUI открывается нормально (включая Settings, Rules, Logs). Через ~30 секунд соединение обрывается (Не удалось загрузить настройки WebUI.: MQTT client is not connected MqttConnectionError) и начинается цикл переподключений
    каждые ~15 секунд. Воспроизводится стабильно.
  2. Стороннее ПО (Sprut Hub / Java) полностью остановлено (systemctl stop spruthub && systemctl disable spruthub), процесс Java не запущен. MQTT-бридж к Home Assistant
    отключён. Проблема сохраняется.

Ловил сегодня подобное поведение.
В логах были ошибки коннекта к телеграмму и в логе браузера “Invalid cell ID” для контроллера подсветки лестницы Demid.net v12. (до последнего обновления все работало без сбоев).

Отключил отправку в телеграмм и в настройках Demid отключил интеграцию с mqtt WB - после этого все стало работать как прежде.

Явно есть проблема в последнем обновлении которая вешает mqtt.

1 Like

да!! помогло! :
Отключение MQTT-интеграции контроллера подсветки лестницы Demid.net v12 (dn-kpl-v12-2065) с WB

нейросеть подытожила )
Вероятная причина: Новая версия homeui строже парсит MQTT-топики/meta и падает на нестандартных данных от Demid (пустые /meta без JSON). Раньше игнорировала, теперь обрывает WebSocket-соединение.

1 Like

Думаю команде Wirenboard стоит обратить на это внимание и поправить эту багу.

Отлично, благодарю.
А покажите результат подписки на топики устройства. У меня такого нет, надо воспроизводить.
То есть да, некорректные не надо вообще выводить, падать не должно.

Вот дамп retained-топиков этого устройства (снят mosquitto_sub --retained-only):

 /devices/dn-kpl-v12-2065/controls/Uptime 3001244
  /devices/dn-kpl-v12-2065/controls/Uptime/meta
  {
      "title": {"en":"Uptime", "ru":"Время работы"},
      "type": "value",
      "units": "s"
  }

  /devices/dn-kpl-v12-2065/controls/Version 4.0.2
  /devices/dn-kpl-v12-2065/controls/Version/meta
  {
      "title": {"en":"Version", "ru":"Версия ПО"},
      "type": "text"
  }

  /devices/dn-kpl-v12-2065/controls/LightSensorState 128
  /devices/dn-kpl-v12-2065/controls/LightSensorState/meta
  {
      "title": {"en":"[Light Sensor] Enabled", "ru":"[Датчик света] Включен"},
      "type": "switch"
  }

  /devices/dn-kpl-v12-2065/controls/Illuminance 129
  /devices/dn-kpl-v12-2065/controls/Illuminance/meta
  {
      "title": {"en":"[Light Sensor] Illuminance", "ru":"[Датчик света] Освещенность"},
      "type": "value",
      "min": 0,
      "max": 255,
      "units":"lx"
  }

  /devices/dn-kpl-v12-2065/controls/SwitchM 0
  /devices/dn-kpl-v12-2065/controls/SwitchM/meta
  {
      "title": {"en":"[Master] Switch", "ru":"[Мастер] Свет"},
      "type":"switch"
  }

  /devices/dn-kpl-v12-2065/controls/StandbyM 0
  /devices/dn-kpl-v12-2065/controls/StandbyM/meta
  {
      "title": {"en":"[Master] Standby steps", "ru":"[Мастер] Дежурные ступени"},
      "type": "switch"
  }

  /devices/dn-kpl-v12-2065/controls/SensorsM 0
  /devices/dn-kpl-v12-2065/controls/SensorsM/meta
  {
      "title": {"en":"[Master] Sensors", "ru":"[Мастер] Датчики движения"},
      "type": "switch"
  }

  /devices/dn-kpl-v12-2065/controls/BrightnessM 100
  /devices/dn-kpl-v12-2065/controls/BrightnessM/meta
  {
      "title": {"en":"[Master] Brightness", "ru":"[Мастер] Яркость"},
      "type": "range",
      "min": 10,
      "max": 100,
      "units":"%"
  }

  /devices/dn-kpl-v12-2065/controls/UpperSensM/meta
  {
      "title": {"en":"[Master] Upper sensors", "ru":"[Мастер] Верхние датчики"},
      "type":"value",
      "enum": {
          "0":{"en":"", "ru":""},
          "1":{"en":"movement", "ru":"движение"},
          "2":{"en":"API triggered", "ru":"API триггер"}
      }
  }

  /devices/dn-kpl-v12-2065/controls/BottomSensM/meta
  {
      "title": {"en":"[Master] Bottom sensors", "ru":"[Мастер] Нижние датчики"},
      "type": "value",
      "enum": {
          "0":{"en":"", "ru":""},
          "1":{"en":"movement", "ru":"движение"},
          "2":{"en":"API triggered", "ru":"API триггер"}
      }
  }

  /devices/dn-kpl-v12-2065/meta/ {
      "driver": "demidnet"
      "title": {"en": "DemidNet V11 Stair Light", "ru": "Подсветка лестницы DemidNet V11"
  }

  /devices/dn-kpl-v12-2065/meta/name DemidNet V11
  /devices/dn-kpl-v12-2065/meta/driver demidnet

Что именно не так:

  1. Невалидный JSON в /devices/dn-kpl-v12-2065/meta/ — пропущена запятая после “demidnet”, не закрыта фигурная скобка у title.
  2. Многострочный JSON в /controls/*/meta — все meta-топики контролов содержат pretty-printed JSON на несколько строк, а не однострочный формат.
  3. Значение не соответствует типу — LightSensorState = 128, при этом type = “switch” (ожидается 0 или 1).
  4. Контролы без значений — UpperSensM и BottomSensM имеют /meta-топик, но не имеют value-топика.

Пробую воспроизвести.

mosquitto_pub -r -t "/devices/dn-kpl-v12-2065/controls/Uptime" -m "3001244"
mosquitto_pub -r -t "/devices/dn-kpl-v12-2065/controls/Uptime/meta" -m '{"title":{"en":"Uptime","ru":"Время работы"},"type":"value","units":"s"}'

mosquitto_pub -r -t "/devices/dn-kpl-v12-2065/controls/Version" -m "4.0.2"
mosquitto_pub -r -t "/devices/dn-kpl-v12-2065/controls/Version/meta" -m '{"title":{"en":"Version","ru":"Версия ПО"},"type":"text"}'

mosquitto_pub -r -t "/devices/dn-kpl-v12-2065/controls/LightSensorState" -m "128"
mosquitto_pub -r -t "/devices/dn-kpl-v12-2065/controls/LightSensorState/meta" -m '{"title":{"en":"[Light Sensor] Enabled","ru":"[Датчик света] Включен"},"type":"switch"}'

mosquitto_pub -r -t "/devices/dn-kpl-v12-2065/controls/Illuminance" -m "129"
mosquitto_pub -r -t "/devices/dn-kpl-v12-2065/controls/Illuminance/meta" -m '{"title":{"en":"[Light Sensor] Illuminance","ru":"[Датчик света] Освещенность"},"type":"value","min":0,"max":255,"units":"lx"}'

mosquitto_pub -r -t "/devices/dn-kpl-v12-2065/controls/SwitchM" -m "0"
mosquitto_pub -r -t "/devices/dn-kpl-v12-2065/controls/SwitchM/meta" -m '{"title":{"en":"[Master] Switch","ru":"[Мастер] Свет"},"type":"switch"}'

mosquitto_pub -r -t "/devices/dn-kpl-v12-2065/controls/StandbyM" -m "0"
mosquitto_pub -r -t "/devices/dn-kpl-v12-2065/controls/StandbyM/meta" -m '{"title":{"en":"[Master] Standby steps","ru":"[Мастер] Дежурные ступени"},"type":"switch"}'

mosquitto_pub -r -t "/devices/dn-kpl-v12-2065/controls/SensorsM" -m "0"
mosquitto_pub -r -t "/devices/dn-kpl-v12-2065/controls/SensorsM/meta" -m '{"title":{"en":"[Master] Sensors","ru":"[Мастер] Датчики движения"},"type":"switch"}'

mosquitto_pub -r -t "/devices/dn-kpl-v12-2065/controls/BrightnessM" -m "100"
mosquitto_pub -r -t "/devices/dn-kpl-v12-2065/controls/BrightnessM/meta" -m '{"title":{"en":"[Master] Brightness","ru":"[Мастер] Яркость"},"type":"range","min":10,"max":100,"units":"%"}'

mosquitto_pub -r -t "/devices/dn-kpl-v12-2065/controls/UpperSensM" -m "0"
mosquitto_pub -r -t "/devices/dn-kpl-v12-2065/controls/UpperSensM/meta" -m '{"title":{"en":"[Master] Upper sensors","ru":"[Мастер] Верхние датчики"},"type":"value","enum":{"0":{"en":"","ru":""},"1":{"en":"movement","ru":"движение"},"2":{"en":"API triggered","ru":"API триггер"}}}'

mosquitto_pub -r -t "/devices/dn-kpl-v12-2065/controls/BottomSensM" -m "0"
mosquitto_pub -r -t "/devices/dn-kpl-v12-2065/controls/BottomSensM/meta" -m '{"title":{"en":"[Master] Bottom sensors","ru":"[Мастер] Нижние датчики"},"type":"value","enum":{"0":{"en":"","ru":""},"1":{"en":"movement","ru":"движение"},"2":{"en":"API triggered","ru":"API триггер"}}}'

mosquitto_pub -r -t "/devices/dn-kpl-v12-2065/meta" -m '{"driver":"demidnet" "title":{"en":"DemidNet V11 Stair Light","ru":"Подсветка лестницы DemidNet V11"}'

mosquitto_pub -r -t "/devices/dn-kpl-v12-2065/meta/name" -m "DemidNet V11"
mosquitto_pub -r -t "/devices/dn-kpl-v12-2065/meta/driver" -m "demidnet"

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

1 Like

Разработчику контроллера кстати, тоже написал.

1 Like

Обновить ПО v12 до версии 4.0.3 в разделе Wi-Fi

Поправил.
Если вдруг что еще всплывёт - не стесняйтесь обращаться :slight_smile:

1 Like