SLS шлюз. Автоматизация. Пишем управление устройствами.

Продолжаю цикл статей про настройку SLS шлюза. Сегодня научимся управлять различными устройствами, не достаточно просто привязать к шлюзу zigbee устройства, надо ещё и настроить чтобы выключатели включали и выключали свет, поднимали о отпускали рольставни и т.п. Для управления логикой шлюза есть несколько способов, сценарии и правила SimpleBind.  С сценариями я не разбирался, а SimpleBind немного заморочный в плане программирования из-за того что надо для каждого объекта прописывать туда правила, а хотелось бы всё в одном месте как в сценариях, да ещё и с функциями. Поэтому автоматизации я пишу на lua.

Для того чтобы автоматизация работала с помощью lua скрипта необходимо создать сам файл скрипта а так же прописать правило в SimpleBind для каждого устройства данные с которого надо обрабатывать, в основном это выключатели и различные датчики, можно все обработки делать в одном файле. Создадим файл btn.lua и пропишем в каждом устройстве у свойства которое будем мониторить выполнение этого скрипта. На снимке экрана пример запуска lua скрипта у выключателя

при получении значения actipn будет вызываться скрипт btn.lua

теперь все автоматизации мы будем делать в одном месте и это место: файл btn.lua

для получение значений устройства которое вызвало скрипт достаточно две строки:

local name=Event.FriendlyName -- имя выключателя который нажат
local btn=zigbee.value(tostring(Event.ieeeAddr), "action") -- событие кнопки

для того чтобы послать команду например реле надо написать команду

zigbee.set("Relay01", "state_l1", "TOGGLE")

этот код переключит у реле с френдли именем «Relay01» канал «state_l1»

теперь нам надо разными кнопками включать выключать разные устройства, делаем обработку с помощью if

local name=Event.FriendlyName
local btn=zigbee.value(tostring(Event.ieeeAddr), "action")
if (name=="Button01" and btn=="single_left") then
  zigbee.set("Relay01", "state_l1", "TOGGLE")
end
if (name=="Button01" and btn=="single_right") then
  zigbee.set("Relay01", "state_l2", "TOGGLE")
end

и для всех выключателей и всех вариантов нажатий кнопок просто копипастим и вставляем меняя названия. Но когда я написал обработку 10 клавиш для меня это не показалось слишком простым, особенно когда мне надо было поменять клавиши и я вспомнил про функции. Создаем отдельный файл с нашими функциями с именем myfunction.lua скопировав туда данные из файла.

подключается данный файл в любой файл скрипта строкой

dofile("/int/myfunction.lua")

теперь мы можем использовать наши функции и вышеприведенный код будет выглядеть так:

dofile("/int/myfunction.lua")
relay("Button01", "single_left",  "Switch", "Relay01", "TOGGLE", "state_l1")
relay("Button01", "single_right", "Switch", "Relay01", "TOGGLE", "state_l2")

куда приятнее на взор запись, а делает тоже самое что и запись выше.

В приложенном файле функций есть комментарии по синтаксису, используются 2 функции: relay() и dimmer(). в файле myfunction.lua имеются ещё функции Curtain_up(), Curtain_down() и Curtain_revers() но они используются в функции relay()

Параметры функции relay()

relay (btn_name, btn_state, type, obj_name, obj_status, obj_state)

btn_name — Имя выключателя, датчика события с которого обрабатывается
btn_state — статус команды выключателя или датчика (single, double, true …)
type — тип устройства которое управляется (Switch — переключатель, Curtain — рольставни)
obj_name — имя устройства которым управлять
obj_status — статус свойства устройства которым управлять(для Curtain — UP, DOWN, TOGGLE, для реле, диммеров и т.п. ON, OFF, TOGGLE и т.п.)
obj_state — имя свойства устройства которым управлять(для Curtain не используется)

Параметры функции dimmer()

для управления димером (включение на заданную яркость/выключение)
btn_name — Имя выключателя, датчика события с которого обрабатывается
btn_state — статус команды выключателя или датчика (single, double, true …)
obj_name — имя димера которым управлять
obj_status — номер канала (для state_l1 должно быть «_l1», для state должно быть «»)
obj_state — значение димера

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

dimmer("Button01", "double_left", "Dimmer01", "_l1", 100)

Таким образом у нас получился красивый и удобный код, вот код на существующем объекте

dofile("/int/myfunction.lua") -- подключаем файл с функциями

relay("Button01", "left",         "Switch",  "Dimmer11",  "TOGGLE", "state_l2")
relay("Button01", "right",        "Switch",  "Dimmer11",  "TOGGLE", "state_l1")
relay("Button01", "left_double",  "Curtain", "Curtain06", "UP")
relay("Button01", "right_double", "Curtain", "Curtain06", "DOWN")
relay("Button01", "left_long",    "Curtain", "Curtain05", "UP")
relay("Button01", "right_long",   "Curtain", "Curtain05", "DOWN")

relay("Button02", "left",         "Switch",  "Dimmer01",  "TOGGLE", "state_l2")
relay("Button02", "right",        "Switch",  "Dimmer01",  "TOGGLE", "state_l1")
relay("Button02", "left_double",  "Curtain", "Curtain03", "UP")
relay("Button02", "right_double", "Curtain", "Curtain03", "DOWN")
relay("Button02", "left_long",    "Curtain", "Curtain04", "UP")
relay("Button02", "right_long",   "Curtain", "Curtain04", "DOWN")

relay("Button03", "left",         "Switch",  "Dimmer04",  "TOGGLE", "state_l1")
relay("Button03", "right",        "Switch",  "Dimmer04",  "TOGGLE", "state_l2")
relay("Button03", "left_double",  "Curtain", "Curtain01", "UP")
relay("Button03", "right_double", "Curtain", "Curtain01", "DOWN")
relay("Button03", "left_long",    "Switch",  "Dimmer05",  "TOGGLE", "state_l1")
relay("Button03", "right_long",   "Switch",  "Dimmer05",  "TOGGLE", "state_l2")

relay("Button04", "left",         "Switch",  "Dimmer02",  "TOGGLE", "state_l2")
relay("Button04", "right",        "Switch",  "Dimmer02",  "TOGGLE", "state_l1")

relay("Button05", "left",         "Switch",  "Rele02",    "TOGGLE", "state_l1")
relay("Button05", "right",        "Switch",  "Dimmer10",  "TOGGLE", "state_l1")

relay("Button06", "left",         "Switch",  "Dimmer03",  "TOGGLE", "state_l2")
relay("Button06", "right",        "Switch",  "Dimmer03",  "TOGGLE", "state_l1")
relay("Button06", "left_double",  "Curtain", "Curtain02", "UP")
relay("Button06", "right_double", "Curtain", "Curtain02", "DOWN")

relay("Button07", "left",         "Switch",  "Dimmer09",  "TOGGLE", "state_l1")
relay("Button07", "right",        "Switch",  "Dimmer06",  "TOGGLE", "state_l1")

relay("Button08", "left",         "Switch",  "Rele03",    "TOGGLE", "state_l1")
relay("Button08", "right",        "Switch",  "Dimmer06",  "TOGGLE", "state_l2")

relay("Button09", "left",         "Switch",  "Dimmer05",  "TOGGLE", "state_l1")
relay("Button09", "right",        "Switch",  "Dimmer05",  "TOGGLE", "state_l2")
relay("Button09", "left_double",  "Curtain", "Curtain01", "UP")
relay("Button09", "right_double", "Curtain", "Curtain01", "DOWN")
relay("Button09", "left_long",    "Switch",  "Dimmer04",  "TOGGLE", "state_l1")
relay("Button09", "right_long",   "Switch",  "Dimmer04",  "TOGGLE", "state_l2")

relay("Button10", "left",         "Switch",  "Dimmer08",  "TOGGLE", "state_l1")
relay("Button10", "right",        "Switch",  "Dimmer08",  "TOGGLE", "state_l2")

relay("Button12", "single",       "Switch",  "Dimmer08",  "TOGGLE", "state_l1")
relay("Button13", "single",       "Switch",  "Dimmer08",  "TOGGLE", "state_l2")

 

SLS шлюз. Автоматизация. Пишем управление устройствами.

Навигация по записям