A Docker-based IoT monitoring system that combines MQTT messaging, InfluxDB time-series database, and Grafana visualization for real-time data collection and monitoring.
The system consists of the following components:
- MQTT Broker (Eclipse Mosquitto)
 - InfluxDB time-series database
 - MQTT Publisher (Java-based)
 - MQTT to InfluxDB Scrapper
 - Grafana dashboard
 
- Docker and Docker Compose
 - Java Development Kit (JDK) for building custom images
 - Git
 
- Clone the repository
 - Create the following secret files:
.env.influxdb2-admin-username.env.influxdb2-admin-password.env.influxdb2-admin-token
 - Configure environment variables in 
.envfile - Build the custom Docker images:
docker build -t mqtt-pub-java:latest ./mqtt-publisher docker build -t mqtt-influx-scrapper:latest ./mqtt-scrapper
 - Start the services:
docker-compose up -d
 
| Variable | Description | Default Value | 
|---|---|---|
| INFLUXDB_ORG | InfluxDB organization name | pathvariable | 
| INFLUXDB_BUCKET | InfluxDB bucket name | smartgarden | 
| GRAFANA_USER | Grafana admin username | admin | 
| GRAFANA_PASSWORD | Grafana admin password | adminpassword | 
| MQTT_TOPIC | MQTT topic to subscribe/publish | nursery | 
| INFLUXDB_TOKEN | InfluxDB authentication token | MyInitialAdminToken0== | 
| GOOGLE_API_KEY | Google AI Studio API Key | none, need account | 
Note: Google Ai Studio has a free tier for demo purposes
- Port: 1884 (external), 1883 (internal)
 - Anonymous access enabled
 - Persistent storage for messages and logs
 
- Port: 8086
 - Secured with username/password
 - Data and config persistence
 
- Port: 3001 (external), 3000 (internal)
 - Pre-configured with InfluxDB data source
 - Customizable dashboards
 
- Access Grafana at 
http://localhost:3001 - Login with credentials from environment variables
 - Access the existing dashboard that is connected to the InfluxDB datasource
 
- IoT devices publish data to MQTT broker
 - MQTT Scrapper subscribes to topics and forwards data to InfluxDB
 - Grafana queries InfluxDB and displays data in dashboards