Генератор шаблонов устройств Modbus (WB Template Generator)

From Wiren Board
This is the approved revision of this page, as well as being the most recent.
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 или локальную модель):

  1. Откройте меню AI ▾ → Настройки LLM.
  2. Укажите URL OpenAI-совместимого API, API-ключ и название модели.
  3. Настройки сохраняются в браузере (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. Там же можно сообщить об ошибке или предложить улучшение.

См. также