Общие сведения
Биндинги позволяют связывать сторонние MQTT-топики и их данные с устройством HOMEd Custom. Биндинги описываются как JSON-обект, ключами которого являются имена описываемых свойств. Структура описания биндингов выглядит так:
{
...
"real": true,
"exposes": ["status", "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
Топик, в который устройство публикует состояние описываемого свойства. Является обязательным в случае, если отсутствует параметр outTopic
.
inPattern
Шаблон для получения состояния описываемого свойства из топика inTopic
. В случае отсутствия этого параметра, данные будут использованы без изменений. Подробнее в разделе шаблоны.
outTopic
Топик, который необходимо опубликовать для изменения состояния описываемого свойства. Является обязательным в случае, если отсутствует параметр inTopic
.
outPattern
Шаблон для передечи состояния описываемого свойства в топик outTopic
. В случае отсутствия этого параметра данные будут опубликованы без изменений. Подробнее в разделе шаблоны.
Шаблоны
Шаблон это простая строка, которая может содержать части текста, обернутые двойными фигурными скобками {{ ... }}
. Эти части теста будут автоматически заменяется на значение, зависящее от набора элементов шаблона.
json
Этот элемент шаблона применим к случаям, когда устройство публикует свое состояние в виде JSON-объекта, и позволяет получать из этого объекта необходимые параметры. Примеры использования элемента приведены ниже.
Получение параметра pressure
:
{{ json.pressure }}
Получение параметра из объекта, вложенного в массив:
{{ json.values[2].status }}
value
Этот элемент шаблона применим к случаям, когда необходимо передать на устройство значение свойства, вложив его некую текстовую конструкцию, например, в JSON-объект. Пример использования элемента:
{\"setStatus\":\"{{ value }}\"}
if/else
Этот элемент шаблона является условным и его итоговое значение зависит от других элементов. Элемент поддерживает следующие условные операторы:
is defined
(левая часть выражения не является пустой)is undefined
(левая часть выражения является пустой)==
(левая часть выражения равна правой части)!=
(левая часть выражения не равна правой части)>
(левая часть выражения больше правой части)>=
(левая часть выражения больше или равна правой части)<
(левая часть выражения меньше правой части)<=
(левая часть выражения меньше или равна правой части)
{{Warning Условные операторы >
, >=
, <
и <=
применимы только к числовым значениям, в противном случае результат может оказаться непредсказуемым.}}
Примеры использования:
{{ json.status if json.status is defined else false }} {{ on if json.status == true else off }} {{ false if value <= 20 else true }}
В случае, если сравниваемые или итоговые значения содержат пробелы, они должны быть обернуты в одинарные кавычки:
{{ 'some value' if json.value == 'few words string' else 'other result' }}
Данный элемент так же может быть рекурсивным, что позволяет проверить несколько условий сразу:
{{ 1 if value == 2 else 3 if value != 4 else 5 }}
Математические выражения
Помимо описанных выше элементов, в шаблонах так же могут быть применены математические выражения. В этом случае соответсвующая часть текста будет заменена числовым результатом вычислений. Примеры выражений:
{{ value * 4.815162342 }} {{ (value + 10) / 2 }} {{ sqrt(json.value) }}
В случае, если необходимо использовать математическоие выражения совместно с элементом if/else
, каждый элемент должен быть обернут в собственные двойные фигурные скобки. Например:
{{ true if {{ value * 10 }} < 50 else false }} {{ json.number * {{ 10 if json.number > 20 else 100 }}}}
Список досутпных функций можно посмотреть здесь.