Geometry-based solar potential, irradiance, and solar PV energy calculations in Python without external APIs.
Project description
pysunergy-calc
Geometry-based solar potential, irradiance, and solar PV energy calculations in Python—just math, physics, and data classes; no external APIs needed.
- Accurate solar geometry: Compute sun position (declination, hour angle, altitude, azimuth, zenith) for any latitude, longitude, and datetime.
- Instantaneous PV power calculation: Use panel specs and solar irradiance to compute real-time output.
- Energy output estimation: Predict daily, yearly, or custom-period PV system yield.
Formulas
| Step | Equation |
|---|---|
| Declination | δ = 23.45 × sin[(360/365) × (n − 81)] |
| Hour angle | H = 15 × (solar-time-hours − 12) |
| Altitude | sin(α) = sin(δ) sin(φ) + cos(δ) cos(φ) cos(H) |
| Azimuth | sin(Az) = cos(δ) sin(H) / cos(α) |
| Irradiance | I = I₀ × sin(α) (for horizontal surface, clear sky) |
References:
Installation
pip install pysunergy-calc
Usage
from pysunergy_calc import (
compute_solar_potential,
compute_panel_power,
estimate_energy_produced,
)
# Example 1: Sun position and irradiance in New York on August 15, 2025, at 16:00 UTC
from datetime import datetime, timezone
sun = compute_solar_potential(
40.7128, # latitude
-74.0060, # longitude
datetime(2025, 8, 15, 16, 0, 0, tzinfo=timezone.utc) # UTC date/time
)
print(sun)
# SolarPosition(
# declination=..., hour_angle=..., altitude=..., azimuth=..., zenith=..., irradiance=...
# )
# Example 2: Compute panel output at that instant
area = 1.6 # m² (panel area)
efficiency = 0.20 # 20% PV efficiency
power_W = compute_panel_power(area, efficiency, sun.irradiance)
print(power_W)
# Example 3: Estimate daily energy (kWh) for your panel
average_irradiance = 5 * 1000 / 24 # e.g., 5kWh/m²/day avg ≈ 208 W/m² avg
daily_kWh = estimate_energy_produced(
area,
efficiency,
average_irradiance,
24, # hours in a day
0.75 # typical performance ratio (losses)
)
print(daily_kWh)
API Reference
compute_solar_potential(lat: float, lon: float, date: datetime) -> SolarPosition
- All angles are in degrees.
irradianceis in W/m² (horizontal surface).- Calculates solar declination, hour angle, altitude, azimuth, zenith, and irradiance for a specified location/time.
compute_panel_power(area: float, efficiency: float, irradiance: float) -> float
area: Panel area (m²)efficiency: Panel efficiency (0...1)irradiance: Solar irradiance (W/m²)- Returns instantaneous PV output power (W).
estimate_energy_produced(area: float, efficiency: float, average_irradiance: float, period_hours: float, performance_ratio: float=0.75) -> float
- Estimates total energy output for your system and conditions, in kWh over the specified period.
- Typical
performance_ratiois 0.75–0.85 (accounts for temperature, dust, inverter). - Average irradiance is entered in W/m².
Development & Testing
- 100% Python, type-annotated and PEP 621 compliant.
- Full Pytest test suite included.
- To develop and run tests:
uv pip install --group dev
pytest
- Code is linted/formatted automatically with ruff.
License
MIT © Abdullah Waqar
See Also
Node.js / TypeScript Version
Looking for a similar library for Node.js or TypeScript?
Check out the original sunergy-calc package for JavaScript/TypeScript with the same solar geometry and PV calculation logic.
- NPM package: sunergy-calc
- Source repo: https://github.com/abdullahwaqar/sunergy-calc
Use that version if you want to run solar calculations in web apps, serverless functions, or Node/TypeScript projects.
pysunergy-calc is not affiliated with nor endorsed by pveducation.org, palmetto.com, Sunbase, or EcoFlow. Reference links are for scientific documentation and transparency only.
Project details
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 pysunergy_calc-1.0.4.tar.gz.
File metadata
- Download URL: pysunergy_calc-1.0.4.tar.gz
- Upload date:
- Size: 19.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5dc72d16ea1b13829f661eae85c0a7f2ce17db0ab05f98bb1af9a776f72d8b48
|
|
| MD5 |
e72df52a7b67178b63178519d872f509
|
|
| BLAKE2b-256 |
3dbf68a969720edfd16dfe5875f0072b5b12f845b3eb645581b72be28050fcda
|
File details
Details for the file pysunergy_calc-1.0.4-py3-none-any.whl.
File metadata
- Download URL: pysunergy_calc-1.0.4-py3-none-any.whl
- Upload date:
- Size: 7.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
18f650ff4feae2baa8032854b6bd5eb65a8dfe53d7ec9be85125242e10592e08
|
|
| MD5 |
669fa6ae6b524f15c4625bbecbad2123
|
|
| BLAKE2b-256 |
025d376e88d77c55a9385cce187e685b7d654616f574f4eda061ef21f62f2af1
|