-
Notifications
You must be signed in to change notification settings - Fork 0
/
front-door.lua
46 lines (38 loc) · 1.04 KB
/
front-door.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
SOURCE_VERSION = 2
-- Constants
local MODE_OFF = 0
local MODE_ON = 1
-- Duration to stay on for, in seconds.
local MOTION_DURATION = 30*60
local FRONT_DOOR_LIGHT_ALIAS = 'light-outside-front-door'
-- Variables
local current_mode = MODE_OFF
local on_until = NOW
function setup()
set_priority(5)
add_output_alias(FRONT_DOOR_LIGHT_ALIAS)
add_event_subscription('button-front-door-right', EVENT_TYPE_BUTTON_CLICKED, 'handle_click')
end
function handle_click(_addr, _typ, duration)
program_enable('front-door')
if duration < 1.0 then -- seconds, float
current_mode = (current_mode + 1) % 2
if current_mode == MODE_ON then
-- turn on for one period
on_until = NOW + MOTION_DURATION
end
end
end
function tick(now)
set_alias(FRONT_DOOR_LIGHT_ALIAS, LOW)
if on_until < now then
current_mode = MODE_OFF
end
if current_mode == MODE_OFF then
return
end
if current_mode == MODE_ON then
set_alias(FRONT_DOOR_LIGHT_ALIAS, HIGH)
return
end
end