Move meshtastic mqtt project to meshcore usb project

This commit is contained in:
zyphlar
2026-04-15 13:45:38 -07:00
parent 150c61fe65
commit 427fbc1b4e
28 changed files with 1550 additions and 4011 deletions
+14 -233
View File
@@ -1,12 +1,13 @@
# Meshtastic MQTT Dashboard
# Meshcore Dashboard (USB-based)
A complete, self-contained Node.js web application for monitoring and managing Meshtastic networks via MQTT. Features real-time message tracking, GPS location mapping, node management, and automatic data retention with secure authentication.
A complete, self-contained Node.js web application for monitoring and managing a Meshcore client device via USB. Features real-time message tracking, GPS location mapping, and automatic data retention with secure authentication.
![Dashboard Preview](https://via.placeholder.com/800x400?text=Meshtastic+Dashboard)
![Dashboard Screenshot](screenshot-1.png)
![Messaging Screenshot](screenshot-2.png)
## Features
- **Real-time MQTT Integration** - Automatically connects to Meshtastic MQTT broker and stores all messages
- **Real-time USB Serial Integration** - Automatically connects to Meshcore USB serial device and stores all messages
- **Interactive Map View** - View GPS locations of all nodes on an interactive Leaflet map
- **Message Management** - View message history and send messages to the mesh network
- **Node Monitoring** - Track all nodes with detailed metadata including battery levels, signal strength, and telemetry
@@ -16,42 +17,18 @@ A complete, self-contained Node.js web application for monitoring and managing M
- **SQLite Database** - All data stored locally in a SQLite database
- **Comprehensive Logging** - Winston-based logging for debugging and monitoring
## Architecture
```
meshtastic-mqtt-dashboard/
├── src/
│ ├── auth/ # Authentication and authorization
│ ├── config/ # Application configuration
│ ├── database/ # SQLite database setup and queries
│ ├── mqtt/ # MQTT client and message handlers
│ ├── routes/ # Express API routes
│ ├── scripts/ # Utility scripts (user creation, etc.)
│ ├── services/ # Background services (cron jobs)
│ ├── utils/ # Utilities (logging, etc.)
│ └── server.js # Main application entry point
├── public/
│ ├── css/ # Stylesheets
│ ├── js/ # Frontend JavaScript
│ └── index.html # Main HTML file
├── data/ # SQLite database (auto-created)
├── logs/ # Application logs (auto-created)
├── .env # Environment configuration
└── package.json # Dependencies
```
## Prerequisites
- Node.js 16.x or higher
- npm or yarn
- Access to a Meshtastic MQTT broker (default: mqtt.meshtastic.org)
- Access to a Meshcore device via USB-Serial
## Installation
1. **Clone or navigate to the project directory:**
```bash
cd meshtastic-mqtt-dashboard
cd meshcore-usb-dashboard
```
2. **Install dependencies:**
@@ -68,32 +45,7 @@ Copy the example environment file and edit it:
cp .env.example .env
```
Edit `.env` with your settings:
```env
# Server Configuration
PORT=3000
NODE_ENV=production
# Session Secret (CHANGE THIS!)
SESSION_SECRET=your-random-secret-string-here
# MQTT Configuration
MQTT_BROKER=mqtt://mqtt.meshtastic.org
MQTT_PORT=1883
MQTT_USERNAME=meshdev
MQTT_PASSWORD=large4cats
MQTT_TOPIC=msh/US/#
# Data Retention (in days)
DATA_RETENTION_DAYS=30
# Cron schedule for automatic data purging (daily at 2 AM)
PURGE_CRON_SCHEDULE=0 2 * * *
# Logging
LOG_LEVEL=info
```
Edit `.env` with your settings, especially the name of your serial port (i.e. COM10)
4. **Create your first user:**
@@ -124,22 +76,6 @@ http://localhost:3000
Login with the username and password you created.
## Configuration
### MQTT Settings
The application connects to the Meshtastic MQTT broker to receive messages. Configure these settings in `.env`:
- **MQTT_BROKER**: The MQTT broker URL (default: mqtt://mqtt.meshtastic.org)
- **MQTT_USERNAME**: MQTT username (default: meshdev)
- **MQTT_PASSWORD**: MQTT password (default: large4cats)
- **MQTT_TOPIC**: MQTT topic to subscribe to (default: msh/US/# for all US channels)
To monitor a specific region, change the topic:
- `msh/US/#` - All US channels
- `msh/EU/#` - All EU channels
- `msh/US/2/json/#` - Specific channel
### Data Retention
Configure automatic data purging:
@@ -149,98 +85,9 @@ Configure automatic data purging:
You can also manually purge data from the Settings tab in the web interface.
### Security
## Database
**IMPORTANT**: Change the `SESSION_SECRET` in your `.env` file to a random string for production use.
## Usage
### Dashboard Overview
The dashboard provides several tabs:
1. **Overview** - Statistics and recent messages at a glance
2. **Map** - Interactive map showing GPS locations of all nodes
3. **Messages** - Send and view message history
4. **Nodes** - View all discovered nodes and their metadata
5. **Settings** - Data management and application settings
### Sending Messages
1. Navigate to the **Messages** tab
2. Type your message in the text field
3. Choose a device to send **From**
4. Click **Send**
Messages will be broadcast to the mesh network via MQTT.
### Viewing Node Details
1. Navigate to the **Nodes** tab
2. Click on any node card to view detailed information
3. Modal will display:
- Node ID and names
- Hardware model and firmware version
- Battery level and voltage
- Signal metrics
- Last heard timestamp
### Map View
The **Map** tab displays GPS locations of all nodes:
- Click on markers to see node details
- Map automatically fits to show all nodes
- Click **Refresh Map** to update positions
### Data Management
From the **Settings** tab:
1. Select retention period (7, 14, 30, 60, or 90 days)
2. Click **Purge Old Data**
3. Confirm the action
This will delete messages, positions, and telemetry older than the selected period.
## API Endpoints
The application provides a REST API for programmatic access:
### Authentication
- `POST /api/login` - Login with username/password
- `POST /api/logout` - Logout current session
- `GET /api/auth/status` - Check authentication status
### Data Access
- `GET /api/nodes` - Get all nodes
- `GET /api/nodes/:nodeId` - Get specific node details
- `GET /api/positions` - Get latest positions for all nodes
- `GET /api/positions/:nodeId` - Get position history for a node
- `GET /api/messages` - Get recent messages
- `GET /api/messages/node/:nodeId` - Get messages for a specific node
- `GET /api/telemetry/:nodeId` - Get telemetry history for a node
- `GET /api/stats` - Get dashboard statistics
### Actions
- `POST /api/messages/send` - Send a message to the mesh
- `POST /api/purge` - Purge old data
### Status
- `GET /api/mqtt/status` - Get MQTT connection status
All endpoints (except login) require authentication.
## Database Schema
The application uses SQLite with the following tables:
- **users** - User accounts for authentication
- **nodes** - Meshtastic node information
- **positions** - GPS position updates
- **messages** - Text messages
- **telemetry** - Device telemetry data
- **activity_log** - User activity logging
The application uses SQLite.
Database file location: `data/meshtastic.db`
@@ -253,81 +100,15 @@ Logs are stored in the `logs/` directory:
Log level can be configured with `LOG_LEVEL` in `.env` (debug, info, warn, error).
## Troubleshooting
### Cannot connect to MQTT broker
1. Check your internet connection
2. Verify MQTT broker URL in `.env`
3. Check username/password if using a private broker
4. Review logs in `logs/error.log`
### No data appearing
1. Verify MQTT connection (check status indicator in header)
2. Ensure MQTT topic is correct for your region
3. Check that there is active mesh traffic on the topic
4. Review logs for any error messages
### Messages sent over MQTT aren't sent over the radio
1. Ensure the sending radio (node) has a channel called "mqtt"
2. Ensure the node has Uplink and Downlink enabled on both the default channel (LongFast, etc) and the mqtt channel
3. Ensure the node's setting under LoRa is "Ok to MQTT"
### Database errors
1. Ensure the `data/` directory is writable
2. Check disk space
3. Try deleting `data/meshtastic.db` and restarting (this will delete all data)
### Login issues
1. Verify user was created successfully with `npm run create-user`
2. Check SESSION_SECRET is set in `.env`
3. Clear browser cookies and try again
## T-Deck
- It's touch screen, which is often easier than using the trackball.
- To pair over Bluetooth, power on the T-Deck and LONG PRESS (about 2 seconds) the Meshtastic logo.
- To set the timezone properly, it should be `PST8PDT,M3.2.0,M11.1.0` for PST
- To get map tiles: https://www.jeffgeerling.com/blog/2025/adding-gps-and-grid-maps-my-meshtastic-t-deck
## Development
### Project Structure
- **Backend**: Express.js server with REST API
- **Frontend**: Vanilla JavaScript (no frameworks)
- **Database**: SQLite with better-sqlite3
- **MQTT**: mqtt.js client
- **Map**: Leaflet.js for interactive maps
- **Logging**: Winston for structured logging
- **Security**: bcrypt for password hashing, express-session for sessions
### Adding Features
1. **New API endpoint**: Add route to `src/routes/api.js`
2. **New database table**: Modify `src/database/db.js` and `src/database/queries.js`
3. **MQTT message handler**: Update `src/mqtt/client.js`
4. **Frontend UI**: Modify `public/index.html`, `public/css/style.css`, and `public/js/app.js`
## Contributing
Contributions are welcome! Please ensure:
1. Code follows existing style conventions
2. All features are properly documented
3. Security best practices are followed
4. No sensitive data in commits
Contributions are welcome!
## Security Considerations
- Change default `SESSION_SECRET` in production
- Use HTTPS in production (configure reverse proxy)
- Regularly update dependencies
- Review and limit access to MQTT credentials
- Use strong passwords for user accounts
- Enable firewall rules to restrict access
@@ -341,12 +122,12 @@ For issues and feature requests, please open an issue on the project repository.
## Acknowledgments
- Meshtastic project for the excellent mesh networking platform
- Meshcore project
- OpenStreetMap for map tiles
- All contributors and testers
---
**Version**: 1.0.0
**Author**: Meshtastic Community
**Last Updated**: 2025
**Author**: zyphlar
**Last Updated**: 2026