Added basic flask server for node operation, still need LED driving...
This commit is contained in:
parent
d149a9ed66
commit
3e21d0285c
76
light_node/event_loop.py
Normal file
76
light_node/event_loop.py
Normal file
@ -0,0 +1,76 @@
|
||||
from flask import Flask, abort, jsonify, make_response, request
|
||||
from colorsys import hsv_to_rgb
|
||||
|
||||
|
||||
class Led:
|
||||
__IFACE_PIN = 18
|
||||
__COLOR_OFFSET = 0
|
||||
|
||||
def __init__(self, power, brightness, color_angle):
|
||||
self.power = power
|
||||
self.brightness = brightness
|
||||
self.color_angle = color_angle
|
||||
self.iface_pin = self.__IFACE_PIN
|
||||
|
||||
def update(self):
|
||||
rgb = self.angle_2_rgb()
|
||||
r, g, b = rgb
|
||||
print(f"Setting LED strip to RGB: {r}, {g}, {b}")
|
||||
|
||||
def angle_2_rgb(self):
|
||||
r, g, b = hsv_to_rgb((self.color_angle+self.__COLOR_OFFSET)/360, 1, self.brightness/255)
|
||||
r *= 255
|
||||
g *= 255
|
||||
b *= 255
|
||||
return (r, g, b)
|
||||
|
||||
def json_state(self):
|
||||
state = {'power': self.power,
|
||||
'brightness': self.brightness,
|
||||
'color': self.color_angle}
|
||||
return state
|
||||
|
||||
|
||||
led = Led(False, 0, 0)
|
||||
server = Flask('Light_Node')
|
||||
|
||||
|
||||
def init_server():
|
||||
@server.errorhandler(404)
|
||||
def not_found(error):
|
||||
return make_response(jsonify({'error': 'Not found'}), 404)
|
||||
|
||||
@server.errorhandler(400)
|
||||
def bad_request(error='other'):
|
||||
return make_response(jsonify({'error': 'Bad request'}), 400)
|
||||
|
||||
@server.errorhandler(501)
|
||||
def server_crash(error):
|
||||
return make_response(jsonify({'error': 'Server crashed, check logs'}), 501)
|
||||
|
||||
@server.route('/setState', methods=['POST', 'GET'])
|
||||
def change_led_state():
|
||||
try:
|
||||
print(request)
|
||||
new_state = request.json
|
||||
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.update()
|
||||
return jsonify({"success": True})
|
||||
except:
|
||||
return bad_request()
|
||||
pass
|
||||
|
||||
@server.route('/', methods=['GET'])
|
||||
def main_tab():
|
||||
return jsonify(led.json_state())
|
||||
|
||||
|
||||
def start_server():
|
||||
server.run(debug=True)
|
||||
|
||||
|
||||
init_server()
|
||||
start_server()
|
||||
@ -1,49 +0,0 @@
|
||||
from flask import Flask, abort, jsonify, make_response, request, send_from_directory
|
||||
|
||||
|
||||
class Led:
|
||||
__IFACE_PIN = 18
|
||||
def __init__(self, power, brightness, color_angle):
|
||||
self.power = power
|
||||
self.brightness = brightness
|
||||
self.color_angle = color_angle
|
||||
self.iface_pin = self.__IFACE_PIN
|
||||
|
||||
def change_state(self, power, brightness, color_angle):
|
||||
pass
|
||||
|
||||
def angle_2_rgb(self, angle):
|
||||
pass
|
||||
|
||||
|
||||
class LightNode:
|
||||
def __init__(self):
|
||||
self.led = Led(False, 0, 0)
|
||||
self.server = Flask('light_node')
|
||||
|
||||
def init_server(self):
|
||||
@self.server.errorhandler(404)
|
||||
def not_found(self, error):
|
||||
return make_response(jsonify({'error': 'Not found'}), 404)
|
||||
|
||||
@self.server.errorhandler(400)
|
||||
def bad_request(self, error):
|
||||
# Happens when unexpected request sent to observer
|
||||
return make_response(jsonify({'error': 'Bad request'}), 400)
|
||||
|
||||
@self.server.errorhandler(501)
|
||||
def server_crash(sef, error):
|
||||
# This only happens when a sensor fails to initialise
|
||||
return make_response(jsonify({'error': 'Server crashed, check logs'}), 501)
|
||||
|
||||
@self.server.route('/setState', methhods=['POST'])
|
||||
def change_led_state(self):
|
||||
try:
|
||||
new_state = request.json
|
||||
self.led.power = bool(new_state['power'])
|
||||
self.led.brightness = int(new_state['brightness'])
|
||||
self.led.color = int(new_state['color'])
|
||||
return jsonify({"success":True})
|
||||
except:
|
||||
self.bad_request()
|
||||
pass
|
||||
Loading…
Reference in New Issue
Block a user