// Digital Twin — live virtual replica of an industrial asset (Bhopal 220kV substation).
const TWIN_ASSETS = [
{ id: "sub-bhopal", name: "Substation — Bhopal 220kV", type: "Power", health: 94, warn: true },
{ id: "plant-vindhya", name: "NTPC Vindhyachal — Unit 3", type: "Thermal", health: 97, warn: false },
{ id: "wtp-indore", name: "Water Treatment — Indore", type: "Water", health: 91, warn: false },
{ id: "smartcity-nagpur", name: "Smart City Grid — Nagpur", type: "City", health: 88, warn: true },
];
const TWIN_TELEMETRY = [
{ k: "Bus Voltage", v: "218.4 kV", st: "ok", spark: [216,217,218,219,218,218,218] },
{ k: "Line Current", v: "1,284 A", st: "ok", spark: [1180,1220,1250,1240,1270,1284,1284] },
{ k: "Transformer Oil Temp", v: "68 °C", st: "warn", spark: [58,60,62,64,66,68,68] },
{ k: "Load Factor", v: "94 %", st: "ok", spark: [82,84,88,92,89,94,94] },
{ k: "Frequency", v: "49.98 Hz", st: "ok", spark: [49.9,50.0,49.98,49.99,49.97,49.98,49.98] },
{ k: "Power Factor", v: "0.97", st: "ok", spark: [0.95,0.96,0.96,0.97,0.97,0.97,0.97] },
];
const TWIN_COMPONENTS = [
{ c: "Incoming Line 220kV", health: 98, next: "Sep 2026", st: "ok" },
{ c: "Transformer T-118", health: 76, next: "Overdue · 18h", st: "warn" },
{ c: "Busbar A", health: 96, next: "Nov 2026", st: "ok" },
{ c: "Feeder CB-1/2/3", health: 93, next: "Oct 2026", st: "ok" },
{ c: "Battery Storage 40MWh", health: 89, next: "Dec 2026", st: "ok" },
{ c: "SCADA / RTU", health: 99, next: "—", st: "ok" },
];
function Hotspot({ x, y, label, value, warn }) {
const c = warn ? "var(--danger)" : "var(--ok)";
const bw = Math.max(label.length, value.length) * 5.6 + 16;
const bx = Math.max(2, x - bw / 2);
return (
{label}
{value}
);
}
function TwinSim() {
const [load, setLoad] = useState(94);
const oil = Math.round(68 + (load - 94) * 0.9);
const risk = oil >= 78 ? "High" : oil >= 72 ? "Elevated" : "Nominal";
const riskColor = risk === "High" ? "var(--danger)" : risk === "Elevated" ? "var(--accent-2)" : "var(--ok)";
return (
Simulate — Load Scenario Physics-informed · what-if on the twin
Feeder load {load}%
setLoad(Number(e.target.value))} style={{ width: '100%', accentColor: load > 100 ? 'var(--danger)' : 'var(--primary)' }}/>
Predicted oil temp
= 75 ? 'var(--danger)' : 'var(--ink)' }}>{oil}°C
Threshold 75°C. At {load}% load the thermal model {oil >= 75 ? 'breaches limit — shed load or start cooling.' : 'stays within safe envelope.'}
);
}
function TwinScreen() {
const [asset, setAsset] = useState("sub-bhopal");
return (
Digital Twin
SYNCED · 42ms
Real-time virtual replica · physics-informed simulation · predictive maintenance · fed by 2,148 sensors
setAsset(e.target.value)} style={{ height: 32, borderRadius: 8, border: '1px solid var(--border-strong)', background: 'var(--panel)', color: 'var(--ink)', fontFamily: 'inherit', fontSize: 12.5, padding: '0 10px' }}>
{TWIN_ASSETS.map(a => {a.name} )}
Re-sync
Run scenario
Twin health
94%
1 component at risk
Efficiency
96.8%
+0.4% vs model
Predicted maint.
18hrs
Transformer T-118
Throughput
218MW
94% of capacity
Live Twin — 220kV Substation Bhopal · sensor overlay · click a hotspot for detail
Streaming
{/* flow line */}
{[[60, 90, 180, 90], [230, 90, 230, 160], [230, 200, 350, 200], [400, 200, 520, 130], [400, 200, 520, 260]].map((e, i) => (
))}
{/* equipment */}
{[
{ x: 20, y: 74, w: 60, h: 32, t: "GRID", s: "220kV" },
{ x: 180, y: 66, w: 100, h: 48, t: "TRANSFORMER", s: "T-118" },
{ x: 200, y: 176, w: 60, h: 26, t: "BUSBAR A", s: "" },
{ x: 350, y: 180, w: 56, h: 40, t: "BREAKER", s: "CB-1" },
{ x: 522, y: 108, w: 76, h: 34, t: "FEEDER 1", s: "City-N" },
{ x: 522, y: 244, w: 76, h: 34, t: "FEEDER 2", s: "Ind-Zone" },
].map((b, i) => (
{b.t}
{b.s && {b.s} }
))}
{/* solar inject */}
SOLAR 8.4MW
{/* hotspots — labels float above the equipment they annotate */}
Live Telemetry 2,148 tags
{TWIN_TELEMETRY.map((t, i) => (
{t.k}
{t.v}
))}
Component Health & Maintenance Predictive · remaining useful life
Work orders
Component Health Next maintenance Status
{TWIN_COMPONENTS.map((c, i) => (
{c.c}
= 90 ? 'var(--ok)' : c.health >= 80 ? 'var(--accent)' : 'var(--danger)' }}/>
{c.health}%
{c.next}
{c.st === 'ok' ? Healthy : At risk }
))}
Predictive maintenance alert
The twin's thermal model projects Transformer T-118 oil temperature will cross 75°C within 18–24 hours at current load. Recommend load-shed of 6% or start forced cooling.
Create work order
Start cooling
);
}
window.TwinScreen = TwinScreen;