Люди спрашивают. Рассказываю.
В Z-Wave почти любую кнопку можно использовать расширенно. Например - двойными, тройными щелчками, либо длительными удержаниями.
МеханизЬм называется "высылать ID сцены".
В Vera есть мощный понятийный механизЬм - режим дома. Четыре предопределённых:
1. День (дома)
2. "Все ушли"
3. "Ночь"
4. "Уехали надолго".
(обратите внимание на нумерацию - она именно такая!)
Для каждого из режимов настраивается:
Что включить, что выключить, что не трогать (по умолчанию), какую температуру установить. Мышкой. В контроллере.
Есть приложение - HouseModes - облегчает переключение между режимами, при обработке событий.
В Vera есть 2 недостатка.
1. В стандартных активаторах сцен нельзя активировать сцену по приходу "Scene ID" от устройства.
2. Мышкой нельзя вызвать сцену.
И так, делаем:
По тройному нажатию на кнопку выключателя переводим дом в режим Away. При включении света в прихожей, - переходим в дневной или ночной. На примере выключателя FGD-211
1. Включаем отправку "тройного клика". Устанавливаем на диммере регистр 41 в значение 1.
2. Обеспечиваем реакцию на 15 событие. (тройной удар)
Apps -> Develop Apps -> Edit startup Lua
-- без угловых скобок, только значение
local HallDimmer = <ID вашего выключателя/диммера>
local TripleClick = "15"
local modeID = <ID вашего устройства HouseModes>
local modeType = "urn:micasaverde-com:serviceId:HouseModes1"
-- Дёргаемся только если с диммера пришла "спецкоманда"
luup.variable_watch("SceneActivation","urn:micasaverde-com:serviceId:SceneController1","LastSceneTime",HallDimmer)
-- Вот тут и дёргаемся, имя функции, что "дёргается" - строкой выше. Должно совпадать с именем строкой ниже. Все имена таких пар должны быть уникальными.
function SceneActivation()
local lastSceneID= luup.variable_get("urn:micasaverde-com:serviceId:SceneController1", "LastSceneID",HallDimmer)
if (lastSceneID==TripleClick) then
-- set away mode
luup.call_action(modeType ,"SetHMode", {newHModeValue= "2"}, modeID )
end
end
Задача решена. Всё, что вы намышковали в режимах дома, сработает. Включая установленную задержку перехода между режимами.
Теперь не забываем "разбудить" дом, когда вернулись.
Простейший способ - на включение света повесить HouseMode -> home
Но мы можем вернуться ночью....
В таком случае нам надо определить, день это или ночь. Критерии у всех разные. У одних день наступает с рассветом, у меня же - в 7 утра.
А ночь - через четверть часа после полуночи. Разница в том, что "днём" световые приборы работают на всю катушку, а ночью, чтоб не будить никого и тихонечко прокрадываться - не слишком ярко.
Но мы впёрлись в дом, где никого не было, так что нам по барабану
И так: Определить день или ночь:
Делаем сцену. Запуск только днём или ночью. По таймеру. В 7:00 и в 00:15
Обратите внимание, внутри скрипта значения со значительным "перехлыстом".
local t = os.date('*t')
local current_second = t.hour * 3600 + t.min * 60 + t.sec -- number of seconds since midnight
local min_time_in_seconds = 6 * 3600 + 0 * 60 -- 6:00
local max_time_in_seconds = 23 * 3600 + 15 * 60 -- 23:00
local HmodeID = <ID плагина HouseMode >
local HmodeType = "urn:micasaverde-com:serviceId:HouseModes1"
if (current_second > min_time_in_seconds) and (current_second < max_time_in_seconds) then
-- day
luup.call_action(HmodeType ,"SetHMode", {newHModeValue= "1"}, HmodeID )
else
-- night
luup.call_action(HmodeType ,"SetHMode", {newHModeValue= "3"}, HmodeID )
end
Можете использовать ваше определение дня/ночи - вам виднее, как вам надо.
Теперь дом можно "будить", ввергая его в свет дня или мрак ночи.
Делаем сцену:
Активация по включению диммера, при режимах дома Away или Vacation (ибо нечего дёргаться напрасно)
В секции Luup:
local NoghtOrDayID="<id сцены-выбиралки дня и ночи>"
luup.call_action("urn:micasaverde-com:serviceId:HomeAutomationGateway1", "RunScene", {SceneNum = NoghtOrDayID}, 0)