Files
parking_solution/wiki/concepts/device-discovery.md
T
julian a0e0fd9118 Add device discovery (UHPPOTE LAN scan) to setup
UHPPOTE controllers self-announce via UDP broadcast, but the frontend had no way
to find them — the admin had to type the serial blind. Add a generic discovery
capability and surface it in the setup wizard.

packages/devices:
- DiscoverableDriver capability + DiscoveredDevice type + isDiscoverable() guard
  on the registry (optional, so any driver can opt in).
- uhppote driver implements discover() via uhppoted getDevices (UDP broadcast),
  mapping each controller's serial/IP/firmware into a DiscoveredDevice; extract
  shared buildCtx().

apps/server:
- GET /api/setup/discover/:driverId (admin-only): runs discover() and
  health-checks each found device so reachability shows before assigning.
- catalog now returns a `discoverable` driver-id list.

apps/web:
- SetupWizard "Scan for controllers" button for discoverable drivers; lists found
  devices with health badges; selecting one auto-fills serial + host. api client
  gains discoverDevices().

wiki: new device-discovery concept; cross-link from registry/setup/uhppote;
note the broadcast-permission (EACCES) deployment caveat; index + log.

Verified: catalog flags uhppote discoverable; discover runs and fails gracefully
without hardware; non-discoverable driver -> 400; missing token -> 401.
2026-06-14 08:21:27 +02:00

2.1 KiB

type, tags, sources, updated
type tags sources updated
concept
parking
architecture
devices
setup
parking-system-architecture
2026-06-15

Device Discovery

An optional driver capability: find devices on the LAN so the admin doesn't have to type connection details by hand during first-run-setup. Modeled generically so any driver can opt in.

Implementation-derived (from @parking/devices + setup API/UI), not the source doc.

The capability

A driver may implement DiscoverableDriver — discover() => DiscoveredDevice[]. Each found device carries an id, a label, a config blob to auto-fill the setup form, and info (firmware, MAC, …). The device-registry's isDiscoverable() guard lets the system treat it as optional; the setup catalog returns a discoverable list of driver ids.

UHPPOTE discovery

The uhppote-controller supports discovery natively: a UDP broadcast (get-devices on 255.255.255.255:60000) that every controller on the LAN answers with its serial, IP, netmask, gateway, MAC, firmware version, and date. The official uhppoted lib exposes this as getDevices(ctx); the uhppote driver maps each result into a DiscoveredDevice (serial → id, IP → host).

Flow

  1. The setup catalog flags uhppote as discoverable.
  2. Admin clicks Scan → GET /api/setup/discover/:driverId (admin-only).
  3. The server runs discover() and health-checks each found device so the admin sees reachability before assigning.
  4. Selecting a result auto-fills serial + host; the admin then assigns it to a lane.

Deployment notes

  • UHPPOTE discovery is a broadcast — the host socket needs broadcast permission (a raw send EACCES …:60000 means the OS blocked it). Works on the isolated device VLAN (network-isolation) where the controller and host share an L2 segment.
  • Discovery shares the same unauthenticated UDP exposure as everything else UHPPOTE — another reason the controllers live on an isolated VLAN (uhppote-udp-protocol).
  • Cameras (Hikvision/Dahua via ONVIF/WS-Discovery) could implement the same interface later.