Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
использование_преобразований_map [2025/04/06 14:27] Admin |
использование_преобразований_map [2025/04/06 23:02] (текущий) Admin [Шаблон "cmd":"fan"] |
||
---|---|---|---|
Строка 7: | Строка 7: | ||
Для этого существует механизм преобразований, | Для этого существует механизм преобразований, | ||
- | Первое место, где используются преобразования - это интеграция Modbus v2. это обьясняется тем, что в Modbus все взаимодействие с устройством происходит через регистры, | + | Первое место, где используются преобразования - это интеграция Modbus v2. см [[настройка_modbus]] |
- | Предусмотрено два типа преобразований - преобразования команды и преобразование значения | + | ==== Типы преобразований ==== |
- | Также, два направления преобразования - прямое (когда из унифицированного вида создается значение для записи в устройство) и обратное - когда считанное из устройства значение преобразуется в унифицированный вид | + | Предусмотрено два типа преобразований - **преобразования команды** и **преобразование значения** |
- | Преобразование определяется при помощи JSON обьекта " | + | |
+ | Также, существуют два направления преобразования - **прямое** (когда из унифицированного вида создается значение для записи в устройство) и **обратное** - когда считанное из устройства значение преобразуется в унифицированный вид | ||
+ | |||
+ | Преобразование определяется при помощи JSON обьекта " | ||
< | < | ||
" | " | ||
</ | </ | ||
+ | **прямое преобразование: | ||
+ | При управлении fanspeed (напрямую, | ||
+ | |||
+ | В случае, | ||
+ | В противном случае, | ||
+ | если в результате преобразований будет получено число - произойдет запись в указанный регистр модбас. | ||
+ | |||
+ | при считывании значения из регистра, | ||
+ | |||
+ | При этом, те же правила применяются в обратном направлении. | ||
+ | Сначала производится попытка преобразовать полученное из регистра значение в команду. В случае неуспеха - в число. | ||
+ | |||
+ | В примере выше - если считано значение 0 - оно будет преобразовано в команду OFF | ||
+ | в случае не успешного преобразования в команду | ||
+ | |||
+ | Следует отметить, | ||
+ | |||
+ | Данное поведение можно отменить, | ||
+ | Это приведет к тому, что при невозможности преобразовать полученное значение в команду, | ||
< | < | ||
" | " | ||
</ | </ | ||
+ | Для этого примера преобразования будут действовать следующим образом: | ||
+ | Прямое: | ||
+ | |||
+ | Команда OFF приведет к записи 0 в регистр 40003 | ||
+ | Любая другая команда или значение будут проигнорированы | ||
+ | |||
+ | Обратное: | ||
+ | |||
+ | Если из регистра 40003 считан ноль, он будет преобразован в команду OFF. | ||
+ | |||
+ | любые другие значения будут проигнорированы. Преобразование при этом будет считаться не успешным. и будет выполнен " | ||
+ | |||
+ | ==== Сценарии преобразования по умолчанию ==== | ||
+ | Этот параметр (используется только для обратных преобразований modbus) применяется в том случае, | ||
+ | |||
+ | Параметр def может иметь либо цифровое либо строковое значение. В случае цифрового значения - задается номер регистра. в случае строкового значения - задается имя параметра. Логика работы сценария по умолчанию немного разная для данных двух случаев. | ||
+ | |||
+ | **цифровое значение: | ||
+ | |||
+ | Контроллер пытается найти считанное из modbus значение в текущем буфере (на тот случай, | ||
+ | |||
+ | Если значение не было считано, | ||
+ | Для примера выше, требуется, | ||
< | < | ||
" | " | ||
</ | </ | ||
+ | Соответственно, | ||
+ | |||
+ | Данное поведение, | ||
+ | |||
+ | |||
+ | **строковое значение: | ||
+ | |||
+ | В этом случае, | ||
+ | |||
+ | В примере ниже, если значение coil 0 равно нулю - обратное преобразование сразу вернет команду OFF | ||
+ | |||
+ | Иначе, так как преобразование в число отменено (val=null), преобразование для параметра pwr будет считаться не успешным и контроллер посмотрит ранее считанное значение регистра 1, из параметра описанного в acmode, применит все указанные для регистра acmode преобразования и их результат вернет для параметра pwr | ||
+ | |||
+ | важно: параметр acmode должен быть описан в разделе items, даже если сам по себе он ни для каких действий более не используется. достаточно в данном описании поставить пустой JSON обьект - именно в нем контроллер сохраняет ранее считанные значения) | ||
+ | |||
+ | | ||
< | < | ||
- | "on": | + | "pwr": |
+ | " | ||
</ | </ | ||
+ | |||
+ | |||
+ | ===== Ограничения диапазона при линейном преобразовании значений ===== | ||
+ | |||
+ | В простейшем случае, | ||
< | < | ||
- | "fanspeed":{" | + | "val":[вход_мин, вход_макс, выход_мин, выход_макс] |
</ | </ | ||
- | < | + | например |
- | "$rain": | + | |
+ | < | ||
+ | "val":[1, 5, 1, 255] | ||
</ | </ | ||
+ | В случае прямого преобразования, | ||
+ | В случае обратного - числа из интервала 1-64 к 1, 65-128 к 2, 129-195 к 3, 196-254 к 4 и 255 к 5 | ||
+ | |||
+ | NEW | ||
+ | если входное значение не укладывается в указанные границы - преобразование считается не успешным. То есть в примере выше, если на вход преобразования придет число 0 или 6 то оно не сработает. | ||
+ | |||
+ | можно определить значения, | ||
< | < | ||
- | "pwr": | + | "val":[вход_мин, вход_макс, выход_мин, |
- | " | + | </ |
- | "acmode": | + | |
+ | соответственно, используя данный синтаксис, | ||
+ | |||
+ | |||
+ | < | ||
+ | " | ||
+ | </ | ||
+ | |||
+ | Параметры подставляемые при срабатывании ограничений не обязательны. Если какие-то требуется пропустить - можно указать null | ||
+ | |||
+ | ===== Предопределенные шаблоны преобразований ===== | ||
+ | |||
+ | ==== Шаблон | ||
+ | |||
+ | данный шаблон в случае прямого преобразования позволяет провести трансляцию стандартных команд | ||
+ | |||
+ | Для обратного преобразования: | ||
+ | Значения | ||
+ | |||
+ | |||
+ | |||
+ | < | ||
+ | "fanspeed": | ||
</ | </ | ||