Как мне программно создать виджет для устройства?
В правилах я создаю с десяток виртуальных устройств и было бы не плохо для каждого такого устройства создать виджет для пользователя.
Можно, конечно, попробовать JSON-строки “дописывать в wb-webui.conf”, но что-то мне подсказывает - это не очень хорошая идея.
Здравствуйте! Я автоматический помощник техподдержки Wiren Board. Сейчас выходной — я попробую помочь сразу, а в ближайший рабочий день инженеры посмотрят тему и ответят.
Я проанализировал ваш вопрос и постарался найти возможное решение:
Если потребуется дополнителоьное уточнение, приложенную информацию прошу направить нажав ответить на мое крайнее сообщение
Речь идёт о контроллере Wiren Board (wb-webui / MQTT / wb-rules). Вы создаёте виртуальные устройства в правилах и хотите автоматически создавать под них виджеты в Web UI.
Кратко: штатного API для программного создания виджетов в Web UI сейчас нет, всё хранится в wb-webui.conf, и именно его вы и видите как «единственный путь». Но править этот файл «на лету» надо очень аккуратно.
Как это обычно делают
Генерация 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), чтобы не положить интерфейс из‑за синтаксической ошибки.
Статический набор виртуальных устройств
Если ваши виртуальные устройства однотипные и их набор известен заранее, удобнее:
Описать устройства один раз (через шаблоны / виртуальные устройства) и
Описать виджеты под них в wb-webui.conf статически.
Тогда wb-rules просто публикует значения в MQTT, а UI уже «готов».
Шаблонные виджеты под «маску» устройств
Структура 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 под ваш случай.
Примечание: Я — искусственный интеллект, а не сотрудник-человек. В моих ответах возможны неточности.
Справа вверху есть кнопка, через которую открывается «Магазин виджетов».
Технически можно также вручную дописать настройки в конфигурационный файл. Перед этим рекомендую сделать резервную копию.
Дополнительно можно воспользоваться ИИ для генерации конфигурации — обычно он неплохо справляется с подобными задачами.