It started with why is my garage so hot? and did not stay there. One house, one year, 8 sources, 14 sections, and a garage that is still hot.
Every number below is recomputed from the raw exports on each build; none of it is typed in by hand. The code that does that is at github.com/banasiak/tmi. How it got this far is a separate, much longer, story in the Cesspool of Knowledge.
Every data source this house produces, joined on local calendar date and priced with tariffs extracted from the utility bills themselves. Everything is joined over 7 Aug 2025 – 5 Aug 2026, the span the weather station covers; the bills, the weather proxy and the hourly water meter all reach further back, and four late arrivals exist to check what the first five had already produced.
$2,921
to run this house for a year
Electricity, gas, water, wastewater and refuse, priced with the tariffs transcribed from your bills — every rate below reproduces its source bill to within two cents. See Data & Provenance.
Electricity
$1,905
18,594 kWh over 359 metered days · 52 kWh/day · 65% of the total
Natural gas
$258
18,216 cf · $14.50/mo of that is the fixed access fee
Water
$240
52,444 gal · first 3,000 gal each month are free
Wastewater + refuse
$518
effectively fixed — neither responds to what you do
Granularity matters more than volume here: the same house looks like different things at 5 minutes, a day and a billing period, and several of these exist only to check another one.
| Source | Granularity | Span | What it settles |
|---|---|---|---|
| AmbientWeather WS-2000 | 5 minutes | 364 days | 44 channels — five sensed zones with temperature, humidity and dew point, plus sun, wind, rain, lightning and the pool probe |
| El Paso Electric, interval | 15 minutes | 364 days | Separates what never switches off from what runs to a timer and what answers the weather |
| El Paso Electric, billing | per bill | 35 periods, Jul 2023–Jul 2026 | The only source carrying cost, and the only one reaching further back than the year of station data that can be exported |
| City of Las Cruces UtilityHawk | daily, and hourly |
366 days daily; 400 days hourly, continuous |
Water and gas. The hourly series is what finds a leak — it puts a clock on irrigation, measures the pool refill directly, shows the float valve replacing evaporation overnight, and caught a split line the daily series structurally could not. The same meter at two granularities, so the two never corroborate each other — where they disagree, the finer one is simply closer |
| Utility bills, PDF | per bill | 28 | Every rate on this page, written into the tariff engine as a literal value rather than parsed at run time, and re-checked against its source bill on each build — 39 checks, all reproducing their source to within two cents |
| Appliance nameplates | per machine | 7 | Turns assumptions into readings: furnace efficiency, pool heater rating, filter flow ceiling, and what the air conditioner is allowed to draw |
| NOAA GHCN-Daily | daily | 2 stations | Stands in for the weather the station's export cannot reach — it has been recording far longer than the rolling year that can be downloaded — calibrated against it where the two overlap |
| NREL PVWatts the only modeled input here, and the only one not measured at this house |
hourly, typical year |
4 roof planes | Every plane-of-array figure in the solar section. It is here because the station's own pyranometer sits below the roof ridge and loses its eastern sky — which a due-south plane would average out but an east-west roof cannot |
Two of these arrived to check figures already derived — the hourly water and the nameplates — and both overturned what they were meant to confirm, which is why the numbers here are the corrected ones. One source is absent by choice: a charge log from the motorcycle's OpenEVSE, a rolling eight-week window that no amount of care turns into a year.
Every figure here is recomputed from the transcribed tariffs on each build, and priced at the rate that actually applied on the day.
Every line recomputed from the transcribed tariffs, priced at the rate that applied on the day. $2,921 in total.
Color is the meter, not the category. The top of this chart is two electric bars, and the third is the one stream that answers to nothing you do. The three Other bars are each meter's own remainder — what it measured that the rest of this page could not assign to a named load. They are split by meter rather than pooled, because a single bar spanning three of them would be the one thing this chart's colors cannot say.
| What | Per year | Share | Detail |
|---|---|---|---|
| Always-on floor | $676 | 23.1% | 0.76 kW that never switches off |
| Cooling | $532 | 18.2% | 4,411 kWh — main HVAC plus about 15% from the patio mini-split |
| Wastewater + refuse | $518 | 17.7% | wastewater is tiered on an allowance re-set yearly; refuse is flat |
| Pool pump | $400 | 13.7% | 3,998 kWh on a 6.75 h timer |
| Other electricity | $249 | 8.5% | every electric load too small or too irregular to separate from the meter — vehicle charging among them, plus the customer charge no load can shed |
| Gas access fee | $174 | 6.0% | $14.50/month before a single cubic foot |
| Other water | $169 | 5.8% | indoor use — showers, laundry, dishes, the tap. Metered, never separately, so it is a remainder rather than a measurement |
| Space heating, electric | $48 | 1.6% | 581 kWh — 97% of it the mini-split, only 19 kWh the furnace blower |
| Irrigation | $28 | 0.9% | 12,600 gal the controller meant to deliver |
| Space heating, gas | $27 | 0.9% | 6,244 cf — the furnace alone |
| Water heating + cooking | $22 | 0.8% | 6,845 cf standing baseline |
| Other gas | $20 | 0.7% | what the heating signature could not assign to space heating, the water heater or the pool |
| Pool evaporation | $19 | 0.7% | 8,053 gal the float valve replaced, unasked |
| Pool refill (one-off) | $17 | 0.6% | 5,228 gal over two days in March — not an annual cost |
| Pool + spa heating | $14 | 0.5% | 4,704 cf on days with no heating demand |
| Zone 1 leak | $6 | 0.2% | 1,938 gal since 2 June and still rising |
Interval data separates three things a monthly bill blends together: what never turns off, what runs to a clock, and what responds to the weather.
Always-on floor
0.76kW
the quietest sustained draw on a median day — 6,548 kWh/yr, 35% of total
Floor, cost
$676/yr
at marginal rates — what the house costs before anyone does anything
Seasonal drift in floor
0.24kW
between the lowest and highest month — largely weather-independent
Weather-independent load
38kWh/day
regression intercept — 73% of consumption survives with zero degree-days
Each column is one day; each row a 15-minute slot from midnight to midnight. Power in kW.
The horizontal band across the afternoon and evening is the timer load — it holds the same clock position through every season, which is what distinguishes it from weather-driven use. The summer bulge above and below it is air conditioning. The pale strip across the small hours is the always-on floor.
| Date | kWh | Peak kW | Floor kW |
|---|---|---|---|
| 2025-08-07 | 79.8 | 7.28 | 0.92 |
| 2025-08-21 | 63.5 | 7.08 | 0.68 |
| 2025-09-04 | 54.9 | 9.4 | 0.68 |
| 2025-09-18 | 30.9 | 4.2 | 0.6 |
| 2025-10-02 | 50.4 | 6.6 | 0.6 |
| 2025-10-16 | 50.3 | 4.76 | 0.88 |
| 2025-10-30 | 41.3 | 4.52 | 0.72 |
| 2025-11-13 | 38.9 | 8.72 | 0.6 |
| 2025-11-27 | 35.0 | 3.24 | 0.76 |
| 2025-12-11 | 41.6 | 3.72 | 0.68 |
| 2025-12-25 | 43.0 | 5.08 | 0.64 |
| 2026-01-08 | 37.9 | 3.56 | 0.84 |
| 2026-01-22 | 36.7 | 3.68 | 0.88 |
| 2026-02-05 | 40.9 | 3.32 | 0.84 |
| 2026-02-19 | 38.8 | 3.64 | 0.64 |
| 2026-03-05 | 40.4 | 3.56 | 0.76 |
| 2026-03-19 | 41.8 | 5.68 | 0.72 |
| 2026-04-02 | 48.9 | 4.72 | 0.68 |
| 2026-04-17 | 41.6 | 6.24 | 0.68 |
| 2026-05-01 | 40.7 | 5.24 | 0.72 |
| 2026-05-15 | 63.8 | 7.04 | 0.64 |
| 2026-05-29 | 43.9 | 6.12 | 0.84 |
| 2026-06-12 | 59.3 | 7 | 0.72 |
| 2026-06-26 | 67.8 | 7.48 | 0.72 |
| 2026-07-10 | 83.1 | 9.8 | 0.8 |
| 2026-07-24 | 87.6 | 7.88 | 0.84 |
Median power at each 15-minute slot, grouped by the day's mean outdoor temperature.
The timer block sits at the same clock position in all three curves, cold days included — it does not care about the weather. Differencing the hot and mild shapes isolates the cooling load without a submeter: about 35 kWh/day, peaking at 3.16 kW around 14:00.
| Time | Cold day (57d) | Mild day (98d) | Hot day (42d) |
|---|---|---|---|
| 00:00 | 1.3 | 0.9 | 1.32 |
| 01:00 | 1.32 | 0.82 | 1 |
| 02:00 | 1.62 | 1.07 | 0.99 |
| 03:00 | 1.63 | 0.77 | 0.95 |
| 04:00 | 1.66 | 0.78 | 0.98 |
| 05:00 | 1.78 | 0.79 | 0.96 |
| 06:00 | 2.09 | 0.84 | 0.98 |
| 07:00 | 2.12 | 0.99 | 3.62 |
| 08:00 | 1.94 | 1.08 | 2.42 |
| 09:00 | 1.51 | 1.15 | 2.38 |
| 10:00 | 1.22 | 1.35 | 3 |
| 11:00 | 1.3 | 1.54 | 3.15 |
| 12:00 | 1.31 | 1.87 | 3.93 |
| 13:00 | 1.23 | 1.99 | 4.31 |
| 14:00 | 1.29 | 2.07 | 4.92 |
| 15:00 | 1.28 | 2.21 | 4.81 |
| 16:00 | 3.08 | 2.69 | 4.37 |
| 17:00 | 3.24 | 3.74 | 5.91 |
| 18:00 | 3.25 | 3.87 | 6.09 |
| 19:00 | 3.1 | 3.56 | 5.97 |
| 20:00 | 3.21 | 3.55 | 5.91 |
| 21:00 | 2.49 | 3.04 | 5.06 |
| 22:00 | 1.31 | 1.88 | 2.9 |
| 23:00 | 1.4 | 1.15 | 2.16 |
All 34,460 fifteen-minute readings ranked from largest to smallest. The x-axis is rank, not time.
The same three loads the curves above separate, seen here as one shape. The cliff on the left is air conditioning — 2,201 hours a year above 3 kW, 25% of the time. The long flat tail on the right is the floor, and it never reaches zero: the quietest quarter-hour of the entire year still drew 0.48 kW.
| Share of the year | Days | At or above (kW) |
|---|---|---|
| Peak | — | 13.8 |
| 0.1% | 0.4 | 10.8 |
| 0.25% | 0.9 | 9.56 |
| 0.5% | 1.8 | 8.32 |
| 1% | 3.6 | 7.36 |
| 5% | 18 | 5.52 |
| 10% | 36 | 4.4 |
| 25% | 90 | 3.04 |
| 50% | 179 | 1.36 |
| 75% | 269 | 0.96 |
| 90% | 323 | 0.76 |
| 99% | 355 | 0.64 |
| 100% (floor) | 359 | 0.48 |
A grid-tied, net-metered array split across the east and west slopes, priced by rebuilding the actual bill month by month rather than multiplying production by an average rate.
The test that catches the sensor, using nothing outside the data
A clear desert moment should reach 0.78. The median is 0.63, which is why everything below is scaled by ×1.35.
From plane-of-array insolation to kilowatt-hours
Generation split evenly across the east and west slopes, against metered consumption. Complete months only.
Consumption is the context and generation the proposal, so only one of them is drawn as a series. Note how much flatter generation is than consumption: the array varies about 2.4× across the year against the house's 2.1×, because summer heat derates panels and a tilted plane loses to a high sun. The binding month is spring, not summer — that is where generation first catches consumption and surplus starts.
| Month | Consumption | Generation |
|---|---|---|
| 09/25 | 1,608 | 1,079 |
| 10/25 | 1,422 | 960 |
| 11/25 | 1,179 | 719 |
| 12/25 | 1,351 | 626 |
| 01/26 | 1,490 | 684 |
| 02/26 | 1,142 | 807 |
| 03/26 | 1,344 | 1,133 |
| 04/26 | 1,324 | 1,325 |
| 05/26 | 1,537 | 1,503 |
| 06/26 | 2,132 | 1,476 |
| 07/26 | 2,404 | 1,317 |
Priced by rebuilding both bills from the real tariff, month by month.
Payback improves with size — 13.9 years at 4 kW against 11.0 at 10 kW — because installed cost per watt falls while every kWh keeps the same value. Cost, panel count, roof area and spill are in the table below.
| Array size | Annual bill saving |
|---|---|
| 4 kW | 623 |
| 6 kW | 934 |
| 7 kW | 1,090 |
| 8 kW | 1,243 |
| 10 kW | 1,495 |
Net cost is after the 30% federal credit and New Mexico's 10%. Spill is production that overran the month it was made in.
| Array | Panels | Roof ft² | kWh/yr | % of use | Gross | Net | Saved/yr | Spill | Payback | 25-yr net |
|---|---|---|---|---|---|---|---|---|---|---|
| 4 kW | 10 | 215 | 6,342 | 34% | $14,400 | $8,640 | $623 | 0 | 13.9 yr | $6,034 |
| 6 kW | 15 | 322 | 9,513 | 52% | $18,900 | $11,340 | $934 | 0 | 12.1 yr | $10,671 |
| 7 kW | 17 | 366 | 11,099 | 60% | $21,000 | $12,600 | $1,090 | 0 | 11.6 yr | $13,080 |
| 8 kW | 20 | 430 | 12,685 | 69% | $23,200 | $13,920 | $1,243 | 1 | 11.2 yr | $15,351 |
| 10 kW | 24 | 516 | 15,856 | 86% | $27,500 | $16,500 | $1,495 | 813 | 11.0 yr | $18,719 |
Water is the one stream with no weather signature worth fitting: it answers to a clock rather than a thermometer. The meter recovers that clock on its own — the schedule it keeps, the two seasonal settings it steps between, and the volume each cycle delivers.
Complete months only, and the two refill days of 29–30 March held out. Each month's metered water, split into the controller's own events and everything left over.
Meter readings, not a model: the three series sum to the 42,829 gallons actually billed across these 11 months.
The irrigation series steps and the gray one drifts, and those are different things. A cycle has two sizes and changes between them on the day somebody moves the dial — the winter block from November to February is unmistakable. The monthly totals are less tidy than the cycles because they also carry how many watering nights fell in the month, and because a summer cycle tapers through the autumn as the ground cools. The gray series has no settings at all: it runs 108 gal/day across the summer months against 66 in the depths of winter, and it slides between the two because that is what evaporation does. Most of that 41 gal/day gap is the pool topping itself up through the float valve — the pool section predicts it from the weather and gets the seasonal shape right to an R² of 0.86. The rest is hose work and washing vehicles.
The third series is the split line in Zone 1, which is what a controller that cannot ramp looks like when something downstream of it can. It appears in June, it grows, and it is the subject of its own section. Folded into the irrigation series — where a daily meter has no way to separate it — it reads as an irrigation program doing something no irrigation program does.
March is short two days here: 29–30 March put 5,229 gallons through the meter refilling the pool, which would have dwarfed every other bar on the chart.
| Month | Irrigation | Leak | Everything else |
|---|---|---|---|
| 09/25 | 1,034 | 0 | 2,769 |
| 10/25 | 1,118 | 0 | 2,458 |
| 11/25 | 414 | 0 | 2,465 |
| 12/25 | 612 | 0 | 2,029 |
| 01/26 | 705 | 0 | 2,083 |
| 02/26 | 573 | 0 | 1,862 |
| 03/26 | 902 | 0 | 2,268 |
| 04/26 | 1,505 | 0 | 3,427 |
| 05/26 | 1,224 | 0 | 3,746 |
| 06/26 | 1,476 | 684 | 3,380 |
| 07/26 | 1,362 | 1,066 | 3,667 |
The daily meter could say which days water moved. 400 days at hourly resolution say at what hour, how fast, and — on the night one cycle stopped matching every cycle before it — exactly when something broke. That fault closes the section: it is the only live problem on this page, and the only one the daily meter is structurally blind to.
Mean gallons in each hour of the day, across every complete day of the year bar the two the pool refill occupies. Every panel on the same scale, each against the annual mean for reference.
One spike, in every season, at 20:00 — the controller, which never moves. What changes is its height. Each line averages every day of the season including the four a week the controller sleeps, so the peak here is roughly three-sevenths of a cycle. The rest of the day is flat and low: this household's water is a schedule with a little noise on top, which is why a change in that one hour is visible at all.
| Whole year | Winter — 90 days | Spring — 89 days | Summer — 128 days | Autumn — 91 days | |
|---|---|---|---|---|---|
| 00:00 | 1.97 | 1.41 | 2.12 | 3.01 | 1.33 |
| 01:00 | 2.6 | 3.88 | 1.84 | 2.63 | 2.05 |
| 02:00 | 4.32 | 4.03 | 4.04 | 5.52 | 3.66 |
| 03:00 | 3.36 | 1.19 | 4.01 | 5.43 | 2.8 |
| 04:00 | 1.76 | 1.21 | 1.79 | 2.84 | 1.22 |
| 05:00 | 1.59 | 1.1 | 1.57 | 2.46 | 1.23 |
| 06:00 | 2.82 | 1.82 | 2.82 | 3.21 | 3.43 |
| 07:00 | 3.65 | 2.48 | 2.54 | 3.59 | 6 |
| 08:00 | 3.43 | 3.03 | 3.13 | 4.06 | 3.49 |
| 09:00 | 3.77 | 3.32 | 4.02 | 4.73 | 3.01 |
| 10:00 | 4.4 | 3.59 | 4.13 | 6.7 | 3.18 |
| 11:00 | 5.06 | 2.92 | 6.03 | 7.31 | 3.96 |
| 12:00 | 6.63 | 3.51 | 6.11 | 13.3 | 3.59 |
| 13:00 | 4.73 | 2.58 | 4.75 | 8.73 | 2.88 |
| 14:00 | 4.63 | 3.32 | 4.87 | 6.9 | 3.44 |
| 15:00 | 5.58 | 3.86 | 6.67 | 6.47 | 5.33 |
| 16:00 | 8.03 | 3.17 | 9.64 | 10.4 | 8.92 |
| 17:00 | 5.82 | 3.02 | 6.01 | 9.17 | 5.09 |
| 18:00 | 5.95 | 3.74 | 5.25 | 10.1 | 4.66 |
| 19:00 | 7.63 | 5.4 | 8.75 | 10.7 | 5.63 |
| 20:00 | 38.8 | 22.5 | 41.9 | 60.6 | 30.0 |
| 21:00 | 5.1 | 2.27 | 8.08 | 6.38 | 3.67 |
| 22:00 | 2.93 | 2 | 3.45 | 3.88 | 2.4 |
| 23:00 | 2.34 | 1.98 | 2.38 | 3.3 | 1.71 |
Monthly means. The prediction uses no water data; the measurement uses no weather data.
Two instrument chains with nothing in common — a pool thermometer, a dew point and an anemometer on one side, a water meter on the other — tracing the same four-fold seasonal swing. The gap between them is close to constant, which is the giveaway: it is the household's own overnight draw, 14 gal/day, sitting under the evaporation the whole year.
| Period | Predicted | Metered |
|---|---|---|
| Aug | 34.1 | 51.0 |
| Sep | 20.8 | 30.0 |
| Oct | 24.6 | 36.0 |
| Nov | 17.2 | 24.0 |
| Dec | 12.7 | 24.0 |
| Jan | 12.3 | 30.0 |
| Feb | 15.9 | 24.0 |
| Mar | 27.2 | 36.0 |
| Apr | 31.9 | 42.0 |
| May | 37.1 | 42.0 |
| Jun | 43.5 | 48.0 |
| Jul | 42.5 | 48.0 |
One dot per cycle, placed at the hour the meter recorded it — against the 20:00 it was programmed to use.
The record holds no cycle at a wrong hour that is also a wrong volume, which is what separates a lost clock from a changed program.
| From | To | Fires at | Cycles | What it was |
|---|---|---|---|---|
| 2025-07-01 | 2025-08-09 | 20:00 | 17 | as programmed |
| 2025-08-13 | 2025-08-31 | 12:00 | 9 | power cut |
| 2025-09-04 | 2025-10-21 | 20:00 | 20 | as programmed |
| 2025-10-26 | 2025-10-31 | 07:00 | 3 | power cut |
| 2025-11-06 | 2026-03-07 | 20:00 | 52 | as programmed |
| 2026-03-10 | 2026-03-21 | 21:00 | 6 | daylight saving |
| 2026-03-24 | 2026-08-04 | 20:00 | 55 | as programmed |
Gallons through the meter in the 20:00 hour, on each night the controller ran.
The winter block in the middle is the controller doing what it was told — 14 minutes of valve-open time against 30 in summer. The rise on the right is not that. Note where the record starts: the same season a year earlier sat at 110 gallons.
| Date | Day | gallons per cycle |
|---|---|---|
| 2025-07-01 | Tue | 109 |
| 2025-07-03 | Thu | 109 |
| 2025-07-05 | Sat | 113 |
| 2025-07-08 | Tue | 112 |
| 2025-07-12 | Sat | 115 |
| 2025-07-15 | Tue | 112 |
| 2025-07-17 | Thu | 115 |
| 2025-07-19 | Sat | 110 |
| 2025-07-22 | Tue | 109 |
| 2025-07-24 | Thu | 120 |
| 2025-07-26 | Sat | 111 |
| 2025-07-29 | Tue | 109 |
| 2025-07-31 | Thu | 110 |
| 2025-08-02 | Sat | 107 |
| 2025-08-05 | Tue | 109 |
| 2025-08-07 | Thu | 110 |
| 2025-08-09 | Sat | 109 |
| 2025-08-13 | Wed | 112 |
| 2025-08-15 | Fri | 113 |
| 2025-08-17 | Sun | 110 |
| 2025-08-20 | Wed | 113 |
| 2025-08-22 | Fri | 111 |
| 2025-08-24 | Sun | 121 |
| 2025-08-27 | Wed | 105 |
| 2025-08-29 | Fri | 106 |
| 2025-08-31 | Sun | 122 |
| 2025-09-04 | Thu | 55 |
| 2025-09-06 | Sat | 101 |
| 2025-09-09 | Tue | 99 |
| 2025-09-11 | Thu | 103 |
| 2025-09-13 | Sat | 98 |
| 2025-09-16 | Tue | 96 |
| 2025-09-18 | Thu | 96 |
| 2025-09-20 | Sat | 96 |
| 2025-09-23 | Tue | 97 |
| 2025-09-25 | Thu | 97 |
| 2025-09-30 | Tue | 96 |
| 2025-10-02 | Thu | 95 |
| 2025-10-04 | Sat | 95 |
| 2025-10-07 | Tue | 92 |
| 2025-10-09 | Thu | 93 |
| 2025-10-11 | Sat | 90 |
| 2025-10-14 | Tue | 90 |
| 2025-10-16 | Thu | 92 |
| 2025-10-18 | Sat | 92 |
| 2025-10-21 | Tue | 90 |
| 2025-10-26 | Sun | 90 |
| 2025-10-28 | Tue | 90 |
| 2025-10-31 | Fri | 109 |
| 2025-11-06 | Thu | 41 |
| 2025-11-08 | Sat | 43 |
| 2025-11-11 | Tue | 44 |
| 2025-11-13 | Thu | 43 |
| 2025-11-15 | Sat | 41 |
| 2025-11-18 | Tue | 41 |
| 2025-11-20 | Thu | 39 |
| 2025-11-22 | Sat | 40 |
| 2025-11-27 | Thu | 41 |
| 2025-11-29 | Sat | 41 |
| 2025-12-02 | Tue | 40 |
| 2025-12-04 | Thu | 44 |
| 2025-12-06 | Sat | 46 |
| 2025-12-09 | Tue | 47 |
| 2025-12-11 | Thu | 45 |
| 2025-12-13 | Sat | 47 |
| 2025-12-16 | Tue | 49 |
| 2025-12-18 | Thu | 48 |
| 2025-12-20 | Sat | 49 |
| 2025-12-23 | Tue | 49 |
| 2025-12-25 | Thu | 47 |
| 2025-12-27 | Sat | 50 |
| 2025-12-30 | Tue | 51 |
| 2026-01-01 | Thu | 54 |
| 2026-01-03 | Sat | 56 |
| 2026-01-06 | Tue | 48 |
| 2026-01-08 | Thu | 48 |
| 2026-01-10 | Sat | 70 |
| 2026-01-13 | Tue | 47 |
| 2026-01-15 | Thu | 47 |
| 2026-01-17 | Sat | 52 |
| 2026-01-20 | Tue | 48 |
| 2026-01-22 | Thu | 49 |
| 2026-01-24 | Sat | 47 |
| 2026-01-27 | Tue | 47 |
| 2026-01-29 | Thu | 46 |
| 2026-01-31 | Sat | 46 |
| 2026-02-03 | Tue | 49 |
| 2026-02-05 | Thu | 46 |
| 2026-02-07 | Sat | 48 |
| 2026-02-10 | Tue | 45 |
| 2026-02-12 | Thu | 47 |
| 2026-02-14 | Sat | 47 |
| 2026-02-17 | Tue | 48 |
| 2026-02-19 | Thu | 48 |
| 2026-02-21 | Sat | 48 |
| 2026-02-24 | Tue | 48 |
| 2026-02-26 | Thu | 49 |
| 2026-02-28 | Sat | 50 |
| 2026-03-03 | Tue | 49 |
| 2026-03-05 | Thu | 50 |
| 2026-03-07 | Sat | 64 |
| 2026-03-10 | Tue | 49 |
| 2026-03-12 | Thu | 46 |
| 2026-03-14 | Sat | 47 |
| 2026-03-17 | Tue | 47 |
| 2026-03-19 | Thu | 47 |
| 2026-03-21 | Sat | 46 |
| 2026-03-24 | Tue | 106 |
| 2026-03-26 | Thu | 108 |
| 2026-03-28 | Sat | 124 |
| 2026-03-31 | Tue | 119 |
| 2026-04-02 | Thu | 111 |
| 2026-04-04 | Sat | 154 |
| 2026-04-07 | Tue | 110 |
| 2026-04-09 | Thu | 110 |
| 2026-04-11 | Sat | 116 |
| 2026-04-14 | Tue | 160 |
| 2026-04-16 | Thu | 106 |
| 2026-04-18 | Sat | 107 |
| 2026-04-21 | Tue | 106 |
| 2026-04-23 | Thu | 107 |
| 2026-04-25 | Sat | 106 |
| 2026-04-28 | Tue | 106 |
| 2026-04-30 | Thu | 106 |
| 2026-05-02 | Sat | 106 |
| 2026-05-05 | Tue | 107 |
| 2026-05-07 | Thu | 107 |
| 2026-05-09 | Sat | 141 |
| 2026-05-12 | Tue | 108 |
| 2026-05-14 | Thu | 110 |
| 2026-05-16 | Sat | 109 |
| 2026-05-19 | Tue | 109 |
| 2026-05-21 | Thu | 108 |
| 2026-05-26 | Tue | 109 |
| 2026-05-28 | Thu | 110 |
| 2026-06-02 | Tue | 147 |
| 2026-06-04 | Thu | 149 |
| 2026-06-06 | Sat | 157 |
| 2026-06-09 | Tue | 157 |
| 2026-06-11 | Thu | 154 |
| 2026-06-13 | Sat | 165 |
| 2026-06-16 | Tue | 168 |
| 2026-06-18 | Thu | 167 |
| 2026-06-20 | Sat | 168 |
| 2026-06-23 | Tue | 173 |
| 2026-06-25 | Thu | 195 |
| 2026-06-27 | Sat | 180 |
| 2026-06-30 | Tue | 180 |
| 2026-07-02 | Thu | 186 |
| 2026-07-07 | Tue | 192 |
| 2026-07-09 | Thu | 191 |
| 2026-07-11 | Sat | 214 |
| 2026-07-14 | Tue | 199 |
| 2026-07-16 | Thu | 200 |
| 2026-07-18 | Sat | 199 |
| 2026-07-21 | Tue | 199 |
| 2026-07-23 | Thu | 233 |
| 2026-07-25 | Sat | 208 |
| 2026-07-28 | Tue | 206 |
| 2026-07-30 | Thu | 201 |
| 2026-08-01 | Sat | 206 |
| 2026-08-04 | Tue | 209 |
The climb, as a straight line through the cycles
R² 0.84. The intercept is the useful part: the fault did not start at nothing and grow — it arrived as a step of 39 gallons and then began climbing. The line reads 219 gal at the latest cycle against 206 measured, so it slightly over-runs the recent weeks — it describes the climb rather than forecasting it.
How big it is, then what it explains. Three anomalies across three utilities and one piece of equipment behind all of them — the water-temperature probe turns out to be the most informative sensor in the house.
Why one degree costs what it costs
Multiply by the gas rate to get money: $0.25 in January against $0.15 in July. The physics is identical; only the tariff moved.
Every 5-minute sample of the year, averaged by time of day.
Read the three panels down the same vertical line. The water spikes at the exact quarter-hour the load steps up, while the sun is already on its way down. Correlation this sharp, across sensors that share no wiring, is about as close to proof as a house gets.
| Time | Water temperature, rate of change (°F / 5 min) | Household electrical load (kW) | Solar radiation (W/m²) |
|---|---|---|---|
| 00:00 | -0.01 | 0.92 | 0 |
| 00:15 | -0.01 | 0.88 | 0 |
| 00:30 | -0.01 | 0.88 | 0 |
| 00:45 | -0.01 | 0.88 | 0 |
| 01:00 | -0.01 | 0.88 | 0 |
| 01:15 | -0.01 | 0.88 | 0 |
| 01:30 | -0.01 | 0.88 | 0 |
| 01:45 | -0.02 | 0.88 | 0 |
| 02:00 | -0.02 | 0.88 | 0 |
| 02:15 | -0.02 | 0.84 | 0 |
| 02:30 | -0.01 | 0.88 | 0 |
| 02:45 | -0.02 | 0.88 | 0 |
| 03:00 | -0.02 | 0.84 | 0 |
| 03:15 | -0.02 | 0.84 | 0 |
| 03:30 | -0.01 | 0.88 | 0 |
| 03:45 | -0.02 | 0.88 | 0 |
| 04:00 | -0.02 | 0.84 | 0 |
| 04:15 | -0.02 | 0.88 | 0 |
| 04:30 | -0.01 | 0.88 | 0 |
| 04:45 | -0.01 | 0.88 | 0 |
| 05:00 | -0.01 | 0.88 | 0 |
| 05:15 | -0.01 | 0.84 | 0 |
| 05:30 | -0.01 | 0.84 | 0 |
| 05:45 | -0.01 | 0.84 | 0.1 |
| 06:00 | -0.02 | 0.88 | 0.71 |
| 06:15 | -0.01 | 0.92 | 2.53 |
| 06:30 | -0.06 | 0.92 | 6.13 |
| 06:45 | -0.01 | 1 | 11.6 |
| 07:00 | -0.01 | 1.2 | 18.8 |
| 07:15 | 0 | 1.04 | 26.9 |
| 07:30 | 0.01 | 1.04 | 37.2 |
| 07:45 | 0 | 1.16 | 54.4 |
| 08:00 | 0 | 1.16 | 85.5 |
| 08:15 | 0 | 1.16 | 144 |
| 08:30 | -0.04 | 1.16 | 188 |
| 08:45 | -0.02 | 1.16 | 235 |
| 09:00 | -0 | 1.16 | 282 |
| 09:15 | -0.01 | 1.16 | 330 |
| 09:30 | 0.01 | 1.16 | 374 |
| 09:45 | 0.01 | 1.2 | 416 |
| 10:00 | -0.01 | 1.28 | 449 |
| 10:15 | -0 | 1.24 | 485 |
| 10:30 | -0.02 | 1.28 | 515 |
| 10:45 | 0.01 | 1.32 | 548 |
| 11:00 | 0.02 | 1.32 | 569 |
| 11:15 | 0.03 | 1.36 | 589 |
| 11:30 | 0.03 | 1.36 | 603 |
| 11:45 | 0.08 | 1.4 | 617 |
| 12:00 | 0.03 | 1.48 | 625 |
| 12:15 | 0 | 1.6 | 634 |
| 12:30 | 0.03 | 1.48 | 639 |
| 12:45 | 0.06 | 1.56 | 629 |
| 13:00 | 0.01 | 1.64 | 624 |
| 13:15 | 0.03 | 1.56 | 619 |
| 13:30 | 0.03 | 1.6 | 601 |
| 13:45 | 0.03 | 1.72 | 584 |
| 14:00 | 0.03 | 1.8 | 557 |
| 14:15 | 0.03 | 1.68 | 540 |
| 14:30 | 0.03 | 1.8 | 513 |
| 14:45 | 0.03 | 1.8 | 480 |
| 15:00 | 0.07 | 1.72 | 449 |
| 15:15 | 0.23 | 2.64 | 416 |
| 15:30 | 0.03 | 3 | 386 |
| 15:45 | 0.04 | 2.92 | 343 |
| 16:00 | 0.03 | 2.96 | 310 |
| 16:15 | 0.12 | 3.24 | 273 |
| 16:30 | -0.04 | 3.36 | 241 |
| 16:45 | 0.01 | 3.4 | 206 |
| 17:00 | -0.03 | 3.36 | 175 |
| 17:15 | -0.04 | 3.44 | 149 |
| 17:30 | -0.02 | 3.4 | 119 |
| 17:45 | -0.01 | 3.52 | 97.2 |
| 18:00 | 0.01 | 3.48 | 78.3 |
| 18:15 | 0 | 3.48 | 59.9 |
| 18:30 | 0 | 3.4 | 45.2 |
| 18:45 | -0.01 | 3.44 | 31.5 |
| 19:00 | 0.01 | 3.44 | 20.6 |
| 19:15 | -0.01 | 3.52 | 12.2 |
| 19:30 | -0.04 | 3.48 | 6.46 |
| 19:45 | -0.03 | 3.44 | 3.23 |
| 20:00 | -0.03 | 3.44 | 1.25 |
| 20:15 | -0.02 | 3.44 | 0.25 |
| 20:30 | -0.04 | 3.32 | 0.02 |
| 20:45 | -0.03 | 3.28 | 0 |
| 21:00 | -0.03 | 3 | 0 |
| 21:15 | -0.03 | 2.92 | 0 |
| 21:30 | -0.03 | 2.88 | 0 |
| 21:45 | -0.02 | 2.8 | 0 |
| 22:00 | -0.02 | 1.8 | 0 |
| 22:15 | -0 | 1.24 | 0 |
| 22:30 | -0 | 1.16 | 0 |
| 22:45 | -0 | 1.12 | 0 |
| 23:00 | -0 | 1.08 | 0 |
| 23:15 | -0 | 1.08 | 0 |
| 23:30 | -0.01 | 1 | 0 |
| 23:45 | -0.01 | 0.96 | 0 |
Every excursion, placed by the sun at its peak and the gas burned that day.
A soak burns 17× the gas of a dry-probe day at none of the sun, which is what makes those two a reading rather than a judgement call. The point between them is the one that matters: 24 August 2025 has sun and gas, and is the one excursion where the probe was reporting the water's real temperature.
| Day | Solar at the peak reading (W/m²) | Gas that day (cf) |
|---|---|---|
| Mon 19 Jan 2026: 110.8°F, 18:35–19:30 | 0 | 504 |
| Sun 8 Feb 2026: 110.8°F, 19:00–20:25 | 0 | 416 |
| Tue 31 Mar 2026: 110.7°F, 19:15–20:55 | 0 | 228 |
| Sun 24 Aug 2025: 106.7°F, 15:50–16:15 | 242 | 150 |
| Sun 29 Mar 2026: 120.2°F, 15:20–16:25 | 553 | 32.0 |
| Fri 15 May 2026: 106.9°F, 11:30–12:10 | 849 | 24.0 |
| Mon 18 May 2026: 109.9°F, 12:50–17:05 | 844 | 22.0 |
| Sun 21 Jun 2026: 111.6°F, 12:55–12:55 | 852 | 22.0 |
| Wed 6 May 2026: 102.2°F, 13:15–16:25 | 801 | 18.0 |
| Thu 7 May 2026: 104.5°F, 12:05–12:35 | 869 | 18.0 |
Balance points are fitted rather than assumed at the conventional 65°F. Where the line meets the axis matters as much as its slope: the intercept is load the weather never touches. The monsoon closes the section — Las Cruces takes most of its year's rain in a few violent afternoons between June and September, and the station catches all of it.
Degree-days, integrated over the day's samples rather than its extremes
The conventional (max + min) / 2 form assumes the day is a symmetric curve between its two extremes. Near the balance point — which is exactly where these fits live — that assumption is worth several percent, and the station already reports every five minutes. Heating degree-days are the same with the subtraction reversed.
The energy signature each scatter below is fitting
Fitting the balance point rather than assuming it is what makes the intercept trustworthy: a base temperature that is wrong pushes its error straight into the baseline, and the baseline is what gets called always-on load elsewhere on this page.
Daily kWh vs cooling degree-days, balance point fitted at 70°F. R² = 0.74 over 359 days.
The line meets the axis at 38 kWh/day. That intercept is consumption no amount of mild weather removes — it is the floor plus the timer plus everything you plug in. Each cooling degree-day above 70°F adds 2.17 kWh. Cooling starts late, at 70°F, which is a well-behaved house, not a leaky one.
| Day | Cooling degree-days (base 70°F) | kWh per day | Role |
|---|---|---|---|
| 27 Jul 2026 | 20.6 | 102 | in fit |
| 26 Jul 2026 | 21.0 | 102 | in fit |
| 1 Aug 2026 | 14.6 | 95.7 | in fit |
| 8 Jul 2026 | 18.1 | 89.9 | in fit |
| 30 Jul 2026 | 22.8 | 88.6 | in fit |
| 9 Aug 2025 | 18.3 | 88.3 | in fit |
| 24 Jul 2026 | 20.2 | 87.6 | in fit |
| 21 Jun 2026 | 17.8 | 86.9 | in fit |
| 23 Jul 2026 | 20.2 | 86.8 | in fit |
| 2 Jun 2026 | 14.5 | 85.0 | in fit |
| 25 Jul 2026 | 20.4 | 84.7 | in fit |
| 7 Jun 2026 | 14.6 | 84.0 | in fit |
| 29 Jul 2026 | 20.1 | 83.7 | in fit |
| 4 Jul 2026 | 20.1 | 83.6 | in fit |
| 6 Jun 2026 | 11.8 | 83.2 | in fit |
| 10 Jul 2026 | 17.3 | 83.1 | in fit |
| 12 Jul 2026 | 16.6 | 82.8 | in fit |
| 28 Jul 2026 | 19.9 | 82.4 | in fit |
| 3 Jul 2026 | 19.2 | 81.9 | in fit |
| 13 Jun 2026 | 15.8 | 81.4 | in fit |
| 27 Jun 2026 | 16.9 | 81.1 | in fit |
| 17 Jun 2026 | 17.3 | 80.8 | in fit |
| 31 Jul 2026 | 20.2 | 80.2 | in fit |
| 5 Jul 2026 | 13.3 | 80.1 | in fit |
| 9 Jul 2026 | 17.8 | 79.9 | in fit |
Daily cubic feet vs heating degree-days, balance point fitted at 47°F.
Two R² values, because only reporting the flattering one would mislead. On the 347 routine days the fit keeps, R² = 0.83 — heating demand explains those days well. Across all 364 days it is only 0.13, because the 17 days held out of it carry so much volume. Your house starts calling for heat once the outside temperature dips below about 47°F, and burns 19 cf/day when it is not heating at all — that floor is the water heater.
| Day | Heating degree-days (base 47°F) | Cubic feet per day | Role |
|---|---|---|---|
| 4 Apr 2026 | 0 | 1,122 | outlier |
| 4 Oct 2025 | 0 | 898 | outlier |
| 13 Jan 2026 | 8.49 | 684 | outlier |
| 19 Jan 2026 | 5.96 | 504 | outlier |
| 6 Apr 2026 | 0.05 | 494 | outlier |
| 23 May 2026 | 0 | 444 | outlier |
| 8 Feb 2026 | 3.55 | 416 | outlier |
| 5 Apr 2026 | 0 | 244 | outlier |
| 17 Jan 2026 | 7.99 | 232 | in fit |
| 31 Mar 2026 | 0 | 228 | outlier |
| 27 Jan 2026 | 9.24 | 224 | in fit |
| 26 Jan 2026 | 12.5 | 212 | in fit |
| 10 Jan 2026 | 11.9 | 206 | in fit |
| 11 Jan 2026 | 11.1 | 204 | in fit |
| 12 Jan 2026 | 9.2 | 186 | in fit |
| 30 Dec 2025 | 8.99 | 182 | in fit |
| 8 Dec 2025 | 6.7 | 180 | in fit |
| 29 Dec 2025 | 5.94 | 172 | in fit |
| 28 Jan 2026 | 7.74 | 170 | in fit |
| 31 Jan 2026 | 6.93 | 162 | in fit |
| 16 Dec 2025 | 4.63 | 156 | in fit |
| 24 Aug 2025 | 0 | 150 | outlier |
| 18 Jan 2026 | 9.36 | 148 | in fit |
| 2 Dec 2025 | 3.95 | 146 | in fit |
| 9 Jan 2026 | 5.09 | 138 | in fit |
The line through those points
R² 0.83 on the 347 days the fit keeps.
And what a heating degree-day means here
Averaged across the day's samples rather than taken from its mean, and at this balance point the difference is not cosmetic: integrating finds 387 degree-days a year against 147 from daily means, 2.6× more. 103 days average above 47°F and still spend part of the night below it. A daily mean would score every one of them zero.
Mean cubic feet in each hour, grouped by the day's mean outdoor temperature. Every panel on the same scale, each against the annual mean for reference.
The hot-day panel is the water heater, alone and visible. It is nearly flat at 0.8 cf an hour and totals 19 cf a day — against the 19 cf/day the regression above puts at its intercept, reached by fitting 364 daily totals against degree-days. Two methods with nothing in common agreeing to within a cubic foot. And flat matters: a standing loss looks like this, whereas hot water actually being drawn would show morning and evening humps.
The cold-day panel is the furnace, and it is concentrated: 22 cf in the 06:00 hour alone, 12% of the whole day's gas, which is the recovery from a night setback.
| Every day | Cold day (22d) | Mild day (100d) | Hot day (85d) | |
|---|---|---|---|---|
| 00:00 | 1.31 | 2.64 | 0.48 | 0.81 |
| 01:00 | 1.86 | 4.64 | 0.48 | 0.47 |
| 02:00 | 1.96 | 5.18 | 0.38 | 0.33 |
| 03:00 | 1.98 | 5.18 | 0.4 | 0.36 |
| 04:00 | 1.99 | 5.09 | 0.5 | 0.36 |
| 05:00 | 4.64 | 12.5 | 0.72 | 0.66 |
| 06:00 | 8.49 | 22.5 | 2.12 | 0.89 |
| 07:00 | 5.31 | 13.6 | 1.8 | 0.49 |
| 08:00 | 4.52 | 11.2 | 1.42 | 0.96 |
| 09:00 | 3.81 | 7.36 | 3.44 | 0.64 |
| 10:00 | 4.43 | 8.18 | 4.56 | 0.54 |
| 11:00 | 2.94 | 4.91 | 3.24 | 0.66 |
| 12:00 | 2.17 | 3.55 | 2.3 | 0.66 |
| 13:00 | 1.66 | 2.91 | 1.36 | 0.71 |
| 14:00 | 1.97 | 3.27 | 1.94 | 0.71 |
| 15:00 | 5.84 | 11.4 | 3.72 | 2.42 |
| 16:00 | 6.7 | 16.0 | 3.24 | 0.87 |
| 17:00 | 2.81 | 5.73 | 1.38 | 1.32 |
| 18:00 | 2.69 | 4.64 | 2.64 | 0.8 |
| 19:00 | 4.02 | 8.36 | 2.8 | 0.89 |
| 20:00 | 2.6 | 4.09 | 2.7 | 1 |
| 21:00 | 4.21 | 9.45 | 1.94 | 1.24 |
| 22:00 | 2.35 | 5.36 | 0.92 | 0.78 |
| 23:00 | 1.32 | 2.82 | 0.72 | 0.44 |
Indoor temperature swing against outdoor swing, on the 99 mild days when the thermostat is mostly idle.
The house passes 11% of each extra degree of outdoor swing through to the inside — the slope of the fit, which is what survives a thermometer reading a little high. In plain averages an outdoor day moves 30°F and the interior 4.1°F, a slightly larger fraction because the line does not pass through the origin. That is a genuinely good envelope, and it agrees with the late 70°F cooling balance point found above — two independent measurements of the same insulation. For contrast, the garage passes 41% of the same extra degree — 4× the house, fitted the same way on the same days — which is what an uninsulated space looks like. Its plain-average figure runs higher still for the same intercept reason, and the zones section ranks all four buildings on it.
| Day | Outdoor daily temperature swing (°F) | Indoor daily swing (°F) |
|---|---|---|
| 1 Mar 2026 · outdoor mean 67°F | 43.9 | 7.2 |
| 25 Feb 2026 · outdoor mean 63°F | 39.4 | 7 |
| 18 Mar 2026 · outdoor mean 69°F | 41.3 | 6.6 |
| 26 Feb 2026 · outdoor mean 65°F | 34.0 | 6.6 |
| 20 Dec 2025 · outdoor mean 61°F | 25.3 | 6.5 |
| 2 Mar 2026 · outdoor mean 65°F | 40.5 | 6.5 |
| 12 Mar 2026 · outdoor mean 60°F | 32.2 | 6.5 |
| 15 Mar 2026 · outdoor mean 69°F | 32.0 | 6.5 |
| 27 Feb 2026 · outdoor mean 65°F | 38.7 | 6.3 |
| 15 Nov 2025 · outdoor mean 62°F | 34.9 | 6.1 |
| 26 Oct 2025 · outdoor mean 63°F | 36.8 | 6 |
| 11 Feb 2026 · outdoor mean 59°F | 28.6 | 6 |
| 14 Mar 2026 · outdoor mean 66°F | 36.4 | 5.9 |
| 5 Mar 2026 · outdoor mean 62°F | 33.8 | 5.8 |
| 31 Oct 2025 · outdoor mean 61°F | 41.6 | 5.8 |
| 28 Feb 2026 · outdoor mean 66°F | 36.2 | 5.8 |
| 4 Mar 2026 · outdoor mean 61°F | 34.2 | 5.8 |
| 10 Feb 2026 · outdoor mean 60°F | 25.6 | 5.6 |
| 2 Nov 2025 · outdoor mean 59°F | 38.5 | 5.6 |
| 14 Nov 2025 · outdoor mean 61°F | 36.2 | 5.6 |
| 25 Dec 2025 · outdoor mean 60°F | 24.1 | 5.6 |
| 11 Mar 2026 · outdoor mean 59°F | 39.6 | 5.6 |
| 3 Apr 2026 · outdoor mean 68°F | 30.4 | 5.4 |
| 19 Mar 2026 · outdoor mean 71°F | 45.5 | 5.4 |
| 6 Nov 2025 · outdoor mean 63°F | 38.0 | 5.2 |
Every day's electricity and gas priced at the rate that applied to it, against that day's mean outdoor temperature.
Neither meter makes this shape on its own — gas falls as it warms and electricity climbs, so only the sum has a minimum. It sits at 58°F, which is roughly the outdoor temperature at which this house wants nothing from either utility.
| Day | Outdoor mean temperature (°F) | Cost that day ($) |
|---|---|---|
| 91°F · $13.42 | 90.6 | 13.4 |
| 91°F · $13.36 | 91.0 | 13.4 |
| 88°F · $12.89 | 88.3 | 12.9 |
| 85°F · $12.53 | 84.6 | 12.5 |
| 88°F · $11.79 | 88.1 | 11.8 |
| 90°F · $11.64 | 90.1 | 11.6 |
| 93°F · $11.59 | 92.8 | 11.6 |
| 90°F · $11.50 | 90.2 | 11.5 |
| 85°F · $11.40 | 84.5 | 11.4 |
| 88°F · $11.38 | 87.7 | 11.4 |
| 90°F · $11.37 | 90.2 | 11.4 |
| 84°F · $11.25 | 84.3 | 11.3 |
| 86°F · $11.23 | 85.5 | 11.2 |
| 80°F · $11.12 | 80.4 | 11.1 |
| 90°F · $11.08 | 90.4 | 11.1 |
| 90°F · $10.98 | 90.1 | 11.0 |
| 90°F · $10.95 | 90.1 | 10.9 |
| 87°F · $10.92 | 87.3 | 10.9 |
| 86°F · $10.89 | 85.8 | 10.9 |
| 87°F · $10.85 | 86.6 | 10.9 |
| 87°F · $10.80 | 87.3 | 10.8 |
| 90°F · $10.79 | 89.9 | 10.8 |
| 88°F · $10.76 | 87.9 | 10.8 |
| 89°F · $10.73 | 89.2 | 10.7 |
| 87°F · $10.62 | 86.9 | 10.6 |
Daily totals from the station. Each panel keeps its own scale.
Rain and lightning arrive together in a narrow season and are absent for the rest of the year. Wind is the exception: the year's strongest gust, 43 mph on 21 April 2026, came in spring with no rain at all. Those are the dust events, and they are a different phenomenon from the summer storms.
| Date | Daily rainfall (in) | Lightning strikes (per day) | Peak gust (mph) |
|---|---|---|---|
| 2025-08-07 | 0 | 0 | 15.9 |
| 2025-08-14 | 0 | 0 | 14.8 |
| 2025-08-21 | 0 | 0 | 11.4 |
| 2025-08-28 | 0 | 0 | 11.4 |
| 2025-09-04 | 0 | 0 | 15.9 |
| 2025-09-11 | 0 | 0 | 12.5 |
| 2025-09-18 | 0.21 | 18.0 | 21.7 |
| 2025-09-25 | 0 | 0 | 13.6 |
| 2025-10-02 | 0 | 0 | 9.2 |
| 2025-10-09 | 0 | 0 | 13.6 |
| 2025-10-16 | 0 | 0 | 15.9 |
| 2025-10-23 | 0.02 | 17.0 | 20.6 |
| 2025-10-30 | 0 | 0 | 8.1 |
| 2025-11-06 | 0 | 0 | 14.8 |
| 2025-11-13 | 0 | 0 | 13.6 |
| 2025-11-20 | 0.25 | 1 | 23.9 |
| 2025-11-27 | 0 | 0 | 11.4 |
| 2025-12-04 | 0 | 0 | 10.3 |
| 2025-12-11 | 0 | 0 | 11.4 |
| 2025-12-18 | 0 | 0 | 10.3 |
| 2025-12-25 | 0 | 0 | 12.5 |
| 2026-01-01 | 0 | 0 | 14.8 |
| 2026-01-08 | 0 | 0 | 28.6 |
| 2026-01-15 | 0 | 0 | 10.3 |
| 2026-01-22 | 0 | 0 | 9.2 |
| 2026-01-29 | 0 | 0 | 14.8 |
| 2026-02-05 | 0 | 0 | 11.4 |
| 2026-02-12 | 0 | 0 | 11.4 |
| 2026-02-19 | 0 | 0 | 20.6 |
| 2026-02-26 | 0 | 0 | 13.6 |
| 2026-03-05 | 0 | 0 | 21.7 |
| 2026-03-12 | 0 | 0 | 11.4 |
| 2026-03-19 | 0 | 0 | 11.4 |
| 2026-03-26 | 0 | 0 | 19.5 |
| 2026-04-02 | 0 | 0 | 15.9 |
| 2026-04-09 | 0 | 0 | 10.3 |
| 2026-04-16 | 0 | 0 | 17.2 |
| 2026-04-23 | 0 | 0 | 23.9 |
| 2026-04-30 | 0 | 0 | 21.7 |
| 2026-05-07 | 0 | 0 | 13.6 |
| 2026-05-14 | 0 | 0 | 17.2 |
| 2026-05-21 | 0 | 0 | 17.2 |
| 2026-05-28 | 0 | 0 | 14.8 |
| 2026-06-04 | 0.06 | 0 | 14.8 |
| 2026-06-11 | 0 | 0 | 12.5 |
| 2026-06-18 | 0 | 0 | 17.2 |
| 2026-06-25 | 0 | 0 | 19.5 |
| 2026-07-02 | 0 | 0 | 13.6 |
| 2026-07-09 | 0 | 0 | 27.3 |
| 2026-07-16 | 0 | 1 | 18.3 |
| 2026-07-23 | 0 | 0 | 11.4 |
| 2026-07-30 | 0 | 0 | 14.8 |
Every month in the record. The year starts and ends mid-August, so August appears twice — as a 25-day bar and a 6-day one.
September 2025, January 2026 and July 2026 carry the year — and note that they are not all monsoon months, which is the reminder that winter rain here arrives too. A drip system on a fixed weekly schedule waters straight through every one of them; a rain sensor, or a controller that skips after a storm, is the cheapest water saving on this page.
| Month | Rainfall |
|---|---|
| 08/25 | 0.42 |
| 09/25 | 2.74 |
| 10/25 | 0.59 |
| 11/25 | 0.67 |
| 12/25 | 0.25 |
| 01/26 | 1.83 |
| 02/26 | 0.04 |
| 03/26 | 0.04 |
| 04/26 | 0.01 |
| 05/26 | 0.84 |
| 06/26 | 1.12 |
| 07/26 | 1.73 |
| 08/26 | 0.24 |
The house, patio, garage and shed stand in identical weather and are built to four different standards. That makes the weather an instrument: outdoors supplies the forcing, and each zone's response measures how well it is separated from it.
Shed
1.09×
of the outdoor swing · 1 h behind
+5°F on the daily low, +8°F on the high
Garage
0.58×
of the outdoor swing · 3 h behind
+16°F on the daily low, +3°F on the high
Patio
0.19×
of the outdoor swing · follows its thermostat
+17°F on the daily low, -7°F on the high
House
0.14×
of the outdoor swing · follows its thermostat
+20°F on the daily low, -6°F on the high
Every panel on the same scale, each against the same outdoor curve.
The shed tracks the sun; the house ignores it. Outdoors peaks at 16:00 — the garage crests later, which is the thermal mass showing up as a delay rather than as a smaller number.
| Outdoors | Shed | Garage | Patio | House | |
|---|---|---|---|---|---|
| 00:00 | 82.9 | 88.1 | 91.9 | 73.7 | 75.3 |
| 01:00 | 81.3 | 86.3 | 90.4 | 73.7 | 75.9 |
| 02:00 | 79.8 | 84.6 | 89.2 | 73.7 | 76.3 |
| 03:00 | 78.4 | 83.0 | 88.0 | 73.8 | 76.6 |
| 04:00 | 77.1 | 81.6 | 87.0 | 73.8 | 76.8 |
| 05:00 | 75.4 | 80.3 | 86.1 | 73.9 | 76.9 |
| 06:00 | 74.6 | 79.0 | 85.3 | 74.0 | 77.0 |
| 07:00 | 77.0 | 78.4 | 84.5 | 73.5 | 75.5 |
| 08:00 | 82.4 | 79.2 | 84.2 | 74.1 | 75.3 |
| 09:00 | 87.6 | 83.1 | 84.9 | 74.1 | 75.2 |
| 10:00 | 91.3 | 88.7 | 86.9 | 74.0 | 75.2 |
| 11:00 | 94.7 | 94.7 | 89.8 | 74.2 | 75.3 |
| 12:00 | 97.7 | 99.3 | 93.1 | 74.6 | 75.4 |
| 13:00 | 100 | 102 | 96.5 | 75.1 | 75.5 |
| 14:00 | 102 | 105 | 99.9 | 75.5 | 75.5 |
| 15:00 | 103 | 107 | 102 | 75.7 | 75.5 |
| 16:00 | 103 | 109 | 104 | 76.0 | 75.7 |
| 17:00 | 101 | 108 | 105 | 76.0 | 76.1 |
| 18:00 | 99.4 | 106 | 105 | 75.5 | 76.0 |
| 19:00 | 95.8 | 102 | 103 | 74.7 | 75.7 |
| 20:00 | 91.9 | 98.0 | 101 | 74.0 | 75.4 |
| 21:00 | 88.2 | 94.9 | 98.6 | 73.8 | 75.1 |
| 22:00 | 86.7 | 92.4 | 96.2 | 73.7 | 75.0 |
| 23:00 | 85.3 | 90.4 | 94.1 | 73.6 | 75.0 |
Each dot is one day. Garage minus shed, against house minus outdoors.
Slope 0.180, R²=0.649 over 363 days. The line runs through both halves of the year: when the house is cooler than outdoors, the garage goes cool relative to the shed by the same fraction.
| House warmer than outdoors (°F) | Garage warmer than shed (°F) |
|---|---|
| -17.0 | -1.62 |
| -13.7 | 1.35 |
| -11.3 | 1.43 |
| -9.03 | 0.88 |
| -7.05 | 1.61 |
| -4.95 | 2.1 |
| -2.47 | 4.15 |
| -0.87 | 0.89 |
| 0.9 | 4.56 |
| 2.24 | 1.57 |
| 4.07 | 2.88 |
| 5.32 | 1.47 |
| 7.04 | 3.39 |
| 9.13 | 0.1 |
| 10.5 | 6.67 |
| 12.1 | 4.87 |
| 13.3 | 4.93 |
| 15.6 | 2.84 |
| 17.5 | 6.04 |
| 18.9 | 4.93 |
| 21.0 | 7.97 |
| 23.3 | 5.79 |
| 25.1 | 8.89 |
| 28.0 | 8.58 |
| 33.6 | 13.0 |
Mixing ratio relative to outdoors — above the line is wetter than outside.
Relative humidity would mostly restate the thermometers here. Mixing ratio is absolute: equal readings mean equal water, whatever the temperature.
| Outdoors | Shed | Garage | Patio | House | |
|---|---|---|---|---|---|
| Aug | 0 | -0.96 | -0.95 | -0.9 | -0.73 |
| Sep | 0 | -0.72 | -1.18 | -1.14 | -1.09 |
| Oct | 0 | -0.31 | -0.06 | 0.92 | 1.42 |
| Nov | 0 | -0.2 | 0.12 | 1.56 | 2.14 |
| Dec | 0 | -0.08 | 0.3 | 1.56 | 2.13 |
| Jan | 0 | -0.08 | 0.32 | 1.37 | 1.9 |
| Feb | 0 | 0.03 | 0.46 | 1.44 | 2 |
| Mar | 0 | -0.01 | 0.86 | 2.07 | 2.8 |
| Apr | 0 | -0.29 | 0.47 | 1.72 | 2.44 |
| May | 0 | -0.28 | 0.33 | 1.19 | 1.9 |
| Jun | 0 | -0.81 | -0.48 | -0.38 | -0.05 |
| Jul | 0 | -0.99 | -1.41 | -2.15 | -2.02 |
| Aug | 0 | -0.79 | -1 | -1.65 | -1.39 |
Why every moisture comparison here is a mixing ratio, not a humidity
Relative humidity divides by a temperature-dependent denominator, so comparing a 50°F garage with a 74°F house on RH would mostly restate their thermometers. Mixing ratio is absolute: equal readings mean equal water.
Mixing ratio against the day before, averaged over 23 rain onsets.
Rain lands on day 0. Outdoor air peaks the next day and is most of the way back to normal by day 3.
| Outdoors | Shed | Garage | Patio | House | |
|---|---|---|---|---|---|
| −1 | 0 | 0 | 0 | 0 | 0 |
| 0 | 1.8 | 1.16 | 0.6 | 0.54 | 0.33 |
| +1 | 2.22 | 2 | 1.16 | 1.01 | 0.62 |
| +2 | 1.15 | 1.14 | 0.92 | 0.66 | 0.51 |
| +3 | 0.68 | 0.82 | 0.73 | 0.43 | 0.4 |
| +4 | 0.68 | 0.75 | 0.71 | 0.35 | 0.33 |
Every day is scored against what its own weather predicts. What survived that test then had to be explained from elsewhere in the record — and almost all of it was.
Daily gallons across the year.
Water at this house is not weather-driven — with refrigerated air there is no evaporative cooling load, so what remains is irrigation and behavior. That is why water is judged against its own trailing baseline rather than against temperature.
| Date | Day | Value | Unit |
|---|---|---|---|
| 2026-03-30 | Mon | 3,307 | gal |
| 2026-03-29 | Sun | 1,922 | gal |
| 2026-05-23 | Sat | 744 | gal |
| 2026-05-10 | Sun | 692 | gal |
| 2025-09-27 | Sat | 455 | gal |
| 2026-07-04 | Sat | 402 | gal |
| 2026-07-26 | Sun | 395 | gal |
| 2026-07-02 | Thu | 375 | gal |
| 2026-07-23 | Thu | 354 | gal |
| 2026-04-14 | Tue | 347 | gal |
| 2026-06-18 | Thu | 343 | gal |
| 2026-07-07 | Tue | 340 | gal |
| 2025-11-23 | Sun | 326 | gal |
| 2026-04-11 | Sat | 322 | gal |
| 2026-07-11 | Sat | 315 | gal |
| 2026-08-04 | Tue | 314 | gal |
| 2026-04-04 | Sat | 309 | gal |
| 2026-06-27 | Sat | 304 | gal |
| 2026-06-02 | Tue | 300 | gal |
| 2026-08-01 | Sat | 295 | gal |
| 2026-07-28 | Tue | 293 | gal |
| 2026-07-30 | Thu | 292 | gal |
| 2026-06-15 | Mon | 289 | gal |
| 2026-06-04 | Thu | 287 | gal |
| 2025-09-25 | Thu | 285 | gal |
Daily cubic feet across the year.
The winter block is heating. The isolated dark cells outside it are not.
| Date | Day | Value | Unit |
|---|---|---|---|
| 2026-04-04 | Sat | 1,122 | cf |
| 2025-10-04 | Sat | 898 | cf |
| 2026-01-13 | Tue | 684 | cf |
| 2026-01-19 | Mon | 504 | cf |
| 2026-04-06 | Mon | 494 | cf |
| 2026-05-23 | Sat | 444 | cf |
| 2026-02-08 | Sun | 416 | cf |
| 2026-04-05 | Sun | 244 | cf |
| 2026-01-17 | Sat | 232 | cf |
| 2026-03-31 | Tue | 228 | cf |
| 2026-01-27 | Tue | 224 | cf |
| 2026-01-26 | Mon | 212 | cf |
| 2026-01-10 | Sat | 206 | cf |
| 2026-01-11 | Sun | 204 | cf |
| 2026-01-12 | Mon | 186 | cf |
| 2025-12-30 | Tue | 182 | cf |
| 2025-12-08 | Mon | 180 | cf |
| 2025-12-29 | Mon | 172 | cf |
| 2026-01-28 | Wed | 170 | cf |
| 2026-01-31 | Sat | 162 | cf |
| 2025-12-16 | Tue | 156 | cf |
| 2025-08-24 | Sun | 150 | cf |
| 2026-01-18 | Sun | 148 | cf |
| 2025-12-02 | Tue | 146 | cf |
| 2026-01-09 | Fri | 138 | cf |
Annual cubic feet, split by the heating signature. 98% of metered gas is accounted for.
Space heating is only 34% of the gas — less than the water heater's year-round standing draw, and the reason the whole gas bill loses to its own access fee in the cost section. The house starts calling for heat when the outside temperature dips below 47°F (rather than the conventional 65°F), which cuts the heating degree-days that matter from 2,215 to 387 — and only 28 nights all year fell below freezing.
| End use | Cubic feet |
|---|---|
| Space heating | 6,244 |
| Water heater + cooking | 6,845 |
| Pool + spa | 4,704 |
First the year as the meters recorded it — four measures on four separate scales, never two scales on one frame, because that manufactures correlations the data does not contain. Then the same span as the biller saw it: the only source here carrying cost, answering not what the house does but what it is charged for.
Each panel keeps its own y-axis; only the dates are shared.
Electricity and temperature move together. Gas moves opposite to both. Water does neither, which is the finding — it is on a human schedule, not a thermal one.
| Date | Electricity (kWh) | Water (gal) | Natural gas (cf) | Outdoor mean temperature (°F) |
|---|---|---|---|---|
| 2025-08-07 | 79.8 | 202 | 10.0 | 90.1 |
| 2025-08-14 | 68.3 | 165 | 14.0 | 85.4 |
| 2025-08-21 | 63.5 | 77.0 | 10.0 | 81.7 |
| 2025-08-28 | 45.1 | 127 | 10.0 | 84.7 |
| 2025-09-04 | 54.9 | 180 | 14.0 | 75.0 |
| 2025-09-11 | 59.7 | 259 | 14.0 | 83.4 |
| 2025-09-18 | 30.9 | 115 | 10.0 | 72.4 |
| 2025-09-25 | 61.0 | 285 | 24.0 | 73.3 |
| 2025-10-02 | 50.4 | 154 | 14.0 | 74.7 |
| 2025-10-09 | 51.1 | 224 | 14.0 | 75.2 |
| 2025-10-16 | 50.3 | 154 | 14.0 | 70.3 |
| 2025-10-23 | 42.2 | 137 | 18.0 | 70.4 |
| 2025-10-30 | 41.3 | 90.0 | 26.0 | 54.3 |
| 2025-11-06 | 42.6 | 174 | 24.0 | 62.9 |
| 2025-11-13 | 38.9 | 102 | 22.0 | 57.2 |
| 2025-11-20 | 32.5 | 150 | 24.0 | 49.3 |
| 2025-11-27 | 35.0 | 86.0 | 80.0 | 49.6 |
| 2025-12-04 | 42.2 | 160 | 108 | 45.3 |
| 2025-12-11 | 41.6 | 97.0 | 56.0 | 49.5 |
| 2025-12-18 | 39.1 | 176 | 54.0 | 52.4 |
| 2025-12-25 | 43.0 | 113 | 96.0 | 60.0 |
| 2026-01-01 | 42.0 | 207 | 82.0 | 55.3 |
| 2026-01-08 | 37.9 | 96.0 | 40.0 | 47.0 |
| 2026-01-15 | 47.2 | 179 | 52.0 | 45.4 |
| 2026-01-22 | 36.7 | 106 | 116 | 48.9 |
| 2026-01-29 | 50.1 | 173 | 128 | 44.5 |
| 2026-02-05 | 40.9 | 106 | 58.0 | 45.0 |
| 2026-02-12 | 36.8 | 169 | 36.0 | 59.5 |
| 2026-02-19 | 38.8 | 114 | 32.0 | 51.0 |
| 2026-02-26 | 37.0 | 182 | 20.0 | 65.3 |
| 2026-03-05 | 40.4 | 123 | 20.0 | 61.7 |
| 2026-03-12 | 40.7 | 183 | 16.0 | 60.4 |
| 2026-03-19 | 41.8 | 113 | 20.0 | 71.1 |
| 2026-03-26 | 51.7 | 262 | 14.0 | 75.8 |
| 2026-04-02 | 48.9 | 191 | 24.0 | 64.2 |
| 2026-04-09 | 41.0 | 279 | 28.0 | 70.1 |
| 2026-04-16 | 44.7 | 188 | 18.0 | 64.8 |
| 2026-04-23 | 46.3 | 267 | 14.0 | 69.4 |
| 2026-04-30 | 38.0 | 182 | 14.0 | 64.9 |
| 2026-05-07 | 49.2 | 255 | 18.0 | 66.7 |
| 2026-05-14 | 57.7 | 177 | 20.0 | 80.7 |
| 2026-05-21 | 54.5 | 264 | 14.0 | 74.2 |
| 2026-05-28 | 40.3 | 175 | 14.0 | 77.6 |
| 2026-06-04 | 56.2 | 287 | 12.0 | 71.8 |
| 2026-06-11 | 71.3 | 244 | 14.0 | 87.4 |
| 2026-06-18 | 58.4 | 343 | 14.0 | 83.5 |
| 2026-06-25 | 71.8 | 285 | 18.0 | 90.6 |
| 2026-07-02 | 72.4 | 375 | 14.0 | 86.6 |
| 2026-07-09 | 79.9 | 263 | 14.0 | 87.8 |
| 2026-07-16 | 74.5 | 280 | 10.0 | 83.8 |
| 2026-07-23 | 86.8 | 354 | 16.0 | 90.2 |
| 2026-07-30 | 88.6 | 292 | 14.0 | 92.8 |
Complete calendar months only.
| Month | Electricity (kWh) |
|---|---|
| 09/25 | 1,608 |
| 10/25 | 1,422 |
| 11/25 | 1,179 |
| 12/25 | 1,351 |
| 01/26 | 1,490 |
| 02/26 | 1,142 |
| 03/26 | 1,344 |
| 04/26 | 1,324 |
| 05/26 | 1,537 |
| 06/26 | 2,132 |
| 07/26 | 2,404 |
Actually billed, 3 years
$5,754
53,713 kWh across 35 bills, Jul 2023 – Jul 2026
Energy charges only
$4,013
what the export's COST column records — $1,741 short of the real total
Summer marginal rate
$0.1304/kWh
all-in, upper tier · winter is $0.0841
Summer share of spend
51%
from 11 of 35 bills
Split into the part you caused by using more or less, and the part the rate schedule caused on its own.
Across 22 paired months, usage decisions account for $361 of movement and rate changes for $16. This is the one view the interval export cannot produce — it needs cost, and three years of it.
| Period | Usage effect $ | Rate effect $ | Net $ |
|---|---|---|---|
| 2024-08 | +16.15 | +2.59 | +18.74 |
| 2024-09 | -8.12 | -0.12 | -8.24 |
| 2024-10 | +9.02 | +0.61 | +9.63 |
| 2024-11 | +12.55 | +0.48 | +13.03 |
| 2024-12 | +3.18 | +0.43 | +3.61 |
| 2025-01 | -26.58 | +0.00 | -26.58 |
| 2025-02 | -10.12 | +0.00 | -10.12 |
| 2025-03 | -14.37 | +0.00 | -14.36 |
| 2025-04 | +21.64 | -0.01 | +21.63 |
| 2025-05 | -11.52 | -0.00 | -11.52 |
| 2025-07 | +11.27 | +1.34 | +12.61 |
| 2025-08 | -20.10 | -1.98 | -22.08 |
| 2025-09 | -44.36 | -5.02 | -49.38 |
| 2025-10 | -11.40 | -0.00 | -11.40 |
| 2025-11 | -13.90 | +0.00 | -13.90 |
| 2025-12 | -3.55 | -0.00 | -3.55 |
| 2026-01 | +38.50 | -0.00 | +38.50 |
| 2026-02 | +24.66 | -0.00 | +24.66 |
| 2026-03 | +24.49 | -0.01 | +24.48 |
| 2026-04 | +5.52 | +0.01 | +5.53 |
| 2026-05 | -4.07 | +0.00 | -4.07 |
| 2026-07 | +25.61 | +2.89 | +28.50 |
Consumption per billing period. Periods vary from 28 to 34 days.
The seasonal shape repeats almost exactly year to year, which is what makes the weather-independent baseline visible: the troughs never approach zero.
| Month | kWh billed |
|---|---|
| Aug 23 | 2,195 |
| Sep 23 | 2,170 |
| Oct 23 | 1,648 |
| Nov 23 | 1,186 |
| Dec 23 | 1,210 |
| Jan 24 | 1,355 |
| Feb 24 | 1,024 |
| Mar 24 | 1,026 |
| Apr 24 | 1,028 |
| May 24 | 1,720 |
| Jun 24 | 1,811 |
| Jul 24 | 1,980 |
| Aug 24 | 2,360 |
| Sep 24 | 2,087 |
| Oct 24 | 1,804 |
| Nov 24 | 1,403 |
| Dec 24 | 1,265 |
| Jan 25 | 898 |
| Feb 25 | 850 |
| Mar 25 | 779 |
| Apr 25 | 1,400 |
| May 25 | 1,522 |
| Jul 25 | 2,096 |
| Aug 25 | 2,157 |
| Sep 25 | 1,633 |
| Oct 25 | 1,608 |
| Nov 25 | 1,164 |
| Dec 25 | 1,204 |
| Jan 26 | 1,560 |
| Feb 26 | 1,274 |
| Mar 26 | 1,200 |
| Apr 26 | 1,495 |
| May 26 | 1,452 |
| Jun 26 | 1,791 |
| Jul 26 | 2,358 |
One number here is worth carrying forward as an alarm — and one real failure that neither it nor anything else on this page would have caught. Both are worth writing down.
Floor, month by month
0.74kW
median of 12 monthly medians — the same floor as above, aggregated for watching rather than for costing
Month-to-month wobble
±0.074kW
full range 0.24 kW across the year
Smallest new load it would catch
148W
1,297 kWh/yr — about $134 a year left running
Where the alarm threshold comes from
Two standard deviations rather than three: this is a prompt to go and look, not a claim that something is wrong.
7 nameplates, read off the machines and typed in by hand — the one source here with no file behind it. They settle one assumption, correct another outright, and give the meters something to be checked against.
Central air conditioning
3.5 ton
Carrier 24ABB342A300 — 13 SEER, R-410A, cooling only
built Oct 2009, 17 years old
Central heating
88,000 BTU/h
Carrier 58DLA090-16 — 80.7% efficient, 71,000 BTU/h out
built Nov 2009, 17 years old
Water heater
50 gal
Rheem XG50T12HE40U0 — 40,000 BTU/h, natural draft
built Mar 2024, 2 years old
installed 28 Mar 2024
Pool heater
333,000 BTU/h
Sta-Rite SR333NA — natural gas, input rating
built Dec 2009, 17 years old
Pool filter
36 ft²
Pentair FNS Plus 36 — DE, rated 90 GPM for a private pool
built Jul 2022, 4 years old
Pool pump
1 HP
Pentair P6E6E-206L — Max-E-Pro EE, single speed
built Nov 2009, 17 years old
Patio mini-split
12,000 BTU/h
Premium Levella PIAW121800B — heat pump, both ways · R-410A · the only one on the property
date encoded in the serial, not decoded
A nameplate that checks its own transcription (NEC 440.33)
The largest motor is taken at 125%, the rest at nameplate. Reproducing the printed figure from the printed currents tests the typing, not the equipment — and the build refuses to run if it stops agreeing.
What each source can support, and where the numbers stop being measurements.
How much to trust each number
Weather — your WS-2000, 364 complete days at 5-minute resolution. Degree-days are integrated across every sample of the day — 288 on average, exactly 288 on 347 of 364 days — rather than derived from (max+min)/2, which matters near the balance point where the fits live. The station agrees closely with the weather UtilityHawk reports independently: daily highs r = 0.980 (bias +1.0°F), lows r = 0.988 (bias -0.7°F) over 364 days. The station's authority here is earned, not assumed.
Electricity — 364 days of 15-minute interval data, 359 of which overlap the weather station. Essentially complete: one day carries 92 intervals rather than 96, which is the spring-forward hour behaving correctly.
Water and gas — UtilityHawk supplied 366 daily readings; 364 of them fall inside the weather station's coverage and are the ones used here. Daily resolution is the binding constraint on leak detection. A leak has to lift the quietest day of the week before it registers at all, which sets that sensitivity at roughly 81 gallons a day — enough for a running toilet, nowhere near enough for a dripping tap, and blind to the one fault this house actually had. A split irrigation line leaks only while its valve is open, so it never lifts a quiet day at all. The hourly series answers a different question and answers it far better: it reads each irrigation cycle directly, and a cycle that changes size is visible within a week. See the leak and Water, by the hour.
The two electric exports agree — but they are not two measurements. Summing the 15-minute intervals over each of the 10 billing periods they fully cover gives 15,258 kWh against 15,244 kWh billed — a difference of +0.09%, with no single period off by more than 0.14%. The interval file reads consistently a hair high, which is what rounding to whole kWh on the bill would produce. Both files are the utility rendering the same smart meter register two ways, so this is a consistency check on the pipeline, not corroboration of the measurement — a miscalibrated meter would be miscalibrated in both. What it rules out is a misaligned billing boundary, intervals dropped from the export, a scaling error in parsing, or mishandled daylight saving. Those are the failure modes actually in play, and nothing in this dataset can test the meter itself.
What is genuinely independent is elsewhere: the backyard weather station against UtilityHawk's own weather source (different sensors, different operators); the pool pump's electrical signature against a thermometer in the water; and that pump's measured draw against its nameplate. Those are separate instruments agreeing, and they carry the weight this one cannot.
Money comes from 28 PDF bills, transcribed rate by rate. Nothing here divides a total by a usage figure to guess a price. Every tariff is typed from a bill and checked against it on each build — all 39 checks reproduce their source to within two cents, and the build aborts if any drifts. The worst disagreement across all of them is 2 cents, on Gas 2025-07, 1 Mcf @ $2.11/Dth. Listing all 39 passes would say nothing the sentence before it does not; the build failing is what carries the claim.
What 28 bills still cannot pin down. A complete year of both utilities — 14 EPE and 14 Las Cruces, one per meter read. Every rate below is now read off a bill for the month it applies to rather than carried forward from a neighbouring one, so these are the remaining edges:
Meter quantisation. The gas meter reads in whole Mcf and the bill charges whole dekatherms, so a month of 552 cf is billed as a full 1,000 cf. The water meter reads in whole 1,000-gallon units. UtilityHawk's daily figures are finer than either meter, which is why a month's daily sum need not land exactly on the billed volume — over the June–July 2026 period the daily water figures totalled 5,874 gal against 6,000 billed, a 2.1% difference entirely explained by rounding.
Caveats worth keeping in view. What follows is load-bearing for numbers on this page and is not measured:
What is identified, and on what evidence. The 15:15 timer block is the pool pump, on three independent grounds — the 1.65 kW electrical step, the water temperature stepping at the same quarter-hour, and an A.O. Smith SQ1102 nameplate that predicts 1,641 W against 1,650 W measured. And all 10 gas anomalies are identified rather than merely flagged: 7 are pool heating on days with no heating demand, and the other 3 are evening spa soaks, pinned by the absence of sun at their peak. 7 appliance nameplates have since been transcribed. They put the furnace's efficiency at 80.7% from its printed input and output, and establish that the central system cools only, so central heat is the gas furnace and the patio mini-split is the property's only heat pump.