Генератор шаблонов устройств Modbus (WB Template Generator)
Описание
WB Template Generator — веб-сервис для создания и редактирования JSON-шаблонов Modbus-устройств для драйвера wb-mqtt-serial. Сервис доступен по адресу:
Сервис помогает быстро получить рабочий шаблон устройства одним из трёх способов:
- автоматически — загрузите документацию устройства (PDF, Excel или скриншот таблицы регистров), и встроенный ИИ сам извлечёт регистры, определит типы каналов, единицы измерения и enum-значения;
- вручную — добавляйте регистры по одному через визуальный редактор;
- на основе готового шаблона — импортируйте существующий
.jsonили.json.jinjaшаблон wb-mqtt-serial для доработки.
Готовый шаблон скачивается в формате .json и кладётся в каталог /etc/wb-mqtt-serial.conf.d/templates/ на контроллере — после перезапуска драйвера устройство станет доступно в веб-интерфейсе. Дополнительно сервис может выгрузить исходник .json.jinja — этот файл напрямую драйвером не используется, его нужно скомпилировать в .json при сборке пакета шаблонов.
Сервис предназначен для разработчиков и опытных пользователей, которые расширяют список поддерживаемых Modbus-устройств. Готовые шаблоны для устройств Wiren Board уже включены в драйвер wb-mqtt-serial.
Возможности
- анализ документации устройства через LLM — поддерживаются файлы PDF, XLSX, PNG, JPG, WEBP;
- три уровня детализации шаблона:
- Small — 10–30 основных каналов для измерений и управления;
- Medium — каналы плюс параметры конфигурации устройства;
- Full — все регистры устройства без фильтрации.
- визуальный редактор регистров с inline-редактированием, drag-n-drop сортировкой и группировкой;
- интерактивное превью — справа отображается, как устройство будет выглядеть в веб-интерфейсе контроллера;
- импорт и экспорт CSV — удобно править большие списки регистров в Excel или LibreOffice Calc;
- мультиязычные переводы названий каналов и enum-значений с автопереводом через LLM;
- экспорт в
.json.jinjaс автоматическим сворачиванием повторяющихся регистров в циклы{% for %}; - использование собственного API-ключа OpenAI-совместимого LLM (опционально).
Быстрый старт
1. Откройте сервис
Перейдите по ссылке tgen.wirenboard.com. Регистрация не требуется.
2. Выберите способ создания шаблона
На пустом экране доступны три карточки:
- Из документа (AI) — загрузить PDF/Excel/изображение с таблицей регистров;
- Импорт шаблона — загрузить существующий
.jsonили.json.jinja; - Вручную / CSV — добавить регистр самостоятельно или импортировать CSV.
Файлы можно перетаскивать прямо в окно браузера (drag-n-drop) — сервис сам определит способ обработки по расширению.
3. Дождитесь анализа
Если выбран AI-анализ, сервис покажет прогресс по этапам:
queued → uploading → converting → analyzing → merging → done
Длительность анализа зависит от объёма документа и обычно составляет от нескольких секунд до нескольких минут. При большой нагрузке запрос ставится в очередь — текущая позиция и ориентировочное время отображаются на экране.
4. Доработайте шаблон
В таблице регистров можно:
- добавлять, удалять и переупорядочивать регистры;
- изменять тип канала, формат данных, масштаб, единицы измерения;
- объединять регистры в группы;
- задавать
condition— условие отображения канала, зависящее от параметра; - добавлять переводы названий на другие языки.
5. Скачайте шаблон
Кнопка Скачать ▾ в тулбаре предлагает два формата:
- JSON — готовый шаблон, который можно сразу положить в
/etc/wb-mqtt-serial.conf.d/templates/; - Jinja — исходник
.json.jinjaс циклами; его нужно скомпилировать в.jsonпри сборке пакета шаблонов (подробнее см. Jinja-шаблоны wb-mqtt-serial).
6. Установите шаблон на контроллер
Скопируйте полученный файл на контроллер:
scp config-myDevice.json root@192.168.1.1:/etc/wb-mqtt-serial.conf.d/templates/
И перезапустите драйвер:
systemctl restart wb-mqtt-serial
После этого устройство появится в списке шаблонов в веб-интерфейсе контроллера (см. Добавление устройств вручную).
Интерфейс редактора
Тулбар
При наличии регистров в верхней части отображается тулбар:
[+ Добавить] [Удалить(N)] | [CSV ▾] | [Группы ⇔] [Языки] | [AI ▾] | ... [Скачать ▾] [Новый шаблон] N рег.
- CSV ▾ — экспорт текущих регистров в CSV, импорт CSV, скачивание пустого шаблона CSV.
- Группы ⇔ — управление группами каналов и параметров.
- Языки — выбор языков переводов (RU, EN и любые другие).
- AI ▾ — автоперевод полей на выбранный язык, нормализация названий в английский, настройки LLM.
- Скачать ▾ — выгрузка готового шаблона.
Подсветка condition
Параметры могут управлять видимостью каналов через поле condition. В редакторе эта связь подсвечивается:
- при клике на регистр выделенный окрашен в жёлтый, связанные через condition — в фиолетовый;
- фиолетовый бейдж показывает, на сколько каналов влияет параметр;
- красный бейдж
⚠ ?=предупреждает об ошибке: condition может ссылаться только на параметр (полеis_parameter: true), не на канал.
Превью шаблона
Справа отображается интерактивное превью — каналы, параметры, переключатели и слайдеры в том виде, в котором устройство появится в веб-интерфейсе контроллера. Превью обновляется в реальном времени при редактировании.
Использование собственного LLM
По умолчанию сервис использует общий серверный LLM Wiren Board, на который действуют ограничения по числу запросов в минуту. Если вы хотите использовать собственный API-ключ (например, OpenAI, Anthropic или локальную модель):
- Откройте меню AI ▾ → Настройки LLM.
- Укажите URL OpenAI-совместимого API, API-ключ и название модели.
- Настройки сохраняются в браузере (localStorage).
При использовании собственного LLM на запросы действуют отдельные лимиты, а пользовательский system_prompt разрешён.
Формат генерируемого шаблона
Сервис создаёт файлы, полностью совместимые с форматом wb-mqtt-serial. Поддерживаются:
- type: value, switch, pushbutton, range, text, rgb, wo-switch, temperature, voltage, current, power и т. д.;
- format: u16, s16, u32, s32, u64, float, string;
- reg_type: holding, input, coil, discrete;
- units: V, A, deg C, %, RH, Ohm, bar, ppm, W, kWh и т. д.
Jinja-экспорт
При экспорте в .json.jinja сервис автоматически находит повторяющиеся структуры и сворачивает их в циклы {% for %}:
- числовые паттерны — каналы с числом в имени («Input 1»…«Input 8») и арифметической прогрессией адресов;
- строковые паттерны — каналы с одинаковой структурой, различающиеся одним словом в имени;
- вариантные каналы — каналы с одинаковым именем, но разными
sporadicилиcondition; - повторяющиеся ключи в секции
translations; - шаблонизируемые поля
groupиconditionс варьирующимся номером.
Минимальное число элементов для обнаружения паттерна — 2. Числовые паттерны имеют приоритет над строковыми.
Ограничения
- Максимальный размер загружаемого файла — 1 МБ.
- Применяется ограничение на число запросов в минуту от одного IP-адреса.
- Качество автоматического распознавания зависит от качества документации устройства: лучше всего работают чёткие таблицы регистров в PDF или Excel.
- После AI-анализа результат рекомендуется проверять и дорабатывать вручную: LLM может ошибаться в адресах регистров, единицах измерения и масштабах.
Исходный код
Сервис распространяется под открытой лицензией. Исходный код и инструкции по локальному развёртыванию через Docker Compose доступны в репозитории wirenboard/wb-template-generator на GitHub. Там же можно сообщить об ошибке или предложить улучшение.