A 2023 fuel monitoring system from Sudan, rebuilt in 2026.
What you're looking at is a faithful rebuild of an industrial IoT system originally deployed in Khartoum — same binary protocol, same customer-approved dashboard design, modern web stack.
The story
In 2022–2023, I was working at GTS Hi-Tech (then trading as Gezira Telecom Solutions) in Sudan when we won a project with Canar, one of the country's telecom companies. They needed to monitor fuel levels in the tanks powering their backup generators across multiple sites — Khartoum, Omdurman, and others.
We deployed real ultrasonic level sensors (Tekelec CANAR family) on real fuel tanks. Each sensor pushed 140-byte binary packets over GSM/3G to a Node-RED backend running on our VPS. A ThingsBoard CE dashboard, hosted on the same VPS, gave Canar a live view of every tank: current level, refill events, temperature, battery, alarms. It ran in production. The customer signed off. We got paid.
Then in April 2023, war broke out. We lost access to the VPS, the ThingsBoard server, the customer relationships, and most of the infrastructure we'd built. The only things that survived were Node-RED flow exports (JSON) and a ThingsBoard dashboard backup (more JSON) that lived on a personal drive.
This dashboard is that system, rebuilt three years later from Saudi Arabia, with the same binary protocol, the same site names, and the same customer-approved visual design — but on a modern, deployable, forever-runnable stack.
What you're looking at
A live monitoring dashboard for 6 virtual fuel tankers spread across Sudan. The 6 sites mirror the geographic reality of the original Canar deployment:
- SOBA2 — Khartoum, Soba (original production site)
- KRT_AIRPORT — Khartoum International Airport
- OMD_TOWER_18 — Omdurman
- PRT_SUDAN_DEPOT — Port Sudan
- WAD_MADANI_HUB — Wad Madani
- KASSALA_EAST — Kassala
Each simulated sensor reports: current fuel level (cm, liters, %), temperature, battery voltage, GSM signal, refill events, drop events (simulated theft / leak), and low-level alarms — all the same fields the real sensors emitted.
Two modes of operation
dummy-generator.json flow, and this dashboard automatically connects to its WebSocket at ws://localhost:1880/ws/tanks. The badge in the top right flips from "Browser simulator" to "Node-RED WS." You're now seeing data flow through the actual rebuilt backend pipeline.How it works
Below is a mockup of the actual Node-RED simulator flow — same structure as what you'd see if you imported dummy-generator.json into your own Node-RED instance:
Each function node holds a chunk of pure JavaScript. The Tank Simulator generates 6 binary buffers per tick, the Decoder reverses the original Tekelec CANAR bit-level encoding, the Formatter enriches with site metadata, and the WebSocket-out pushes JSON straight to the dashboard.
The binary protocol itself is faithful to the original hardware:
byte[0] = model (TEK 733 / 766 / 586 / 790 / 822 / 643)
byte[1] = HW revision
byte[2] = SW version (minor.major)
byte[3] = reason flags (refill / drop / reboot / alarm / ...)
byte[4] = alarm flags
byte[5] = GSM signal
byte[6] = battery (act_3g + RTC_set + voltage)
byte[7..14] = IMEI as BCD (8 bytes, hex = 2 decimal digits each)
byte[26..137] = up to 28 historical readings, 4 bytes each
byte[0] Ultrasonic RSSI
byte[1] temperature ((b / 2) - 30)
byte[2] SRC (4 bits) + cm high 2 bits
byte[3] cm low 8 bitsThe original system, for reference
The 2023 production deployment had:
- 2 live tanks (SOBA2 in Khartoum, plus a test device)
- Tekelec CANAR ultrasonic sensors with GSM/3G modems
- Node-RED on a VPS, processing incoming TCP packets on port 5050
- ThingsBoard CE for the customer dashboard
- MySQL for historical data persistence
- Email alerts (to Canar staff) and SMS alerts (to Sudanese numbers) via Mazinhost API
The original ThingsBoard dashboard had 3 pages and 20+ widgets. This rebuild preserves the visual language: identical color palette ( #2369a7 · #23b832 · #efab16 · #ed0a0a), same gauge thresholds (red 0–25%, yellow 25–50%, green 50–100%), same chart styling (dark blue grid + bright green line for volume).
Tech stack
- Node-RED (flow-based)
- WebSocket egress (replacing the lost ThingsBoard MQTT)
- Next.js 16 (App Router, static export)
- React 19
- Tailwind CSS 4
- Leaflet + react-leaflet
- Recharts (timeseries)
- Lucide React (icons)
- Netlify (static)
- No server runtime required
- Tekelec CANAR ultrasonic
- TEK 733 / 766 / 586 / 790 / 822 / 643 family
- GSM/3G uplink
- 140-byte binary protocol
Why a faithful rebuild (not a simplified mock)
I kept the entire 140-byte binary protocol. The simulator generates real binary buffers; the decoder is a TypeScript port of the original bit-level Node-RED function. If real hardware came back online tomorrow, the same Node-RED ingress and decoder would parse those packets — no changes needed.
That faithfulness is the point. Most "IoT dashboards" you see in portfolios are mqtt.publish('temp', value). This one carries the weight of a real protocol that real customers paid for.
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 original Canar fuel monitoring system end-to-end — sensor integration, Node-RED backend, ThingsBoard dashboard, and on-site deployment. I continue to collaborate with GTS on projects on a freelance basis.
About me
I'm Babakr Hussain Babakr Saad. I built the original Canar 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 second project in this series — a 3-phase transformer monitor for the Sudanese Electrical Distribution Company (SEDC) — see sedc-transformer-monitor.netlify.app. Same stack and same era, different domain: JSON over MQTT instead of binary over TCP, 6 distribution transformers across Khartoum metro, per-phase voltage / current / power / frequency monitoring with the original electrical color code (red / yellow / blue per phase).