feat: add EnergyCharts feed-in tariff provider (#1165)
Some checks failed
Bump Version / Bump Version Workflow (push) Has been cancelled
CodeQL Advanced / Analyze (actions) (push) Has been cancelled
CodeQL Advanced / Analyze (python) (push) Has been cancelled
docker-build / platform-excludes (push) Has been cancelled
docker-build / build (push) Has been cancelled
docker-build / merge (push) Has been cancelled
pre-commit / pre-commit (push) Has been cancelled
Run Pytest on Pull Request / test (push) Has been cancelled

The `FeedInTariffEnergyCharts` provider uses the raw Energy-Charts day-ahead market price as the
feed-in tariff. It stores prices in `feed_in_tariff_wh` without adding electricity import charges
or VAT. The data is loaded from the Energy-Charts `/price` endpoint for the configured bidding
zone. The native Energy-Charts resolution, including quarter-hour data, is retained.

Energy-Charts usually supplies prices only for the published day-ahead period. If that data does
not cover the complete configured prediction horizon, the provider extends it as follows:

- With more than 800 hours of history, an ETS (Holt-Winters exponential smoothing) forecast with
  weekly seasonality is used.
- With more than 168 hours of history, an ETS forecast with daily seasonality is used.
- With less history, the median of the available values is used as a constant fallback.

The seasonal periods are adjusted to the source resolution. For example, quarter-hour data uses
four values per hour. Values already supplied by Energy-Charts are kept unchanged; only missing
future slots after the last published price are forecast. Consequently, a 15-minute optimization
uses four forecast values per hour without converting them to hourly averages.

Signed-off-by: Andreas Schmitz <akkudoktor.net>
Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com>
This commit is contained in:
Bobby Noelte
2026-07-23 15:48:29 +02:00
committed by GitHub
parent 6093d8d348
commit ed61918fe0
15 changed files with 697 additions and 24 deletions

View File

@@ -8,7 +8,7 @@
"name": "Apache 2.0",
"url": "https://www.apache.org/licenses/LICENSE-2.0.html"
},
"version": "v0.3.0.dev2607231185985809"
"version": "v0.3.0.dev2607231331447302"
},
"paths": {
"/v1/admin/cache/clear": {
@@ -4400,6 +4400,10 @@
"feedintariffimport": {
"$ref": "#/components/schemas/FeedInTariffImportCommonSettings",
"description": "Feed in tarif import provider settings."
},
"energycharts": {
"$ref": "#/components/schemas/FeedInTariffEnergyChartsCommonSettings",
"description": "EnergyCharts feed in tariff provider settings."
}
},
"type": "object",
@@ -4432,6 +4436,10 @@
"$ref": "#/components/schemas/FeedInTariffImportCommonSettings",
"description": "Feed in tarif import provider settings."
},
"energycharts": {
"$ref": "#/components/schemas/FeedInTariffEnergyChartsCommonSettings",
"description": "EnergyCharts feed in tariff provider settings."
},
"providers": {
"items": {
"type": "string"
@@ -4449,6 +4457,21 @@
"title": "FeedInTariffCommonSettings",
"description": "Feed In Tariff Prediction Configuration."
},
"FeedInTariffEnergyChartsCommonSettings": {
"properties": {
"bidding_zone": {
"$ref": "#/components/schemas/EnergyChartsBiddingZones",
"description": "Bidding Zone: 'AT', 'BE', 'CH', 'CZ', 'DE-LU', 'DE-AT-LU', 'DK1', 'DK2', 'FR', 'HU', 'IT-NORTH', 'NL', 'NO2', 'PL', 'SE4' or 'SI'",
"default": "DE-LU",
"examples": [
"DE-LU"
]
}
},
"type": "object",
"title": "FeedInTariffEnergyChartsCommonSettings",
"description": "Common settings for Energy-Charts feed-in tariff provider."
},
"FeedInTariffFixedCommonSettings": {
"properties": {
"feed_in_tariff_kwh": {