⚡ Energy AI DK — Tesla Model 3 · second-by-second physics · label-ready for daily SoC loading…

Why this version exists

Energy AI 3 learns a trip-level model from HV pack labels (∫V·I) on US001. The Danish Tesla Model 3 has no OBD dongle — only the tracker: GPS at 1 Hz and a 10 Hz accelerometer. So this page inverts the order. First the physics: a longitudinal vehicle model is integrated every second of every trip (kinetic, aerodynamic, rolling, grade, regen, auxiliaries, HVAC) using published Model 3 parameters — no training, no labels, an honest prior. Then the labels: daily SoC readings will arrive through a separate feed. The moment daily[].soc_kwh is present in energy_dk.json, the calibration section below fits the same ridge backbone as Energy AI 3 — on physics kWh plus the physics-shaped inputs — with leave-one-day-out cross-validation, so the physics prior gets corrected by measurement rather than replaced by a network that has seen 5 days of data. Weather (air temperature, wind speed and direction, rain) comes from the Danish Meteorological Institute's open metObs API, sampled from stations inside each trip's bounding box during the trip.

Physics model · integrated per second from tracker speed, GPS altitude and distance

kinetic m·a·v / η
speed changes from 1 Hz GPS speed (clipped ±6 m/s²); m = 1 930 kg incl. driver, η = 0.90
aero ½·ρ·CdA·(v+w)²·v / η
CdA = 0.51 m²; w = headwind along the route from DMI wind speed & direction — drag works on air speed, so a 20 km/h headwind at 110 km/h costs ~40 % more drag
rolling Crr·m·g·v / η
Crr = 0.0095 (+10 % when DMI reports rain) — constant per km, so it matters most in town
grade m·g·v·sinθ / η
GPS altitude median-filtered over 31 s; Denmark is flat, so this nearly nets to zero
regen max(P_wheel·0.65, −70 kW)
negative wheel power comes back at 65 %, capped at 70 kW — hard braking above that is lost to friction
aux + HVAC 0.35 kW + f(T)
cooling 0.12 kW/°C above 24 °C, heating 0.20 kW/°C below 18 °C · air temperature per trip from DMI observations; fallback when none: 18 °C
Battery-side energy per trip = Σ(traction/η − regen) + aux + HVAC. Parameters are in physics in the JSON; when SoC labels arrive the calibration corrects them globally instead of per trip.

Where the energy goes · kWh by component

Trips · click a row for its speed & energy profile · times in Danish local time (CEST)

Trip (CEST)kmminavg km/hmax km/hhard/kmair °Cwindheadwrainclimb mΔelev mkineticaerorollingregenest kWhWh/kmSoC Wh/km
select a trip

Daily energy · physics estimate vs SoC labels (when they arrive)

Calibration from daily SoC

What the SoC feed needs to write into energy_dk.json (everything else is already there)
"daily": [ { "day": "2026-08-17", "soc_start": 91, "soc_end": 34, // % at first departure / last arrival "soc_kwh": 42.8 } // or leave null: page computes (soc_start−soc_end)/100 × usable_kwh ] "usable_kwh": 75.0 // set to the pack actually fitted (57.5 SR+ / 75 LR)