⚡ Open Registration

Hackathon
Sharika SpinTech

"Distribution Network Mini-SCADA" — Build a full web application that simulates real-time monitoring and control of a small electrical distribution network.

📅 Deadline: Jun 12, 2026 💻 Remote submission
Important Dates
Submission Deadline 12-06-2026
23:59
Technical Evaluation 15–19 Jun 2026
Shortlist Announced 22-06-2026
Interviews 23-26 Jun 2026
Final Result 29-06-2026
Hiring Phase Starts 30-06-2026

Distribution Network Mini-SCADA

Build a production-grade SCADA web application for real-time monitoring and remote control of a small electrical distribution network.

📡 Scenario

You will receive an electrical network simulator — a Python script that generates real-time telemetry via MQTT or TCP — representing a network with:

🏢 1 Substation
3 Feeders
📊 10 Measurement Points
🔌 5 Sectionalizing Switches
⚠️ Random Fault Events

🛠 Simulator — Quick Start

Download: scada_simulator_1.zip

# Start everything docker-compose up --build # View real-time messages (another terminal) docker-compose --profile monitor up # Send switch command mosquitto_pub -h localhost -t "scada/commands/switch/CH-01" \ -m '{"command": "open", "operator": "candidate"}' -q 1 # Inject fault manually mosquitto_pub -h localhost -t "scada/commands/fault/inject" \ -m '{"feeder_id":"AL-02","fault_type":"short_circuit","segment":2,"duration":30}' -q 1
📡 Telemetry every 1s — voltage, current, active/reactive power, PF, frequency
Realistic daily load curve — (peak at 6 PM, valley at 3 AM) with instrumentation noise
⚠️ Random auto faults every 30–120 seconds (short circuit, high impedance, open circuit)
⚠️ Automatic alarms for overvoltage, undervoltage, overcurrent, and fault current
⚠️ Command response for opening/closing switches with audit logs
🌐 WebSocket on port 9001 for web HMIs via mqtt.js

🛠 How to test the simulator

With docker-compose up running, open a second terminal in the same folder.

# View all telemetry in real time docker exec -it scada-broker mosquitto_sub -h localhost -t "scada/#" -v

You will see a stream like this every second:

scada/telemetry/MED-01 {"measurement_id": "MED-01", "voltage_v": 7929.1, "current_a": 78.25, ...} scada/telemetry/MED-02 {"measurement_id": "MED-02", "voltage_v": 7872.4, "current_a": 20.45, ...} ...
# Open a switch (simulate outage) docker exec -it scada-broker mosquitto_pub \ -h localhost \ -t "scada/commands/switch/CH-01" \ -m '{"command": "open", "operator": "test.operator"}' \ -q 1

Expected effect:

- Meters MED-02, MED-03, and MED-04 will publish "energized": false and all values drop to zero.

# Close the switch again docker exec -it scada-broker mosquitto_pub \ -h localhost \ -t "scada/commands/switch/CH-01" \ -m '{"command": "close", "operator": "test.operator"}' \ -q 1
# Inject a fault manually docker exec -it scada-broker mosquitto_pub \ -h localhost \ -t "scada/commands/fault/inject" \ -m '{"feeder_id": "AL-02", "fault_type": "short_circuit", "segment": 2, "duration": 30}' \ -q 1

Expected effect:

- scada/alarm/fault publishes a CRITICAL event

- MED-06 and MED-07 show very high current and "fault_current": true

- After 30 seconds, the fault is automatically cleared

# View current network state (snapshot) docker exec -it scada-broker mosquitto_sub \ -h localhost -t "scada/network/snapshot" -C 1
{ "switches": {"CH-01": "closed", "CH-02": "closed", ...}, "energized_feeders": ["AL-01", "AL-02", "AL-03"], "active_faults": {} }
# Monitor only alarms docker exec -it scada-broker mosquitto_sub \ -h localhost -t "scada/telemetry/MED-05" -v
# Monitor a single meter docker exec -it scada-broker mosquitto_sub \ -h localhost -t "scada/telemetry/MED-05" -v

Expected Deliverables

Six interconnected layers that together form a complete, production-grade SCADA system.

1
Integration / Communication Layer
Implement a communication driver to consume simulator data via MQTT or TCP socket. Process and normalize incoming messages (parsing, validation, timestamps). Publish data to an internal queue.
Evaluated on
Knowledge of protocols · Handling corrupted/out-of-order data · Decoupling between collection and processing
2
Data Layer
Model and implement databases (PostgreSQL) for network topology, configurations, and alarms; time series for telemetry history. Implement data retention and compaction routines.
Evaluated on
Data modeling for electrical systems · Technology choices · High-frequency write performance
3
Real-Time Layer
Implement an event processing engine that detects anomalies, generates alarms with severity levels (critical, warning, informational), logs state changes, and maintains a "current state" cache of the network.
Evaluated on
Concurrency & async events · State transition logic · Cache and in-memory structures
4
Interface Layer
Develop a web interface with interactive single-line diagram, alarm panel with filters, historical charts with time-range selection, switch control with confirmation, and real-time updates via WebSocket.
Evaluated on
Interface quality & usability · WebSocket live updates · Clear visualization of technical data
5
Security and API Layer
Implement a documented REST API for querying history, managing alarms, and sending switch commands. Authentication with two roles: operator (read-only + acknowledgment) and supervisor (full control). Audit log of all commands.
Evaluated on
Security in critical systems · RESTful API design · Role-based access control
6
Infrastructure and Delivery
The entire system must run with a single command (docker-compose up). Include a clear README with architecture and execution instructions. Write integration tests for the alarm engine and command API.
Evaluated on
DevOps & containerization maturity · Documentation quality · Testing culture

Project Submission

Submit the links and files using the fields below. The best projects will be selected for a round of interviews.

📎
Drop your PDF here or click to browse