pi
d36828bde2
feat(ui): persist header brightness slider in localStorage
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-05-03 21:27:31 +12:00
pi
b316edbaf9
fix(wifi): stagger driver ws dials and extend initial retry window
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-05-03 21:27:31 +12:00
c1b0c41ef2
fix(transport): disable UART ESP-NOW bridge by default
...
Require serial_enabled true in settings to open serial_port; default false in
set_defaults for Wi-Fi-only and dev machines.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-05-03 15:07:16 +12:00
3bb75d49de
feat(util): add binary envelope packing and message helpers
...
Includes tests for v1/v2 envelope round-trips.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-05-03 14:56:37 +12:00
6cbb728d9a
feat(patterns): add new pattern suite and improve mobile controls
...
Add a broad set of LED patterns with metadata/tests and update zone/profile preset seeding, while refining mobile/desktop UI behavior for scrolling, brightness controls, and bulk pattern sending.
2026-04-23 20:07:55 +12:00
ff92451a76
feat(profiles): seed twinkle preset defaults
...
Made-with: Cursor
2026-04-21 20:43:25 +12:00
60485bc06a
feat(ui): add clear device presets action
...
Made-with: Cursor
2026-04-21 00:44:38 +12:00
5f9ff9bcc9
style(ui): presets patterns and layout tweaks
...
Made-with: Cursor
2026-04-19 23:28:08 +12:00
35730b36f0
feat(api): improve pattern deploy and device tcp handling
...
Made-with: Cursor
2026-04-19 23:28:01 +12:00
d516833cc3
feat(profiles): seed colour cycle flicker and flame presets
...
Made-with: Cursor
2026-04-19 23:27:57 +12:00
167417d1ec
feat(ui): add web led-tool usb controls
...
Made-with: Cursor
2026-04-15 00:46:31 +12:00
fb8141b320
fix(server): close http listener cleanly on shutdown
2026-04-15 00:00:23 +12:00
96712dda88
feat(controller): migrate wifi drivers from tcp to websocket clients
2026-04-14 23:13:26 +12:00
pi
fbd4295302
feat(ui): patterns list and create form layout
...
Made-with: Cursor
2026-04-12 00:13:58 +12:00
pi
7bdb324ebc
feat(patterns): driver_patterns helper, on/off ota guard, drop duplicate py tree
...
Made-with: Cursor
2026-04-12 00:13:56 +12:00
pi
28b19b5219
docs: zones, transports, pattern ota, and submodule readmes
...
Made-with: Cursor
2026-04-12 00:13:54 +12:00
pi
5a1067263a
chore: add pattern samples, http driver helpers, OTA/UDP test tools
...
- patterns/: sample dynamic pattern modules for OTA
- esp32/msg.json: example bridge message shape
- models/http_driver.py, wifi_peer.py: Wi-Fi driver HTTP poll helpers
- tests: pattern OTA send script and UDP discovery echo server
- Submodule led-driver: http_poll and test utilities
Made-with: Cursor
2026-04-11 15:19:15 +12:00
pi
e67de6215a
feat(patterns,api): pattern OTA, graceful shutdown, driver delivery updates
...
- Pattern controller/UI and presets patterns tab for OTA to Wi-Fi drivers
- Device controller extensions; driver_delivery chunk handling
- main: SIGINT/SIGTERM shutdown, TCP/UDP server close coordination
- Submodule led-driver: Wi-Fi default transport, lazy espnow import, dynamic patterns
Made-with: Cursor
2026-04-11 15:10:23 +12:00
pi
7179b6531e
feat(controller): udp hello discovery and remove tcp registration
...
Made-with: Cursor
2026-04-06 21:28:13 +12:00
pi
fd618d7714
feat(zones): rename tabs to zones across api, ui, and storage
...
Made-with: Cursor
2026-04-06 18:22:03 +12:00
pi
d1ffb857c8
feat(ui): devices tcp status, tabs send, preset websocket hooks
...
Made-with: Cursor
2026-04-06 00:22:00 +12:00
pi
f8eba0ee7e
feat(api): tcp driver registry, identify, preset push delivery
...
- Track Wi-Fi TCP clients, liveness pings, disconnect broadcast, bind errors via gather\n- Device list/get include connected; POST identify with __identify preset\n- Presets push/send delivery helpers; bump led-driver hello type
Made-with: Cursor
2026-04-06 00:21:57 +12:00
pi
e6b5bf2cf1
feat(devices): wifi tcp registry, device API/UI, tests; bump led-tool
...
Made-with: Cursor
2026-04-05 21:13:07 +12:00
pi
09a87b79d2
docs(ui): update help assets and regenerate help pdf
2026-03-26 00:40:40 +13:00
pi
ec39df00fc
feat(settings/espnow): validate wifi_channel and wire into firmware
2026-03-26 00:40:21 +13:00
pi
43d494bcb9
fix(api): prevent circular reference in pattern create
2026-03-26 00:40:08 +13:00
63235c7822
fix(ui): enforce save semantics for default and preset chunks
2026-03-22 02:53:34 +13:00
5badf17719
refactor(ui): simplify modal interactions and refresh fixtures
2026-03-22 02:00:28 +13:00
4597573ac5
fix(ui): update preset send/default behavior in edit mode
2026-03-22 01:47:32 +13:00
1550122ced
fix(ui): populate preset patterns when definitions are empty
...
Made-with: Cursor
2026-03-22 00:08:12 +13:00
b7c45fd72c
docs(ui): switch user-facing spelling to colour
...
Made-with: Cursor
2026-03-22 00:00:12 +13:00
3698385af4
feat(ui): help sections, menu order, remove settings, send presets edit-only
...
Made-with: Cursor
2026-03-21 23:51:02 +13:00
a5432db99a
feat(ui): gate profile create/clone/delete to edit mode
...
Made-with: Cursor
2026-03-21 23:50:59 +13:00
9323719a85
feat(ui): add run/edit workflow and improve preset color editing
...
Made-with: Cursor
2026-03-21 23:15:31 +13:00
91de705647
feat(profiles): seed new profiles and refresh tabs on apply
...
Made-with: Cursor
2026-03-21 23:15:19 +13:00
3ee7b74152
fix(api): stabilize palette and preset endpoints
...
Made-with: Cursor
2026-03-21 23:15:08 +13:00
550217c443
ui: data-bwignore on AP password fields for password managers
...
Made-with: Cursor
2026-03-21 20:17:33 +13:00
a75e27e3d2
feat: device model, API, static UI, and endpoint tests
...
Made-with: Cursor
2026-03-21 20:17:33 +13:00
ac9fca8d4b
Pi port: serial transport, addressed ESP-NOW bridge, port 80
...
- Run app on Raspberry Pi: serial to ESP32 bridge at 912000 baud, /dev/ttyS0
- Remove ESP-NOW/MicroPython-only code from src (espnow, p2p, wifi, machine/Pin)
- Transport: always send 6-byte MAC + payload; optional to/destination_mac in API and WebSocket
- Settings and model DB use project paths (no root); fix sys.print_exception for CPython
- Preset/settings controllers use get_current_sender(); template paths for cwd=src
- Pipfile: run from src, PORT from env; scripts for port 80 (setcap) and test
- ESP32 bridge: receive 6-byte addr + payload, LRU peer management (20 max), handle ESP_ERR_ESPNOW_EXIST
- Add esp32/main.py, esp32/benchmark_peers.py, scripts/setup-port80.sh, scripts/test-port80.sh
Made-with: Cursor
2026-03-15 17:16:07 +13:00
0fdc11c0b0
ESP-NOW: STA interface, notify browser on send failure
...
- Activate STA interface before ESP-NOW to fix ESP_ERR_ESPNOW_IF
- Notify browser on send failure: WebSocket sends error JSON; preset API returns 503
- Use exceptions for failure (not return value) to avoid false errors when send succeeds
- presets.js: handle server error messages in WebSocket onmessage
Made-with: Cursor
2026-03-08 23:47:55 +13:00
91bd78ab31
Add favicon route and minor cleanup
...
- Add /favicon.ico route (204) to avoid browser 404
- CSS formatting tweaks
- Pipfile trailing newline
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-02-20 11:49:11 +13:00
2be0640622
Remove WiFi station (client) support
...
- Drop station connect/status/credentials from wifi util and settings API
- Remove station activation from main
- Remove station UI and JS from index, settings template, and help.js
- Device settings now only configure WiFi Access Point
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-02-20 11:49:04 +13:00
0e96223bf6
Send tab defaults with presets.
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-02-08 19:40:22 +13:00
d8b33923d5
Fix heartbeat LED pin.
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-02-08 19:40:14 +13:00
7cd4a91350
Add favicon handler and heartbeat LED blink.
...
This keeps the UI console clean and makes device status visible.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-02-08 13:51:15 +13:00
d907ca37ad
Refresh tabs/presets UI and add a mobile menu.
...
This improves navigation and profile workflows on smaller screens.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-02-08 13:51:09 +13:00
6c6ed22dbe
Scope presets to active profiles and support cloning.
...
This keeps data isolated per profile while letting users duplicate setups quickly.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-02-08 13:51:02 +13:00
00514f0525
Add in-app settings menu and fix settings API
...
Move WiFi and device name configuration into a modal menu, reuse existing settings endpoints, and harden settings serialization and startup for MicroPython.
2026-01-29 00:54:20 +13:00
cf1d831b5a
Align controller backend and data with new presets
...
Update palettes, profiles, tabs, preset sending, and ESPNow message format to match the new preset defaults and driver short-field schema.
2026-01-29 00:04:23 +13:00
fd37183400
Update frontend for presets, tabs, and help
...
Align frontend with new preset ID usage and shortened driver fields, improve tab/preset interactions, and refine help and editor UI.
2026-01-28 23:27:50 +13:00