Add color order

This commit is contained in:
jimmy 2025-05-19 22:00:35 +12:00
parent 3fa9377438
commit ec29dbdd01
2 changed files with 51 additions and 36 deletions

View File

@ -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

View File

@ -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__":