diff --git a/CHANGELOG.md b/CHANGELOG.md index 632daf4..3ece41a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [Unreleased] +## [0.6.0] - 2026-09-24 ### Added @@ -13,11 +13,25 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Pydantic models for the 3D API data model: `Rack`, `Racks`, `Tracker` (3D), `Trackers`, `InverterInput`, `ModuleString`, `SimpleTerrain`, `ShadingObjects`, and supporting geometry types (`QuadDouble`, `Vector3Double`, `IndexedObject3D`, `ModuleIndexRange`, `MiniSimpleTerrainDto`, `TerrainRowDto`, `TerrainRowStartEndColumnsDto`). These enable full composition of 3D plant layouts, including power optimizer support via `InverterInput`. - `PVSystem.recalculate_modeling_correction_factor` field to control whether the modeling correction factor is recalculated during energy yield assessment (default `True`). - `from_solcast` added to the Weather Utilities section of the API reference documentation. +- `TrackerAlgorithm` enum to define custom rotation strategies for tracker systems, enabling flexible rotation calculation methods beyond predefined algorithms. +- `TrackersConditionsDataset` class with Protobuf serialization support for storing and transmitting tracker rotation conditions and custom rotation data. +- `TrackerRotationID` field in the `Layout` class to support custom tracker rotation workflows. +- `dc_ohmic_connector_loss` and related DC loss resistance fields in the `Layout` class for detailed power loss modeling in tracker systems. +- CSV export functionality for tracker-specific results, providing detailed rotation and performance data for each tracker row. +- `custom_rotations` module for importing custom tracker rotation schedules from CSV files with functions `from_csv()`, `from_csv_folder()`, and `csv_to_protobuf()` to load and validate rotation data. +- Public API exports: `from_custom_rotations_csv()` and `custom_rotations_csv_to_protobuf()` for programmatic CSV rotation ingestion. +- Utilities for validating the compatibility of custom rotations and plant layout: tracker rotation IDs, checking time resolution compatibility, and verifying weather data coverage for rotation periods. ### Changed - `PVSystem.tilt` is now fixed-tilt only. For tracker systems, set `tracker_max_rotation_angle` instead. Previously, `tilt` was silently used as the tracker rotation bound, which caused confusion. +### Fixed + +- Documentation examples corrected: GCR spacing value for tracker systems in quick-start example now consistently use 0.35. +- Documentation clarified: albedo parameter in workflow-2 now shows explicit list format `[0.2] * 12` for clarity. +- API error message updated to reference latest supported API version (v7) in validation documentation. + ## [0.5.0] - 2026-06-29 ### Changed diff --git a/docs/getting-started/quick-start-examples.md b/docs/getting-started/quick-start-examples.md index 9358ade..f663fa7 100644 --- a/docs/getting-started/quick-start-examples.md +++ b/docs/getting-started/quick-start-examples.md @@ -255,7 +255,7 @@ def create_plant(mounting_type: str) -> PVSystem: plant.gcr = 0.35 else: # Tracker plant.tracker_max_rotation_angle = 60.0 # Max rotation angle - plant.gcr = 0.3 # Trackers need wider spacing + plant.gcr = 0.35 # Assuming same spacing conditions plant.add_pan_files({"Module": Path("data/module.PAN")}) plant.add_ond_files({"Inverter": Path("data/inverter.OND")}) diff --git a/docs/getting-started/workflow-2-pvplant-builder.md b/docs/getting-started/workflow-2-pvplant-builder.md index b9f8a5f..0b5362f 100644 --- a/docs/getting-started/workflow-2-pvplant-builder.md +++ b/docs/getting-started/workflow-2-pvplant-builder.md @@ -111,7 +111,7 @@ plant.soiling_loss = [0.08, 0.08, 0.07, 0.06, 0.05, 0.04, 0.04, 0.05, 0.06, 0.07, 0.08, 0.09] # Albedo (ground reflection) -plant.albedo = 0.2 # Can be single value (expanded to 12 months) or list of 12 +plant.albedo = [0.2] * 12 # Can be single value (expanded to 12 months) or list of 12 ``` diff --git a/solarfarmer/api.py b/solarfarmer/api.py index e322c69..63a7d5b 100644 --- a/solarfarmer/api.py +++ b/solarfarmer/api.py @@ -551,4 +551,4 @@ def build_api_url(version: str | None = None) -> str: if re.fullmatch(r"v[1-9]\d*", version): return f"{base}/{version}/api" - raise ValueError(f"Invalid version '{version}'. Must be 'latest' or 'vX' (e.g., 'v5').") + raise ValueError(f"Invalid version '{version}'. Must be 'latest' or 'vX' (e.g., 'v7').")