A real-time web dashboard for HBlink3 -- a separate program that replaces the old HBmonitor. It keeps HBmonitor's information and table layout (master systems with their repeaters, peer systems, OpenBridge systems, conference-bridge state, and a call log) but borrows HBlink4's modern dark aesthetic and an efficient, event-driven data path. How it works: - dashboard/server.py connects to HBlink3's NDJSON reporting feed, maintains the authoritative display state, resolves DMR IDs to callsigns/talkgroup names via the shared alias files, and serves a single-page UI plus a WebSocket that pushes JSON deltas (and a small REST API at /api/state). - dashboard/static/dashboard.html renders the tables client-side and ticks the uptime / call-duration / bridge-timeout counters in the browser, so there are no full-table re-renders and the duration figures update live. Live calls are pushed instantly; systems/peer state refreshes on the periodic config snapshot (REPORT_INTERVAL). Efficiency vs HBmonitor: JSON deltas instead of whole-table HTML pushed every tick; client-side rendering and live counters; no pickle on the wire; server- computed time deltas so the browser needs no clock sync. Includes config_sample.py, requirements.txt (FastAPI/Uvicorn/dmr_utils3 -- the core stays stdlib-only), README, run_dashboard.py launcher, and an hblink3-dash.service systemd unit. dashboard/config.py is git-ignored. Verified end-to-end against a live bridge.py: the dashboard ingests the config and bridge snapshots, resolves a talkgroup alias, and serves the branded SPA; frontend JS parses clean; the HBlink3 core test suite is unaffected (39 tests). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
HBlink3
HBlink3 is an open-source implementation of the DMR HomeBrew Repeater Protocol (HBP) in Python 3. It acts as an HBP master and/or peer and routes calls between MMDVM-based DMR systems, working as a transit / conference-bridge router — traffic is selectively routed from ingress systems to egress systems according to a rules file. It can also link to Brandmeister and DMR+ (IPSC2) via OpenBridge.
Which HBlink? HBlink3 is system-oriented and built for transit routing and conference bridging between networks. Its companion, HBlink4 (by the same author), is a repeater-oriented endpoint server for running a single regional network. Pick the one that matches your role.
Applications
| Program | Purpose |
|---|---|
bridge.py |
The main application: a configurable conference-bridge call router with dynamic on/off triggering, timeouts, and private (unit) call routing. |
bridge_all.py |
A simple proxy that forwards all traffic between every configured system — makes several repeaters appear as one. |
hblink.py |
The protocol core. Runs standalone as a master/peer for testing, and is the module the applications are built on. |
Features
- HBP master and peer modes for MMDVM repeaters and hotspots
- OpenBridge connectivity to Brandmeister / DMR+ (IPSC2)
- Rules-based conference-bridge routing with dynamic ON/OFF/RESET talkgroup triggers and timeouts
- Private (unit) call routing using a learned subscriber-to-system map
- Layered access control lists — registration, subscriber, and per-timeslot talkgroup
- TCP reporting feed for external dashboards
- Built on Python
asyncio— no external networking framework
Quick start
git clone https://github.com/n0mjs710/hblink3.git
cd hblink3
python3 -m venv venv && source venv/bin/activate
pip install -r requirements.txt
cp hblink-SAMPLE.cfg hblink.cfg # edit for your systems
cp rules_SAMPLE.py rules.py # edit your bridges (bridge.py only)
python bridge.py -c hblink.cfg -r rules.py
See INSTALL.md for full setup, configuration, and running as a systemd service.
Configuration
hblink.cfg— global settings, reporting, logging, alias downloads, and one stanza per system (MASTER,PEER, orOPENBRIDGE). Start fromhblink-SAMPLE.cfg.rules.py— (bridge.pyonly) defines the conference bridges, the systems/talkgroups/timeslots that belong to each, and the systems permitted to pass unit calls. Start fromrules_SAMPLE.py.
Your hblink.cfg and rules.py are git-ignored, so git pull won't overwrite them.
Dashboard
A real-time web dashboard lives in dashboard/ — a separate program
with a modern dark UI showing master/peer/OpenBridge systems, conference-bridge
state, and a live call log. Enable HBlink3's reporting feed ([REPORTS] in
hblink.cfg) and see dashboard/README.md to run it.
Requirements
- Python 3.8+ (Linux recommended)
bitarray,dmr_utils3— seerequirements.txt
License
Copyright (C) 2016-2026 Cortney T. Buffington, N0MJS — n0mjs@me.com
Licensed under the GNU GPLv3; see LICENSE.txt. You may use this software freely, but please credit the project somewhere public (club, organization, or project site) so we can see where it's in use.
Support & contributing
Maintained by one person with limited resources. Genuine bug reports are welcome; please don't open issues for configuration help or feature requests. Discuss new features first and submit pull requests on a feature branch.
Acknowledgments
The HomeBrew Repeater Protocol is the work of Jonathan Naylor (G4KLX), Hans Barthen (DL5DI), and Torsten Schultze (DG1HT). This project is the author's clean-room interpretation of that protocol.