feat: коррекция значений контролов виджетов - #1
Open
ilyatikhonyuk wants to merge 6 commits into
Open
Conversation
## Что сделано Добавлена утилита для коррекции числовых значений контролов виджетов. Позволяет пользователю задать формулу преобразования (например: "/ 1000" для перевода мВ → В), которая применяется к отображаемому значению в интерфейсе. ## Формулы Поддерживаемые операции: умножение (*), деление (/), сложение (+), вычитание (-). Операции можно объединять в цепочки: - "* 1.8, + 32" — перевод °C → °F - "/ 1000" — перевод мВ → В - "* 500, / 1000" — сложное преобразование Запятые и точки с запятой — необязательные разделители для удобства чтения. ## Валидация Встроенная проверка формул с отчётом об ошибках: - пустая формула - деление на ноль - неверный формат (посторонние символы) ## Типы данных Добавлен интерфейс CorrectionConfig (enabled, formula, units) в типы ячеек, виджетов и хранилища. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
## Что сделано При наличии включённой коррекции у ячейки виджета — формула автоматически применяется к отображаемому значению. Если заданы пользовательские единицы измерения — они заменяют оригинальные. ## Как это работает Пример: датчик отдаёт напряжение 24200 мВ. С формулой "/ 1000" и единицами "В" пользователь увидит "24.2 В" вместо "24200 мВ". ## Затронутые компоненты Параметр correction передаётся по цепочке компонентов: - Страницы (dashboard, widgets, widget-add) - Компонент Cell - Компонент CellValue (здесь применяется формула) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
## Что сделано В редактор виджетов добавлена колонка «Коррекция» для числовых типов контролов. Пользователь может включить/выключить коррекцию чекбоксом, задать формулу и единицы измерения. ## Интерфейс - Чекбокс в строке ячейки — включает/выключает коррекцию - Для нечисловых типов (switch, text, pushbutton) — прочерк - При включении раскрывается панель с двумя полями: - «Формула коррекции» — с валидацией в реальном времени - «Единица измерения» — опциональная замена оригинальных единиц - Ошибки валидации блокируют сохранение виджета ## CSS-сетка Адаптивная сетка с поддержкой комбинаций колонок: - Базовая (sort, id, name, type, remove) - С инвертированием (+ invert) - С коррекцией (+ correction) - С обоими (+ invert + correction) Заголовки колонок переносят слова вместо обрезания — для корректного отображения длинных переводов (например, «Инвертировать» на русском). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
## Что сделано Добавлены ключи локализации для интерфейса коррекции значений на английском и русском языках. ## Добавленные ключи Подписи элементов интерфейса: - Заголовок колонки (Correction / Коррекция) - Подпись поля формулы и единиц измерения - Плейсхолдер «Без изменений» / «No change» - Подсказка результата Сообщения об ошибках валидации: - Пустая формула - Деление на ноль - Неверный формат Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
## Что сделано Скрипт для движка правил wb-rules, который создаёт MQTT-топики со скорректированными значениями контролов. Позволяет использовать скорректированные данные в сценариях автоматизации. ## Как это работает 1. Читает конфиг виджетов /etc/wb-webui.conf 2. Находит ячейки с включённой коррекцией 3. Для каждой создаёт readonly MQTT-топик: power_status/Vin → power_status/Vin_corrections 4. При изменении оригинального значения — применяет формулу и публикует результат в топик коррекции ## Архитектура Правила (defineRule) создаются один раз на контрол, формулы читаются из глобальной карты correctionMap. Это обходит ограничение wb-rules (Duktape): defineRule не поддерживает destroy(). Конфиг опрашивается каждые 5 секунд — изменения в виджетах подхватываются автоматически без перезапуска сервиса. ## Логирование - log.info — общие события (старт, количество коррекций) - log.debug — детали (формулы, значения, дедупликация) - log.warning — ошибки чтения конфига ## Дедупликация Если один контрол встречается в нескольких виджетах — используется первая найденная коррекция. ## Стиль кода Написан в стиле системных скриптов Wiren Board: ES5, IIFE-обёртка, 2 пробела, одинарные кавычки, имена правил с префиксом _wb_correction_. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Скриншоты для документации PR: - Тестовый виджет на дашборде с коррекцией - Редактор виджета (настройка формул и единиц) - Страница «Устройства» с каналами коррекции Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Описание
Добавлена функция коррекции значений для контролов виджетов. Позволяет пользователю задать формулу преобразования отображаемого значения прямо в редакторе виджетов.
Зачем это нужно
Контролы Wiren Board отдают значения в системных единицах (милливольты, байты, °C). На практике пользователям часто нужны другие единицы — вольты, гигабайты, °F. Особенно актуально для объектов в ЕС, где используется Фаренгейт и другие локальные стандарты.
До этого изменения для пересчёта приходилось писать правила в wb-rules вручную. Теперь — галочка и формула в редакторе виджета.
Примеры использования
/ 1000* 1.8, + 32/ 1024* 500, / 1000Скриншоты
Тестовый виджет на панели (дашборде)
Виджет с различными типами коррекции: перевод единиц, цепочки формул, отключённая коррекция, нечисловые типы контролов.
Редактор виджета — настройка коррекции
Верхняя часть: колонка «Коррекция» с чекбоксами, раскрытые панели формул.
Нижняя часть: нечисловые типы (switch, text, pushbutton) с прочерками вместо коррекции.
Страница «Устройства» — каналы коррекции
Скорректированные каналы появляются рядом с оригинальными:
A1_corrections,CPU Temperature_corrections,ram_used_correctionsи другие.Канал
Vin_correctionsв блоке «Статус питания»: оригинал 24.2 В → скорректированное 0.0242 kV.Что изменено
1. Утилита коррекции (
frontend/src/utils/correction.ts)* / + -* 1.8, + 32(запятые как разделители)2. Отображение значений (
frontend/src/components/cell/)CellValueприменяет формулу к значению черезuseMemo3. Редактор виджетов (
frontend/src/pages/dashboards/.../widget-edit/)4. CSS-сетка (
styles.css)5. Переводы (EN/RU)
6. Серверный скрипт (
wb-corrections.js){control}_correctionsс readonly значениямиlog.info(общее) +log.debug(детали)Типы данных
Хранится в
widget.cells[].extra.correctionв/etc/wb-webui.conf.MQTT-топики (серверная часть)
Для каждого контрола с включённой коррекцией создаётся readonly топик:
Скорректированные топики можно использовать в сценариях автоматизации.
Развёртывание
Фронтенд:
Серверный скрипт:
Тестирование
Проверено на контроллере WB8.5.3 (wb-2507, wb-rules 2.34.0):
/ 1000), цепочки (* 1.8, + 32), с запятыми🤖 Generated with Claude Code