A unified monorepo for the Wildcat Meshtastic ecosystem, combining the TC²-BBS (Bulletin Board System) and Mesh Observatory Dashboard.
The Wildcat Mesh System provides comprehensive mesh network communication and monitoring tools:
- TC²-BBS: A text-based bulletin board system for Meshtastic networks, enabling offline messaging, bulletins, and channel management
- Mesh Observatory: A real-time web dashboard for monitoring network activity, telemetry, positions, and topology
- Telemetry Logger: A background service that captures telemetry, position, and neighbor data from the mesh network
All components share a common SQLite database for seamless integration.
Wildcat-Mesh-System/
├── bbs/ # TC²-BBS application
│ ├── server.py # Main BBS server
│ ├── telemetry_logger.py # Telemetry capture service
│ ├── db_operations.py # Database operations
│ ├── message_processing.py
│ ├── command_handlers.py
│ ├── utils.py
│ ├── config.ini # BBS configuration
│ └── requirements.txt # Python dependencies
├── observatory/ # Observatory Dashboard
│ ├── app.py # Flask application
│ ├── config.py # Dashboard configuration
│ ├── modules/ # Database and utilities
│ ├── templates/ # HTML templates
│ ├── static/ # CSS, JS, images
│ └── requirements.txt # Python dependencies
├── shared/ # Shared resources
│ └── bulletins.db # SQLite database (shared)
├── services/ # systemd service files
│ ├── mesh-bbs.service
│ ├── telemetry-logger.service
│ └── mesh-observatory.service
├── venv/ # Shared Python virtual environment
└── docs/ # Documentation
- Private direct messaging between nodes
- Public bulletin boards (General, Info, Urgent)
- Channel URL directory
- Message persistence and sync across multiple BBS nodes
- Automatic urgent bulletin notifications
- Comprehensive message logging
- Real-time monitoring via WebSockets
- Network overview: Active nodes, message counts, channel activity
- Channel analytics: Activity heatmaps, top senders, time-based filtering
- Node details: Individual node metrics, reliability stats, SNR/RSSI trends
- BBS integration: View messages, bulletins, and mail
- Telemetry tracking: Battery levels, temperature, uptime
- Position logging: GPS coordinates, altitude, ground speed
- Topology mapping: Neighbor information and network connectivity
- Captures device metrics (battery, voltage, channel utilization)
- Logs environmental data (temperature, humidity, pressure)
- Records GPS positions and movement
- Tracks neighbor relationships for topology analysis
- Runs independently alongside the BBS
- Python 3.7+
- Meshtastic-compatible radio (connected via serial or TCP)
- systemd (for Linux service management)
-
Clone the repository:
git clone https://github.com/RedThoroughbred/Wildcat-Mesh-System.git cd Wildcat-Mesh-System -
Run the setup script:
./setup.sh
The setup script will:
- Create a virtual environment
- Install all dependencies
- Detect your Meshtastic interface (USB/Serial or TCP)
- Generate configuration files
-
Clone the repository:
git clone https://github.com/RedThoroughbred/Wildcat-Mesh-System.git cd Wildcat-Mesh-System -
Set up unified virtual environment:
python3 -m venv venv source venv/bin/activate pip install -r bbs/requirements.txt pip install -r observatory/requirements.txt -
Configure BBS: Copy and edit
bbs/example_config.initobbs/config.ini:[interface] type = serial # for USB devices (auto-detects port) # OR for network devices: # type = tcp # hostname = 192.168.1.100
-
Configure Observatory: Edit
observatory/config.pyif needed (default: TCP at 192.168.86.37, port 5000)
-
Copy service files:
sudo cp services/*.service /etc/systemd/system/ sudo systemctl daemon-reload -
Enable and start services:
# BBS sudo systemctl enable mesh-bbs.service sudo systemctl start mesh-bbs.service # Telemetry Logger sudo systemctl enable telemetry-logger.service sudo systemctl start telemetry-logger.service # Observatory Dashboard sudo systemctl enable mesh-observatory.service sudo systemctl start mesh-observatory.service
-
Check status:
sudo systemctl status mesh-bbs sudo systemctl status telemetry-logger sudo systemctl status mesh-observatory
BBS:
source venv/bin/activate
python3 bbs/server.pyTelemetry Logger:
source venv/bin/activate
python3 bbs/telemetry_logger.pyObservatory:
source venv/bin/activate
python3 observatory/app.pyAccess the dashboard at: http://localhost:5000
The shared bulletins.db contains:
bulletins: Public bulletin board messagesmail: Private direct messageschannels: Channel URL directorymessage_logs: All message activity with SNR/RSSI
telemetry_logs: Device and environmental metricsposition_logs: GPS coordinates and movementneighbor_info: Network topology datanode_info: Node metadata (name, hardware, firmware)
Send commands via direct message to the BBS node:
M- Main menuCB- Check bulletinsCB,,<board>- List bulletins on board (e.g., CB,,General)CB,<id>- Read specific bulletinCM- Check mailCM,<id>- Read specific messageSM,<recipient>,<subject>,<message>- Send mailPB,<board>,<subject>,<message>- Post bulletin
Navigate to the web interface:
- Dashboard: Network overview with real-time stats
- Channels: Activity analysis with time-range filtering (24h/7d/30d)
- Nodes: Individual node details and reliability metrics
- BBS Messages: View all BBS activity and conversations
Want to let friends check out your Observatory from anywhere?
Quick share with ngrok:
./share-observatory.shThis will give you a public URL like https://abc123.ngrok-free.app to share.
Other options:
- See docs/NGROK_SETUP.md for detailed remote access guides
- Supports ngrok, Cloudflare Tunnel, and Tailscale VPN
[interface]
type = serial # or tcp
# hostname = 192.168.1.100 # for TCP mode
[sync]
bbs_nodes = !12345678,!87654321 # Other BBS nodes to sync with# Database path (automatically configured for monorepo)
DATABASE_PATH = '../shared/bulletins.db'
# Meshtastic connection
MESH_INTERFACE_TYPE = 'tcp'
MESH_HOSTNAME = '192.168.86.37'
# Dashboard settings
REFRESH_INTERVAL = 5 # seconds
PORT = 5000Both BBS and Observatory initialize their tables automatically on first run. If you need to manually initialize:
from db_operations import initialize_database
initialize_database()Edit bbs/command_handlers.py to add new BBS commands.
Add new routes in observatory/app.py and corresponding templates in observatory/templates/.
This is a custom fork of the TC2-BBS project with significant Observatory and telemetry enhancements. See individual file headers for attribution.
- TC2-BBS: Original BBS system by TheCommsChannel
- Observatory Dashboard: Custom development by Wildcat Mesh System
- Telemetry Logger: Custom development for mesh network monitoring
See LICENSE file for details.
For issues, questions, or contributions, please open an issue on the GitHub repository.
Wildcat TC² BBS & Mesh Observatory - Bringing comprehensive communication and monitoring to Meshtastic mesh networks.