Radio transports

USB serial, TCP, or Bluetooth — configured in the web UI.

Meshloom talks to one radio through one transport at a time: serial (USB), TCP, or BLE. Choose it in the web interface. The choice is stored on app_settings, not in environment variables.

Until a transport is set, the radio stays paused.

Settings columns

Column Default Role
radio_transport (unset / paused) serial, tcp, or ble
radio_serial_port empty Serial port; empty means auto-detect
radio_serial_baudrate 115200 Serial speed
radio_tcp_host empty Radio TCP host
radio_tcp_port 5000 TCP port
radio_ble_address empty Radio BLE address
radio_ble_pin empty BLE PIN, required with BLE

Do not set MESHCORE_SERIAL_PORT, MESHCORE_TCP_HOST, or MESHCORE_BLE_ADDRESS to pick a transport.

Serial (USB)

For the usual setup, the radio is plugged into the machine running Meshloom. Choose serial in the UI and leave the port empty for auto-detect, or enter a path such as /dev/ttyUSB0 or COM8.

Serial ports are exclusive. Another MeshCore client, serial console, or Meshloom instance causes repeated connection failures. Meshloom groups repeated Serial Connection started lines from meshcore and logs a WARNING about possible port contention.

In Docker, map the device so the container can see it. Transport itself is still chosen in the UI:

devices:
  - /dev/serial/by-id/your-meshcore-radio:/dev/meshcore-radio

If a by-id path contains :, use a host-side alias without the colon.

TCP

Use TCP when the radio is reachable over the network. Choose TCP in the UI and enter the host and port. To flash USB companion, repeater, or room-server firmware from the browser, see the flasher.

Meshloom does not assume exclusive device access over TCP. It therefore calls set_channel(...) before every channel send instead of reusing its local slot cache. See Radio, contacts, and channels.

BLE

BLE needs both an address and a PIN in the UI. BLE in Docker usually needs manual Compose changes: Bluetooth passthrough, privileged mode, host networking, or host-specific adjustments. With many contacts, initial radio-table enumeration can time out; Meshloom still loads favorites and recent contacts as best it can. MESHCORE_LOAD_WITH_AUTOEVICT=true is available for this case.

What the installer offers

The Linux one-liner does not write transport into systemd or Compose environment files. Native systemd installs configure the radio in the web UI after startup. Docker may still ask USB versus network, only to emit a Compose devices: mapping for USB. See Other install paths.

Reconnection

After connecting, a monitor checks the link every five seconds and reconnects automatically. POST /api/radio/reconnect forces a try; POST /api/radio/disconnect closes the link and pauses automatic attempts.

Reconnect runs post-connect setup again: event handlers, in-memory private-key export, clock sync, and contact/channel sync. The sequence is time-bounded. A timeout logs an error and asks you to restart the radio and server. A hard setup failure is retried every five seconds indefinitely.