⚡ Energy AI DK — Tesla Model 3 · second-by-second physics · label-ready for daily SoCloading…
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
kineticm·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
rollingCrr·m·g·v / η Crr = 0.0095 (+10 % when DMI reports rain) — constant per km, so it matters most in town
gradem·g·v·sinθ / η GPS altitude median-filtered over 31 s; Denmark is flat, so this nearly nets to zero
regenmax(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 + HVAC0.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)
km
min
avg km/h
max km/h
hard/km
air °C
wind
headw
rain
climb m
Δelev m
kinetic
aero
rolling
regen
est kWh
Wh/km
SoC Wh/km
select a trip
Daily energy · physics estimate vs SoC labels (when they arrive)
Calibration from daily SoC
Measured vs predicted per day — leave-one-day-out
Learning curve — held-out day error as labeled days accumulate
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)