2025-06-03 13:42:08 -07:00
2025-05-20 22:09:55 -07:00
2025-01-20 13:54:22 -08:00
2024-08-21 20:51:25 -07:00
2025-06-03 10:37:26 -07:00
2025-01-20 12:41:47 -08:00
2024-05-09 20:00:00 -07:00
2024-05-09 20:00:00 -07:00
2025-03-08 15:34:30 -08:00
2025-03-09 21:20:55 -07:00
2025-06-03 13:42:08 -07:00
2025-03-05 16:11:40 -08:00
2025-04-28 22:06:42 -07:00

Meshview

Start Page

The project serves as a real-time monitoring and diagnostic tool for the Meshtastic mesh network. It provides detailed insights into the network's activity, including message traffic, node positions, and telemetry data.

Key Features

  • Live Data Visualization: Users can view real-time data from the mesh network, including text messages, GPS positions, and node information.

  • Interactive Map: The site offers an interactive map displaying the locations of active nodes, helping users identify network coverage areas.

  • Mesh Graphs: Visual representations of the network's structure and connectivity are available, illustrating how nodes are interconnected.

  • Packet Analysis: Detailed information on individual data packets transmitted within the network can be accessed, including payload content and transmission paths.

  • Node Statistics: Users can explore statistics related to network traffic, such as top contributors and message volumes.

This tool is particularly useful for enthusiasts and participants of the Bay Area Meshtastic community, offering a comprehensive overview of the network's performance and facilitating troubleshooting and optimization efforts.

Samples of currently running instances:


Preparing

Requires python3.11 or above.

Clone the repo from GitHub:

git clone --recurse-submodules https://github.com/pablorevilla-meshtastic/meshview.git

Note


It is important to include the --recurse-submodules flag or the meshtastic protobufs won't be included.

Create a Python virtual environment:

cd meshview
python3 -m venv env

Install the environment requirements:

./env/bin/pip install -r requirements.txt

Install graphviz:

sudo apt-get install graphviz

Copy sample.config.ini to config.ini:

cp sample.config.ini config.ini

Edit config.ini to match your MQTT and web server settings:

nano config.ini

Example:

# -------------------------
# Server Configuration
# -------------------------
[server]
# The address to bind the server to. Use * to listen on all interfaces.
bind = *

# Port to run the web server on.
port = 8081

# Path to TLS certificate (leave blank to disable HTTPS).
tls_cert =

# Path for the ACME challenge if using Let's Encrypt.
acme_challenge =


# -------------------------
# Site Appearance & Behavior
# -------------------------
[site]
# The domain name of your site.
domain =

# Site title to show in the browser title bar and headers.
title = Bay Area Mesh

# A brief message shown on the homepage.
message = Real time data from around the bay area and beyond.

# Enable or disable site features (as strings: "True" or "False").
nodes = True
conversations = True
everything = True
graphs = True
stats = True
net = True
map = True
top = True

# Map boundaries (used for the map view).
map_top_left_lat = 39
map_top_left_lon = -123
map_bottom_right_lat = 36
map_bottom_right_lon = -121

# Weekly net details
weekly_net_message = Weekly Mesh check-in. We will keep it open on every Wednesday from 5:00pm for checkins. The message format should be (LONG NAME) - (CITY YOU ARE IN) #BayMeshNet.
net_tag = #BayMeshNet


# -------------------------
# MQTT Broker Configuration
# -------------------------
[mqtt]
# MQTT server hostname or IP.
server = mqtt.bayme.sh

# Topics to subscribe to (as JSON-like list, but still a string).
topics = ["msh/US/bayarea/#", "msh/US/CA/mrymesh/#", "msh/US/CA/sacvalley/#"]

# Port used by MQTT (typically 1883 for unencrypted).
port = 1883

# MQTT username and password.
username = meshdev
password = large4cats


# -------------------------
# Database Configuration
# -------------------------
[database]
# SQLAlchemy connection string. This one uses SQLite with asyncio support.
connection_string = sqlite+aiosqlite:///packets.db

Running Meshview

Start the database:

./env/bin/python startdb.py

Start the web server:

./env/bin/python main.py

Note


You can specify a custom config file with the --config flag:

./env/bin/python startdb.py --config /path/to/config.ini
./env/bin/python main.py --config /path/to/config.ini

Open in your browser: http://localhost:8081/


Running Meshview with mvrun.py

  • mvrun.py starts both startdb.py and main.py in separate threads and merges the output.
  • It accepts the --config argument like the others.
./env/bin/python mvrun.py

Setting Up Systemd Services (Ubuntu)

To run Meshview automatically on boot, create systemd services for startdb.py and main.py.

Note


You need to change the "User" and "/path/to/meshview" for your instance of the code on each service.

1. Service for startdb.py

Create:

sudo nano /etc/systemd/system/meshview-db.service

Paste:

[Unit]
Description=Meshview Database Initializer
After=network.target

[Service]
Type=simple
WorkingDirectory=/path/to/meshview
ExecStart=/path/to/meshview/env/bin/python /path/to/meshview/startdb.py --config /path/to/meshview/config.ini
Restart=always
RestartSec=5
User=yourusername

[Install]
WantedBy=multi-user.target

2. Service for main.py

Create:

sudo nano /etc/systemd/system/meshview-web.service

Paste:

[Unit]
Description=Meshview Web Server
After=network.target meshview-db.service

[Service]
Type=simple
WorkingDirectory=/path/to/meshview
ExecStart=/path/to/meshview/env/bin/python /path/to/meshview/main.py --config /path/to/meshview/config.ini
Restart=always
RestartSec=5
User=yourusername

[Install]
WantedBy=multi-user.target

3. Enable and start the services

sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl enable meshview-db
sudo systemctl enable meshview-web
sudo systemctl start meshview-db
sudo systemctl start meshview-web

4. Check status

systemctl status meshview-db
systemctl status meshview-web

Tip


After editing .service files, always run:

sudo systemctl daemon-reload
Description
No description provided
Readme 7.6 MiB
Languages
Python 74.3%
HTML 24.7%
Shell 0.4%
JavaScript 0.3%
Dockerfile 0.2%