Shipped tools / hvac-export-cleaner
A smart-thermostat export is thousands of sparse telemetry pings, and almost none of them say anything a person asked about. Drop one here and get back either the moments someone changed the setpoint, or a clean month-by-month timeline of temperature, state, and target.
Runs entirely in your browser. Nothing is uploaded.Only the rows where a target temperature was set. A row stays if tt has a value, or if the unit is in heat-cool mode and holds a heat or cool setpoint instead. Values pass through exactly as exported. The mode usually arrives as its own ping, so when a row doesn't carry one, it comes from a mode ping in the next 10 seconds, or else the last one reported.
Every ping, merged across files and sorted, with ambient temperature, current state, and target temperature carried forward so each row is a complete snapshot. Split by calendar month, not by file, because exports spill across month edges.
The export has twelve columns: timestamp, cf, ch, cs, ct, ctt, fs, htt, internal_temp, tf, tm, tt. Most rows fill in one or two of them. The ones that matter here:
tt in heat-cool mode.tm; that's the most common way these exports get misread.Quirks it handles: CRLF line endings (a stray \r makes the last column look filled on every row), tm written as 4.0, setpoint rows that don't carry a mode (filled from the nearest mode ping and shown in italics), duplicate rows where two monthly exports overlap, exports of the same device taken in different time zones (flagged, since merging them doubles every event), and columns in any order. Readings of exactly 32.0°F are usually a sensor dropout; they're counted and flagged but left in, because silently editing telemetry is worse than showing a glitch.