Система сценарий позволяет сконфигурировать логику автоматизаций в шлюзе без написания скриптов.
Базовая поддержка появилась в версии 2021.11.21d7.
На первоначальном этапе создание сценариев возможно ручным созданием файла сценариев.
В дальнейшем будет разработан удобный веб интерфейс где можно легко и быстро создавать сценарии.
Сценарии хранятся в формате json в файле scenes.json
Для загрузки сценариев необходимо добавить в init.lua, добавил scenes.begin().
Это необходимо на этапе бета-тестирования системы, в последующем надобность в этом вызове отпадет и система будет загружаться автоматически.
Система сценариев наблюдает за событиями системы и позволяет реагировать на них действиями.
Условия (триггеры) задаются в блоке if.
Действия (экшены) задаются в блоке then.
Возможно существование нескольких условия и действий.
Каждое условие и действие имеет свой тип и параметры.
-
Событие изменение состояния Zigbee устройства
Параметры: FriendlyName, StateName, Rule, StateValue
-
Событие изменение объекта (Пока не реализовано)
Параметры: ObjName, Rule, ObjValue
-
Событие наступления времени (Пока не реализовано)
-
Событие изменение входа IO (Пока не реализовано)
-
Изменение состояния Zigbee устройства
Параметры: FriendlyName, StateName, Rule, StateValue
-
Изменение объекта
Параметры: ObjName, Rule, ObjValue
-
Управление выходами IO (Пока не реализовано)
-
Отправка уведомлений в Telegram (Пока не реализовано)
-
Запуск Lua кода (Пока не реализовано)
-
Включение/выключение сценария (Пока не реализовано)
-
Запуск таймера (Пока не реализовано)
-
Правила для условий: >,<,=,==, ,>=,<=,!=,!,<>
-
Правила для действий: =
В дальнейшем можно будет использовать + и - для прибавления и убавления значения
В дальнейшем можно будет использовать несколько условий и объединять их логическими операндами.
В дальнейшем можно будет включать и выключать сценарии
[
{
"desc": "Set 10 brigtness",
"if": [{"t":1, "p": ["room_sw1", "action", "=", "single_left"]}],
"then": [{"t": 1, "p": ["room_light", "brightness", "=", "10"]}]
},
{
"desc": "Light off when Obj test_obj is false and Obj test_enable is true",
"if": [
{"t":2,"p":["test_obj", "=", "false"],"lo":0},
{"t":2,"p":["test_enable", "=", "true"]}
],
"then": [{"t": 1, "p": ["room_light", "state", "", "off"]}]
}
]