A 3-phase transformer monitor for Sudan's electrical grid, rebuilt in 2026.
You're looking at a faithful rebuild of the second industrial IoT system I deployed in Khartoum — same 24-field telemetry payload, same per-phase voltage / current / power / frequency monitoring, same customer-approved dashboard design.
The story
Following the success of the Canar fuel tanker monitor at GTS Hi-Tech, the next major IoT project we delivered was for the Sudanese Electrical Distribution Company (SEDC) — the national utility responsible for the low-voltage distribution network across Khartoum and beyond.
The brief was straightforward but technically demanding: monitor high-load 1000–1500 kVA distribution transformers across the city in real time. Operators needed to see per-phase voltages (line-to-neutral and line-to-line), per-phase currents, active / reactive / apparent power, power factor, frequency, voltage angles, and accumulated energy — for every single device. Plus alarms on overvoltage, overcurrent, and phase imbalance.
We picked the same stack that worked for Canar — energy-meter devices publishing over MQTT to a Node-RED backend on our VPS, with a ThingsBoard CE dashboard for the operators. The original deployment covered three substations in greater Khartoum: Jabra (Alsajdeen), Ombada (Ahmed Altayeb), and Shambat Square 11 (Mohammed Awad Hamza). The system ran in production and was used by SEDC operators to spot overload conditions before they tripped breakers.
Then in April 2023, the war hit. Same outcome as Canar — the VPS, the ThingsBoard server, and direct access to the substations were lost. The Node-RED flow exports and a 627 KB ThingsBoard dashboard backup (43 widgets across an overview + drill-down) survived on a personal drive. This dashboard is rebuilt from those backups, three years later, from Saudi Arabia.
What you're looking at
A live monitoring dashboard for 6 virtual distribution transformers across the Khartoum metro area. The first three are the actual production sites from the 2023 deployment; the other three are real Khartoum neighborhoods added to demonstrate every operational state at once.
- SEDC-001 — Jabra Alsajdeen (Khartoum) · 1000 kVA · normal
- SEDC-002 — Ombada Alhara 1, Ahmed Altayeb (Omdurman) · 1000 kVA · normal
- SEDC-003 — Shambat Square 11, Mohammed Awad Hamza (Khartoum North) · 1500 kVA · high load (warning)
- SEDC-004 — Bahri Industrial Area (Khartoum North) · 1500 kVA · overload (alarm)
- SEDC-005 — Amarat (Khartoum) · 1500 kVA · normal
- SEDC-006 — Souq Libya (Omdurman) · 2500 kVA · offline (no telemetry)
Each transformer emits a fresh telemetry packet every few seconds. The simulator generates realistic per-phase fluctuation, biases each device toward its assigned scenario (normal / warning / alarm / inactive), and frequency drift around the nominal 50 Hz — everything the operator would see on a live grid.
Two modes of operation
dummy-generator-sedc.json, and this dashboard automatically connects to its WebSocket at ws://localhost:1880/ws/transformers. The badge in the top right flips from "Browser simulator" to "Node-RED WS" and you're seeing data flow through the actual rebuilt backend pipeline.How it works
Below is a mockup of the SEDC Node-RED simulator flow — same structure as what you'd see if you imported dummy-generator-sedc.json into your own Node-RED instance:
Each meter publishes a 3-element JSON array: element [0] holds the system power factor and frequency, element [1] holds a 24-number array of all the raw phase readings, and element [2] holds the accumulated energy counter.
The 24-field payload structure (faithful to the real meters):
DATA[0..2] = V_A, V_B, V_C (phase-to-neutral, volts) DATA[3..5] = V_AB, V_BC, V_AC (phase-to-phase, volts) DATA[6..8] = I_A, I_B, I_C (currents, amps) DATA[9..11] = P_A, P_B, P_C (active power, W) DATA[12..14] = Q_A, Q_B, Q_C (reactive power, VAR) DATA[15..17] = S_A, S_B, S_C (apparent power, VA) DATA[18..20] = PF_A, PF_B, PF_C (power factor) DATA[21..23] = VAngle_AB, VAngle_BC, VAngle_AC (degrees)
Per-device thresholds (I_limit for over-current, V2_limit for over-voltage line-to-line) come from the device attributes set in ThingsBoard. The decoder routes each reading by IMEI and pushes both telemetry (the 24 readings) and attributes (averages + alarm flags) to the dashboard.
The original system, for reference
The 2023 production deployment had:
- 3 distribution transformers (Jabra, Ombada, Shambat) totaling 3.5 MVA monitored
- Energy-meter devices publishing JSON over MQTT (topic
gts_energy) on broker 143.244.147.158:1883 - Node-RED on a VPS, decoding the 24-element DATA array, computing averages and checking alarms
- ThingsBoard CE for the SEDC operator dashboard (43-widget detail page per device)
- MySQL
iot_energy.payloadtable with 30 columns of historical readings - Email + SMS alerts to GTS engineers when overvoltage or overcurrent triggered
This rebuild keeps the exact same color palette and per-phase widget layout — line-to-neutral voltages, line-to-line voltages, phase currents, per-phase power factors, voltage angles, plus aggregate KPIs (active power, apparent power, reactive power, frequency, accumulated energy).
Tech stack
- Node-RED (flow-based)
- MQTT subscribe (topic gts_energy)
- WebSocket egress (replacing the lost ThingsBoard MQTT)
- Next.js 16 (App Router, static export)
- React 19
- Tailwind CSS 4
- Leaflet + react-leaflet
- Recharts (per-phase line charts)
- Lucide React (icons)
- Netlify (static)
- No server runtime required
- 3-phase energy meters
- MQTT publish over GSM/3G
- 24-field JSON telemetry
- IMEI-based device identity
Why a faithful rebuild
Power monitoring is unforgiving — there's no faking 3-phase electrical data. Every value has to relate sensibly to every other: V_AB ≈ V_A × √3, S² ≈ P² + Q², voltage angles ≈ 120° apart, etc. The simulator respects these relationships, the alarm logic uses the same per-device I_limit and V2_limit thresholds the real meters were configured with, and the dashboard shows the same per-phase breakdowns SEDC operators trusted in 2023.
If a real meter came online tomorrow, the Node-RED decoder is identical to the one that ran in production — same 24-element array unpacking, same averaging logic, same threshold checks.
Built at GTS Hi-Tech

GTS Hi-Tech
(formerly Gezira Telecom Solutions)ICT solutions provider operating across Sudan, UAE, and South Sudan. GTS specializes in networking, IoT, cybersecurity, CCTV, cloud infrastructure, and solar power for enterprise clients across East Africa and the Gulf.
I was on the GTS team as System Administrator and IoT / Software Developer, and I designed, built, and maintained the SEDC transformer monitoring system end-to-end — meter integration, MQTT pipeline, Node-RED decoder, ThingsBoard dashboard, and the on-site deployment in Khartoum. I continue to collaborate with GTS on projects on a freelance basis.
About me
I'm Babakr Hussain Babakr Saad. I built the original SEDC system as the System Administrator and IoT / Software Developer at GTS Hi-Tech in Sudan, and I still collaborate with them on projects today. I now also work in Saudi Arabia as an IT & Tendering Coordinator at Naif Obaid Al-Shammari Contracting Establishment, while continuing to develop software on the side.
See also
For the first project in this series — the Canar fuel tanker monitor — see fuel-tanker-monitor.netlify.app. Same stack, different domain (binary protocol over TCP instead of JSON over MQTT, fuel tanks instead of transformers).