Connects to a MeshCore companion radio, listens for commands on configured channels, resolves hex path prefixes to repeater names using a persistent database, and replies on the channel. Includes a full web dashboard for live monitoring, repeater management, path visualization, and configuration.
| Command | Description |
|---|---|
trace |
Resolves the hop path to repeater names |
ping |
Acknowledges receipt with path and hop count |
paths |
Lists unique paths seen from the sender |
multipath |
Shows all distinct paths for the sender's most recent message |
prefix <hex> |
Looks up repeater names for given hex prefixes (e.g. prefix fb:1f:7a) |
weather [postcode] |
Current conditions for home location or a given postcode |
forecast [postcode] |
3-day forecast for home location or a given postcode |
help |
Lists enabled commands on the current channel |
- Path resolution — resolves 1-byte and multibyte (2-byte hash) hex path prefixes to repeater names with geographic disambiguation
- Per-channel command control — each channel independently enables commands;
weatherandforecastare off by default - Rate limiting — optional per-user per-channel cooldown to prevent command spam
- Web dashboard (port 8075) — live message feed, path visualizer, repeater management, overlap analysis, statistics, and full settings UI
- Guest dashboard (port 8076, optional) — read-only view of ping history, paths, and repeater info
- Weather & forecasts —
weatherandforecastcommands via Open-Meteo, with optional postcode lookup - Daily forecast broadcast — scheduled 3-day forecast sent to configured channels at a set hour (configurable IANA timezone)
- Radio management — read and update radio name, frequency, TX power, and channel keys directly from the web UI
- Systemd & Docker — production-ready deployment with auto-restart
pip install -e .
meshcore-pathbot --serial /dev/ttyUSB0 --config config.tomlThen open http://localhost:8075 for the web dashboard.
meshcore-pathbot [OPTIONS]
Connection (pick one):
-s, --serial PORT Serial port (e.g. /dev/ttyUSB0, COM3)
-t, --tcp HOST TCP host (e.g. 192.168.1.100)
-b, --ble [ADDR] BLE address (or empty to scan)
Options:
-C, --config FILE TOML config file
-p, --port PORT TCP port (default: 5000)
-B, --baud RATE Serial baud rate
-c, --channel N Channel to listen on (default: 2, used when no [[bot.channels]] defined)
-r, --repeaters-file FILE Repeaters DB path (.db preferred; .json auto-migrates)
-i, --ignore NAME Additional node names to ignore
-d, --debug Enable debug logging
--web-host HOST Web dashboard bind host
--web-port PORT Web dashboard port (default: 8075)
--no-web Disable web dashboard
Copy config.example.toml to config.toml and edit to your setup. CLI arguments override config file values.
Key settings:
[[bot.channels]]— define one or more channels with their enabled commands and rate limit settings; if omitted, falls back tobot.channelbot.timezone— IANA timezone for daily forecast scheduling (e.g."Australia/Melbourne"); defaults to system local timeguest_web.ping_channels— restrict the guest dashboard to specific channels (empty = all ping-enabled channels)
docker compose up -dMount your serial device by uncommenting the devices section in docker-compose.yml.
sudo cp meshcore-pathbot.service /etc/systemd/system/
sudo systemctl enable --now meshcore-pathbot- Use a dedicated
config.tomlper environment (do not commit live configs). - Run behind a trusted network boundary or reverse proxy; admin UI can modify radio settings.
- Set
guest_web.enabled = trueonly when you explicitly want read-only public visibility. - Rotate channel names/keys operationally on radios as part of commissioning.
- Persist
repeaters.dband your config volume when using Docker.
The radio channels table intentionally shows masked channel secret values in the UI/API. Full channel secrets are not returned by the dashboard endpoint.