-
Notifications
You must be signed in to change notification settings - Fork 0
/
roller.py
executable file
·114 lines (85 loc) · 2.23 KB
/
roller.py
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#!/home/pi/roller/env/bin/python
import sys, getopt
from gpiozero import LED as pin
from time import sleep
import os.path
from os import path
# GPIO
button_up = pin(5) # RED
button_pause = pin(6) # ORANGE
button_down = pin(13) # YELLOW
button_prev = pin(19) # GREEN
button_next = pin(26) # BLUE
# config
debounce = 0.06
throttle = 0.07
cooldown = 4
# rooms
room_all = 0
room_parents = 1
room_living_left = 2
room_living_right = 3
room_kitchen = 4
room_laundry = 5
room_study = 6
room_bedroom = 7
def press_button(button):
button.on()
sleep(debounce)
button.off()
sleep(throttle)
def wake_up():
press_button(button_pause)
press_button(button_pause)
press_button(button_pause)
def select_room(room):
for _ in range(room + 1):
press_button(button_next)
def deselect_room(room):
for _ in range(room):
press_button(button_prev)
def open_room(room):
wake_up
select_room(room)
press_button(button_up)
press_button(button_up)
press_button(button_up)
deselect_room(room)
sleep(cooldown)
def close_room(room):
wake_up
select_room(room)
press_button(button_down)
press_button(button_down)
press_button(button_down)
deselect_room(room)
sleep(cooldown)
def check_locked():
return path.exists("lock")
def create_lock():
lock = open('lock', 'w')
lock.close()
def remove_lock():
os.remove('lock')
# arguments: <user>, <open/close>, <room>, <room>, <room>...
def main(argv):
sleep(1)
# prevent other instances of script being run
# this is important as it will mess with channel selection on the remote
if not check_locked():
create_lock()
if argv[1] == 'open':
for i in range(2, len(argv)):
print('opening: ' + argv[i])
open_room(eval(argv[i]))
elif argv[1] == 'close':
for i in range(2, len(argv)):
print('closing: ' + argv[i])
close_room(eval(argv[i]))
else:
print('no room selected')
remove_lock()
else:
print('Please Wait...')
if __name__ == "__main__":
main(sys.argv[1:])