Корзина пуста

Обработка нажатий и активация сцен FIBARO KeyFob, Swipe, The Button, Single & Double Switch 2

Взаимодействовать с умным домом, находясь внутри него, через гаджет бывает не всегда удобно. Проще говоря, включить свет гораздо быстрее и проще, нажав кнопку на пульте, чем разблокировать телефон, зайти в приложение, выбрать нужную комнату и нужный светильник. Разберемся как это работает.

FIBARO KeyFob и брелок

Девайсы, обеспечивающие дополнительное взаимодействие с умным домом, появились в ассортименте продукции FIBARO не сразу. Но их необходимость была крайне насущной проблемой, поэтому в 2016 году появляется сначала панель управления жестами FIBARO Swipe, затем оригинальная кнопка FIBARO The Button и вот, совсем недавно, в феврале 2017 года публике представлен долгожданный пульт FIBARO KeyFob. Кроме того, увидевшие свет в том же 2016 году исполнительные устройства FIBARO Single Switch 2 и FIBARO Double Switch 2 получили поддержку режима активации сцен, о чем мы писали ранее. Смысл этого нововведения в том, что фактически любой выключатель в доме можно использовать как пульт управления (например, одиночное нажатие, как и прежде, включает/выключает подключенную к нему лампочку, а, допустим, двойное, опускает ролету).

Для настройки реакции на жесты или нажания, производимыми с этими устройствами, есть достаточно удобный мастер, встроенный в веб-интерфейс контроллера. Для большинства пользователей этого будет достаточно. Однако, например, чтобы отследить двойное нажатие на FIBARO Single Switch 2 и FIBARO Double Switch 2, обработчик все-таки придется писать вручную. Да и вообще, магические сцены и прочие мастера — это для слабаков. Мы пойдем другим путем.

Как это работает?

Нечто подобное нами уже было описано ранее, но для FIBARO Dimmer 2. Там использовалось свойство sceneActivation, изменение которого являлось триггером и значение которого различалось в зависимости от типа нажатия.

В новых устройствах введено новое событие — CentralSceneEvent. Оно используется исключительно как триггер для старта сцены. А вот понять что именно было нажато, стало несколько сложнее. Тут уже не получится просто прочитать свойство CentralSceneEvent (его вообще такого не существует). Чтобы понять, какое именно нажатие (или жест) вызвало срабатывание сцены, придется воспользоваться функцией

fibaro:getSourceTrigger()

Вызов этой функции возвращает массив, который содержит исчерпывающую информацию о том, что явилось триггером сцены. В нем, в том числе, есть и информация о том какая была нажата кнопка и как именно. На примере FIBARO KeyFob, код обработки нажатий будет выглядеть примерно так:

--[[
%% properties
%% weather
%% events
1695 CentralSceneEvent
%% globals
--]]

local pressed = {
  		key 		= tonumber(fibaro:getSourceTrigger()["event"]["data"]["keyId"]),
-- 1 = ⬜   
-- 2 = ◯
-- 3 = ✕ 
-- 4 = △
-- 5 = −  
-- 6 = +
  		how 		= fibaro:getSourceTrigger()["event"]["data"]["keyAttribute"],
  		once		= "Pressed",
  		twice		= "Pressed2",
  		thrice		= "Pressed3",
  		held		= "HeldDown",
  		release		= "Released"
  }

fibaro:debug("Key pressed - "..pressed.key..". It was pressed by - "..pressed.how); 

if (pressed.key == 3) and (pressed.how == pressed.once) then
-- код, который надо выполнять при однократном нажатии кнопки ✕
end

Для The Button, Swipe, Single/Double Switch 2 он будет аналогичным.

Следует также сказать, что, например, двойное и тройное нажатие в KeyFob по умолчанию отключены, и будут определяться как последовательные одинарные. Это, как я понимаю, сделано умышленно — при включенном двойном нажатии, реакция на одинарное происходит с небольшой задержкой. Так что проверяйте параметры.

Добавить комментарий

Возникли вопросы?