|
|
|
@ -22,18 +22,22 @@ LED_INVERT = False
|
|
|
|
|
|
|
|
|
|
class Lightrix:
|
|
|
|
|
def __init__(self, config, room):
|
|
|
|
|
self.client = MatrixClient(config['homeserver_uri'])
|
|
|
|
|
self.token = self.client.login_with_password(username=config['username'],
|
|
|
|
|
password=config['password'])
|
|
|
|
|
self.rooms = {}
|
|
|
|
|
self.room_ids = []
|
|
|
|
|
self.join_room(room)
|
|
|
|
|
|
|
|
|
|
self.strip = Adafruit_NeoPixel(LED_COUNT, LED_PIN, LED_FREQ_HZ,
|
|
|
|
|
LED_DMA, LED_INVERT, LED_BRIGHTNESS)
|
|
|
|
|
self.strip.begin()
|
|
|
|
|
self.init_patterns()
|
|
|
|
|
self.rooms[room].send_text("Setting color to timebase.")
|
|
|
|
|
self.set_pattern(self.patterns['timebase'])
|
|
|
|
|
|
|
|
|
|
self.client = MatrixClient(config['homeserver_uri'])
|
|
|
|
|
self.token = self.client.login_with_password(username=config['username'],
|
|
|
|
|
password=config['password'])
|
|
|
|
|
self.rooms = {}
|
|
|
|
|
self.room_ids = []
|
|
|
|
|
self.join_room(room)
|
|
|
|
|
self.rooms[room].send_text("Started up, set to timebase.")
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -81,6 +85,7 @@ class Lightrix:
|
|
|
|
|
return Color(64, 0, 0) # failback
|
|
|
|
|
|
|
|
|
|
def wheelStrip(idx, msg):
|
|
|
|
|
"""A strip of colors based on a wheel index"""
|
|
|
|
|
val = int(msg.split(' ')[1])
|
|
|
|
|
return wheel(val)
|
|
|
|
|
|
|
|
|
@ -119,19 +124,20 @@ class Lightrix:
|
|
|
|
|
|
|
|
|
|
def listen_and_glow(self):
|
|
|
|
|
self.idle_since = datetime.datetime.now()
|
|
|
|
|
def maybe_idle():
|
|
|
|
|
tdel = datetime.datetime.now() - self.idle_since
|
|
|
|
|
if tdel.seconds > 5 * 60: # idle for five minutes
|
|
|
|
|
self.set_pattern(self.patterns['timebase'])
|
|
|
|
|
|
|
|
|
|
def glow_from_message_maybe(chunk):
|
|
|
|
|
try:
|
|
|
|
|
def maybe_idle():
|
|
|
|
|
tdel = datetime.datetime.now() - self.idle_since
|
|
|
|
|
if tdel.seconds > 5 * 60: # idle for five minutes
|
|
|
|
|
self.set_pattern(self.patterns['timebase'])
|
|
|
|
|
if chunk[u'type'] != u'm.room.message':
|
|
|
|
|
maybe_idle()
|
|
|
|
|
return
|
|
|
|
|
if not chunk[u'room_id'] in self.room_ids:
|
|
|
|
|
maybe_idle()
|
|
|
|
|
return
|
|
|
|
|
text = chunk[u'content'][u'body']
|
|
|
|
|
text = chunk[u'content'][u'body'].lower()
|
|
|
|
|
room = self.rooms[chunk[u'room_id']]
|
|
|
|
|
if text.startswith("!brightness"):
|
|
|
|
|
brightness = int(text.split(' ')[1])
|
|
|
|
@ -141,31 +147,42 @@ class Lightrix:
|
|
|
|
|
if text.startswith("!wheel"):
|
|
|
|
|
self.set_pattern(self.patterns[u'wheel'], text)
|
|
|
|
|
return
|
|
|
|
|
if text.startswith("!join"):
|
|
|
|
|
room = text.split(' ')[1:]
|
|
|
|
|
room.send_text("Joining %s" % room)
|
|
|
|
|
self.join_room(room)
|
|
|
|
|
return
|
|
|
|
|
if not text in self.patterns:
|
|
|
|
|
maybe_idle()
|
|
|
|
|
return
|
|
|
|
|
room.send_text("Setting color to %s" % text)
|
|
|
|
|
self.set_pattern(self.patterns[text])
|
|
|
|
|
except:
|
|
|
|
|
except Exception as e:
|
|
|
|
|
print(e)
|
|
|
|
|
self.rooms[self.room_ids[0]].send_text("Error setting settings, try something else?")
|
|
|
|
|
self.rooms[self.room_ids[0]].send_text(str(e))
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
self.client.add_listener(glow_from_message_maybe)
|
|
|
|
|
self.client.listen_forever()
|
|
|
|
|
while(True):
|
|
|
|
|
self.client.listen_for_events(timeout=30000)
|
|
|
|
|
maybe_idle()
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def set_pattern(self, pattern, msg=None):
|
|
|
|
|
# XXX: Retcon this in to a single thing.
|
|
|
|
|
if type(pattern) == list:
|
|
|
|
|
for led_idx in range(0, self.strip.numPixels()):
|
|
|
|
|
for led_idx in range(0, self.strip.numPixels()):
|
|
|
|
|
if type(pattern) == list:
|
|
|
|
|
self.strip.setPixelColor(led_idx, pattern[led_idx])
|
|
|
|
|
else:
|
|
|
|
|
for led_idx in range(0, self.strip.numPixels()):
|
|
|
|
|
else:
|
|
|
|
|
color = pattern(led_idx, msg)
|
|
|
|
|
self.strip.setPixelColor(led_idx, color)
|
|
|
|
|
self.strip.show()
|
|
|
|
|
self.idle_since = datetime.datetime.now()
|
|
|
|
|
# Announce
|
|
|
|
|
for room_id in self.room_ids:
|
|
|
|
|
self.client.api.send_message_event(room_id, "m.lightrix.pattern", {"pattern": str(pattern), "from_msg": msg})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
@ -175,12 +192,6 @@ if __name__ == "__main__":
|
|
|
|
|
args = parser.parse_args()
|
|
|
|
|
if args.room is None:
|
|
|
|
|
print("Require --room argument")
|
|
|
|
|
# Announce
|
|
|
|
|
for room_id in self.room_ids:
|
|
|
|
|
self.client.api.send_message(room_id, u"m.message.lightrix", {"pattern": pattern, "from_msg": msg})
|
|
|
|
|
# Announce
|
|
|
|
|
for room_id in self.room_ids:
|
|
|
|
|
self.client.api.send_message(room_id, u"m.message.lightrix", {"pattern": pattern, "from_msg": msg})
|
|
|
|
|
sys.exit(1)
|
|
|
|
|
if not os.path.exists(args.config_path):
|
|
|
|
|
print("Configuration file doesn't exist, please create one")
|
|
|
|
|