This repository implements OPC-CLOUD, a novel cloud-edge collaborative framework for managing OPC UA-based microgrids as described in "Orchestration of Edge Controller and Cloud Metric Engine for Managing OPC UA-Based Microgrids"(IEEE Transactions on Industrial Informatics, 2025).
OPC-CLOUD addresses the challenge of data transmission redundancy in industrial IoT systems by orchestrating Edge Controllers (EC) and Cloud Metric Engine (CME) to optimize network traffic while maintaining data quality for microgrid monitoring and analysis.
- Adaptive Transmission Control: Uses Coefficient of Variation (CV) analysis to dynamically adjust data transmission frequencies and thresholds
- Edge-Cloud Orchestration: CME analyzes collected data patterns and configures EC transmission parameters
- Lightweight Processing: Rule-based transmission control suitable for resource-constrained edge devices
- OPC UA Standardization: Unified protocol for diverse industrial sensor vendors
-
OPC UA Generator (
go-opcua-generator-master/)- Simulates industrial sensors with configurable data patterns
- Supports 4 data types: Default (normal distribution), Categorical, Stair, Cumulative
- Configurable anomaly injection for testing
-
Edge Controller (
go-edge-controller/)- Receives sensor data via OPC UA protocol
- Applies adaptive transmission control
- Publishes filtered data to RabbitMQ
-
Intermediate Server (
go-intermediate-server/)- Manages configuration distribution to multiple edge sites
- Maintains in-memory hashmap of site configurations
- Handles configuration persistence and retransmission
-
Real-time Processing Engine (
go-real-time-processing/)- Consumes raw data from Kafka
- Performs parsing and decomposition operations
- Produces refined data back to Kafka
-
Cloud Metric Engine (
python-metricserver-master/)- Analyzes data patterns from InfluxDB
- Calculates CV and standard deviation for each sensor
- Generates adaptive transmission configurations
1. Frequency-Based Transmission (FBT)
- Periodic data transmission based on CV analysis
- Sensors classified into High/Medium/Low volatility groups
- Default frequencies: 1s (high CV), 10s (medium CV), 30s (low CV)
2. Threshold-Based Transmission (TBT)
- Transmits when data change exceeds calculated threshold
- Threshold = Standard deviation of sensor during observation period
- Responds to unexpected variations between periodic transmissions
The Cloud Metric Engine dynamically adjusts configurations:
# CV Calculation for frequency grouping
cv = stddev / mean
# Threshold calculation for change detection
threshold = stddev_of_historical_data
# Configuration update every 5 minutes based on recent data patternsBased on extensive experiments with real microgrid data (183 kWh lithium-ion battery system):
- Network Traffic Reduction: ~37% reduction compared to baseline
- CPU Utilization: Decreased by 17.83% overall system
- Memory Utilization: Decreased by 14.01% overall system
- Edge Overhead: Minimal increase (0.15-0.35% CPU, 0.86% memory)
- Data Quality: Maintained 7.81% MAPE vs 7.02% MAPE for full dataset in ML prediction tasks
- Go: Version 1.21 or higher
- Python: Version 3.10.12 or higher
- Infrastructure: RabbitMQ, Kafka, InfluxDB, PostgreSQL
1. Start OPC UA Data Generator
cd go-opcua-generator-master/cmd
go build -o generator
./generator2. Launch Edge Controller
cd go-edge-controller/cmd
go build -o edge-controller
./edge-controller3. Start Intermediate Server
cd go-intermediate-server/cmd
go build -o intermediate-server
./intermediate-server4. Run Real-time Processing
cd go-real-time-processing/cmd
go build -o rtc
./rtc5. Start Cloud Metric Engine
cd python-metricserver-master
python3 main.pyEach component uses configuration files in their respective config/ directories:
server.config: INI-format configuration for connection settingsdata.json: Sensor data schemas for the generatormetric.ini: InfluxDB and analysis parameters
[SERVER]
sensor_port = 8989
mode = threshold # threshold/change/default
interval = 21600 # Management info transmission interval (seconds)
config_port = 8990
[RABBITMQ]
host = rabbitmq
queue = test.queue
# ... other connection parameters- threshold: CV-based adaptive transmission (recommended)
- change: Zero-threshold mode (transmit any change)
- default: Basic periodic transmission (every second)
- RabbitMQ: Message queuing between edge and processing systems
- Apache Kafka: High-throughput stream processing
- InfluxDB: Time-series sensor data storage
- PostgreSQL: Metadata and configuration persistence
This research implementation is provided for academic and research purposes. Please cite the original paper when using this code.