|
|
| Строка 1: |
Строка 1: |
| {{DISPLAYTITLE:Custom: Биндинги}} | | {{DISPLAYTITLE:Modbus: Карта регистров}} |
| {{Breadcrumbs|[[Custom]] > [[Custom/Database|База данных]] > Биндинги}} | | {{Breadcrumbs|[[Modbus]] > [[Modbus/Database|База данных]] > Карта регистров}} |
|
| |
|
| == Общие сведения == | | == Общие сведения == |
| Строка 29: |
Строка 29: |
| {{Warning|Биндинги работают только в случае, когда в настройках устройства включен параметр <code>real</code>.}} | | {{Warning|Биндинги работают только в случае, когда в настройках устройства включен параметр <code>real</code>.}} |
|
| |
|
| == Параметры биндингов == | | == Параметры регистров == |
|
| |
|
| === <code>inTopic</code> === | | === <code>inTopic</code> === |
| Строка 43: |
Строка 43: |
| Шаблон для передечи состояния описываемого свойства в топик <code>outTopic</code>. В случае отсутствия этого параметра данные будут опубликованы без изменений. Подробнее в разделе [[Custom/Database/Bindings#Шаблоны|шаблоны]]. | | Шаблон для передечи состояния описываемого свойства в топик <code>outTopic</code>. В случае отсутствия этого параметра данные будут опубликованы без изменений. Подробнее в разделе [[Custom/Database/Bindings#Шаблоны|шаблоны]]. |
|
| |
|
| == Шаблоны ==
| | [[Category:Modbus]] |
| Шаблон это простая строка, которая может содержать части текста, обернутые двойными фигурными скобками <code><nowiki>{{ ... }}</nowiki></code>. Эти части теста будут автоматически заменяться на значение, зависящее от набора элементов шаблона.
| |
| | |
| {{Warning|Парсер шаблонов находит элементы, разделяя исходную строку по пробелам, поэтому, при составлении шаблонов, необходимо обосабливать каждый элемент пробелами, если он не находится в начале или в конце строки.}}
| |
| | |
| === <code>json</code> ===
| |
| Этот элемент шаблона применим к случаям, когда устройство публикует свое состояние в виде JSON-объекта, и позволяет получать из этого объекта необходимые параметры. Примеры использования элемента приведены ниже.
| |
| | |
| Получение параметра <code>pressure</code>:
| |
| {{#tag:pre|<nowiki>{{ json.pressure }}</nowiki>}}
| |
| | |
| Получение параметра из объекта, вложенного в массив:
| |
| {{#tag:pre|<nowiki>{{ json.values[2].status }}</nowiki>}}
| |
| | |
| Получение параметра c ключом, содержащим пробелы:
| |
| {{#tag:pre|<nowiki>{{ 'json.some key with spaces' }}</nowiki>}}
| |
| | |
| === <code>value</code> ===
| |
| Этот элемент шаблона применим к случаям, когда необходимо передать на устройство значение свойства, вложив его некую текстовую конструкцию, например, в JSON-объект. Пример использования элемента:
| |
| {{#tag:pre|<nowiki>{\"setStatus\":\"{{ value }}\"}</nowiki>}}
| |
| | |
| === <code>if/else</code> ===
| |
| Этот элемент шаблона является условным и его итоговое значение зависит от других элементов. Элемент поддерживает следующие условные операторы:
| |
| * <code class="value">is defined</code> (левая часть выражения не является пустой)
| |
| * <code class="value">is undefined</code> (левая часть выражения является пустой)
| |
| * <code class="value">==</code> (левая часть выражения равна правой части)
| |
| * <code class="value">!=</code> (левая часть выражения не равна правой части)
| |
| * <code class="value">></code> (левая часть выражения больше правой части)
| |
| * <code class="value">>=</code> (левая часть выражения больше или равна правой части)
| |
| * <code class="value"><</code> (левая часть выражения меньше правой части)
| |
| * <code class="value"><=</code> (левая часть выражения меньше или равна правой части)
| |
| | |
| {{Warning|Условные операторы <code>></code>, <code><nowiki>>=</nowiki></code>, <code><</code> и <code><nowiki><=</nowiki></code> применимы только к числовым значениям, в противном случае результат может оказаться непредсказуемым.}}
| |
| | |
| Примеры использования:
| |
| {{#tag:pre|<nowiki>
| |
| {{ json.value if json.value is defined else NULL }}
| |
| {{ on if json.status == true else off }}
| |
| {{ false if value <= 20 else true }}
| |
| </nowiki>}}
| |
| | |
| В случае, если сравниваемые или итоговые значения содержат пробелы, они ''должны'' быть обернуты в одинарные кавычки:
| |
| {{#tag:pre|<nowiki>{{ 'some value' if json.value == 'few words string' else 'other result' }}</nowiki>}}
| |
| | |
| Данный элемент так же может быть рекурсивным, что позволяет проверить несколько условий сразу:
| |
| {{#tag:pre|<nowiki>{{ 1 if value == 2 else 3 if value != 4 else 5 }}</nowiki>}}
| |
| | |
| == Математические выражения ==
| |
| Помимо описанных выше элементов, в шаблонах так же могут быть применены математические выражения. В этом случае соответсвующая часть текста будет заменена числовым результатом вычислений. Например:
| |
| {{#tag:pre|<nowiki>
| |
| {{ value * 4.815162342 }}
| |
| {{ ( value + 2 ) / 10 }}
| |
| </nowiki>}}
| |
| | |
| В случае, если необходимо использовать математическоие выражения совместно другими элементами шаблонов, каждый элемент ''должен'' быть обернут в собственные двойные фигурные скобки. Например:
| |
| {{#tag:pre|<nowiki>
| |
| {{ true if {{ value * 10 }} < 50 else false }}
| |
| {{ json.number * {{ 10 if json.number > 20 else 100 }}}}
| |
| {{ round( value ) }}
| |
| </nowiki>}}
| |
| | |
| Список досутпных функций можно посмотреть [https://github.com/u236/homed-service-common/blob/master/parser.cpp#L95-L120 здесь].
| |
| | |
| == Экранирование ==
| |
| В случае, когда нужно использовать элементы шаблона в качестве простого текста, их необходимо экранировать двумя обратными слэшами, например:
| |
| {{#tag:pre|<nowiki>{{ json.value if json.value is defined else '\\json.value is undefined' }}</nowiki>}}
| |
| | |
| | |
| [[Category:Custom]] | |
HOMEd >
Modbus >
База данных > Карта регистров
Общие сведения
Биндинги позволяют связывать сторонние MQTT-топики и их данные с устройством HOMEd Custom. Биндинги описываются как JSON-обект, ключами которого являются имена описываемых свойств. Структура описания биндингов выглядит так:
{
...
"real": true,
"exposes": ["switch", "temperature"],
"bindings":
{
"status":
{
"inTopic": "switch/status/topic",
"inPattern": "{{ on if json.switch == true else off }}",
"outTopic": "switch/command/topic",
"outPattern": "{\"switch\":{{ true if value == on else false }}}"
},
"temperature":
{
"inTopic": "temperature/status/topic",
"inPattern": "{{ json.temperature }}"
}
}
...
}
Биндинги работают только в случае, когда в настройках устройства включен параметр real.
Параметры регистров
inTopic
MQTT-топик, в который устройство публикует состояние описываемого свойства. Является обязательным в случае, если отсутствует параметр outTopic.
inPattern
Шаблон для получения состояния описываемого свойства из топика inTopic. В случае отсутствия этого параметра, данные будут использованы без изменений. Подробнее в разделе шаблоны.
outTopic
MQTT-топик, который необходимо опубликовать для изменения состояния описываемого свойства. Является обязательным в случае, если отсутствует параметр inTopic.
outPattern
Шаблон для передечи состояния описываемого свойства в топик outTopic. В случае отсутствия этого параметра данные будут опубликованы без изменений. Подробнее в разделе шаблоны.