Программное создание виджетов

Как мне программно создать виджет для устройства?
В правилах я создаю с десяток виртуальных устройств и было бы не плохо для каждого такого устройства создать виджет для пользователя.

Можно, конечно, попробовать JSON-строки “дописывать в wb-webui.conf”, но что-то мне подсказывает - это не очень хорошая идея.

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


Речь идёт о контроллере Wiren Board (wb-webui / MQTT / wb-rules). Вы создаёте виртуальные устройства в правилах и хотите автоматически создавать под них виджеты в Web UI.

Кратко: штатного API для программного создания виджетов в Web UI сейчас нет, всё хранится в wb-webui.conf, и именно его вы и видите как «единственный путь». Но править этот файл «на лету» надо очень аккуратно.

Как это обычно делают

  1. Генерация wb-webui.conf скриптом
    Типовой подход — не править файл кусками, а:

    • хранить «шаблон» конфигурации где‑то (например /usr/share/wb-webui/wb-webui.conf.template или в своём каталоге);
    • своим скриптом (bash/python/что удобно) генерировать итоговый wb-webui.conf целиком на основе текущего списка виртуальных устройств;
    • класть его в /etc/wb-webui.conf и перезапускать web-интерфейс (как правило, service nginx reload не нужен, достаточно обновления самой конфы, но иногда проще перезапустить wb-webui если он выделен отдельным сервисом в вашей прошивке).

    Важно:

    • перед записью нового файла делайте бэкап старого (cp /etc/wb-webui.conf /etc/wb-webui.conf.bak-$(date +%F-%H%M%S)).
    • валидируйте JSON (хотя бы jq . /etc/wb-webui.conf), чтобы не положить интерфейс из‑за синтаксической ошибки.
  2. Статический набор виртуальных устройств
    Если ваши виртуальные устройства однотипные и их набор известен заранее, удобнее:

    • Описать устройства один раз (через шаблоны / виртуальные устройства) и
    • Описать виджеты под них в wb-webui.conf статически.
      Тогда wb-rules просто публикует значения в MQTT, а UI уже «готов».
  3. Шаблонные виджеты под «маску» устройств
    Структура wb-webui.conf позволяет группировать виджеты по устройствам/топикам. Можно:

    • использовать единый шаблон виджета и просто при генерации файла подставлять имена устройств/контролов;
    • держать всё в одном скрипте, который:
      • читает список виртуальных устройств (например, по MQTT через mosquitto_sub -t /devices/# и фильтр по вашему префиксу),
      • формирует JSON с вкладками/группами/виджетами,
      • записывает итог в wb-webui.conf.

Почему «дописывать JSON-строки» — риск

Вы верно опасаетесь: если просто «дописать строку» в конец файла, почти наверняка получится невалидный JSON. Надёжнее:

  • парсить существующий JSON (через jq или языковую библиотеку),
  • программно модифицировать структуру (добавить элемент в массив виджетов),
  • сериализовать и сохранить обратно.

То есть редактирование wb-webui.conf возможно, но только как полноценное редактирование JSON, а не просто echo в конец файла.


Если напишете:

  • какую версию контроллера/прошивки используете;
  • как создаёте виртуальные устройства (wb-rules, wb-mqtt-serial, свои драйверы);
  • пример желаемого виджета (тип, какие контроли),

я смогу накидать конкретный пример: либо bash + jq для генерации wb-webui.conf, либо структуру JSON под ваш случай.


Примечание: Я — искусственный интеллект, а не сотрудник-человек. В моих ответах возможны неточности.

Добрый день!

Справа вверху есть кнопка, через которую открывается «Магазин виджетов».
изображение
Технически можно также вручную дописать настройки в конфигурационный файл. Перед этим рекомендую сделать резервную копию.

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

Добрый день,
Удалось ли решить вопрос?

Вручную создаю один виджет. Остальные виджеты тоже вручную, но уже через “редактор json” путем поиска/замены по тексту имен устройств.

Видимо все-же придется своими силами работать с wb-webui.conf как с json-объектом.

Добрый день!

Могу ли ещё чем-то помочь?