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()