Custom/Database/Bindings: различия между версиями

Материал из HOMEd Wiki
Строка 60: Строка 60:


=== <code>if/else</code> ===
=== <code>if/else</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> (левая часть выражения больше или равна правой части)
* <code class="value"><</code> (левая часть выражения меньше правой части)
* <code class="value"><=</code> (левая часть выражения меньше или равна правой части)


Условный оператор равенства:
Все условные операторы, кроме <code class="value">==</code> и <code class="value">!=</code>, применимы только к числовым значениям, в противном случае результат может не совпасть с ожиданиями. Примеры использования элемента приведены ниже.
{{#tag:pre|<nowiki>{{ on if json.status == true else off }}</nowiki>}}


Условный оператор неравенства:
{{#tag:pre|<nowiki>
{{#tag:pre|<nowiki>{{ false if value != on else true }}</nowiki>}}
{{ on if json.status == true else off }}
{{ false if value <= 20 else true }}
</nowiki>}}


В случае, если сравниваемые или итоговые значения содержат пробелы, они ''должны'' быть обернуты в одинарные кавычки:
В случае, если сравниваемые или итоговые значения содержат пробелы, они ''должны'' быть обернуты в одинарные кавычки:

Версия от 09:37, 12 февраля 2025

HOMEd > Custom > База данных > Биндинги

Общие сведения

Биндинги позволяют связывать сторонние 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",
       "inPattern": "{\"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

Этот элемент шаблона является условным и его итоговое значение зависит от других элементов. Элемент поддерживает следующие условные операторы:

  • == (левая часть выражения равна правой части)
  • != (левая часть выражения не равна правой части)
  • > (левая часть выражения больше правой части)
  • >= (левая часть выражения больше или равна правой части)
  • < (левая часть выражения меньше правой части)
  • <= (левая часть выражения меньше или равна правой части)

Все условные операторы, кроме == и !=, применимы только к числовым значениям, в противном случае результат может не совпасть с ожиданиями. Примеры использования элемента приведены ниже.

{{ 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 }}