From ec29dbdd01094151c74ae06fb9916604a950caa7 Mon Sep 17 00:00:00 2001 From: jimmy Date: Mon, 19 May 2025 22:00:35 +1200 Subject: [PATCH] Add color order --- src/main.py | 13 +++++++-- src/settings.py | 74 +++++++++++++++++++++++++++---------------------- 2 files changed, 51 insertions(+), 36 deletions(-) diff --git a/src/main.py b/src/main.py index 1abb5cf..5ffa323 100644 --- a/src/main.py +++ b/src/main.py @@ -1,6 +1,6 @@ import asyncio import aioespnow -from settings import Settings, set_settings +from settings import Settings from web import web from patterns import Patterns import gc @@ -17,11 +17,18 @@ async def main(): settings = Settings() patterns = Patterns(settings["led_pin"], settings["num_leds"], selected=settings["pattern"]) - patterns.set_color1(tuple(int(settings["color1"][i:i+2], 16) for i in (1, 3, 5))) - patterns.set_color2(tuple(int(settings["color2"][i:i+2], 16) for i in (1, 3, 5))) + if settings["color_order"] == "rbg": color_order = (1, 5, 3) + else: color_order = (1, 3, 5) + patterns.set_color1(tuple(int(settings["color1"][i:i+2], 16) for i in color_order)) + patterns.set_color2(tuple(int(settings["color2"][i:i+2], 16) for i in color_order)) patterns.set_brightness(int(settings["brightness"])) patterns.set_delay(int(settings["delay"])) + wifi.connect(settings.get("wifi_ssid", ""), + settings.get("wifi_password", ""), + settings.get("wifi_ip", ""), + settings.get("wifi_gateway", "") + ) w = web(settings, patterns) print(settings) # start the server in a bacakground task diff --git a/src/settings.py b/src/settings.py index f0e2d95..60e5afe 100644 --- a/src/settings.py +++ b/src/settings.py @@ -9,6 +9,8 @@ class Settings(dict): def __init__(self): super().__init__() self.load() # Load settings from file during initialization + if self["color_order"] == "rbg": self.color_order = (1, 5, 3) + else: self.color_order = (1, 3, 5) def set_defaults(self): self["led_pin"] = 10 @@ -18,6 +20,7 @@ class Settings(dict): self["color2"] = "#ff0000" self["delay"] = 100 self["brightness"] = 10 + self["color_order"] = "rgb" self["name"] = f"led-{ubinascii.hexlify(wifi.get_mac()).decode()}" self["ap_password"] = "" self["wifi_ssid"] = "" @@ -45,6 +48,43 @@ class Settings(dict): self.set_defaults() self.save() + def set_settings(self, raw_json, patterns): + patterns.sync() + try: + data = json.loads(raw_json) + print(data) + for key, value in data.items(): + print(key, value) + if key == "color1": + patterns.set_color1(tuple(int(value[i:i+2], 16) for i in self.color_order)) # Convert hex to RGB + elif key == "color2": + patterns.set_color2(tuple(int(value[i:i+2], 16) for i in self.color_order)) # Convert hex to RGB + elif key == "num_leds": + patterns.update_num_leds(4, value) + elif key == "pattern": + if not patterns.select(value): + return "Pattern doesn't exist", 400 + elif key == "delay": + delay = int(data["delay"]) + patterns.set_delay(delay) + elif key == "brightness": + brightness = int(data["brightness"]) + patterns.set_brightness(brightness) + elif key == "name": + self[key] = value + self.save() + machine.reset() + elif key == "color_order": + if value == "rbg": self.color_order = (1, 5, 3) + else: self.color_order = (1, 3, 5) + else: + return "Invalid key", 400 + self[key] = value + self.save() + return "OK", 200 + except (KeyError, ValueError): + return "Bad request", 400 + # Example usage def main(): settings = Settings() @@ -58,39 +98,7 @@ def main(): print(f"Loaded number of LEDs: {new_settings['num_leds']}") print(settings) -def set_settings(raw_json, settings, patterns): - patterns.sync() - try: - data = json.loads(raw_json) - print(data) - for key, value in data.items(): - print(key, value) - if key == "color1": - patterns.set_color1(tuple(int(value[i:i+2], 16) for i in (1, 3, 5))) # Convert hex to RGB - elif key == "color2": - patterns.set_color2(tuple(int(value[i:i+2], 16) for i in (1, 3, 5))) # Convert hex to RGB - elif key == "num_leds": - patterns.update_num_leds(4, value) - elif key == "pattern": - if not patterns.select(value): - return "Pattern doesn't exist", 400 - elif key == "delay": - delay = int(data["delay"]) - patterns.set_delay(delay) - elif key == "brightness": - brightness = int(data["brightness"]) - patterns.set_brightness(brightness) - elif key == "name": - settings[key] = value - settings.save() - machine.reset() - else: - return "Invalid key", 400 - settings[key] = value - settings.save() - return "OK", 200 - except (KeyError, ValueError): - return "Bad request", 400 + # Run the example if __name__ == "__main__":