// HOME — D4 Control (ported from WattIQ Home D4 Control.html) window.SiteHome = function SiteHome() { const sparkLine = React.useRef(null); const sparkFill = React.useRef(null); const kwRef = React.useRef(null); const socRef = React.useRef(null); const stageRef = React.useRef(null); const svgRef = React.useRef(null); const bubbleRef = React.useRef(null); const legendRef = React.useRef(null); const ticksRef = React.useRef(null); React.useEffect(() => { // Sparkline + tickers let raf,t = 0; const tick = () => { t += 1; if (!sparkLine.current) return; const pts = []; for (let i = 0; i < 40; i++) { const x = i * 8; const phase = t * 0.02 + i * 0.4; const y = 40 + Math.sin(phase) * 14 + Math.sin(phase * 1.7) * 6; pts.push(x.toFixed(1) + ',' + y.toFixed(1)); } const ptsStr = pts.join(' '); sparkLine.current.setAttribute('points', ptsStr); sparkFill.current.setAttribute('points', '0,80 ' + ptsStr + ' 320,80'); const kw = (124 + Math.sin(t * 0.04) * 18).toFixed(1); const soc = 78 + Math.round(Math.sin(t * 0.01) * 4); if (kwRef.current) kwRef.current.firstChild.nodeValue = kw; if (socRef.current) socRef.current.firstChild.nodeValue = soc; raf = requestAnimationFrame(tick); }; tick(); // Reveal observer const io = new IntersectionObserver((entries) => { entries.forEach((e) => { if (e.isIntersecting) {e.target.classList.add('in');io.unobserve(e.target);} }); }, { threshold: .12, rootMargin: "0px 0px -40px 0px" }); document.querySelectorAll('.d4home .reveal').forEach((el) => io.observe(el)); // Stopwatch ticks if (ticksRef.current) { let s = ""; for (let a = 0; a < 360; a += 6) { if (a % 90 === 0) continue; s += ``; } ticksRef.current.innerHTML = s; } // Iso bubble logic const MODULES = { control: { num: "00", name: "Control", role: "EMS · brain", short: "Edge AI", desc: "Edge-AI controller die alle modules op locatie aanstuurt. Voorspelt belasting, schakelt bronnen en logt elke kWh.", specs: [["Hardware", "Edge-AI"], ["Connect", "4G/5G/LAN"], ["Update", "OTA"], ["Logging", "24/7"]], anchor: { x: 320, y: 54, side: "below" } }, core: { num: "01", name: "Core", role: "Storage", short: "40–2.000 kWh", desc: "Het batterijhart van de stack. Buffert pieken, levert basislast en reduceert generator-uren met tot 70%.", specs: [["Capaciteit", "40–2.000 kWh"], ["Vermogen", "tot 500 kVA"], ["Behuizing", "IP54"], ["Cycli", "6.000+"]], anchor: { x: 320, y: 290, side: "above" } }, ray: { num: "02", name: "Ray", role: "Solar", short: "Tot 30 kWp", desc: "Vouwbare zonnepanelen die in minuten uitvouwen. Volledig draagbaar — geen vaste installatie nodig.", specs: [["Vermogen", "tot 30 kWp"], ["Vorm", "Foldable"], ["Opzet", "< 10 min"], ["Connector", "MC4"]], anchor: { x: 320, y: 180, side: "above" } }, fusion: { num: "03", name: "Fusion", role: "Hybrid backup", short: "60–200 kVA", desc: "Hybride generator die alleen bijspringt als Core en Ray het niet redden. HVO-ready, tot 92% minder CO₂.", specs: [["Vermogen", "60–200 kVA"], ["Brandstof", "HVO/diesel"], ["Emissie", "Stage V"], ["Modus", "Smart standby"]], anchor: { x: 175, y: 425, side: "above" } }, grid: { num: "04", name: "Grid", role: "EV charging", short: "Tot 360 kW", desc: "DC-snelladers gevoed vanuit Core. Laadt voertuigen op locaties zonder netaansluiting.", specs: [["Vermogen", "tot 360 kW"], ["Connectoren", "CCS/CHAdeMO"], ["Voeding", "via Core"], ["Net", "niet vereist"]], anchor: { x: 445, y: 425, side: "above" } } }; const order = ["control", "core", "ray", "fusion", "grid"]; let activeKey = null; const $legend = legendRef.current; const $svg = svgRef.current; const $stage = stageRef.current; const $bubble = bubbleRef.current; if (!$legend || !$svg || !$stage || !$bubble) return; $legend.innerHTML = order.map((k) => { const m = MODULES[k]; return ``; }).join(""); const placeBubble = (key) => { const m = MODULES[key]; const stageRect = $stage.getBoundingClientRect(); const svgRect = $svg.getBoundingClientRect(); const scale = svgRect.width / 600; const ax = svgRect.left - stageRect.left + m.anchor.x * scale; const ay = svgRect.top - stageRect.top + m.anchor.y * scale; const bw = $bubble.offsetWidth || 280; const bh = $bubble.offsetHeight || 160; const tail = 14; let left = ax; const half = bw / 2; left = Math.max(half + 8, Math.min(stageRect.width - half - 8, left)); if (m.anchor.side === "below") { $bubble.classList.add("below"); $bubble.style.left = left + "px"; $bubble.style.top = ay + tail + "px"; } else { $bubble.classList.remove("below"); $bubble.style.left = left + "px"; $bubble.style.top = ay - bh - tail + "px"; } }; const setActive = (key) => { if (key === activeKey) key = null; activeKey = key; $stage.querySelectorAll(".iso-group").forEach((g) => { const k = g.getAttribute("data-mod"); g.classList.toggle("dim", activeKey && k !== activeKey); g.classList.toggle("active", k === activeKey); }); $legend.querySelectorAll(".li").forEach((b) => { b.classList.toggle("active", b.getAttribute("data-mod") === activeKey); }); if (!activeKey) {$bubble.classList.remove("show");return;} const m = MODULES[activeKey]; $bubble.querySelector('.bb-num').textContent = m.num; $bubble.querySelector('.bb-name').textContent = m.name; $bubble.querySelector('.bb-role').textContent = m.role; $bubble.querySelector('.bb-desc').textContent = m.desc; $bubble.querySelector('.bb-specs').innerHTML = m.specs.map(([k, v]) => `
${k}${v}
`).join(""); $bubble.style.visibility = "hidden"; $bubble.classList.add("show"); requestAnimationFrame(() => {placeBubble(activeKey);$bubble.style.visibility = "visible";}); }; const handlers = []; $stage.querySelectorAll("[data-mod]").forEach((el) => { const h = (e) => {e.stopPropagation();setActive(el.getAttribute("data-mod"));}; el.addEventListener("click", h); handlers.push([el, h]); }); $legend.querySelectorAll("[data-mod]").forEach((el) => { const h = (e) => {e.stopPropagation();setActive(el.getAttribute("data-mod"));}; el.addEventListener("click", h); handlers.push([el, h]); }); const closeBtn = $bubble.querySelector('.bb-close'); const closeH = () => setActive(activeKey); closeBtn.addEventListener("click", closeH); const resizeH = () => {if (activeKey) placeBubble(activeKey);}; window.addEventListener("resize", resizeH); return () => { cancelAnimationFrame(raf); io.disconnect(); handlers.forEach(([el, h]) => el.removeEventListener("click", h)); closeBtn.removeEventListener("click", closeH); window.removeEventListener("resize", resizeH); }; }, []); return (
{/* HERO */}
01 — Modulaire Energie · Bouw & Industrie

Energy,
wherever you
need it.

Modulaire energiesystemen die diesel vervangen en je volledige controle geven over stroom op locatie. Direct inzetbaar. EMS-aangestuurd. CO2-rapportage standaard.

50–500 kWh
Schaalbaar per locatie
20 min
Plug & play, geen installateur
−72%
CO2 t.o.v. diesel-baseline
CSRD
Aanbestedings-klaar uit de doos
SITE_07 · Rotterdam Centrum ● LIVE
Vermogen nu
139.1 kW
SoC
80%
Diesel uit · 14:22 −214 kg CO2 vandaag
Units online
3 / 3
Volgende cyclus
Solar peak
11:40 — 14:10
{/* PROBLEM */}
02Probleem

Wat WattIQ vervangt, en waarom dat tijd werd.

Diesel is luid, vervuilend en duur. Vaste netaansluitingen zijn traag en inflexibel. De praktijk vraagt om iets daartussen.

Diesel — WattIQ Forge D60 (referentie) Diesel generator
{[ ["01", "Kostprijs", "€0,80 / kWh inclusief logistiek", "Brandstof, transport, service en stilstand bij elkaar — diesel kost meer dan op de factuur staat."], ["02", "Geluid", "95 dB op 7 meter — 's nachts dicht", "Vergunning verloopt na zonsondergang. Klachten van omwonenden zijn de norm, niet de uitzondering."], ["03", "CO₂", "2,7 kg per liter, ongerapporteerd", "CSRD vraagt om cijfers die diesel niet kan leveren. Handmatig bijhouden is een nachtmerrie."], ["04", "Alternatief?", "Vaste infra: 12+ weken wachten", "Netcongestie + vergunning + graafwerk. Tegen die tijd is je bouwfase al door."]]. map((c) =>
{c[0]}
{c[1]}

{c[2]}

{c[3]}

)}
{/* REFRAME */}
03Reframe

Een derde categorie, tussen diesel en vaste infra.

WattIQ is niet de goedkoopste batterij. Het is het meest controleerbare systeem.

Categorie A Diesel
Direct beschikbaar
Meeneembaar

Luid · vervuilend
Categorie B Vaste infra
Stil · schoon
Goedkope kWh

Traag · niet flexibel
De overlap WattIQ
Direct & stil
Schoon & meeneembaar
EMS-aangestuurd
CSRD-ready
Wat we behouden van diesel

Snelheid en mobiliteit

20 minuten op locatie, mee naar de volgende.

Wat we overnemen van vaste infra

Stil, schoon, slim

<55 dB, nul lokale emissies, real-time data.

Wat alleen WattIQ heeft

Eén integraal systeem

Core + Grid + Ray + Control — uit één hand, één dashboard.

{/* SYSTEM */}
04Eén systeem

Niet een batterij. Een systeem.

Hoe de modules op locatie samenwerken — Core onderaan, Ray bovenop, Grid voor laden, Control overal doorheen.

DOC.04 / SHEET 01 — VERT. EXPL. EXPLODED ASSEMBLY · INTERACTIVE REV 02 · 2026
04 · GRID 03 · FUSION CORE 01 · STORAGE 02 · RAY CONTROL EMS · L02 [02][01] [03][04] [00]
SCALE 1:NTS VERTICAL EXPLODED · 5 MODULES DRWN. WATTIQ ENG.
{/* STEPS */}
05Hoe het werkt

Vier stappen. Geen installateur.

Maandag bellen. Dinsdag operationeel. EMS draait vanaf minuut één.

01 02 03 04 00H +6H +12H +18H
< 24h
Plug & play cyclus
01
T+0h
Locatie-analyseVermogen, kWh-profiel, piekbelasting
3 min
02
T+5h
Systeem op maatCore + Control + opties
~1 dag
03
T+22h
Plug & playLevering & aansluiting · geen vergunning
20 min
04
T+24h
Control in chargeMonitoring · optimalisatie · CO₂-rapport
vanaf min 1
{/* RESULT */}

Concrete cijfers, geen claims.

Eén nummer dat ertoe doet — en vier die het ondersteunen. Gemiddelde van 12 actieve WattIQ-deployments — bouw & verhuur, NL/BE, 2024–2025.

Hoofdmetriek · gem. n=12
−72%
Minder CO₂ per draaiuur dan een vergelijkbare diesel-set. Gemeten over 12 actieve deployments, 2024–2025.
Verified · CSRD scope 1 · WattIQ FY24–25
Brandstof
−62%
Liter diesel-equivalent per draaiuur, t.o.v. baseline.
Kostprijs / kWh
€0,28
All-in: brandstof, logistiek, service. Was €0,80.
ROI break-even
11mnd
Op een 18-maands bouwproject. 7 maanden netto.
Geluid (dB op 7m)
<55
Diesel ≈ 95 dB. Verschil > 40 dB = 16× zachter waargenomen.
Vandaag · diesel
Vandaag

Diesel · 95 dB · €0,80/kWh

Brandstoftruck om de 4 dagen. 's Nachts uit. Klachten van omwonenden.

Met WattIQ
Met WattIQ

200 kWh · < 55 dB · €0,28/kWh

Stil. 24/7 inzetbaar. CO2-rapport automatisch elke maandag.

{/* CTA — Two-Path (geport vanuit Situaties) */}
09 · TWEE PADEN

Wat past bij nu?

Twee manieren om verder te gaan. Eén voor mensen die concreet zoeken; één voor mensen die eerst willen begrijpen.

{typeof Footer !== "undefined" ?
); };