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

Материал из HOMEd Wiki
 
(не показано 20 промежуточных версий этого же участника)
Строка 47: Строка 47:


=== <code>value</code> ===
=== <code>value</code> ===
Конкретное значение свойства, передаваемое в команде. Текстовое значение состояния может содержать [[Automation/Database/Actions#Шаблоны|шаблоны]].
Конкретное значение свойства, передаваемое в команде (может содержать [[Automation/Templates|шаблоны]]).


== Действие "mqtt" ==
== Действие "mqtt" ==
Строка 74: Строка 74:


=== <code>message</code> ===
=== <code>message</code> ===
Текст отправляемого сообщения. Сообщение может содержать [[Automation/Database/Actions#Шаблоны|шаблоны]].
Текст отправляемого сообщения (может содержать [[Automation/Templates|шаблоны]]).


=== <code>retain</code> ===
=== <code>retain</code> ===
Строка 107: Строка 107:


=== <code>value</code> ===
=== <code>value</code> ===
Значение состояния, устанавливаемое действием. Текстовое значение состояния может содержать [[Automation/Database/Actions#Шаблоны|шаблоны]]. Если это поле остутствует или равно <code class="value">null</code>, состояние будет удалено.
Значение состояния, устанавливаемое действием (может содержать [[Automation/Templates|шаблоны]]). Если это поле остутствует или равно <code class="value">null</code>, состояние будет удалено.


== Действие "telegram" ==
== Действие "telegram" ==
Строка 130: Строка 130:


=== <code>message</code> ===
=== <code>message</code> ===
Текст отправляемого сообщения. Сообщение может содержать [[Automation/Database/Actions#Шаблоны|шаблоны]].
Текст отправляемого сообщения (может содержать [[Automation/Templates|шаблоны]]).


=== <code>silent</code> ===
=== <code>silent</code> ===
Строка 153: Строка 153:


=== <code>command</code> ===
=== <code>command</code> ===
Shell-команда, которая будет запущена. Команда может содержать [[Automation/Database/Actions#Шаблоны|шаблоны]].
Shell-команда, которая будет запущена (может содержать [[Automation/Templates|шаблоны]]). Команда может быть полноценным shell-скриптом, начинающимся с заголовка <code class "value">"#!"</code>, в этом случае так же допустимо использование шаблонов.


== Действие "condition" ==
== Действие "condition" ==
Строка 238: Строка 238:
...
...
</syntaxhighlight>
</syntaxhighlight>
== Шаблоны ==
Шаблоны позволяют использовать в действиях свойства устройств, данные из MQTT-топиков, состояния, метки времени и имена триггеров. Примеры использования шаблонов приведены ниже.
Показания датчика температуры:
{{#tag:pre|<nowiki>{{ property | zigbee/kitchenThermometer | temperature }}</nowiki>}}
MQTT-сообщение целиком:
{{#tag:pre|<nowiki>{{ mqtt | test/topic }}</nowiki>}}
Поле <code>fieldName</code> из MQTT-сообщения, содержащего  JSON:
{{#tag:pre|<nowiki>{{ mqtt | test/json/topic | fieldName }}</nowiki>}}
Значение состояния <code>myState</code>:
{{#tag:pre|<nowiki>{{ state | myState }}</nowiki>}}
Текущеая метка времени (unixtime):
{{#tag:pre|<nowiki>{{ timestamp }}</nowiki>}}
Текущее время и дата в заданном формате:
{{#tag:pre|<nowiki>{{ timestamp | dd.MM.yy hh:mm }}</nowiki>}}
Имя триггера, вызвавшего срабатывание автоматизации:
{{#tag:pre|<nowiki>{{ triggerName }}</nowiki>}}
Кроме того, шаблоны могут содержать математические выражения. Каждое выражение может содержать любые математические операции (сложение, вычитание, умножение, деление, возведение в степень), включая операции в скобках, некоторые функции, а так же любые другие шаблоны. Если выражение некорретно, результатом вычислений будет <code class="value">nan</code>. Список досутпных функций можно посмотреть [https://github.com/u236/homed-service-automation/blob/570f97ad640606624f24eff20606cf71ca2324ad/expression.cpp#L86-L107 здесь].
Примеры:
{{#tag:pre|<nowiki>
[[ sqrt(2 ^ 2) ]]
[[ {{ state | counter }} + 1 ]]
[[ {{ propery | zigbee/sensor | temperature }} * 0.99 ]]
</nowiki>}}
В одном действии может быть использовано любое количество шаблонов и математических операций.


[[Category:Automation]]
[[Category:Automation]]

Текущая версия от 12:38, 8 ноября 2024

HOMEd > Automation > База данных > Действия

Действие "property"

Это действие управляет выбранным свойством, то есть отправляет команду устройству. Примеры описания действия:

...
"actions":
[
  {
    "type": "property",
    "endpoint": "zigbee/kitchenLight",
    "property": "level",
    "increase": 10
  },
  {
    "type": "property",
    "endpoint": "zigbee/roomCurtain",
    "property": "position",
    "decrease": 25
  },
  {
    "type": "property",
    "endpoint": "zigbee/hallLight",
    "property": "status",
    "value": "off"
  }
]
...

Поля "increase", "decrease", "value" не могут использоваться в одном действии одновременно.

endpoint

Конечная точка, которой управляет действие. Описывается в формате "сервис/устройство" или "сервис/устройство/N", где N это номер конечной точки для многоканальных устройств.

По сути, значение этого поля идентично части MQTT-топика для отправки команд устройству после homed/td/.

property

Свойство конечной точки, которым управляет действие. Другими словами - название поля в сообщении с командой.

increase

В команде будет передано числовое значение свойства, увеличенное на значение этого поля.

decrease

В команде будет передано числовое значение свойства, уменьшенное на значение этого поля.

value

Конкретное значение свойства, передаваемое в команде (может содержать шаблоны).

Действие "mqtt"

Это действие отправляет сообщение в заданный MQTT-топик. Примеры описания действия:

...
"actions":
[
  {
    "type": "mqtt",
    "topic": "my/action/topic",
    "message": "hello world"
  },
  {
    "type": "mqtt",
    "topic": "other/topic",
    "message": "retained message",
    "retain": true
  }
]
...

topic

MQTT-топик.

message

Текст отправляемого сообщения (может содержать шаблоны).

retain

Отправка сообщения с флагом retain.

Действие "state"

Это действие позволяет устанавливать или удалять состояния. Примеры описания действий:

 
...
"actions":
[
  {
    "type": "state",
    "name": "myFavoriteState",
    "value": true
  },
  {
    "type": "state",
    "name": "otherState",
    "value": "hello there"
  },
  {
    "type": "state",
    "name": "uselessState"
  }
]
...

name

Название состояния.

value

Значение состояния, устанавливаемое действием (может содержать шаблоны). Если это поле остутствует или равно null, состояние будет удалено.

Действие "telegram"

Это действие отправляет текстовое сообщение с помощью Telegram-бота. Пример описания действия:

...
"actions":
[
  {
    "type": "telegram",
    "message": "свет в гараже выключен",
    "silent": true
  },
  {
    "type": "telegram",
    "message": "входная дверь открыта!",
    "chats": [123456789, 4815162342]
  }
]
...

message

Текст отправляемого сообщения (может содержать шаблоны).

silent

Отправка сообщения с уведомлением без звука.

chats

Массив идентификаторов чатов, в которые будет отправлено сообщение. В случае отсутствия этого поля сообщение будет отправлено в чат, идентификатор которого указан в конфигурации.

Действие "shell"

Это действие запускает заданную shell-команду. Пример описания действия:

...
"actions":
[
  {
    "type": "shell",
    "command": "sh /home/user/script.sh"
  }
]
...

command

Shell-команда, которая будет запущена (может содержать шаблоны). Команда может быть полноценным shell-скриптом, начинающимся с заголовка "#!", в этом случае так же допустимо использование шаблонов.

Действие "condition"

Это действие является контейнером для других действий, которые будут выполнены при соблюдении или несоблюдении заданных условий. Пример описания действия:

...
"actions":
[
  {
    "type": "condition",
    "conditions":
    [
       {
         "type": "date",
         ...
       },
       {
         "type": "time",
         ...
       }
    ],
    "then":
    [
       {
         "type": "property",
         ...
       }
    ],
    "else":
    [
       {
         "type": "telegram",
         ...
       }
    ]
  }
]
...

conditions

Массив условий.

then

Массив действий, которые будут выполнены, если условия соблюдены.

else

Массив действий, которые будут выполнены, если условия не соблюдены.

Действие "delay"

Это действие добавляет задержку перед выполнением следующего по списку действия. Пример описания действия:

...
"actions":
[
  {
    "type": "delay",
    "delay": 10
  }
]
...

delay

Время задержки в секундах.

Дополнительные условия

Условия для выполнения действий могут определяться не тольлько действием "condition", но и тем, какой именно триггер вызвал срабатывание автоматизации, если для триггеров заданы имена. В этом случае нужные действия будут выполнены только при срабатывании соответсвующего им триггера, например:

...
"actions":
[
  {
    "type": "property",
    "triggerName": "a",
    ...
  },
  {
    "type": "telegram",
    "triggerName": "b",
    ...
  }
]
...