Luca Nguyen
Back to projects

Solar Monitoring / Industrial IoT / Energy Management

IoT System for a 1.2 MW Rooftop Solar Plant

An edge-deployed monitoring platform that centralizes solar production, grid import/export, load consumption, and electrical parameters for an industrial rooftop solar plant.

Location:
Vietnam
Published:
Node-RED InfluxDB Grafana Raspberry Pi 5 Modbus RTU/TCP Docker

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.

Main overview dashboard showing solar yield, grid supply, load consumption, and system trend.

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.
Node-RED flow used for polling, processing, mapping, and routing data before 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.

Solar energy meter dashboard showing PV power, phase data, voltage, current, frequency, and power factor.
Grid Energy Meter dashboard showing import/export energy, active power, phase power, and grid quality values.

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.