A SignalK server plugin (and embedded webapp) for
managing YEY Boats marine display devices — ESP32-S3 multi-function displays
running the yey-boats/instruments
firmware. It is the single console for discovering, registering, configuring,
flashing, and OTA-updating every display on the boat.
- Webapp:
/yey-boats-display-manager/(appears in SignalK Admin → Webapps as YEY Boats Display Manager) - Plugin UI:
/plugins/yey-boats-display-manager/ui - Plugin id:
yey-boats-display-manager
Renamed from “ESP Display Manager”. A full
espdisp→yeyboats/yey-displayrebrand: the plugin id/webapp/API routes (yey-boats-display-manager), the wire protocol (yeyboats.*.v2, control proto major v2), mDNS services (_yeyboats._tcp), the well-known path (/.well-known/yeyboats-management), the auth header (X-YeyBoats-Authorization), the device-id prefix (yey-d-), and firmware identity (yey-display). See Upgrading — devices must be reflashed and re-provisioned.
One merged landing page: stat tiles (Devices / Online / Config drift / Pending commands / Firmware jobs), the pending-discovery list (devices seen on the network but not yet claimed), and the registered devices table with working Clear offline / Clear all bulk actions. Every action detects an expired SignalK session and prompts re-login instead of silently failing.
Server-held provisioning defaults that are pushed to devices from the server (so a laptop cabled to a device for flashing never has to supply them):
- Network / WiFi — SSID, password, mDNS domain relayed to a new device to bootstrap it onto the boat network.
- OTA — the OTA password. Held server-side, masked, never embedded in a firmware image and never sent over the USB cable; delivered only over the device’s authenticated config-fetch.
- Device numbering — prefix + zero-pad + next-number, so each newly
provisioned device is auto-named (e.g.
yey-d-001).
Embedded ESP Web Tools flashes a
USB-cabled ESP32-S3 straight from the browser, then bootstraps it onto the
server’s WiFi over a WebSerial console using the firmware’s own text commands.
Gated to secure contexts (open via http://localhost or HTTPS on the computer
the device is plugged into).
Each device page shows a faithful live HUD mirror, live status/logs, the generated config, the command queue, and an Update Firmware panel: pick an artifact, pick a method (OTA server-side job or Serial / USB in-browser), and a connection-validation checklist (online · address known · artifact in catalogue) blocks the flash until it can succeed.
On first registration after a USB flash the manager auto-assigns the next device number and pushes the OTA password + settings via config-push; the firmware applies them to NVS and the device becomes controllable and OTA-ready. Re-registration is idempotent — an already-numbered device is never renumbered.
Firmware catalog with GitHub-release import + OTA-job runner; dashboard presets; the visual layout editor (per-device screen/widget CRUD, manifest-gated); SignalK + UDP/mDNS/BLE device discovery.
This plugin is distributed from the
yey-boats/Instruments-manager
repository (not the public npm registry). For local/dev or remote SignalK
servers, build a tarball and npm install it into the SignalK home, or mount it
as a plugin directory. Full instructions — including the Docker-based lab
deployment — are in deploy/README.md.
After install, restart SignalK, then enable YEY Boats Display Manager under SignalK Admin → Server → Plugin Config. Open it at:
/plugins/yey-boats-display-manager/ui (plugin console)
/yey-boats-display-manager/ (webapp / app-dock tile)
The rename changes the plugin id, so SignalK treats it as a new plugin and stores its config + device registry under a new data directory. To carry your registered devices across, on the SignalK host:
- Copy the plugin data dir
plugin-config-data/espdisp-manager/→plugin-config-data/yey-boats-display-manager/, and the enable-state fileespdisp-manager.json→yey-boats-display-manager.json(do the copy as the SignalK user so the files stay writable by the server). - Point the plugin dependency / node_modules entry at the new package name and restart SignalK.
- Reflash each device (
yey-boats/instruments≥ the rebrand commit). The firmware self-heals on boot: an auto-generatedespdisp-<mac>id migrates toyey-d-<mac>, and a stored manager endpoint carrying the old/plugins/espdisp-managerbase is rewritten to/plugins/yey-boats-display-managerin place — so the device re-registers under its new id at the new path with no manualmanager-endpointcommand. (Operator-set custom device names are kept.) The manager then auto-assigns the nextyey-d-NNNnumber on first re-register. - Update the SignalK app-dock tile URL/icon to
/yey-boats-display-manager/.
deploy/README.md— install, Docker/lab deployment, API route reference.docs/operator-flash-provision.md— end-to-end operator runbook for flashing + provisioning a fresh device.
© 2026 Yey Boats Project. All rights reserved except as expressly licensed (see NOTICE).
Source-available under the PolyForm Noncommercial License 1.0.0 — free for noncommercial use. Commercial use requires a separate license (see COMMERCIAL.md). Contributions under the DCO.



