No description
  • Python 98.9%
  • Makefile 0.7%
  • Dockerfile 0.4%
Find a file
2026-01-17 20:20:15 -07:00
src initial release 2026-01-17 20:20:15 -07:00
tests initial release 2026-01-17 20:20:15 -07:00
.dockerignore initial release 2026-01-17 20:20:15 -07:00
.env.example initial release 2026-01-17 20:20:15 -07:00
.gitignore initial release 2026-01-17 20:20:15 -07:00
docker-compose.yml initial release 2026-01-17 20:20:15 -07:00
Dockerfile initial release 2026-01-17 20:20:15 -07:00
LICENSE initial release 2026-01-17 20:20:15 -07:00
Makefile initial release 2026-01-17 20:20:15 -07:00
pytest.ini initial release 2026-01-17 20:20:15 -07:00
README.md initial release 2026-01-17 20:20:15 -07:00
requirements.txt initial release 2026-01-17 20:20:15 -07:00

Meshcore-Meshtastic MQTT Bridge

Bidirectional channel message bridge between Meshcore and Meshtastic LoRa mesh networks via MQTT.

What It Does

Messages sent on mapped channels are automatically forwarded between Meshcore and Meshtastic networks with sender attribution ([MC] or [MT] prefix).

This is a channel-only bridge - it does not support direct messages.

Quick Start

cp .env.example .env
# Edit .env with your settings
docker compose build
docker-compose up -d

Configuration

All settings are in .env. See .env.example for documentation.

Required settings:

  • MQTT_BROKER_HOST - Your MQTT broker
  • MESHTASTIC_BRIDGE_NODE_ID - Your Meshtastic node's hex ID (e.g., !9eed111c)
  • CHANNEL_MAPPING - JSON mapping channels with encryption keys

Channel Mapping Example

# Single channel with default LongFast key
CHANNEL_MAPPING='{"0": {"channel": "0", "name": "LongFast", "key": "AQ=="}}'

# Multiple channels
CHANNEL_MAPPING='{"0": {"channel": "0", "name": "LongFast", "key": "AQ=="}, "1": {"channel": "1", "name": "Private", "key": "YourBase64KeyHere=="}}'

The key is your Meshtastic channel's base64-encoded encryption key. AQ== is the public default key.

Message Format

[MT] TLora Pager [LILY]: Hello from Meshtastic!
[MC] MeshPocket: Hello from Meshcore!

Dry Run Mode

Set DRY_RUN=true to test without sending messages. The bridge will log what it would send.

Development

pip install -r requirements.txt
python -m src.main

# Run tests
pytest tests/ -v

Prerequisites

  • Meshcore node running meshcore-mqtt
  • Meshtastic node with MQTT enabled (JSON output + downlink on bridged channels)
  • MQTT broker accessible to both

License

MIT