В последних версиях прошивки SLS появилась поддержка автоматизаций на основе скриптового языка программирования lua. Редактор скриптов находится в меню Actions -> Scripts. Скриптовый stdout по команде print выводит информацию на экран страницы Scripts и в системный лог шлюза.
- Запуск скрипта при изменении состояния устройства. На вкладке Zigbee необходимо зайти в параметры устройства и в окне SimpleBind указать имя файла скрипта (префикс / необязателен).
- Запуск скрипта по времени. Ожидается.
- Запуск скрипта по подписке mqtt. Ожидается.
- Запуск скрипта при вызове http api. Ожидается.
Получение параметра устройства GetState("ieeard", "temperature")
-- Получаем значение температуры и округляем до целых
temp = GetState("0x00158D0001A2D2FE", "temperature")
temp = math.floor(temp)
print("Текущая температура: " .. temp .. " C°")
Вместо адреса устройства можно испрользовать FriendlyName (в том числе кириллицу), либо текущий адрес устройства в сети (0x9EC8).
-- Получаем значение температуры и округляем до целых
temp = GetState("датчик в комнате", "temperature")
temp = math.floor(temp)
print("Текущая температура: " .. temp .. " C°")
Установка значения устройства SetState(Ident, StateName, StateValue)
Пример скрипта, который при нажатии кнопки выключателя lumi.sensor_switch включает освещение lamp_1:
if GetState("lumi.sensor_switch", "click") == "single" then
-- toggle lamp
current_brightness = GetState("lamp_1", "brightness")
if current_brightness == 0 then
SetState("lamp_1", "brightness", 255)
else
SetState("lamp_1", "brightness", 0)
end
-- print current temperature
temp = GetState("lumi.weather", "temperature")
print("Current temperature: " .. temp)
end
Структура Event например позволяет использовать один и тот же скрипт для разных состояний или устройств.
Возможные варианты использования: Event.Name - Имя файла скрипта Event.nwkAddr - nwkAddr устройства, которое вызывало скрипт Event.ieeeAddr - ieeeAddr устройства, которое вызывало скрипт Event.FriendlyName - FriendlyName устройства, которое вызывало скрипт Event.State.Name - Имя состояния которое вызвало скрипт Event.State.Value - Новое значение состояния
Пример скрипта для включения света:
if Event.State.Value == "single" then value = 255 elseif Event.State.Value == "double" then value = 0 else return end
SetState("lamp_1", "brightness", value)