Skip to content

Is the output switching? Is the input being seen? ​

A cabin light does not come on. A bilge alarm never fires. A button on the screen appears to do nothing. In each case there is a switched output or a sensed input somewhere, and the useful question is whether the board thinks it is on.

muxen-diag-io answers that. It shows one line per Bloc 8 and per Generic I/O board on the boat, with the live state of every output, every digital input and every analogue input, refreshed several times a second.

For an owner: this is the picture of what the boat's power-output boards are actually doing, next to what they are being asked to do. It reads only; it never switches anything.

Running it ​

sh
muxen-diag-io                    # the local broker
muxen-diag-io -h 192.168.1.10    # a boat on the network

It needs 123 columns. Below that the right-hand columns are not drawn and the title bar says [!] need 123 cols.

Reading the table ​

MUXEN I/O Explorer  mqtt://127.0.0.1:1883  Connected
──────────────────────────────────────────────────────────────────────────
DEVICE         AGE   OUT0 OUT1 OUT2 OUT3 OUT4 OUT5 OUT6 OUT7  REL0 REL1  D0  D1  D2  D3  D4  D5   A0      A1      A2
──────────────────────────────────────────────────────────────────────────
Bloc8 #1        *      ON   ..   ..   SC   ..   NC   ..   ..              0   1   0   0   0   0   0.000  12.480   0.000
Bloc8 #2       4s      ..   ..   ON   ..   ..   ..   ..   ..              0   0   0   0   0   0   0.000   0.000   0.000
GenIO #1        *                                                ON   ..   1   0                  4.912   0.001
ColumnApplies toMeaning
DEVICEbothboard type and displayed instance
AGEbothhow long ago this row last had live data
OUT0–OUT7Bloc 8the eight power outputs
REL0–REL1Generic I/Othe two relay outputs
D0–D5bothdigital inputs — six on a Bloc 8, two on a Generic I/O
A0–A2bothanalogue inputs — three on a Bloc 8, two on a Generic I/O

Two device families share the table, and the columns they do not have are simply blank. A Bloc 8 never fills REL0/REL1; a Generic I/O never fills OUT0–OUT7, and uses only the first two digital and the first two analogue columns.

The output states are the whole point ​

An output is not a boolean. The board reports four states, and the difference between them is the difference between three quite different faults:

ShownColourStateWhat it means on the boat
ONgreenpoweredthe output is switched on and carrying
..plainoffthe output is switched off
SCredshort circuitthe board switched on and protected itself
NCyellownot connectedthe board switched on and saw no load

So when a light does not come on:

  • .. — nothing has asked for it. The fault is above this board: the command never arrived. Look at what should be sending it.
  • ON — the board is powering the circuit. The fault is downstream: wiring, lamp, connector.
  • SC — the circuit is shorted. The board is protecting itself, and it will keep doing so; this is a wiring fault, not a software one.
  • NC — the board switched on and found nothing on the other end. An open circuit, a disconnected load, a blown lamp.

SC and NC are the two most useful readings this tool gives, because they are a measurement the board made and nothing above it reports.

AGE, and what a yellow line means ​

AGE is how long ago the row last received live data:

ShownMeaning
* in greenupdated within the last second
4slast update four seconds ago
-never had a live update since the tool started

A whole line drawn in yellow means the device is stale: nothing live has arrived for it in thirty seconds, or nothing ever did. The values on a yellow line are the last ones seen, which may be minutes old. Treat them as history, not as state.

Staleness is not only about silence. Every payload may carry a receive timestamp and an expiry; a payload that arrives already expired is still parsed and displayed, but it does not refresh the age. So a row can go yellow while messages are still arriving — which means whatever is publishing them is republishing stale data, and that is worth knowing.

On a Bloc 8, the outputs and the inputs come from two different topics, so they can go stale independently. When the input topic is stale the digital and analogue columns are drawn yellow while the output columns keep their own colours; when the input topic has never arrived at all, those columns are left blank rather than drawn as zeroes. A Bloc 8 with populated outputs and empty D and A columns is publishing its life topic and not its io topic.

Instance numbers are displayed from 1 ​

Bloc8 #1 is the board at instance 0 on the bus. The screens count from 1, so the table does too.

This matters when you cross-check against anything else. The same board is:

  • Bloc8 #1 here and in muxen-diag-voltage,
  • instance 0 in muxen-diag-devices,
  • device/1/0/… on the broker and in muxen-diag-data-explorer.

There is no way to switch the display; it is a fixed convention.

Filtering ​

F4 opens a filter, Esc clears it. Matching is case-insensitive against the displayed name, so bloc selects every Bloc 8 and #3 selects the third of each family.

The filter also matches the underlying topic, but only for a topic-shaped search: a needle containing / or the word device. Typing 5 on its own therefore matches Bloc8 #5 and not the board whose topic ends in /5 — those two are different boards, and matching both was more confusing than helpful.

The footer counts what survives the filter: 3/12 devices.

What the table cannot hold ​

The tool tracks 64 devices. Past that the footer says so in red:

[!] table full (64 max) — some devices not shown

Bloc 8 and Generic I/O boards share that budget.

What this tool proves, and what it does not ​

A row that is present, green and updating proves the whole chain from the board to the broker is intact for that board, and that the value you are looking at is the board's own reading.

It does not prove the screen shows it. If muxen-diag-io is right and the screen is wrong, the fault is above the broker, and What is actually on the wire? is where to look next — the raw payload will tell you whether the field the screen reads is the field the board sends.

A row that is absent is the more common case, and it has two completely different causes: the board is not on the bus, or the board is on the bus but nothing is decoding it onto the broker. Run muxen-diag-devices to tell them apart.

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