SLS шлюз это пожалуй на сегодня самый оптимальны zigbee шлюз если нет желания разбираться с системами на raspberrypi и т.п. На сегодня поддерживает около 250 zigbee устройств разных производителей и новые устройства постоянно добавляются. На мой взгляд не так много статей по его настройке, да wiki имеется и достаточно не плохой, но на мой взгляд мало совсем для чайника. Я попытаюсь внести в это небольшой вклад. Я собрал свой SLS шлюз на базе корпуса от ночника фирмы EGLO с артиклем 92964, стандартная кнопка и 4 светодиода ws2812, вот всё что удалось поместить внутрь, именно про кнопку и светодиоды и пойдет речь. Настройки стандартные исторически сложились, я не стал что то менять, единственное надо задать количество светодиодов, в меню Settings — Hardware настройки кнопки и светодиодов
справа вверху нажимаем меню Actions — Files и редактируем файл init.lua (если нет то создаем файл с именем init.lua) и добавляем туда следующий код
require "io" -- подключаем модуль ввода-вывода
io.begin(false) -- если необходимо управление портами через mqtt то установить надо true
-- инициализация кнопки
io.addGPIOInput("input0", 33, gpio.INPUT_PULLUP, 2)
obj.setScript("io.input0.value", "btn_sw1.lua", true)
-- установка переменных для управления
obj.setOpt("led1y","INT",false)
obj.setOpt("led1e","INT",false)
obj.setOpt("led1r","INT",false)
obj.setOpt("led1g","INT",false)
obj.setOpt("led1b","INT",false)
obj.setOpt("led1c","INT",false)
obj.set("led1", "AUTO")
obj.set("led1y", 255)
obj.set("led1e", 0)
obj.set("led1r", 255)
obj.set("led1g", 255)
obj.set("led1b", 255)
obj.set("led1c", 0) -- цвет светодиода
-- установка статуса светодиода: автоматически
os.led("AUTO")
Далее создаем файл btn_sw1.lua который будет запускаться при нажатиях на кнопку и вставим туда следующий код
-- нажатие кнопки
if Event.Obj.Value == "single" then
-- однократное нажатие кнопки
if obj.get("led1") == "ON" then
obj.set("led1", "AUTO")
os.led("AUTO")
else
obj.set("led1", "ON")
effect = obj.get("led1e")
os.led("ON",obj.get("led1y"),obj.get("led1r"),obj.get("led1g"),obj.get("led1b"),effect)
end
elseif Event.Obj.Value == "double" then
-- двухкратное нажатие кнопки
if obj.get("led1") == "ON" then
bri = obj.get("led1y")
bri = bri + 20
if bri > 250 then
bri = 20
end
obj.set("led1y", bri)
os.led("ON",obj.get("led1y"),obj.get("led1r"),obj.get("led1g"),obj.get("led1b"),0)
end
elseif Event.Obj.Value == "triple" then
-- трехкратное нажатие кнопки
os.led("AUTO")
zigbee.join(250, "0x0000")
elseif Event.Obj.Value == "hold" then
-- долгое нажатие кнопки
effect = obj.get("led1e") + 1
if effect == 63 then
effect = 0
end
obj.set("led1e", effect)
os.led("ON",obj.get("led1y"),-1,-1,-1,effect)
elseif Event.Obj.Value == "quadruple" then
-- 4 нажатие кнопки
obj.set("led1e", 0)
os.led("ON",obj.get("led1y"),-1,-1,-1,0)
elseif Event.Obj.Value == "many_5" then
-- 5 нажатий кнопки
obj.set("led1e", 0)
color=obj.get("led1c") + 1
if color > 10 then
color = 0
end
obj.set("led1c", color )
if color == 0 then led = { r = 255, g = 255, b = 255}
elseif color == 1 then led = { r = 255, g = 0, b = 0}
elseif color == 2 then led = { r = 0, g = 255, b = 0}
elseif color == 3 then led = { r = 0, g = 0, b = 255}
elseif color == 4 then led = { r = 255, g = 0, b = 255}
elseif color == 5 then led = { r = 0, g = 255, b = 255}
elseif color == 6 then led = { r = 255, g = 255, b = 0}
elseif color == 7 then led = { r = 128, g = 128, b = 255}
elseif color == 8 then led = { r = 255, g = 128, b = 128}
elseif color == 9 then led = { r = 128, g = 255, b = 128}
else led = { r = 128, g = 0, b = 255}
end
obj.set("led1r", led.r)
obj.set("led1g", led.g)
obj.set("led1b", led.b)
os.led("ON",obj.get("led1y"),led.r,led.g,led.b,0)
else
return
end
[19:09:53.310] [D] ObjSet io.input0.value = many_34