diff --git a/light_node/event_loop.py b/light_node/event_loop.py index ab65555..a94e65f 100644 --- a/light_node/event_loop.py +++ b/light_node/event_loop.py @@ -1,24 +1,33 @@ from flask import Flask, abort, jsonify, make_response, request from colorsys import hsv_to_rgb +import board +import neopixel +import signal +import sys class Led: - __IFACE_PIN = 18 - __COLOR_OFFSET = 0 + __IFACE_PIN = board.D18 + __PIXEL_COUNT = 36 def __init__(self, power, brightness, color_angle): self.power = power self.brightness = brightness self.color_angle = color_angle self.iface_pin = self.__IFACE_PIN + self.strip = neopixel.NeoPixel(self.iface_pin, self.__PIXEL_COUNT) - def update(self): + def update(self, off=False): rgb = self.angle_2_rgb() r, g, b = rgb print(f"Setting LED strip to RGB: {r}, {g}, {b}") + self.strip.fill((r, g, b)) + if not self.power: + print("Turning off strip") + self.strip.fill((0, 0, 0)) def angle_2_rgb(self): - r, g, b = hsv_to_rgb((self.color_angle+self.__COLOR_OFFSET)/360, 1, self.brightness/255) + r, g, b = hsv_to_rgb((self.color_angle)/360, 1, self.brightness/255) r *= 255 g *= 255 b *= 255 @@ -30,6 +39,11 @@ class Led: 'color': self.color_angle} return state + def power_down(self): + print("Shutting down LEDs") + self.strip.fill((0, 0, 0)) + self.strip.fill((0, 0, 0)) + led = Led(False, 0, 0) server = Flask('Light_Node') @@ -56,7 +70,7 @@ def init_server(): print(f"New state: {new_state}") led.power = bool(new_state['power']) led.brightness = int(new_state['brightness']) - led.color_angle = int(new_state['color']) + led.color_angle = 360 - int(new_state['color']) led.update() return jsonify({"success": True}) except: @@ -69,8 +83,13 @@ def init_server(): def start_server(): - server.run(debug=True) + server.run(debug=True, host="0.0.0.0") +def exit_handler(*_): + print("Exiting gracefully") + led.power_down() + sys.exit(0) +signal.signal(signal.SIGINT, exit_handler) init_server() start_server()