Files
led-driver/src/main.py
Jimmy 4c7646b2fe Adjust defaults and preset handling
- Switch startup_preset to default key
- Add built-in on/off presets and tweak device defaults

Made-with: Cursor
2026-03-14 02:41:07 +13:00

76 lines
2.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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 (0255) 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()