Project Overview
This project involved designing and deploying an IoT monitoring system for a 1.2 MW solar power system at an industrial plant in Vietnam.
Key Challenge
- Multi-source data collection: The system had to collect data from energy meters, sensors, and solar-related electrical equipment.
- Modbus communication: Devices communicated through Modbus RTU and Modbus TCP, so the data needed to be read and handled correctly.
- Data processing and mapping: Raw data had to be parsed, normalized, mapped, and stored in a clean structure before being displayed.
- Long-term data usability: The system needed to support both real-time monitoring and historical analysis, troubleshooting, comparison, and reporting.
- User-friendly dashboard: Operators needed to move easily from a high-level system overview to detailed meter-level information without confusion.
Solution Implemented
Meter / Sensor (Modbus RTU/TCP)
- Electrical meters and sensors collect real-time values from the solar plant, including active power, reactive power, apparent power, energy, voltage, current, frequency, and power factor.
- Data is collected through Modbus RTU and Modbus TCP depending on the device and communication interface.
Node-RED
- Node-RED runs on Raspberry Pi 5 and works as the data processing layer.
- It connects to the meters through Modbus RTU/TCP, reads the raw data, processes the values, maps them into a consistent structure, and sends the cleaned data into the database.
InfluxDB
- InfluxDB is used as the time-series database.
- It stores data together with accurate timestamps, making it suitable for real-time monitoring, historical trends, and reporting.
- The database structure is designed to make data mapping clear, scalable, and easy to extend when new devices or measurements are added.
Grafana (User Interface)
- Grafana is used to build the user interface.
- The dashboard allows users to monitor the solar system from overview to detail, including solar generation, grid power, load consumption, phase values, voltage, current, frequency, and power factor.
- Users can also export system data from Grafana for reporting and deeper analysis.
Meter / Sensor → Node-RED → InfluxDB → Grafana
Meter / Sensor
Collects Modbus RTU/TCP electrical and environmental data from the solar plant.
Node-RED
Polls devices, processes raw values, normalizes payloads, and routes clean data.
InfluxDB
Stores timestamped time-series data for real-time trends, history, and reporting.
Grafana
Provides dashboards from system overview to detailed meter-level analysis.
Data Processing Layer - Node-RED
- Runs on Raspberry Pi 5 and acts as the central processing layer of the monitoring system.
- Connects to the electrical meters through Modbus RTU and Modbus TCP. After reading the data, Node-RED processes the raw values, applies the required mapping, normalizes the payload structure, and sends the final data into the database for storage.
Storage Layer - InfluxDB
InfluxDB is used as the database because it is designed for time-series data.
Each record is stored with a timestamp, which makes data retrieval accurate and clear when building historical charts, reports, and performance analysis views.
The database structure is designed with clear mapping between devices, measurements, and electrical parameters. This makes the system easier to maintain and expand when new meters, sensors, or dashboard requirements are added in the future.
User Interface - Grafana
Grafana is used as the visualization and user interface layer.
The dashboards are designed to help users monitor the operation and performance of the solar system from overview to detail. The main dashboard provides a quick summary of solar yield, grid supply, and load consumption, while the detailed dashboards show meter-level electrical values such as phase power, voltage, current, frequency, and power factor.
Grafana also allows users to export system data for reports. This helps make analysis more accurate, faster, and easier for operation and maintenance work.
Credit
This project was completed together with Mr. Hao Ho Huy.
Tech Highlights
Modbus Integration
Technical Implementation: Modbus RTU/TCP polling and mapping
Benefit: Reliable data collection across meters, sensors, and solar equipment
Edge Deployment
Technical Implementation: Raspberry Pi 5 with Docker Compose
Benefit: Maintainable local infrastructure for daily operation
Time-Series Storage
Technical Implementation: InfluxDB measurement and timestamp structure
Benefit: Historical analysis, trend review, and export-ready reporting
Operational Dashboard
Technical Implementation: Grafana overview and meter-level dashboards
Benefit: Clear monitoring from system summary to electrical detail
Value Delivered to the Client
- Real-time visibility of solar generation, grid supply, and load consumption from one centralized interface.
- Historical time-series data storage for analysis, troubleshooting, comparison, and reporting.
- Clear and scalable data mapping structure that can support additional meters, sensors, dashboards, integrations, or project sites.
- Edge deployment using Raspberry Pi 5 and Docker Compose, improving maintainability and reducing dependence on remote infrastructure.