282 lines
7.7 KiB
Markdown
282 lines
7.7 KiB
Markdown
# Meshtastic MQTT Dashboard - Project Summary
|
|
|
|
## Overview
|
|
|
|
A complete, production-ready Node.js web application for monitoring and managing Meshtastic mesh networks via MQTT. This is a fully self-contained solution similar to the Home Assistant integration.
|
|
|
|
## What Was Built
|
|
|
|
### Backend (Node.js + Express)
|
|
|
|
#### Core Server (`src/server.js`)
|
|
- Express.js web server
|
|
- Session management with express-session
|
|
- Security middleware (Helmet, CORS, rate limiting)
|
|
- Graceful shutdown handling
|
|
- Error handling middleware
|
|
|
|
#### Authentication System (`src/auth/`)
|
|
- User registration and login with bcrypt password hashing
|
|
- Session-based authentication
|
|
- Activity logging for security auditing
|
|
- User creation script for initial setup
|
|
|
|
#### Database Layer (`src/database/`)
|
|
- SQLite database with better-sqlite3
|
|
- Comprehensive schema for:
|
|
- Users and authentication
|
|
- Meshtastic nodes
|
|
- GPS positions
|
|
- Text messages
|
|
- Device telemetry
|
|
- Activity logs
|
|
- Prepared statements for performance and security
|
|
- Automatic database initialization
|
|
|
|
#### MQTT Client (`src/mqtt/`)
|
|
- Automatic connection to Meshtastic MQTT broker
|
|
- Real-time message processing
|
|
- Support for multiple message types:
|
|
- Text messages
|
|
- Position updates
|
|
- Node information
|
|
- Telemetry data
|
|
- Message publishing for sending to mesh
|
|
- Automatic reconnection handling
|
|
|
|
#### REST API (`src/routes/api.js`)
|
|
Complete API with endpoints for:
|
|
- Authentication (login/logout)
|
|
- Node management (list all, get details)
|
|
- Position tracking (latest positions, history)
|
|
- Message history (view and send)
|
|
- Telemetry data
|
|
- Statistics dashboard
|
|
- Data purging
|
|
|
|
#### Background Services (`src/services/`)
|
|
- Cron service for scheduled tasks
|
|
- Automatic data purging based on retention policy
|
|
- Configurable schedule (default: daily at 2 AM)
|
|
|
|
#### Logging System (`src/utils/`)
|
|
- Winston-based structured logging
|
|
- Multiple log files (combined, errors)
|
|
- Log rotation
|
|
- Configurable log levels
|
|
|
|
#### Configuration (`src/config/`)
|
|
- Environment variable based configuration
|
|
- Secure defaults
|
|
- Easy customization for different deployments
|
|
|
|
### Frontend (Vanilla JavaScript)
|
|
|
|
#### Modern Web Interface (`public/`)
|
|
- **Responsive Design**: Works on desktop, tablet, and mobile
|
|
- **Clean UI**: Modern styling with CSS variables for easy theming
|
|
- **No Framework Dependencies**: Pure JavaScript for simplicity
|
|
|
|
#### Features:
|
|
1. **Login Screen**
|
|
- Secure authentication
|
|
- Form validation
|
|
- Error handling
|
|
|
|
2. **Dashboard Overview**
|
|
- Real-time statistics cards
|
|
- Recent message feed
|
|
- MQTT connection status indicator
|
|
|
|
3. **Interactive Map**
|
|
- Leaflet.js integration
|
|
- GPS position tracking
|
|
- Clickable markers with node info
|
|
- Auto-fit to show all nodes
|
|
|
|
4. **Message Management**
|
|
- Send messages to mesh network
|
|
- View message history with metadata
|
|
- Channel selection
|
|
- Signal quality indicators (SNR, RSSI)
|
|
|
|
5. **Node Monitoring**
|
|
- Grid view of all nodes
|
|
- Online/offline status
|
|
- Detailed node information modal
|
|
- Battery levels, signal strength
|
|
- Hardware information
|
|
|
|
6. **Settings Panel**
|
|
- Manual data purging
|
|
- Configurable retention periods
|
|
- Application information
|
|
|
|
### Security Features
|
|
|
|
- Password hashing with bcrypt (10 rounds)
|
|
- Session-based authentication
|
|
- HTTP security headers (Helmet)
|
|
- Rate limiting on API endpoints
|
|
- CSRF protection ready
|
|
- Activity logging for audit trails
|
|
- Secure session cookies
|
|
|
|
### Database Schema
|
|
|
|
**Tables Created:**
|
|
1. `users` - User accounts
|
|
2. `nodes` - Meshtastic node information
|
|
3. `positions` - GPS location history
|
|
4. `messages` - Text message history
|
|
5. `telemetry` - Device telemetry data
|
|
6. `activity_log` - User activity tracking
|
|
|
|
**Indexes Created:**
|
|
- Node ID lookups
|
|
- Position timestamps
|
|
- Message timestamps and senders
|
|
- Telemetry tracking
|
|
|
|
### Configuration Options
|
|
|
|
All configurable via `.env`:
|
|
- Server port
|
|
- MQTT broker settings
|
|
- Session secrets
|
|
- Data retention policies
|
|
- Cron schedules
|
|
- Log levels
|
|
- Rate limiting
|
|
|
|
## File Structure
|
|
|
|
```
|
|
meshtastic-mqtt-dashboard/
|
|
├── src/
|
|
│ ├── auth/
|
|
│ │ └── auth.js # Authentication logic
|
|
│ ├── config/
|
|
│ │ └── config.js # Configuration management
|
|
│ ├── database/
|
|
│ │ ├── db.js # Database initialization
|
|
│ │ └── queries.js # Prepared statements
|
|
│ ├── mqtt/
|
|
│ │ └── client.js # MQTT client implementation
|
|
│ ├── routes/
|
|
│ │ └── api.js # REST API endpoints
|
|
│ ├── scripts/
|
|
│ │ └── createUser.js # User creation utility
|
|
│ ├── services/
|
|
│ │ └── cron.js # Background job scheduler
|
|
│ ├── utils/
|
|
│ │ └── logger.js # Logging utility
|
|
│ └── server.js # Main application entry
|
|
├── public/
|
|
│ ├── css/
|
|
│ │ └── style.css # Modern UI styles
|
|
│ ├── js/
|
|
│ │ └── app.js # Frontend application
|
|
│ └── index.html # Single page app
|
|
├── .env.example # Environment template
|
|
├── .gitignore # Git ignore rules
|
|
├── package.json # Dependencies
|
|
├── README.md # Full documentation
|
|
├── QUICKSTART.md # Quick start guide
|
|
└── PROJECT_SUMMARY.md # This file
|
|
```
|
|
|
|
## Technology Stack
|
|
|
|
### Backend
|
|
- **Node.js**: Runtime environment
|
|
- **Express.js**: Web framework
|
|
- **better-sqlite3**: Fast SQLite database
|
|
- **mqtt**: MQTT client library
|
|
- **bcryptjs**: Password hashing
|
|
- **express-session**: Session management
|
|
- **winston**: Logging
|
|
- **node-cron**: Job scheduling
|
|
- **helmet**: Security headers
|
|
- **express-rate-limit**: Rate limiting
|
|
|
|
### Frontend
|
|
- **Vanilla JavaScript**: No frameworks, pure JS
|
|
- **Leaflet.js**: Interactive maps
|
|
- **OpenStreetMap**: Map tiles
|
|
- **CSS3**: Modern styling with variables
|
|
- **Fetch API**: HTTP requests
|
|
|
|
### Database
|
|
- **SQLite**: Embedded database
|
|
- **WAL mode**: Better concurrency
|
|
|
|
## Key Features Implemented
|
|
|
|
✅ MQTT automatic connection and message storage
|
|
✅ SQLite database with comprehensive schema
|
|
✅ User authentication with bcrypt
|
|
✅ Session management
|
|
✅ REST API for all operations
|
|
✅ Interactive map with GPS tracking
|
|
✅ Message viewing and sending
|
|
✅ Node monitoring and metadata
|
|
✅ Automatic data purging with cron
|
|
✅ Manual data purging button
|
|
✅ Activity logging
|
|
✅ Comprehensive error handling
|
|
✅ Security best practices
|
|
✅ Modern, responsive UI
|
|
✅ Real-time statistics
|
|
✅ Configurable via environment variables
|
|
✅ Complete documentation
|
|
|
|
## Getting Started
|
|
|
|
1. Install dependencies: `npm install`
|
|
2. Copy environment file: `cp .env.example .env`
|
|
3. Edit `.env` with your settings
|
|
4. Create user: `npm run create-user`
|
|
5. Start server: `npm start`
|
|
6. Open browser: `http://localhost:3000`
|
|
|
|
See `QUICKSTART.md` for detailed instructions.
|
|
|
|
## Production Ready
|
|
|
|
This application is production-ready with:
|
|
- Proper error handling
|
|
- Security best practices
|
|
- Logging and monitoring
|
|
- Graceful shutdown
|
|
- Session management
|
|
- Rate limiting
|
|
- Input validation
|
|
- SQL injection protection (prepared statements)
|
|
- XSS protection
|
|
- CSRF ready
|
|
|
|
## Future Enhancement Ideas
|
|
|
|
- WebSocket support for real-time updates
|
|
- User management interface
|
|
- Email notifications
|
|
- Export data to CSV/JSON
|
|
- Advanced filtering and search
|
|
- Grafana integration
|
|
- Multi-user permissions
|
|
- Custom alerts and triggers
|
|
- Mobile app (PWA)
|
|
|
|
## License
|
|
|
|
MIT License - Free to use, modify, and distribute
|
|
|
|
## Support
|
|
|
|
See README.md for troubleshooting and detailed documentation.
|
|
|
|
---
|
|
|
|
**Built with ❤️ for the Meshtastic community**
|