Skip to content

Latest commit

 

History

69 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

RCP Control Center

RCP Control Center is a self-hosted mesh operations panel with Meshtastic USB agent support, node visibility, rooms/DM, trust graph views, GPS mapping, and operator controls. This package is intended for local/self-hosted deployments first, with hosted-instance support planned later.

Current baseline

This Docker-based self-hosted package was built, tested, and run successfully on a Raspberry Pi 5. That is the current known-good baseline environment for this release.

What this package includes

  • RCP web UI
  • RCP API/backend
  • SQLite-backed local data store
  • Meshtastic USB agent
  • Docker Compose deployment for local/self-hosted use

Intended users

This package is best suited for:

  • Raspberry Pi users
  • Linux self-hosted users
  • homelab operators
  • field operators
  • developers and testers

Requirements

  • Docker
  • Docker Compose plugin
  • Linux host or Raspberry Pi
  • Meshtastic radio connected by USB
  • Access to the serial device path for the radio

Repository layout

Key files:

  • ingest_api.py — FastAPI backend
  • ui.py — web UI
  • meshtastic_agent.py — Meshtastic USB connector/agent
  • docker-compose.yml — self-hosted deployment
  • Dockerfile.app — app container
  • Dockerfile.agent — Meshtastic agent container
  • requirements.txt — Python dependencies

Quick start

1. Build and start the full stack

From the project root:

sudo docker compose up -d --build

2. Open the UI

Open the panel in a browser:

http://<your-host-ip>:8788

Example for local access:

http://localhost:8788
Finding the correct USB path

3.
The Meshtastic agent needs the correct serial path for the attached radio.

Check common serial devices
ls -l /dev/ttyACM* /dev/ttyUSB* 2>/dev/null
Check stable device IDs
ls -l /dev/serial/by-id 2>/dev/null

Preferred approach:

use the stable /dev/serial/by-id/... path for RCP_MESH_PORT
map the underlying real device with devices: in docker-compose.yml
Example

If your radio appears as:

/dev/serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0001-if00-port0

then set:

RCP_MESH_PORT: /dev/serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0001-if00-port0

and map the real device, for example:

devices:
  - "/dev/ttyUSB0:/dev/ttyUSB0"
volumes:
  - /dev/serial/by-id:/dev/serial/by-id:ro
Running the stack
Start
sudo docker compose up -d
Rebuild and restart
sudo docker compose up -d --build
Stop
sudo docker compose down
Check service status
sudo docker compose ps

You should normally see both services running:

rcp-app
rcp-meshtastic-agent
Viewing logs
App logs
sudo docker compose logs -f rcp-app
Meshtastic agent logs
sudo docker compose logs -f rcp-meshtastic-agent
Data storage

The self-hosted Docker deployment stores runtime data in:

./data/rcp.db

This is the persistent SQLite database used by the app container.

4.
Features currently working
Meshtastic USB agent connectivity
stable USB by-id path support
gateway registration
mesh directory ingestion
GPS map and node details
rooms and direct messages
RCP node details and operator controls
health/status card
Docker-based self-hosted deployment
Operational notes
The self-hosted package is designed around a local Meshtastic USB radio.
The Docker stack should generally be started as a full stack with:
sudo docker compose up -d --build

If only part of the stack is restarted, the app may remain up while the Meshtastic agent is not running.

5.
Troubleshooting
The app loads, but the map or live mesh data is stale

Check whether the Meshtastic agent container is running:

sudo docker compose ps

If rcp-meshtastic-agent is not running, start the full stack again:

sudo docker compose up -d --build
Meshtastic agent fails to start due to missing USB path

Confirm the actual device path:

ls -l /dev/ttyACM* /dev/ttyUSB* 2>/dev/null
ls -l /dev/serial/by-id 2>/dev/null

Update docker-compose.yml accordingly.

The app is running, but there are no inbound/outbound messages

Check both logs:

sudo docker compose logs -f rcp-app
sudo docker compose logs -f rcp-meshtastic-agent

Also confirm the agent service is present:

sudo docker compose ps
Raspberry Pi undervoltage warnings

If the host shows undervoltage events, USB/radio stability may be affected. Ensure the Pi power supply is adequate and stable.

Current limitations
Packet counters may be unavailable depending on the Meshtastic firmware/build and available node data.
Directory mode is currently a future-facing inventory view and will become more useful as additional fabrics are integrated.
SQLite is currently appropriate for self-hosted single-instance use, but not the final long-term hosted multi-tenant architecture.
Product direction

Planned product tracks:

Self-hosted Docker deployment
Windows-friendly local installer
Hosted instances on OVH
local connector/agent model for hosted users with USB radios
expanded multi-fabric support (Meshtastic, Reticulum, Meshcore, and more)
Known-good baseline

6.
Current known-good tested baseline:

Raspberry Pi 5
Docker + Docker Compose plugin
Meshtastic USB radio
self-hosted local deployment
Support and future roadmap

About

public repo of the control panel. This is where updates will be posted. Version numbers will be posted. Wiki and bug reports will also live here.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages