Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
|
использование_преобразований_map [2025/04/06 14:36] Admin |
использование_преобразований_map [2025/04/06 23:02] (текущий) Admin [Шаблон "cmd":"fan"] |
||
|---|---|---|---|
| Строка 7: | Строка 7: | ||
| Для этого существует механизм преобразований, | Для этого существует механизм преобразований, | ||
| - | Первое место, где используются преобразования - это интеграция Modbus v2. это обьясняется тем, что в Modbus все взаимодействие с устройством происходит через регистры, | + | Первое место, где используются преобразования - это интеграция Modbus v2. см [[настройка_modbus]] |
| - | Предусмотрено два типа преобразований - преобразования команды и преобразование значения | + | ==== Типы преобразований ==== |
| - | Также, два направления преобразования - прямое (когда из унифицированного вида создается значение для записи в устройство) и обратное - когда считанное из устройства значение преобразуется в унифицированный вид | + | Предусмотрено два типа преобразований - **преобразования команды** и **преобразование значения** |
| + | |||
| + | |||
| + | Также, | ||
| Преобразование определяется при помощи JSON обьекта " | Преобразование определяется при помощи JSON обьекта " | ||
| Строка 16: | Строка 19: | ||
| " | " | ||
| </ | </ | ||
| + | **прямое преобразование: | ||
| + | |||
| При управлении fanspeed (напрямую, | При управлении 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": | ||
| </ | </ | ||