davecook/solar-panel-yield-2026

Reference calculator for PV soiling loss and water-fed pole cleaning ROI in Canada.

Maintainers

Package info

github.com/DaveCookVectorLabs/solar_panel_yield_2026

Language:Python

pkg:composer/davecook/solar-panel-yield-2026

Statistics

Installs: 0

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

v0.1.0 2026-04-12 22:47 UTC

This package is not auto-updated.

Last update: 2026-04-13 02:25:47 UTC


README

Reference calculator, datasets, and working paper on photovoltaic (PV) soiling loss, water-fed pole (WFP) cleaning engineering, and cleaning ROI for PV systems in Canada.

PyPI npm Crates.io License: MIT Docs: CC BY 4.0

What this is

A companion toolkit to the working paper Solar Panel Cleaning Yield Recovery: Soiling Loss, Water-Fed Pole Engineering, and Cleaning ROI for Photovoltaic Systems in Canada (v0.1.0, April 2026). The paper and this repository cover:

  • Soiling physics: how fast transmittance drops as dust accumulates, by climate zone and panel tilt
  • Water-fed pole engineering: deionized resin capacity as a function of inlet TDS, PV geometry to pole-length mapping, brush technique, and the fall-protection argument for grade-based operation
  • Regional solar resource: monthly irradiance for six Ontario cities
  • Cleaning economics: annual yield recovered vs cleaning interval for residential, commercial, and utility-scale systems
  • Regulatory crosswalk: OSHA, CSA, IEC, ASTM, Health Canada, NRCan, ECCC

Repository layout

datasets/        7 CSVs + generator + HF dataset card
pdfs/            Working paper (31 pages) + generator
docs/            Sphinx documentation (ReadTheDocs)
engines/         8 language implementations:
  python/        FastAPI + CLI reference engine (PyPI)
  rust/          Actix-web server (Crates.io)
  java/          Maven-packaged JAR (Maven Central)
  ruby/          Gem (RubyGems)
  elixir/        Mix package (Hex.pm)
  php/           Composer library (Packagist)
  go/            Go module (pkg.go.dev)
  nostr/         Long-form article publisher (6 relays)
notebooks/       Jupyter notebook (GitHub browse)
kaggle/          Same notebook + Kaggle metadata
observable/      ObservableHQ notebook markdown
public/          PHP form + JS calculator
SOURCES.md       Bibliography

Quick start (Python)

pip install solar-panel-yield-2026
python -c "from engine import calculate, _canonical_vector; print(calculate(_canonical_vector()))"

Or run the reference engine against the canonical test vector from the source tree:

python engines/python/engine.py sample

Or start the HTTP server:

python engines/python/engine.py serve --port 8000
curl -X POST http://127.0.0.1:8000/calculate -H 'Content-Type: application/json' -d '{
  "system_capacity_kwp": 5.0,
  "ghi_annual_avg": 3.54,
  "days_since_cleaning": 30
}'

Cross-language parity

All eight engines produce identical output for the canonical test vector:

Input Value
system_capacity_kwp 5.0
ghi_annual_avg 3.54 (Sudbury)
days_since_cleaning 30
soil_class medium
climate_zone temperate
panel_tilt_deg 15
electricity_price_cad_per_kwh 0.14
cleaning_visit_cost_cad 120.00
tap_water_tds_ppm 180
panel_height_ft 12
Output Value
current_loss_pct.expected 4.3485 %
lost_cad_per_day.expected 0.0862 CAD
clean_annual_kwh 5,168.4
never_clean_annual_loss_cad 86.83
wfp_pole_ft 10
wfp_cartridge 1L_cartridge
water_per_cleaning_l 15.2
ro_prestage_recommended false

Datasets

Seven CSVs published under CC BY 4.0; see datasets/README.md.

Working paper

31-page working paper, CC BY 4.0. Build from source:

pip install reportlab
python pdfs/generate_pdfs.py

License

  • Code: MIT (see LICENSE)
  • Datasets, PDF, dataset card: CC BY 4.0

Maintainer

Dave Cook, Binx Professional Cleaning, North Bay, Ontario, Canada. Contact: dave@binx.ca.