Installing a MeshCore repeater on a Raspberry Pi with openHop Repeater and the optional openHop Console.
Setting up a MeshCore repeater on a Raspberry Pi using openHop Repeater, a Python repeater daemon, and the optional openHop Console web UI.
Renamed projects
openHop Repeater was pyMC_Repeater; openHop Console was pyMC Console. Guides referencing /etc/pymc_repeater, the pymc-repeater service, or github.com/dmduran12/… are out of date. The paths below are current.
git clone https://github.com/openhop-dev/openhop_repeater.git
cd openhop_repeater
sudo bash ./manage.sh install
The installer creates a repeater service user with hardware access, installs to /opt/openhop_repeater in its own venv, creates config, log, and data directories, runs an interactive hardware wizard, and enables the systemd service.
In the wizard, select your exact board. That selection sets your TX power, and the wrong variant gives the wrong power level.
| Path | Contents |
|---|---|
/opt/openhop_repeater/ | venv and application files |
/etc/openhop_repeater/config.yaml | configuration |
/var/lib/openhop_repeater/ | repeater.db, metrics, radio presets |
/var/log/openhop_repeater/ | logs, also in the journal |
openhop-repeater.service | the systemd unit |
Immediately after install, and after any config change:
sudo grep -n tx_power /etc/openhop_repeater/config.yaml
Expect exactly one line, under the radio: section, at or below the maximum your board’s manufacturer specifies. A board with a power amplifier is damaged by a value meant for a bare transceiver.
Warning
tx_power belongs under radio:, not under sx1262:. A value placed under sx1262: is silently ignored and the radio runs at whatever radio.tx_power says.
The Console is a static web UI with no backend of its own; the repeater serves it. Install the repeater first.
git clone https://github.com/Treehouse-00/pymc_console-dist.git pymc_console
cd pymc_console
sudo bash manage.sh install
Browse to http://<pi-ip>:8000/ and log in with your repeater credentials.
Note
Follow the repo’s README.md, not its INSTALL.md. The latter is stale and still refers to pre-rename paths and services.
sudo systemctl status openhop-repeater
sudo systemctl restart openhop-repeater
sudo journalctl -u openhop-repeater -f
manage.sh upgrade installs whatever is in your working tree; it fetches nothing. git pull first.
cd ~/openhop_repeater
git pull
sudo bash ./manage.sh upgrade
The same applies to the Console, so the script itself is current before it runs.
cd ~/pymc_console
git pull
sudo bash manage.sh upgrade
The Console does not restart the repeater, because the assets are static. Hard-refresh the browser with Ctrl+Shift+R.
The Console’s web UI can also upgrade, offering a release channel: main for stable snapshots, dev for latest commits. main is updated infrequently.
Back up. There is no rollback command.
sudo cp -a /etc/openhop_repeater/config.yaml /root/config.yaml.bak
sudo cp -a /var/lib/openhop_repeater/repeater.db /root/repeater.db.bak
Re-check tx_power afterwards, since upgrades touch config.yaml.
Upgrading overwrites /var/lib/openhop_repeater/radio-presets.json and radio-settings.json. Local edits there are lost.
Database migrations run on first start of the new version and are forward-only.