Files
meshcore-usb-dashboard/PROJECT_SUMMARY.md
T
Will Bradley 4767b67460 initial commit
2025-10-11 17:03:31 -07:00

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**