main: enforce event-driven behavior; run selected pattern once per message; clarify comments; fix pattern lookup

This commit is contained in:
2025-09-17 20:20:41 +12:00
parent 8cfb3e156b
commit d8e853183b
2 changed files with 18 additions and 18 deletions

View File

@@ -29,14 +29,21 @@ def main():
wdt = machine.WDT(timeout=10000)
wdt.feed()
while True:
# patterns.tick()
# advance pattern based on its own returned schedule
# due = patterns.tick(due)
wdt.feed()
host, msg = e.recv(0)
if msg:
try:
data = json.loads(msg)
print(data)
# Drain all pending packets and only process the latest
last_msg = None
while True:
host, msg = e.recv(0)
if not msg:
break
last_msg = msg
if last_msg:
try:
data = json.loads(last_msg)
defaults = data.get("d", {})
bar = data.get(settings.get("name"), {})
@@ -44,18 +51,18 @@ def main():
patterns.delay = bar.get("delay", defaults.get("delay", patterns.delay))
colors = bar.get("colors", defaults.get("colors", patterns.colors))
patterns.colors = [tuple(int(color[i:i+2], 16) for i in settings.color_order) for color in colors]
# patterns.select(bar.get("pattern", defaults.get("pattern", "off")))
patterns.n1 = bar.get("n1", defaults.get("n1", patterns.n1))
patterns.n2 = bar.get("n2", defaults.get("n2", patterns.n2))
patterns.step = bar.get("pattern_step", defaults.get("step", patterns.step))
selected_pattern = bar.get("pattern", defaults.get("pattern", "off"))
if selected_pattern in patterns.patterns:
# Run the selected pattern ONCE in response to this message. Do not auto-tick elsewhere.
patterns.patterns[selected_pattern]()
else:
print(f"Pattern {selected_pattern} not found")
except:
print(f"Failed to load espnow data {msg}")
except Exception as ex:
print(f"Failed to load espnow data {last_msg}: {ex}")
continue