main: enforce event-driven behavior; run selected pattern once per message; clarify comments; fix pattern lookup
This commit is contained in:
27
src/main.py
27
src/main.py
@@ -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
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user