Files
Tomas Kracmar 0a4fb7b55e
Some checks failed
CI / lint-docs (push) Has been cancelled
CI / build-firmware (push) Has been cancelled
CI / test-backend (push) Has been cancelled
CI / test-web (push) Has been cancelled
feat: initial KosmoConnect platform v0.1
Includes:
- Backend services: ingestion (:8001), weather API (:8002),
  gateway (:8003), billing (:8004) with BTCPay integration
- Shared asyncpg pool, TimescaleDB hypertable, Redis, Mosquitto MQTT
- React frontend: Dashboard (MapLibre) and Messaging (chat UI)
- Bridge daemon for Pi + Meshtastic (Serial/TCP T-Deck support)
- Production Docker Compose, Nginx reverse proxy, ops scripts
- DEPLOY.md with step-by-step deployment guide
2026-04-12 17:30:15 +02:00

5.1 KiB

KosmoConnect Bridge Daemon

A Python daemon that bridges a local Meshtastic mesh network to the KosmoConnect cloud MQTT broker.

What It Does

  1. Mesh → Cloud

    • Receives text messages from the mesh and publishes them to kosmo/mesh/inbound
    • Detects JSON environmental data packets (sent as text) and forwards them to kosmo/ingest/enviro
    • Forwards position updates to kosmo/position/position
    • (Future) Will handle custom KOSMO_ENVIRO_APP portnum packets from enviro-node firmware
  2. Cloud → Mesh

    • Subscribes to kosmo/mesh/outbound/#
    • Injects text messages into the mesh, tagged with [Web] prefix so users know the origin

Hardware Requirements

  • Raspberry Pi (3B+ or 4 recommended) running Raspberry Pi OS or similar Debian-based Linux
  • Meshtastic device with USB-serial interface (e.g., LILYGO T-Beam, RAK4631, or your T-Deck in USB-serial mode) connected via USB
  • Reliable internet backhaul (WiFi or Ethernet)

Quick Start (Local Dev)

You can test the daemon on your laptop without a Pi by using the Mosquitto broker from the backend stack:

cd firmware/infrastructure-node/bridge-daemon
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt

# Option A: USB serial device
export MESHTASTIC_DEVICE=/dev/ttyUSB0   # or /dev/ttyACM0 on Linux, COM3 on Windows, /dev/cu.usbserial-* on macOS
export MQTT_HOST=localhost
export MQTT_PORT=1883
python3 -m src.main

# Option B: Network-connected device (e.g., T-Deck on WiFi)
export MESHTASTIC_HOST=192.168.1.45
export MESHTASTIC_TCP_PORT=4403
export MQTT_HOST=localhost
export MQTT_PORT=1883
python3 -m src.main

Raspberry Pi Production Setup

1. Install Dependencies

sudo apt update
sudo apt install -y python3-venv python3-pip git

2. Clone / Copy This Directory to the Pi

cd /opt
sudo git clone https://your-repo/kosmo-connect.git
# or rsync the bridge-daemon folder

3. Run the Installer

cd /opt/kosmo-connect/firmware/infrastructure-node/bridge-daemon
sudo ./install.sh

4. Configure the Service

Edit the systemd service to point to your actual MQTT broker:

sudo systemctl edit --full kosmo-bridge

Update the Environment= lines, for example:

Environment="MQTT_HOST=your-broker.example.com"
Environment="MQTT_PORT=1883"
Environment="MQTT_USER=kosmo"
Environment="MQTT_PASS=your_secure_password"
Environment="MESHTASTIC_DEVICE=/dev/ttyUSB0"
Environment="GATEWAY_NODE_ID=!yourgateway01"

Save and reload:

sudo systemctl daemon-reload
sudo systemctl restart kosmo-bridge

5. Monitor Logs

sudo journalctl -u kosmo-bridge -f

Environment Variables

Variable Default Description
MQTT_HOST localhost MQTT broker hostname
MQTT_PORT 1883 MQTT broker port
MQTT_USER (empty) MQTT username
MQTT_PASS (empty) MQTT password
MESHTASTIC_DEVICE /dev/ttyUSB0 Serial path to the Meshtastic radio (used when MESHTASTIC_HOST is empty)
MESHTASTIC_HOST (empty) IP address or hostname of a network-connected Meshtastic device
MESHTASTIC_TCP_PORT 4403 TCP port for the Meshtastic network API
GATEWAY_NODE_ID (empty) Identifier for this bridge in the cloud

Finding the Serial Port

On the Pi, plug in your T-Beam or T-Deck and run:

ls -l /dev/ttyUSB* /dev/ttyACM* /dev/serial/by-id/

Use the path that appears when the device is connected.

Using T-Deck Over WiFi (No USB Cable)

Your T-Deck can connect to your home WiFi and expose the Meshtastic TCP API on port 4403.

1. Enable WiFi on the T-Deck

Using the Meshtastic app or CLI:

meshtastic --host <t-deck-ip> --set wifi_ssid "YourNetwork" --set wifi_psk "YourPassword"

Or via the on-screen menu if your T-Deck firmware supports it.

2. Find the T-Deck IP Address

Check your router's DHCP client list, or use a network scanner:

nmap -p 4403 192.168.1.0/24

3. Run the Bridge in TCP Mode

export MESHTASTIC_HOST=192.168.1.45
export MESHTASTIC_TCP_PORT=4403
export MQTT_HOST=your-broker.example.com
python3 -m src.main

The bridge will connect over TCP instead of USB-serial. This is perfect for keeping the T-Deck portable while the Pi sits near your router.

Testing with T-Deck

When the bridge is running (serial or TCP):

  1. Send a text message from any mesh node
  2. Check kosmo/mesh/inbound on your MQTT broker — the message should appear within seconds
  3. Publish a message to kosmo/mesh/outbound/!{target_node_id} — the target node should receive it prefixed with [Web]

Troubleshooting

  • Permission denied on /dev/ttyUSB0: Add the kosmo user to the dialout group:
    sudo usermod -a -G dialout kosmo
    sudo systemctl restart kosmo-bridge
    
  • MQTT connection refused: Verify your broker is reachable from the Pi (nc -vz MQTT_HOST MQTT_PORT)
  • Meshtastic device not found over serial: Check cables and power supply; some devices need a powered USB hub on the Pi
  • T-Deck TCP connection refused: Ensure the T-Deck is on the same network and the TCP API port (4403) is not blocked by a firewall