Reference calculator for PV soiling loss and water-fed pole cleaning ROI in Canada.
Project description
Solar Panel Cleaning Yield Recovery
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.
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.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file solar_panel_yield_2026-0.1.0.tar.gz.
File metadata
- Download URL: solar_panel_yield_2026-0.1.0.tar.gz
- Upload date:
- Size: 7.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6bfc363456e4386f2637e02c588637eff503fcc7526f09ac6ba63bd9e429ffce
|
|
| MD5 |
a14f0ecd3e434d0d33f179ea70bea91d
|
|
| BLAKE2b-256 |
cfe79a20930f8f323b796255803cc1929732fef6254deee4ad046cf8775ea36e
|
File details
Details for the file solar_panel_yield_2026-0.1.0-py3-none-any.whl.
File metadata
- Download URL: solar_panel_yield_2026-0.1.0-py3-none-any.whl
- Upload date:
- Size: 7.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8b0f94f9fe6c9244f44d104d896a5976a37f8aa824bb7bbf2c2aba42b24cda09
|
|
| MD5 |
768365172acd87a0aead5288d39af1b2
|
|
| BLAKE2b-256 |
6a0cab26e6e76afaa7cf91dafedbc8f63b96eb88afa16d7a64b6d812c664689b
|