Skip to content

System topics ​

Daemon-level topics not tied to a CAN device.

system/time (published) ​

Daemon UTC clock, published every 1 s. Payload is a bare ISO-8601 string, not JSON, no envelope.

Format: YYYY-MM-DDTHH:MM:SSZ (second precision).

bash
mosquitto_sub -h 127.0.0.1 -t 'system/time' -v
# system/time 2026-06-17T14:30:45Z

device/interface (published) ​

CAN interface status, published every 10 s. Read from the kernel (netlink).

Note: this topic uses capital rxDate in metadata (not rxdate).

data ​

FieldTypeUnitDescription
interfacestring—Interface name (e.g. can0)
statestring—ERROR_ACTIVE, ERROR_WARNING, ERROR_PASSIVE, BUS_OFF, STOPPED, SLEEPING, UNKNOWN
upbool—Link up
statsobject—Present only when stats readable (below)
configobject—Present only when config readable (below)

data.stats (all int64): tx_frames, tx_bytes, rx_frames, rx_bytes, tx_errors, rx_errors, bus_errors, restarts.

data.config (all int64): bitrate (bps), sample_point, tq, prop_seg, phase_seg1, phase_seg2, sjw, brp, restart_ms (ms), ctrlmode.

metadata ​

rxDate (capital), rxTimestamp, expireAfterSec: 10.

Example ​

json
{
  "data": {
    "interface": "can0",
    "state": "ERROR_ACTIVE",
    "up": true,
    "stats": {
      "tx_frames": 1024,
      "tx_bytes": 8192,
      "rx_frames": 52310,
      "rx_bytes": 418480,
      "tx_errors": 0,
      "rx_errors": 0,
      "bus_errors": 0,
      "restarts": 0
    },
    "config": {
      "bitrate": 250000,
      "sample_point": 875,
      "tq": 500,
      "prop_seg": 6,
      "phase_seg1": 7,
      "phase_seg2": 2,
      "sjw": 1,
      "brp": 8,
      "restart_ms": 100,
      "ctrlmode": 0
    }
  },
  "metadata": {
    "rxDate": "2026-06-17T14:30:45.000Z",
    "rxTimestamp": 1781793045,
    "expireAfterSec": 10
  }
}
bash
mosquitto_sub -h 127.0.0.1 -t 'device/interface' -v

app/boat/info (published, retained) ​

Daemon identity, the same shape every MUXEN daemon publishes on app/<daemon>/info. Published retained at QoS 1 on every broker (re)connect with online: true; the same payload with online: false is the client's last will and is also published on a clean exit. A client that subscribes therefore always gets the daemon's last known state, and app/+/info lists every daemon on the Brain.

FieldTypeDescription
namestringDebian package name: muxen-boat
versionstringbuild version (git describe), for display only
hostnamestringhost the daemon runs on
onlinebooltrue while connected, false after the last will or a clean exit
featuresstring[]what this daemon serves, see below
metadataobjectrxdate, rxTimestamp, expireAfterSec (about 99 years: the info never goes stale, online carries liveness)

Clients branch on features, never on version, and ignore features they do not know.

FeatureMeaning
device-commanddevice/+/+/command is handled (per-device commands)
device-resetdevice/+/+/reset is handled
device-rtrdevice/+/+/rtr/+ is handled (remote frame request)
can-interfacedevice/interface is published every 10 s
system-timesystem/time is published every 1 s
udp-nmea0183the UDP NMEA-0183 output is enabled (--udp); absent otherwise

Example ​

json
{
  "name": "muxen-boat",
  "version": "v9.5.0",
  "hostname": "brain-3",
  "features": ["device-command", "device-reset", "device-rtr", "can-interface", "system-time"],
  "online": true,
  "metadata": {
    "rxdate": "2026-09-22T07:53:02.302Z",
    "rxTimestamp": 1790063582,
    "expireAfterSec": 3124137600
  }
}

Integration of multiplexed solutions
MUXEN and the MUXEN logo are trademarks of MUXEN SAS.