Software-only edge-to-cloud Industrial IoT integration project for CO326 Computer Systems Engineering - Industrial Networks.
E/20/259 Munasinghe SE/20/328 Rathnaweera R.V.C.E/20/455 Dilshan W.M.NE/20/456 Dulaj U.P.S.D.This project implements a simulated industrial digital twin for Motor-01 overheating monitoring with relay trip simulation. The system models one main process variable, Motor/WindingTemperature, and one actuator, a protective relay that can be controlled in AUTO, TRIP, and RESET modes.
The objective is to demonstrate a realistic Industrial IoT pipeline using a software-only setup that still follows the required edge-to-cloud architecture:
The project is centered on a single industrial use case:
Motor-01This is a software simulation, not a hardware deployment. The edge device behavior and lightweight ML runtime are designed to represent an ESP32-class constrained environment using container resource limits and simple inference logic.
The pipeline consists of these major components:
publisher
Generates simulated motor temperature data and relay feedback state.mqtt
Carries Sparkplug-style telemetry and relay command messages.node-red
Bridges Sparkplug device data into a Unified Namespace and applies orchestration logic.ai-brain
Runs a lightweight anomaly-scoring model using statistical thresholding.backend
Consumes telemetry, calls the ML service, estimates Remaining Useful Life (RUL), writes historian records, and exposes APIs for the dashboard.influxdb
Stores time-series telemetry and derived analytics.grafana
Visualizes temperature, anomaly score, RUL, and other historian data.frontend
Shows live digital twin state and allows relay commands.For the detailed architecture diagrams and data-flow sequence, see docs/ARCHITECTURE.md.
motorTemperatureC to the lightweight ML service for anomaly scoring.spBv1.0/CO326/DDATA/Plant1.Line1.MotorCell/Motor01spBv1.0/CO326/DCMD/Plant1.Line1.MotorCell/Motor01uns/CO326/Plant1/Line1/MotorCell/Motor01/telemetryhttp://localhost:5173http://localhost:5000http://localhost:5001http://localhost:1880http://localhost:8086http://localhost:3000