from settings import Settings from machine import WDT from espnow import ESPNow import utime import network from presets import Presets from utils import convert_and_reorder_colors import json settings = Settings() print(settings) presets = Presets(settings["led_pin"], settings["num_leds"]) presets.load() presets.b = settings.get("brightness", 255) # Use the default preset name from settings (set via controller or defaults) default_preset = settings.get("default") if default_preset: presets.select(default_preset) print(f"Selected startup preset: {default_preset}") wdt = WDT(timeout=10000) wdt.feed() last_brightness_save = 0 sta_if = network.WLAN(network.STA_IF) sta_if.active(True) sta_if.disconnect() sta_if.config(channel=1) e = ESPNow() e.active(True) while True: wdt.feed() presets.tick() if e.any(): host, msg = e.recv() print(msg) data = json.loads(msg) # Only handle messages with the expected version. if data.get("v") != "1": continue # print(data) # Global brightness (0–255) for this device if "b" in data: try: presets.b = max(0, min(255, int(data["b"]))) settings["brightness"] = presets.b now = utime.ticks_ms() if utime.ticks_diff(now, last_brightness_save) >= 500: settings.save() last_brightness_save = now except (TypeError, ValueError): pass if "presets" in data: for id, preset_data in data["presets"].items(): # Convert hex color strings to RGB tuples and reorder based on device color order if "c" in preset_data: preset_data["c"] = convert_and_reorder_colors(preset_data["c"], settings) presets.edit(id, preset_data) print(f"Edited preset {id}: {preset_data.get('name', '')}") if settings.get("name") in data.get("select", {}): select_list = data["select"][settings.get("name")] # Select value is always a list: ["preset_name"] or ["preset_name", step] if select_list: preset_name = select_list[0] step = select_list[1] if len(select_list) > 1 else None presets.select(preset_name, step=step) if "default" in data: settings["default"] = data["default"] print(f"Set startup preset to: {data['default']}") settings.save() if "save" in data: presets.save()