Сцена LUA, которая определяет количество нажатий кнопки. Чтобы перехватить событие push, необходимо добавить идентификатор устройства , за которым следует заголовок сценария CentralSceneEvent LUA . Идентификатор моего устройства 194 , поэтому заголовок выглядит так:194.
--[[
%% properties
%% events
194 CentralSceneEvent
%% globals
--]]
if (pressCount == "Pressed") then
— BEGIN 1x pressed
fibaro:debug("Button 1x pressed.")
elseif (pressCount == "Pressed2") then
— BEGIN 2x pressed
fibaro:debug("Button 2x pressed.")
elseif (pressCount == "Pressed3") then
— BEGIN 3x pressed
fibaro:debug("Button 3x pressed.")
elseif (pressCount == "Pressed4") then
— BEGIN 4x pressed
fibaro:debug("Button 4x pressed.")
elseif (pressCount == "Pressed5") then
— BEGIN 5x pressed
fibaro:debug("Button 5x pressed.")
elseif (pressCount == "HeldDown") then
— Held down
fibaro:debug("Button held down.")
elseif (pressCount == "Released") then
— Released
fibaro:debug("Button released.")
else
fibaro:debug("Error: unknown event data received!")
end
Когда кнопка нажата, запускается сценарий LUA, и вам нужно перехватить данные события , чтобы определить, сколько раз была нажата кнопка:
local buttonData = fibaro:getSourceTrigger()["event"]["data"]
local pressCount = tostring(buttonData["keyAttribute"])
В LUA отсутствует оператор переключения, поэтому используется if/elseif процедуру, чтобы определить, сколько раз нажимается кнопка для запуска нужного кода:
if (pressCount == "Pressed") then
— BEGIN 1x pressed
fibaro:debug("Button 1x pressed.")
elseif (pressCount == "Pressed2") then
— BEGIN 2x pressed
fibaro:debug("Button 2x pressed.")
elseif (pressCount == "Pressed3") then
— BEGIN 3x pressed
fibaro:debug("Button 3x pressed.")
elseif (pressCount == "Pressed4") then
— BEGIN 4x pressed
fibaro:debug("Button 4x pressed.")
elseif (pressCount == "Pressed5") then
— BEGIN 5x pressed
fibaro:debug("Button 5x pressed.")
elseif (pressCount == "HeldDown") then
— Held down
fibaro:debug("Button held down.")
elseif (pressCount == "Released") then
— Released
fibaro:debug("Button released.")
else
fibaro:debug("Error: unknown event data received!")
end
В приведенных ниже примерах описываются некоторые простые действия, которые можно использовать в шаблоне сцены LUA для кнопки Fibaro. Вы можете легко изменить идентификатор устройства в примерах и добавить код в блок if.
Пример 1. Включить/выключить свет.
Простой пример включения/выключения света. Если свет горит, он гаснет и наоборот:
local lightbulbId = 126
local lightbulb = tonumber(fibaro:getValue(lightbulbId, "value"))
if (lightbulb > 0) then
fibaro:debug("Switch lightbulb off...")
fibaro:call(lightbulbId, "turnOff")
else
fibaro:debug("Switch lightbulb on...")
fibaro:call(lightbulbId, "turnOn")
end
Пример 2. Запустить разные световые сцену "До" и "После" 19:00.
Например нужно запускать световую сцену, когда я дважды нажимаем кнопку, но при этом, чтобы она запускалась сцена "Run Cooking and Eating scene..." до 19:00 и запускала сцену "Run Relaxed Evening scene..." после 19:00:
local currentHour = tonumber(os.date("%H%M"))
if currentHour > 0400 and currentHour < 1900 then
fibaro:debug("Run Cooking and Eating scene...")
local cookEatSceneId = 23
if fibaro:countScenes(cookEatSceneId) < 1 then
fibaro:startScene(cookEatSceneId)
else
fibaro:debug("Error: The Cooking and Eating scene is already running!")
end
else
fibaro:debug("Run Relaxed Evening scene...")
local relaxSceneId = 19
if fibaro:countScenes(relaxSceneId) < 1 then
fibaro:startScene(relaxSceneId)
else
fibaro:debug("Error: The Relaxed Evening scene is already running!")
end
end
С помощью этой fibaro:startScene(<id>) функции вы можете запустить сцену из другой сцены LUA. Если вы определите свои световые сцены в отдельных блоках или сценах LUA и вызовете их с помощью этой функции, вы сможете легко изменить сцену без необходимости редактировать множество разных сцен с одним и тем же фрагментом кода.
Например, сцена Cooking and Eating scene с идентификатором 23 выглядит так:
--[[
%% properties
%% events
%% globals
--]]
fibaro:call(20, "setValue", "10") — Dim wardrobe spots to 10%
fibaro:call(21, "turnOn") — Turn on garden lights
fibaro:call(30, "changeHue", "5021") — Change hue Philips Hue ledstrip on stairwell
fibaro:call(30, "changeSaturation", "199") — Change saturation Philips Hue ledstrip on stairwell
fibaro:call(30, "changeBrightness", "114") — Change brightness Philips Hue ledstrip on stairwell
fibaro:call(30, "turnOn") — Turn on Philips Hue ledstrip on stairwell
fibaro:call(22, "setValue", "25") — Dim kitchen spots to 25%
fibaro:call(23, "setValue", "10") — Dim table lights to 10%
fibaro:call(24, "turnOn") — Turn on desk lamp
fibaro:call(25, "setValue", "30") — Dim window spots to 15%
fibaro:call(26, "turnOn") — Turn on monkey lamp
И вы запускаете его из другой сцены LUA, например:
local cookEatSceneId = 23
if fibaro:countScenes(cookEatSceneId) < 1 then
fibaro:startScene(cookEatSceneId)
else
fibaro:debug("Error: The Cooking and Eating scene is already running!")
end
Обратите внимание: сначала проверяется, запущена ли уже сцена с этой fibaro:countScenes(<id>) функцией.
Примечание: идея не моя это просто перевод с какой то страницы