Completing event loop flask server

This commit is contained in:
Your Name 2020-10-07 22:56:11 +01:00
parent 93b0cf70a9
commit 89261bc7bf

View File

@ -1,24 +1,33 @@
from flask import Flask, abort, jsonify, make_response, request from flask import Flask, abort, jsonify, make_response, request
from colorsys import hsv_to_rgb from colorsys import hsv_to_rgb
import board
import neopixel
import signal
import sys
class Led: class Led:
__IFACE_PIN = 18 __IFACE_PIN = board.D18
__COLOR_OFFSET = 0 __PIXEL_COUNT = 36
def __init__(self, power, brightness, color_angle): def __init__(self, power, brightness, color_angle):
self.power = power self.power = power
self.brightness = brightness self.brightness = brightness
self.color_angle = color_angle self.color_angle = color_angle
self.iface_pin = self.__IFACE_PIN 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() rgb = self.angle_2_rgb()
r, g, b = rgb r, g, b = rgb
print(f"Setting LED strip to RGB: {r}, {g}, {b}") 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): 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 r *= 255
g *= 255 g *= 255
b *= 255 b *= 255
@ -30,6 +39,11 @@ class Led:
'color': self.color_angle} 'color': self.color_angle}
return state 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) led = Led(False, 0, 0)
server = Flask('Light_Node') server = Flask('Light_Node')
@ -56,7 +70,7 @@ def init_server():
print(f"New state: {new_state}") print(f"New state: {new_state}")
led.power = bool(new_state['power']) led.power = bool(new_state['power'])
led.brightness = int(new_state['brightness']) led.brightness = int(new_state['brightness'])
led.color_angle = int(new_state['color']) led.color_angle = 360 - int(new_state['color'])
led.update() led.update()
return jsonify({"success": True}) return jsonify({"success": True})
except: except:
@ -69,8 +83,13 @@ def init_server():
def start_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() init_server()
start_server() start_server()