The term Internet of Things (IoT) gets used a lot but too often it’s explained in abstract diagrams or glossy marketing slides. This demo project was created to do something different, show a complete, working IoT system, end to end, using the same tools and patterns found in real-world deployments.
This is not a simulation running entirely in a browser. It’s a real device (or a realistic stand-in), publishing live data, being controlled remotely, and feeding a production-style data pipeline exactly how modern IoT systems operate.
What This Demo Is Designed to Show
At its core, this project demonstrates how:
- Physical devices collect and publish data
- Cloud-side systems ingest, route, and store telemetry
- Dashboards visualise both live and historical information
- Devices can be managed and reconfigured remotely
- IoT systems cope with real-world network constraints
The demo focuses on renewable energy monitoring, switching between simulated solar and wind generation, but the underlying architecture is applicable to almost any IoT use case.
The Device Layer
The device is based on a Raspberry Pi with analogue inputs, representing energy generation sources.
Key characteristics:
- Data is sampled at 1Hz, each reading timestamped
- Voltage values are realistic (~240V ±5%)
- The device supports two sources: solar and wind
- A motor is activated automatically when wind mode is enabled
- All configuration is performed remotely
Crucially, the device sits behind a cellular NAT, meaning it cannot accept inbound connections. This mirrors how many real IoT deployments work in the field — and forces the system to be designed properly.
Messaging & Control with MQTT
All telemetry and configuration flows through MQTT, a lightweight publish/subscribe protocol widely used in IoT.
This enables:
- Secure outbound-only communication from the device
- Remote configuration changes without redeploying code
- Flexible update intervals (from seconds to minutes)
- A clean separation between device and application logic
The device is always the source of truth for its own state, while remaining fully manageable from the server side.
Data Routing with Node-RED
Once data reaches the broker, Node-RED handles:
- Validation and transformation of messages
- Routing data to the correct storage
- Ensuring demo and real data follow the same path
This is an important design choice: demo data is never “faked” at the dashboard. It flows through the same infrastructure as real device data, ensuring accuracy and credibility.
Time-Series Storage with InfluxDB
All measurements are written to InfluxDB, a purpose-built time-series database.
This allows:
- Efficient storage of high-frequency telemetry
- Fast historical queries
- Clean separation of measurements (solar, wind, motor state)
- Reliable graphing and trend analysis
The Web Dashboard
The front end is a Flask-based web application that provides:
- Live system status
- Historical graphs
- Active energy source visibility
- Motor state indication
- User authentication and admin controls
- Alerting infrastructure
- A built-in blog for IoT commentary and updates
This turns the demo into both a technical showcase and a content platform.
Demo Mode: Realistic, Safe, and Useful
To make the system easy to demonstrate, a built-in demo mode is included.
In demo mode:
- Solar data is generated for a fixed period
- The system automatically switches to wind
- The motor activates accordingly
- All values remain realistic
- Data is indistinguishable from real device data downstream
This makes the project ideal for live demonstrations, testing, screenshots, and presentations without requiring permanent hardware setup.
Why This Approach Matters
Many IoT demos stop at UI mock-ups or isolated scripts. This project deliberately avoids that by:
- Using production-grade tools
- Respecting real networking constraints
- Maintaining a single data pipeline
- Designing for extension and scale
The result is a system that doesn’t just look like IoT, it behaves like it.