-
Notifications
You must be signed in to change notification settings - Fork 0
/
remote.py
96 lines (80 loc) · 2.45 KB
/
remote.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
#!/usr/bin/python
import lirc
import logging
from pprint import pprint
import time
import soco
logging.basicConfig(
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
level=logging.INFO
)
logger = logging.getLogger(__name__)
VOL_STEP = 2
class SonosRemote(object):
def __init__(self):
self.lirc_sockid = lirc.init("sonos") # Init lirc
self.zones = list(soco.discover()) # Sonos device discovery
if self.sonos:
logger.info(pprint(self.sonos.get_speaker_info()))
@property
def sonos(self):
if len(self.zones) >= 1:
return self.zones[0]
def loop(self):
key = self.get_ir()
if key:
logger.info('pressed: {}'.format( key ))
self.mapping(key)
def get_ir(self):
codes = lirc.nextcode()
if codes:
return codes[0]
def sonos_playing(self):
info = self.sonos.get_current_transport_info()
if info.get('current_transport_state') == 'PLAYING':
return True
else:
return False
def mapping(self, key):
sonos = self.sonos
if key == 'power':
logger.info('Power button is not implemented')
elif key == 'stop':
sonos.stop()
elif key == 'play' and self.sonos_playing():
sonos.pause()
elif key == 'play' and not self.sonos_playing():
sonos.play()
elif key == 'previous':
sonos.previous()
elif key == 'next':
sonos.next()
elif key == 'rewind':
sonos.mute
muteness = sonos.mute
if muteness:
sonos.mute = False
else:
sonos.mute = True
elif key == 'eq':
loudness = sonos.loudness
if loudness:
sonos.loudness = False
else:
sonos.loudness = True
elif key == 'volumeup' or key == 'volumedown':
v = volume = sonos.volume
if key == 'volumeup':
v += VOL_STEP
else:
v -= VOL_STEP
sonos.volume = v
logger.info('Volume from {0} to {1}'.format(volume, v))
else:
logger.info('Key not found: {0}'.format(key))
if __name__ == '__main__':
logger.info('IR remote interface for Sonos speakers')
remote = SonosRemote()
while True:
remote.loop()
time.sleep(0.5)