Skip to main content

Device Discovery

lplex automatically discovers and tracks all devices on the NMEA 2000 bus. It builds a device registry from two PGN types:

  • PGN 60928 (ISO Address Claim): provides the 64-bit CAN NAME, manufacturer code, device class, function, and instance
  • PGN 126996 (Product Information): provides model ID, software version, and serial number

How discovery works

  1. When lplex sees a frame from an unknown source address, it sends an ISO Request (PGN 59904) to that source asking for an address claim
  2. The device responds with PGN 60928, which populates the basic device info
  3. lplex then requests PGN 126996 for product details
  4. The registry updates continuously as new claims and product info arrive

This is transparent. You don't need to configure anything.

Device table fields

FieldSourceDescription
srcCAN headerCurrent source address (0-253)
namePGN 6092864-bit ISO 11783 NAME (hex string)
manufacturerPGN 60928Manufacturer name (resolved from code)
manufacturer_codePGN 60928Raw manufacturer code
device_classPGN 60928Device class number
device_functionPGN 60928Device function number
device_instancePGN 60928Device instance (0-252)
unique_numberPGN 6092821-bit unique number from NAME
product_codePGN 126996Product code
model_idPGN 126996Model name string
software_versionPGN 126996Software version string
model_versionPGN 126996Hardware/model version string
model_serialPGN 126996Serial number string
first_seenlplexRFC 3339 timestamp of first frame
last_seenlplexRFC 3339 timestamp of last frame
packet_countlplexTotal frames received from this device
byte_countlplexTotal bytes received from this device

API

List all devices

curl http://inuc1.local:8089/devices | jq
[
{
"src": 10,
"name": "0x00A1B2C3D4E5F600",
"manufacturer": "Garmin",
"manufacturer_code": 229,
"device_class": 25,
"device_function": 130,
"device_instance": 0,
"unique_number": 123456,
"product_code": 1234,
"model_id": "GPS 19x HVS",
"software_version": "5.60",
"model_version": "1",
"model_serial": "ABC123",
"first_seen": "2026-03-06T10:00:00Z",
"last_seen": "2026-03-06T10:15:32Z",
"packet_count": 45023,
"byte_count": 360184
}
]

Filter by device

Use device-based filters on the /events or /values endpoints:

# All frames from Garmin devices
curl -N "http://inuc1.local:8089/events?manufacturer=Garmin"

# Last values from device instance 0
curl "http://inuc1.local:8089/values?instance=0"

Device table in journals

Journal files include a device table snapshot in each block. This allows journal readers to resolve source addresses to device names without needing a live connection. The device table includes manufacturer, model ID, software version, and product code.

Cloud devices

The cloud server exposes the same device API per instance:

curl https://lplex.dockwise.app/instances/boat-001/devices | jq

Device info is carried over the replication stream. The replica broker maintains its own DeviceRegistry populated from replicated frames.