Automation: Шаблоны
Шаблоны позволяют использовать свойства устройств, данные из MQTT-топиков, состояния и другие данные в некоторых условиях и действиях автоматизаций. Примеры шаблонов приведены ниже.
Показания датчика температуры:
{{ property | zigbee/kitchenThermometer | temperature }}
Полчение имени устройства:
{{ property | zigbee/12:0e:32:44:ac:ef:41:e8 | deviceName }}
MQTT-сообщение целиком:
{{ mqtt | test/topic }}
Поле fieldName из JSON-объекта в MQTT-сообщении:
{{ mqtt | test/json/topic | fieldName }}
Данные из сложного JSON-объекта в MQTT-сообщении:
{{ mqtt | other/json | device.features[1].name }}
Содержимое файла /home/user/file:
{{ file | /home/user/file }}
Значение состояния myState:
{{ state | myState }}
Текущая метка времени Unix Time:
{{ timestamp }}
Текущее время и дата в заданном формате:
{{ timestamp | dd.MM.yy hh:mm }}
Вывод последнего выполненного действия shell:
{{ shellOutput }}
Имя триггера, вызвавшего срабатывание автоматизации:
{{ triggerName }}
Значение свойства триггера property, вызвавшего срабатывание автоматизации:
{{ triggerProperty }}
Топик триггера mqtt, вызвавшего срабатывание автоматизации:
{{ triggerTopic }}
Первая часть топика триггера mqtt, вызвавшего срабатывание автоматизации:
{{ triggerTopic | 0 }}
Текст сообщения из топика триггера mqtt, вызвавшего срабатывание автоматизации:
{{ triggerMessage }}
Значение поля power в JSON-объекте из топика триггера mqtt, вызвавшего срабатывание автоматизации:
{{ triggerMessage | power }}
Адаптивное освещение
Адаптивное освещение это функция, позволяющая автоматически подстраивать цветовую температуру источников света в зависимости от времени суток. Для этого можно использовать шаблон colorTemperature в связке с триггером interval. Шаблон будет возвращать значение цветовой температуры из заданного диапазона. В случае, если диапазон не указан, будут использованы значения по умолчанию, от 153 до 500 майредов.
Пример использования шаблона:
{{ colorTemperature | 250 | 480 }}
Для корректной работы функции необходимо, чтобы в конфигурации были указаны координаты местоположения, по ним вычисляется актуальное положение солнца для конкретной местности.
Математические выражения
Помимо прочего, шаблоны могут содержать математические выражения. Каждое выражение может содержать любые математические операции (сложение, вычитание, умножение, деление, возведение в степень), включая операции в скобках, некоторые функции, а также любые другие шаблоны. Если выражение некорректно, результатом вычислений будет nan. Список доступных функций можно посмотреть здесь.
Примеры:
[[ sqrt(2 ^ 2) ]]
[[ min({{ mqtt | question }}, 42) ]]
[[ {{ state | counter }} + 1 ]]
[[ {{ property | zigbee/sensor | temperature }} * 0.99 ]]
Вложенные шаблоны
В каждом условии или действии может быть использовано любое количество шаблонов и математических операций. Кроме того, шаблоны могут быть вложены друг в друга, например:
{{ property | zigbee/myFavoriteSensor | {{ triggerName }} }}
Единственным исключением для вложенных шаблонов является значение топика для шаблона mqtt, топик должен быть константой, иначе сервис не сможет на него подписаться.
Условный шаблон if/else
Итоговое значение этого шаблона зависит от результатов сравнения его составляющих элементов.
Шаблон поддерживает следующие условные операторы:
| Оператор | Описание |
|---|---|
is defined |
левая часть выражения не является пустой |
is undefined |
левая часть выражения является пустой |
== |
левая часть выражения равна правой части |
!= |
левая часть выражения не равна правой части |
> |
левая часть выражения больше правой части |
>= |
левая часть выражения больше или равна правой части |
< |
левая часть выражения меньше правой части |
<= |
левая часть выражения меньше или равна правой части |
Условные операторы >, >=, < и <= применимы только к числовым значениям, в противном случае результат сравнения может оказаться непредсказуемым.
Примеры использования:
{{ открыто if {{ property | zigbee/doorSensor | contact }} == true else закрыто }}
{{ тепло if {{ property | zigbee/climateSensor | temperature }} >= 18 else холодно }}
В случае, если сравниваемые или итоговые значения содержат пробелы, они должны быть обернуты в одинарные кавычки:
{{ 'some result' if {{ triggerName }} ## 'two words' else 'other value' }}
Данный шаблон также может быть использован рекурсивно, что позволяет проверить несколько условий сразу:
{{ a if b > c else d if e < f else g }}