Skip to content

A lightweight Repeater Daemon implemented in Python, built using the pymc_core library.

License

Notifications You must be signed in to change notification settings

rightup/pyMC_Repeater

Repository files navigation

pyMC_repeater

Repeater Daemon in Python using the pymc_core Lib.


I started pyMC_core as a way to really get under the skin of MeshCore — to see how it ticked and why it behaved the way it did. After a few late nights of tinkering, testing, and head-scratching, I shared what I’d learned with the community. The response was honestly overwhelming — loads of encouragement, great feedback, and a few people asking if I could spin it into a lightweight repeater daemon that would run happily on low-power, Pi-class hardware.

That challenge shaped much of what followed:

  • I went with a lightweight HTTP server (CherryPy) instead of a full-fat framework.
  • I stuck with simple polling over WebSockets — it’s more reliable, has fewer dependencies, and is far less resource hungry.
  • I kept the architecture focused on being clear, modular, and hackable rather than chasing performance numbers.

There’s still plenty of room for this project to grow and improve — but you’ve got to start somewhere! My hope is that pyMC_repeater serves as a solid, approachable foundation that others can learn from, build on, and maybe even have a bit of fun with along the way.

I’d love to see these repeaters out in the wild — actually running in real networks and production setups. My own testing so far has been in a very synthetic environment with little to no other users in my area, so feedback from real-world deployments would be incredibly valuable!


Overview

The repeater daemon runs continuously as a background process, forwarding LoRa packets using pymc_core's Dispatcher and packet routing.

Supported Hardware (Out of the Box)

The following hardware is currently supported out-of-the-box:

Waveshare LoRaWAN/GNSS HAT

Hardware: Waveshare SX1262 LoRa HAT
Platform: Raspberry Pi (or compatible single-board computer)
Frequency: 868MHz (EU) or 915MHz (US)
TX Power: Up to 22dBm
SPI Bus: SPI0
GPIO Pins: CS=21, Reset=18, Busy=20, IRQ=16

HackerGadgets uConsole

Hardware: uConsole RTL-SDR/LoRa/GPS/RTC/USB Hub
Platform: Clockwork uConsole (Raspberry Pi CM4/CM5)
Frequency: 433/915MHz (configurable)
TX Power: Up to 22dBm
SPI Bus: SPI1
GPIO Pins: CS=-1, Reset=25, Busy=24, IRQ=26
Additional Setup: Requires SPI1 overlay and GPS/RTC configuration (see uConsole setup guide)

Frequency Labs meshadv-mini

Hardware: FrequencyLabs meshadv-mini Hat
Platform: Raspberry Pi (or compatible single-board computer)
Frequency: 868MHz (EU) or 915MHz (US)
TX Power: Up to 22dBm
SPI Bus: SPI0
GPIO Pins: CS=8, Reset=24, Busy=20, IRQ=16

Frequency Labs meshadv

Hardware: FrequencyLabs meshadv-mini Hat
Platform: Raspberry Pi (or compatible single-board computer)
Frequency: 868MHz (EU) or 915MHz (US)
TX Power: Up to 22dBm
SPI Bus: SPI0
GPIO Pins: CS=21, Reset=18, Busy=20, IRQ=16, TXEN=13, RXEN=12

...

Screenshots

Dashboard

Dashboard Real-time monitoring dashboard showing packet statistics, neighbor discovery, and system status

Statistics

Statistics statistics and performance metrics

Installation

Clone the Repository:

git clone https://github.com/rightup/pyMC_Repeater.git
cd pyMC_Repeater

Quick Install:

sudo bash deploy.sh

This script will:

  • Create a dedicated repeater service user with hardware access
  • Install files to /opt/pymc_repeater
  • Create configuration directory at /etc/pymc_repeater
  • Setup log directory at /var/log/pymc_repeater
  • Launch interactive radio & hardware configuration wizard
  • Install and enable systemd service

After Installation:

# View live logs
sudo journalctl -u pymc-repeater -f

# Access web dashboard
http://<repeater-ip>:8000

Development Install:

pip install -e .

Configuration

The configuration file is created and configured during installation at:

/etc/pymc_repeater/config.yaml

To reconfigure radio and hardware settings after installation, run:

sudo bash setup-radio-config.sh /etc/pymc_repeater
sudo systemctl restart pymc-repeater

Upgrading

To upgrade an existing installation to the latest version:

# Navigate to your pyMC_Repeater directory
cd pyMC_Repeater

# Run the upgrade script
sudo ./upgrade.sh

The upgrade script will:

  • Pull the latest code from the main branch
  • Update all application files
  • Upgrade Python dependencies if needed
  • Restart the service automatically
  • Preserve your existing configuration

Uninstallation

sudo bash uninstall.sh

This script will:

  • Stop and disable the systemd service
  • Remove the installation directory
  • Optionally remove configuration, logs, and user data
  • Optionally remove the service user account

The script will prompt you for each optional removal step.

Roadmap / Planned Features

  • Public Map Integration - Submit repeater location and details to public map for discovery
  • Remote Administration over LoRa - Manage repeater configuration remotely via LoRa mesh
  • Trace Request Handling - Respond to trace/diagnostic requests from mesh network

Contributing

I welcome contributions! To contribute to pyMC_repeater:

  1. Fork the repository and clone your fork
  2. Create a feature branch from the dev branch:
    git checkout -b feature/your-feature-name dev
  3. Make your changes and test with real hardware
  4. Commit with clear messages:
    git commit -m "feat: description of changes"
  5. Push to your fork and submit a Pull Request to the dev branch
    • Include a clear description of the changes
    • Reference any related issues

Development Setup

# Install in development mode with dev tools (black, pytest, isort, mypy, etc)
pip install -e ".[dev]"

# Setup pre-commit hooks for code quality
pip install pre-commit
pre-commit install

# Manually run pre-commit checks on all files
pre-commit run --all-files

Note: Hardware support (LoRa radio drivers) is included in the base installation automatically via pymc_core[hardware].

Pre-commit hooks will automatically:

  • Format code with Black
  • Sort imports with isort
  • Lint with flake8
  • Fix trailing whitespace and other file issues

Support

License

This project is licensed under the MIT License - see the LICENSE file for details.

About

A lightweight Repeater Daemon implemented in Python, built using the pymc_core library.

Topics

Resources

License

Stars

Watchers

Forks

Sponsor this project