- Switch startup_preset to default key - Add built-in on/off presets and tweak device defaults Made-with: Cursor
76 lines
2.5 KiB
Python
76 lines
2.5 KiB
Python
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()
|