How OwlWatt Measures
The point of OwlWatt is to compare what your panels actually produce against what they should produce. This page documents how we determine both numbers, what assumptions go into the model, and how shortfall is calculated. The methodology is open by design โ if an installer disputes an OwlWatt report, they need to be able to audit the math.
1. Data source โ what we measure
Production data comes from your inverter, not from a third-party estimator. We support two read paths:
- Local collector (Enphase IQ Gateway over LAN, or a Raspberry Pi we ship to you): polls the inverter every 5 seconds. Per-microinverter granularity on Enphase systems; aggregated AC power on SolarEdge systems.
- Cloud API (Enphase Enlighten v4 or SolarEdge Monitoring): polled on a slower cadence (~15 min) with vendor-managed aggregation. We use this as the fallback when local collection isn't available.
Local collection is preferred because it's higher resolution, doesn't depend on the vendor's cloud uptime, and doesn't share your data with anyone except OwlWatt. The Pi collector ships preconfigured; you plug it into power and Ethernet.
2. Expected production โ the pvlib PVWatts model
For each hour of each day, we compute expected production using pvlib's PVWatts implementation โ the same library the National Renewable Energy Laboratory publishes and the same model behind PVWatts.gov. The pipeline:
- Solar position โ pvlib's ephemeris calculation gives sun azimuth and elevation for every hour at your latitude and longitude.
- Clear-sky irradiance โ the Ineichen model produces hourly direct, diffuse, and global horizontal irradiance values for a cloudless sky at your location.
- Plane-of-array transposition โ convert horizontal irradiance to what your panels actually see, given their tilt and azimuth (using pvlib's
get_total_irradiance). - Cell temperature โ Faiman thermal model from POA irradiance and a conservative 20ยฐC ambient + 1 m/s wind assumption.
- DC power โ PVWatts DC power model with a -0.4% per ยฐC temperature coefficient (typical silicon).
- System losses โ flat 14% derating for soiling, wiring, mismatch, availability. Matches PVWatts's default.
- Inverter conversion โ pvlib's PVWatts inverter model, 96% peak efficiency, DC/AC ratio 1.2.
- Degradation โ 0.5% per year of installed system age (industry-standard silicon degradation rate).
The output is an hourly array of expected AC watts. Integrated over a day, that's your expected kWh for that day under clear-sky conditions.
3. Weather adjustment
Clear-sky alone overestimates production on cloudy days. For each day where measured ground-level irradiance is available (from NOAA, the local airport METAR, or a network of solar stations), we scale the clear-sky GHI by the ratio of measured to modeled to produce a weather-adjusted expected curve. The temporal shape (sunrise to sunset) is preserved; the magnitude is rescaled to reality.
When measured irradiance isn't available for a day, we fall back to clear-sky and tag the result. Reports identify which days were weather-adjusted versus clear-sky modeled.
4. Shortfall calculation
Shortfall is straightforward arithmetic:
shortfall_kwh = max(0, expected_kwh - actual_kwh) shortfall_pct = (expected_kwh - actual_kwh) / expected_kwh ร 100 shortfall_usd = shortfall_kwh ร tariff_rate_per_kwh
We integrate over your chosen window โ today, this month, year-to-date, since install. The tariff rate defaults to your state's average residential electricity price (EIA EPM Table 5.6.A) and can be overridden with your actual rate if it differs.
5. What we don't model
Honesty about model limits is part of the methodology:
- Shading from trees or neighboring structures is approximated by the system's measured-vs-clear-sky ratio over time. We don't have a 3D shading model. If your installer ran a Helioscope or Aurora shading analysis at design time, we can incorporate those losses.
- Snow cover shows up as a sharp drop in production with normal weather conditions. Reports flag suspected snow-loss days; shortfall calculation excludes them from the claim window by default.
- Soiling beyond the 14% default (e.g., extreme dust or pollen events) requires manual annotation. We don't auto-detect soiling severity.
- Single-panel failures are detected per-microinverter on Enphase systems but not on SolarEdge string systems (only aggregate output is exposed).
6. Versioning and replay
Every report records the methodology version, the pvlib version, the parameter set, and the input data window. Future model improvements don't invalidate past reports โ a report generated under methodology v1 stays reproducible against the v1 code path forever. The replay tool is open-source (link forthcoming).
7. Independence
We don't take commissions from solar installers, equipment vendors, or anyone in the residential solar supply chain. The subscription is our only revenue. That's not a sales pitch โ it's the technical reason a warranty letter signed off by OwlWatt holds up.