From 0c7faa8c34f34937dd5bbb71f2e8c16c5eaaadea Mon Sep 17 00:00:00 2001 From: Alexander Hartung Date: Wed, 1 Jul 2026 12:51:41 +0200 Subject: [PATCH 1/3] Add smartEnergy-Tariff --- .../flexible_tariffs/smartEnergy/__init__.py | 0 .../flexible_tariffs/smartEnergy/config.py | 14 ++++++++ .../flexible_tariffs/smartEnergy/tariff.py | 35 +++++++++++++++++++ 3 files changed, 49 insertions(+) create mode 100644 packages/modules/electricity_pricing/flexible_tariffs/smartEnergy/__init__.py create mode 100644 packages/modules/electricity_pricing/flexible_tariffs/smartEnergy/config.py create mode 100644 packages/modules/electricity_pricing/flexible_tariffs/smartEnergy/tariff.py diff --git a/packages/modules/electricity_pricing/flexible_tariffs/smartEnergy/__init__.py b/packages/modules/electricity_pricing/flexible_tariffs/smartEnergy/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/modules/electricity_pricing/flexible_tariffs/smartEnergy/config.py b/packages/modules/electricity_pricing/flexible_tariffs/smartEnergy/config.py new file mode 100644 index 0000000000..54200bf55a --- /dev/null +++ b/packages/modules/electricity_pricing/flexible_tariffs/smartEnergy/config.py @@ -0,0 +1,14 @@ +from dataclasses import dataclass, field + + +@dataclass +class SmartEnergyTariffConfiguration: + pass + + +@dataclass +class SmartEnergyTariff: + name: str = "smartEnergy" + type: str = "smartEnergy" + official: bool = True + configuration: SmartEnergyTariffConfiguration = field(default_factory=SmartEnergyTariffConfiguration) diff --git a/packages/modules/electricity_pricing/flexible_tariffs/smartEnergy/tariff.py b/packages/modules/electricity_pricing/flexible_tariffs/smartEnergy/tariff.py new file mode 100644 index 0000000000..ea2c4569d7 --- /dev/null +++ b/packages/modules/electricity_pricing/flexible_tariffs/smartEnergy/tariff.py @@ -0,0 +1,35 @@ +#!/usr/bin/env python3 +import datetime +import logging +from typing import Dict + +from modules.common import req +from modules.common.abstract_device import DeviceDescriptor +from modules.common.component_state import TariffState +from modules.electricity_pricing.flexible_tariffs.smartEnergy.config import SmartEnergyTariff + +log = logging.getLogger(__name__) + + +def fetch(config: SmartEnergyTariff) -> None: + raw_prices = req.get_http_session().get( + f"https://apis.smartenergy.at/market/v1/price", + timeout=15 + ).json()["data"] + if len(raw_prices) == 0: + raise Exception("Es konnten keine Preise vom SmartEnergy-Server abgerufen werden.") + prices: Dict[int, float] = {} + for data in raw_prices: + formatted_price = data["value"] / 100000 # ct/kWh -> €/Wh + timestamp = datetime.datetime.strptime(data["date"], "%Y-%m-%dT%H:%M:%S%z").timestamp() + prices.update({str(int(timestamp)): formatted_price}) + return prices + + +def create_electricity_tariff(config: SmartEnergyTariff): + def updater(): + return TariffState(prices=fetch(config)) + return updater + + +device_descriptor = DeviceDescriptor(configuration_factory=SmartEnergyTariff) From b71a5e5cd6e390fc5dd77f3b2f9f13215cc6755e Mon Sep 17 00:00:00 2001 From: AlexanderHa98 Date: Wed, 1 Jul 2026 13:58:35 +0200 Subject: [PATCH 2/3] Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- .../flexible_tariffs/smartEnergy/tariff.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/modules/electricity_pricing/flexible_tariffs/smartEnergy/tariff.py b/packages/modules/electricity_pricing/flexible_tariffs/smartEnergy/tariff.py index ea2c4569d7..c97ae8f2f2 100644 --- a/packages/modules/electricity_pricing/flexible_tariffs/smartEnergy/tariff.py +++ b/packages/modules/electricity_pricing/flexible_tariffs/smartEnergy/tariff.py @@ -11,14 +11,14 @@ log = logging.getLogger(__name__) -def fetch(config: SmartEnergyTariff) -> None: +def fetch(config: SmartEnergyTariff) -> Dict[str, float]: raw_prices = req.get_http_session().get( f"https://apis.smartenergy.at/market/v1/price", timeout=15 ).json()["data"] if len(raw_prices) == 0: raise Exception("Es konnten keine Preise vom SmartEnergy-Server abgerufen werden.") - prices: Dict[int, float] = {} + prices: Dict[str, float] = {} for data in raw_prices: formatted_price = data["value"] / 100000 # ct/kWh -> €/Wh timestamp = datetime.datetime.strptime(data["date"], "%Y-%m-%dT%H:%M:%S%z").timestamp() From 36eb0366e8dbde64f2ee17cf69f94ae5af15dc33 Mon Sep 17 00:00:00 2001 From: Alexander Hartung Date: Wed, 1 Jul 2026 14:11:54 +0200 Subject: [PATCH 3/3] Renaming Folder --- .../{smartEnergy => smart_energy}/__init__.py | 0 .../flexible_tariffs/{smartEnergy => smart_energy}/config.py | 2 +- .../flexible_tariffs/{smartEnergy => smart_energy}/tariff.py | 4 ++-- 3 files changed, 3 insertions(+), 3 deletions(-) rename packages/modules/electricity_pricing/flexible_tariffs/{smartEnergy => smart_energy}/__init__.py (100%) rename packages/modules/electricity_pricing/flexible_tariffs/{smartEnergy => smart_energy}/config.py (90%) rename packages/modules/electricity_pricing/flexible_tariffs/{smartEnergy => smart_energy}/tariff.py (87%) diff --git a/packages/modules/electricity_pricing/flexible_tariffs/smartEnergy/__init__.py b/packages/modules/electricity_pricing/flexible_tariffs/smart_energy/__init__.py similarity index 100% rename from packages/modules/electricity_pricing/flexible_tariffs/smartEnergy/__init__.py rename to packages/modules/electricity_pricing/flexible_tariffs/smart_energy/__init__.py diff --git a/packages/modules/electricity_pricing/flexible_tariffs/smartEnergy/config.py b/packages/modules/electricity_pricing/flexible_tariffs/smart_energy/config.py similarity index 90% rename from packages/modules/electricity_pricing/flexible_tariffs/smartEnergy/config.py rename to packages/modules/electricity_pricing/flexible_tariffs/smart_energy/config.py index 54200bf55a..2f0488c180 100644 --- a/packages/modules/electricity_pricing/flexible_tariffs/smartEnergy/config.py +++ b/packages/modules/electricity_pricing/flexible_tariffs/smart_energy/config.py @@ -9,6 +9,6 @@ class SmartEnergyTariffConfiguration: @dataclass class SmartEnergyTariff: name: str = "smartEnergy" - type: str = "smartEnergy" + type: str = "smart_energy" official: bool = True configuration: SmartEnergyTariffConfiguration = field(default_factory=SmartEnergyTariffConfiguration) diff --git a/packages/modules/electricity_pricing/flexible_tariffs/smartEnergy/tariff.py b/packages/modules/electricity_pricing/flexible_tariffs/smart_energy/tariff.py similarity index 87% rename from packages/modules/electricity_pricing/flexible_tariffs/smartEnergy/tariff.py rename to packages/modules/electricity_pricing/flexible_tariffs/smart_energy/tariff.py index c97ae8f2f2..1428dd92cd 100644 --- a/packages/modules/electricity_pricing/flexible_tariffs/smartEnergy/tariff.py +++ b/packages/modules/electricity_pricing/flexible_tariffs/smart_energy/tariff.py @@ -6,14 +6,14 @@ from modules.common import req from modules.common.abstract_device import DeviceDescriptor from modules.common.component_state import TariffState -from modules.electricity_pricing.flexible_tariffs.smartEnergy.config import SmartEnergyTariff +from modules.electricity_pricing.flexible_tariffs.smart_energy.config import SmartEnergyTariff log = logging.getLogger(__name__) def fetch(config: SmartEnergyTariff) -> Dict[str, float]: raw_prices = req.get_http_session().get( - f"https://apis.smartenergy.at/market/v1/price", + "https://apis.smartenergy.at/market/v1/price", timeout=15 ).json()["data"] if len(raw_prices) == 0: