From ae761b7fb4ef56ade9bfe5753208fcab9d273450 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20M=C3=BCller?= Date: Fri, 6 Oct 2023 09:22:48 +0200 Subject: [PATCH 01/12] feat: count all fees. Add sensor with VAT --- README.md | 2 +- custom_components/nanogreen/const.py | 9 +++++++++ custom_components/nanogreen/coordinator.py | 7 ++++++- custom_components/nanogreen/manifest.json | 2 +- 4 files changed, 17 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 00e0995..b318dc6 100644 --- a/README.md +++ b/README.md @@ -51,7 +51,7 @@ Repozitář by se vám měl zobrazit mezi ostatními repozitáři. | ID | Popis | | --------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | | `current_market_price` | Současná tržní cena elektřiny. | -| `current_consumption_price` | Tržní cena pro spotřebu po odečtení poplatku za služby obchodu ve výši 350 Kč/MWh bez DPH. | +| `current_consumption_price` | Tržní cena pro spotřebu po odečtení poplatků podle aktuálního ceníku, bez DPH. | | `current_production_price_with_nano` | Tržní cena pro výkup přebytků při současném odběru elektřiny od Nano Green po odečtení poplatku za služby obchodu ve výši 600 Kč/MWh bez DPH. | | `current_production_price_without_nano` | Tržní cena pro výkup přebytků při odběru elektřiny od jiného dodavatele po odečtení poplatku za služby obchodu ve výši 900 Kč/MWh bez DPH. | | `today_base_cheapest_hour` | Dnešní nejlevnější hodina za celý den. | diff --git a/custom_components/nanogreen/const.py b/custom_components/nanogreen/const.py index f94f396..a118e9b 100644 --- a/custom_components/nanogreen/const.py +++ b/custom_components/nanogreen/const.py @@ -14,10 +14,14 @@ CONF_LANGUAGE = "language" UPDATE_LISTENER = "update_listener" PLATFORMS = [Platform.SENSOR] +VAT = 1.21 # DPH 21% +DAILY_FEE = (129+3.43+28.3)/30.437 # Monthly fees divided by average days in month. Without VAT. +WH_FEE = (350 + 113)/1000 # Fees per MWh in watt, without VAT ATTR_API_CURRENT_MARKET_PRICE = "current_market_price" ATTR_API_CURRENT_CONSUMPTION_PRICE = "current_consumption_price" +ATTR_API_CURRENT_CONSUMPTION_PRICE_WITH_VAT = "current_consumption_price_with_vat" ATTR_API_CURRENT_PRODUCTION_WITH_NANO_PRICE = "current_production_price_with_nano" ATTR_API_CURRENT_PRODUCTION_WITHOUT_NANO_PRICE = "current_production_price_without_nano" ATTR_API_TODAY_BASE_CHEAPEST_HOUR = "today_base_cheapest_hour" @@ -41,6 +45,11 @@ name="Current consumption price [CZK/kWh]", native_unit_of_measurement="CZK/kWh", ), + SensorEntityDescription( + key=ATTR_API_CURRENT_CONSUMPTION_PRICE_WITH_VAT, + name="Current consumption price with VAT [CZK/kWh]", + native_unit_of_measurement="CZK/kWh", + ), SensorEntityDescription( key=ATTR_API_CURRENT_PRODUCTION_WITH_NANO_PRICE, name="Current production price (consumption with Nano) [CZK/kWh]", diff --git a/custom_components/nanogreen/coordinator.py b/custom_components/nanogreen/coordinator.py index f2d00a3..848ffa8 100644 --- a/custom_components/nanogreen/coordinator.py +++ b/custom_components/nanogreen/coordinator.py @@ -21,6 +21,7 @@ DOMAIN, ATTR_API_CURRENT_MARKET_PRICE, ATTR_API_CURRENT_CONSUMPTION_PRICE, + ATTR_API_CURRENT_CONSUMPTION_PRICE_WITH_VAT, ATTR_API_CURRENT_PRODUCTION_WITH_NANO_PRICE, ATTR_API_CURRENT_PRODUCTION_WITHOUT_NANO_PRICE, ATTR_API_IS_CURRENTLY_CHEAPEST_HOUR, @@ -32,6 +33,9 @@ ATTR_API_TODAY_PEAK_SECOND_CHEAPEST_HOUR, ATTR_API_TODAY_HOURLY_PRICES, ATTR_API_TOMORROW_HOURLY_PRICES, + DAILY_FEE, + WH_FEE, + VAT, ) _LOGGER = logging.getLogger(__name__) @@ -71,7 +75,8 @@ async def _convert_response(self, response): return { # non binary sensors ATTR_API_CURRENT_MARKET_PRICE: current_price, - ATTR_API_CURRENT_CONSUMPTION_PRICE: current_price + 0.35, + ATTR_API_CURRENT_CONSUMPTION_PRICE: current_price + WH_FEE + DAILY_FEE, + ATTR_API_CURRENT_CONSUMPTION_PRICE_WITH_VAT: (current_price + WH_FEE + DAILY_FEE) * VAT, ATTR_API_CURRENT_PRODUCTION_WITH_NANO_PRICE: current_price - 0.6, ATTR_API_CURRENT_PRODUCTION_WITHOUT_NANO_PRICE: current_price - 0.9, ATTR_API_TODAY_BASE_CHEAPEST_HOUR: data.get("todayBaseCheapestHour"), diff --git a/custom_components/nanogreen/manifest.json b/custom_components/nanogreen/manifest.json index 92847dd..c81427a 100644 --- a/custom_components/nanogreen/manifest.json +++ b/custom_components/nanogreen/manifest.json @@ -6,6 +6,6 @@ "codeowners": [], "requirements": [], "iot_class": "cloud_polling", - "version": "0.0.1", + "version": "0.2.1", "config_flow": true } From db0da03c5dd07b2fc493886b976ef527c6c52616 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20M=C3=BCller?= Date: Fri, 6 Oct 2023 11:00:08 +0200 Subject: [PATCH 02/12] feat: add hourly consumption graph --- .vscode/settings.json | 7 ++++++ README.md | 26 ++++++++++++++++++++++ custom_components/nanogreen/const.py | 11 ++++++--- custom_components/nanogreen/coordinator.py | 2 ++ custom_components/nanogreen/sensor.py | 4 ++++ 5 files changed, 47 insertions(+), 3 deletions(-) create mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..36c9d7d --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,7 @@ +{ + "[python]": { + "editor.defaultFormatter": "ms-python.autopep8" + }, + "python.formatting.provider": "none", + "python.analysis.typeCheckingMode": "basic" +} diff --git a/README.md b/README.md index b318dc6..3f58a26 100644 --- a/README.md +++ b/README.md @@ -109,3 +109,29 @@ graph_span: 24h span: start: day ``` + +- také si můžete do grafu dát cenu spotřeby včetně všech poplatků a DPH + +```yaml +type: custom:apexcharts-card +header: + show: true + title: Cena elektriny dnes + show_states: true + colorize_states: true +series: + - entity: sensor.current_market_price_czk_kwh + data_generator: | + return entity.attributes.today_hourly_consumption_prices_with_vat.map((price, index) => { + const date = new Date() + date.setHours(index) + date.setMinutes(0) + date.setSeconds(0) + return [date, price]; + }); + show: + in_header: before_now +graph_span: 24h +span: + start: day +``` diff --git a/custom_components/nanogreen/const.py b/custom_components/nanogreen/const.py index a118e9b..18e16d7 100644 --- a/custom_components/nanogreen/const.py +++ b/custom_components/nanogreen/const.py @@ -14,9 +14,13 @@ CONF_LANGUAGE = "language" UPDATE_LISTENER = "update_listener" PLATFORMS = [Platform.SENSOR] -VAT = 1.21 # DPH 21% -DAILY_FEE = (129+3.43+28.3)/30.437 # Monthly fees divided by average days in month. Without VAT. -WH_FEE = (350 + 113)/1000 # Fees per MWh in watt, without VAT +VAT = 1.21 # DPH 21% + +# Monthly fees divided by average days in month. Without VAT. +DAILY_FEE = (129+3.43+28.3)/30.437 + +# Fees per MWh in watt, without VAT +WH_FEE = (350 + 113)/1000 ATTR_API_CURRENT_MARKET_PRICE = "current_market_price" @@ -31,6 +35,7 @@ ATTR_API_TODAY_PEAK_SECOND_CHEAPEST_HOUR = "today_peak_second_cheapest_hour" ATTR_API_TODAY_OFFPEAK_SECOND_CHEAPEST_HOUR = "today_offpeak_second_cheapest_hour" ATTR_API_TODAY_HOURLY_PRICES = "today_hourly_prices" +ATTR_API_TODAY_HOURLY_CONSUMPTION_PRICES_WITH_VAT = "today_hourly_consumption_prices_with_vat" ATTR_API_TOMORROW_HOURLY_PRICES = "tomorrow_hourly_prices" diff --git a/custom_components/nanogreen/coordinator.py b/custom_components/nanogreen/coordinator.py index 848ffa8..25d7a07 100644 --- a/custom_components/nanogreen/coordinator.py +++ b/custom_components/nanogreen/coordinator.py @@ -32,6 +32,7 @@ ATTR_API_TODAY_PEAK_CHEAPEST_HOUR, ATTR_API_TODAY_PEAK_SECOND_CHEAPEST_HOUR, ATTR_API_TODAY_HOURLY_PRICES, + ATTR_API_TODAY_HOURLY_CONSUMPTION_PRICES_WITH_VAT, ATTR_API_TOMORROW_HOURLY_PRICES, DAILY_FEE, WH_FEE, @@ -92,6 +93,7 @@ async def _convert_response(self, response): "todayPeakSecondCheapestHour" ), ATTR_API_TODAY_HOURLY_PRICES: data.get("todayHourlyPrices", []), + ATTR_API_TODAY_HOURLY_CONSUMPTION_PRICES_WITH_VAT: list(map(lambda x: (x + WH_FEE + DAILY_FEE) * VAT, data.get("todayHourlyPrices", []))), ATTR_API_TOMORROW_HOURLY_PRICES: data.get("tomorrowHourlyPrices", []), # binary sensors ATTR_API_IS_CURRENTLY_CHEAPEST_HOUR: data.get( diff --git a/custom_components/nanogreen/sensor.py b/custom_components/nanogreen/sensor.py index d873a9b..ba756e1 100644 --- a/custom_components/nanogreen/sensor.py +++ b/custom_components/nanogreen/sensor.py @@ -11,6 +11,7 @@ from .const import ( ATTR_API_TODAY_HOURLY_PRICES, + ATTR_API_TODAY_HOURLY_CONSUMPTION_PRICES_WITH_VAT, ATTR_API_TOMORROW_HOURLY_PRICES, BINARY_SENSOR_TYPES, DOMAIN, @@ -94,6 +95,9 @@ def extra_state_attributes(self): ATTR_API_TODAY_HOURLY_PRICES: self._coordinator.data.get( ATTR_API_TODAY_HOURLY_PRICES ), + ATTR_API_TODAY_HOURLY_CONSUMPTION_PRICES_WITH_VAT: self._coordinator.data.get( + ATTR_API_TODAY_HOURLY_CONSUMPTION_PRICES_WITH_VAT + ), ATTR_API_TOMORROW_HOURLY_PRICES: self._coordinator.data.get( ATTR_API_TOMORROW_HOURLY_PRICES ), From 8a3f4914c68ab421bdd22aec99f7b76a9b3d351f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20M=C3=BCller?= Date: Fri, 6 Oct 2023 11:23:52 +0200 Subject: [PATCH 03/12] fix: hourly fee instead of daily --- custom_components/nanogreen/const.py | 4 ++-- custom_components/nanogreen/coordinator.py | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/custom_components/nanogreen/const.py b/custom_components/nanogreen/const.py index 18e16d7..d03397a 100644 --- a/custom_components/nanogreen/const.py +++ b/custom_components/nanogreen/const.py @@ -16,8 +16,8 @@ PLATFORMS = [Platform.SENSOR] VAT = 1.21 # DPH 21% -# Monthly fees divided by average days in month. Without VAT. -DAILY_FEE = (129+3.43+28.3)/30.437 +# Monthly fees divided by average days in month and hours in day. Without VAT. +HOURLY_FEE = (129+3.43+28.3)/30.437/24 # Fees per MWh in watt, without VAT WH_FEE = (350 + 113)/1000 diff --git a/custom_components/nanogreen/coordinator.py b/custom_components/nanogreen/coordinator.py index 25d7a07..7a81509 100644 --- a/custom_components/nanogreen/coordinator.py +++ b/custom_components/nanogreen/coordinator.py @@ -34,7 +34,7 @@ ATTR_API_TODAY_HOURLY_PRICES, ATTR_API_TODAY_HOURLY_CONSUMPTION_PRICES_WITH_VAT, ATTR_API_TOMORROW_HOURLY_PRICES, - DAILY_FEE, + HOURLY_FEE, WH_FEE, VAT, ) @@ -76,8 +76,8 @@ async def _convert_response(self, response): return { # non binary sensors ATTR_API_CURRENT_MARKET_PRICE: current_price, - ATTR_API_CURRENT_CONSUMPTION_PRICE: current_price + WH_FEE + DAILY_FEE, - ATTR_API_CURRENT_CONSUMPTION_PRICE_WITH_VAT: (current_price + WH_FEE + DAILY_FEE) * VAT, + ATTR_API_CURRENT_CONSUMPTION_PRICE: current_price + WH_FEE + HOURLY_FEE, + ATTR_API_CURRENT_CONSUMPTION_PRICE_WITH_VAT: (current_price + WH_FEE + HOURLY_FEE) * VAT, ATTR_API_CURRENT_PRODUCTION_WITH_NANO_PRICE: current_price - 0.6, ATTR_API_CURRENT_PRODUCTION_WITHOUT_NANO_PRICE: current_price - 0.9, ATTR_API_TODAY_BASE_CHEAPEST_HOUR: data.get("todayBaseCheapestHour"), @@ -93,7 +93,7 @@ async def _convert_response(self, response): "todayPeakSecondCheapestHour" ), ATTR_API_TODAY_HOURLY_PRICES: data.get("todayHourlyPrices", []), - ATTR_API_TODAY_HOURLY_CONSUMPTION_PRICES_WITH_VAT: list(map(lambda x: (x + WH_FEE + DAILY_FEE) * VAT, data.get("todayHourlyPrices", []))), + ATTR_API_TODAY_HOURLY_CONSUMPTION_PRICES_WITH_VAT: list(map(lambda x: (x + WH_FEE + HOURLY_FEE) * VAT, data.get("todayHourlyPrices", []))), ATTR_API_TOMORROW_HOURLY_PRICES: data.get("tomorrowHourlyPrices", []), # binary sensors ATTR_API_IS_CURRENTLY_CHEAPEST_HOUR: data.get( From f2d03ce637a8c363e5e1df1261f6887325e2cf51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20M=C3=BCller?= Date: Fri, 6 Oct 2023 11:41:44 +0200 Subject: [PATCH 04/12] fix: readme new entity --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 3f58a26..52e6fcb 100644 --- a/README.md +++ b/README.md @@ -52,6 +52,7 @@ Repozitář by se vám měl zobrazit mezi ostatními repozitáři. | --------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | | `current_market_price` | Současná tržní cena elektřiny. | | `current_consumption_price` | Tržní cena pro spotřebu po odečtení poplatků podle aktuálního ceníku, bez DPH. | +| `current_consumption_price_with_vat` | Tržní cena pro spotřebu po odečtení poplatků podle aktuálního ceníku, včetně DPH. | | `current_production_price_with_nano` | Tržní cena pro výkup přebytků při současném odběru elektřiny od Nano Green po odečtení poplatku za služby obchodu ve výši 600 Kč/MWh bez DPH. | | `current_production_price_without_nano` | Tržní cena pro výkup přebytků při odběru elektřiny od jiného dodavatele po odečtení poplatku za služby obchodu ve výši 900 Kč/MWh bez DPH. | | `today_base_cheapest_hour` | Dnešní nejlevnější hodina za celý den. | From 1fc70384dd57a26d9aaaf02c19136de03e386c38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20M=C3=BCller?= Date: Sat, 7 Oct 2023 10:22:49 +0200 Subject: [PATCH 05/12] fix: remove hourly fee, it works only when consumption is exactly 1 kwh each hour --- custom_components/nanogreen/const.py | 3 --- custom_components/nanogreen/coordinator.py | 7 +++---- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/custom_components/nanogreen/const.py b/custom_components/nanogreen/const.py index d03397a..d3ebb9a 100644 --- a/custom_components/nanogreen/const.py +++ b/custom_components/nanogreen/const.py @@ -16,9 +16,6 @@ PLATFORMS = [Platform.SENSOR] VAT = 1.21 # DPH 21% -# Monthly fees divided by average days in month and hours in day. Without VAT. -HOURLY_FEE = (129+3.43+28.3)/30.437/24 - # Fees per MWh in watt, without VAT WH_FEE = (350 + 113)/1000 diff --git a/custom_components/nanogreen/coordinator.py b/custom_components/nanogreen/coordinator.py index 7a81509..016630f 100644 --- a/custom_components/nanogreen/coordinator.py +++ b/custom_components/nanogreen/coordinator.py @@ -34,7 +34,6 @@ ATTR_API_TODAY_HOURLY_PRICES, ATTR_API_TODAY_HOURLY_CONSUMPTION_PRICES_WITH_VAT, ATTR_API_TOMORROW_HOURLY_PRICES, - HOURLY_FEE, WH_FEE, VAT, ) @@ -76,8 +75,8 @@ async def _convert_response(self, response): return { # non binary sensors ATTR_API_CURRENT_MARKET_PRICE: current_price, - ATTR_API_CURRENT_CONSUMPTION_PRICE: current_price + WH_FEE + HOURLY_FEE, - ATTR_API_CURRENT_CONSUMPTION_PRICE_WITH_VAT: (current_price + WH_FEE + HOURLY_FEE) * VAT, + ATTR_API_CURRENT_CONSUMPTION_PRICE: current_price + WH_FEE, + ATTR_API_CURRENT_CONSUMPTION_PRICE_WITH_VAT: (current_price + WH_FEE) * VAT, ATTR_API_CURRENT_PRODUCTION_WITH_NANO_PRICE: current_price - 0.6, ATTR_API_CURRENT_PRODUCTION_WITHOUT_NANO_PRICE: current_price - 0.9, ATTR_API_TODAY_BASE_CHEAPEST_HOUR: data.get("todayBaseCheapestHour"), @@ -93,7 +92,7 @@ async def _convert_response(self, response): "todayPeakSecondCheapestHour" ), ATTR_API_TODAY_HOURLY_PRICES: data.get("todayHourlyPrices", []), - ATTR_API_TODAY_HOURLY_CONSUMPTION_PRICES_WITH_VAT: list(map(lambda x: (x + WH_FEE + HOURLY_FEE) * VAT, data.get("todayHourlyPrices", []))), + ATTR_API_TODAY_HOURLY_CONSUMPTION_PRICES_WITH_VAT: list(map(lambda x: (x + WH_FEE) * VAT, data.get("todayHourlyPrices", []))), ATTR_API_TOMORROW_HOURLY_PRICES: data.get("tomorrowHourlyPrices", []), # binary sensors ATTR_API_IS_CURRENTLY_CHEAPEST_HOUR: data.get( From ab99b3286efbea57b7363244baadb984a83daffe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20M=C3=BCller?= Date: Sat, 7 Oct 2023 10:58:00 +0200 Subject: [PATCH 06/12] fix: improve names, description and readme. --- README.md | 53 ++++++++++++---------- custom_components/nanogreen/const.py | 13 +++--- custom_components/nanogreen/coordinator.py | 12 ++--- custom_components/nanogreen/sensor.py | 6 +-- 4 files changed, 43 insertions(+), 41 deletions(-) diff --git a/README.md b/README.md index 52e6fcb..e7e611d 100644 --- a/README.md +++ b/README.md @@ -48,33 +48,36 @@ Repozitář by se vám měl zobrazit mezi ostatními repozitáři. ## Sensory -| ID | Popis | -| --------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | -| `current_market_price` | Současná tržní cena elektřiny. | -| `current_consumption_price` | Tržní cena pro spotřebu po odečtení poplatků podle aktuálního ceníku, bez DPH. | -| `current_consumption_price_with_vat` | Tržní cena pro spotřebu po odečtení poplatků podle aktuálního ceníku, včetně DPH. | -| `current_production_price_with_nano` | Tržní cena pro výkup přebytků při současném odběru elektřiny od Nano Green po odečtení poplatku za služby obchodu ve výši 600 Kč/MWh bez DPH. | -| `current_production_price_without_nano` | Tržní cena pro výkup přebytků při odběru elektřiny od jiného dodavatele po odečtení poplatku za služby obchodu ve výši 900 Kč/MWh bez DPH. | -| `today_base_cheapest_hour` | Dnešní nejlevnější hodina za celý den. | -| `today_peak_cheapest_hour` | Dnešní nejlevnější hodina v energetické špičce. | -| `today_offpeak_cheapest_hour` | Dnešní nejlevnější hodina mimo energetickou špičku. | -| `today_base_second_cheapest_hour` | Dnešní druhá nejlevnější hodina za celý den. | -| `today_peak_second_cheapest_hour` | Dnešní druhá nejlevnější hodina v energetické špičce. | -| `today_offpeak_second_cheapest_hour` | Dnešní druhá nejlevnější hodina mimo energetickou špičku. | -| `is_currently_cheapest_hour` | Binární sensor. Zapnutý, pokud je nejlevnější hodina elektřiny z celého dne. | -| `is_currently_second_cheapest_hour` | Binární sensor. Zapnutý, pokud je druhá nejlevnější hodina elektřiny z celého dne. | -| `is_currently_third_cheapest_hour` | Binární sensor. Zapnutý, pokud je třetí nejlevnější hodina elektřiny z celého dne. | -| `is_currently_fourth_cheapest_hour` | Binární sensor. Zapnutý, pokud je čtvrtá nejlevnější hodina elektřiny z celého dne. | -| `is_currently_fifth_cheapest_hour` | Binární sensor. Zapnutý, pokud je pátá nejlevnější hodina elektřiny z celého dne. | -| `is_currently_sixth_cheapest_hour` | Binární sensor. Zapnutý, pokud je šestá nejlevnější hodina elektřiny z celého dne. | -| `is_currently_in_two_cheapest_hours` | Binární sensor. Zapnutý, pokud je jedna ze dvou nejlevnějších hodin elektřiny z celého dne. | -| `is_currently_in_three_cheapest_hours` | Binární sensor. Zapnutý, pokud je jedna ze tří nejlevnějších hodin elektřiny z celého dne. | -| `is_currently_in_four_cheapest_hours` | Binární sensor. Zapnutý, pokud je jedna ze čtyř nejlevnějších hodin elektřiny z celého dne. | -| `is_currently_in_five_cheapest_hours` | Binární sensor. Zapnutý, pokud je jedna z pěti nejlevnějších hodin elektřiny z celého dne. | -| `is_currently_in_six_cheapest_hours` | Binární sensor. Zapnutý, pokud je jedna z šesti nejlevnějších hodin elektřiny z celého dne. | +| ID | Popis | +| --------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | +| `current_market_price` | Současná tržní cena silové elektřiny. | +| `current_consumption_price` | Spotřební cena silové el. po odečtení poplatků podle aktuálního ceníku, bez DPH. | +| `current_consumption_price_incl_vat` | Spotřební cena silové el. po odečtení poplatků podle aktuálního ceníku, včetně DPH. | +| `current_production_price_with_nano` | Výkupní cena silové el. při současném odběru elektřiny od Nano Green po odečtení poplatku za služby obchodu ve výši 600 Kč/MWh bez DPH. | +| `current_production_price_without_nano` | Výkupní cena silové el. při odběru elektřiny od jiného dodavatele po odečtení poplatku za služby obchodu ve výši 900 Kč/MWh bez DPH. | +| `today_base_cheapest_hour` | Dnešní nejlevnější hodina za celý den. | +| `today_peak_cheapest_hour` | Dnešní nejlevnější hodina v energetické špičce. | +| `today_offpeak_cheapest_hour` | Dnešní nejlevnější hodina mimo energetickou špičku. | +| `today_base_second_cheapest_hour` | Dnešní druhá nejlevnější hodina za celý den. | +| `today_peak_second_cheapest_hour` | Dnešní druhá nejlevnější hodina v energetické špičce. | +| `today_offpeak_second_cheapest_hour` | Dnešní druhá nejlevnější hodina mimo energetickou špičku. | +| `is_currently_cheapest_hour` | Binární sensor. Zapnutý, pokud je nejlevnější hodina elektřiny z celého dne. | +| `is_currently_second_cheapest_hour` | Binární sensor. Zapnutý, pokud je druhá nejlevnější hodina elektřiny z celého dne. | +| `is_currently_third_cheapest_hour` | Binární sensor. Zapnutý, pokud je třetí nejlevnější hodina elektřiny z celého dne. | +| `is_currently_fourth_cheapest_hour` | Binární sensor. Zapnutý, pokud je čtvrtá nejlevnější hodina elektřiny z celého dne. | +| `is_currently_fifth_cheapest_hour` | Binární sensor. Zapnutý, pokud je pátá nejlevnější hodina elektřiny z celého dne. | +| `is_currently_sixth_cheapest_hour` | Binární sensor. Zapnutý, pokud je šestá nejlevnější hodina elektřiny z celého dne. | +| `is_currently_in_two_cheapest_hours` | Binární sensor. Zapnutý, pokud je jedna ze dvou nejlevnějších hodin elektřiny z celého dne. | +| `is_currently_in_three_cheapest_hours` | Binární sensor. Zapnutý, pokud je jedna ze tří nejlevnějších hodin elektřiny z celého dne. | +| `is_currently_in_four_cheapest_hours` | Binární sensor. Zapnutý, pokud je jedna ze čtyř nejlevnějších hodin elektřiny z celého dne. | +| `is_currently_in_five_cheapest_hours` | Binární sensor. Zapnutý, pokud je jedna z pěti nejlevnějších hodin elektřiny z celého dne. | +| `is_currently_in_six_cheapest_hours` | Binární sensor. Zapnutý, pokud je jedna z šesti nejlevnějších hodin elektřiny z celého dne. | Vysvětlení: +Kromě silové elektřiny ještě platíte za distribuci podle vašeho distribučního území ČEZ, PRE nebo EG.d a distribučního tarifu. Některé tarify mají dvě ceny NT/VT (nesouvisí s časy Peak/OffPeak spotu). +Distribuce se platí pro nákup i prodej. V ČR, jako jediné zemi na světě, je měření po fázích zvlášť. Pokud máte na jedné fázi prodej a na druhé nákup, za prodej platíte. Za distribuci platíte pro oba směry. + PEAK LOAD (8:00 - 20:00) OFFPEAK LOAD (0:00 - 8:00, 20:00 - 24:00) @@ -123,7 +126,7 @@ header: series: - entity: sensor.current_market_price_czk_kwh data_generator: | - return entity.attributes.today_hourly_consumption_prices_with_vat.map((price, index) => { + return entity.attributes.today_hourly_consumption_prices_incl_vat.map((price, index) => { const date = new Date() date.setHours(index) date.setMinutes(0) diff --git a/custom_components/nanogreen/const.py b/custom_components/nanogreen/const.py index d3ebb9a..5cc0d96 100644 --- a/custom_components/nanogreen/const.py +++ b/custom_components/nanogreen/const.py @@ -16,13 +16,12 @@ PLATFORMS = [Platform.SENSOR] VAT = 1.21 # DPH 21% -# Fees per MWh in watt, without VAT -WH_FEE = (350 + 113)/1000 - +# Fees per kWh, VAT excluded +KWH_FEE = (350 + 28.3 + 113.53)/1000 ATTR_API_CURRENT_MARKET_PRICE = "current_market_price" ATTR_API_CURRENT_CONSUMPTION_PRICE = "current_consumption_price" -ATTR_API_CURRENT_CONSUMPTION_PRICE_WITH_VAT = "current_consumption_price_with_vat" +ATTR_API_CURRENT_CONSUMPTION_PRICE_INCL_VAT = "current_consumption_price_incl_vat" ATTR_API_CURRENT_PRODUCTION_WITH_NANO_PRICE = "current_production_price_with_nano" ATTR_API_CURRENT_PRODUCTION_WITHOUT_NANO_PRICE = "current_production_price_without_nano" ATTR_API_TODAY_BASE_CHEAPEST_HOUR = "today_base_cheapest_hour" @@ -32,7 +31,7 @@ ATTR_API_TODAY_PEAK_SECOND_CHEAPEST_HOUR = "today_peak_second_cheapest_hour" ATTR_API_TODAY_OFFPEAK_SECOND_CHEAPEST_HOUR = "today_offpeak_second_cheapest_hour" ATTR_API_TODAY_HOURLY_PRICES = "today_hourly_prices" -ATTR_API_TODAY_HOURLY_CONSUMPTION_PRICES_WITH_VAT = "today_hourly_consumption_prices_with_vat" +ATTR_API_TODAY_HOURLY_CONSUMPTION_PRICES_INCL_VAT = "today_hourly_consumption_prices_incl_vat" ATTR_API_TOMORROW_HOURLY_PRICES = "tomorrow_hourly_prices" @@ -48,8 +47,8 @@ native_unit_of_measurement="CZK/kWh", ), SensorEntityDescription( - key=ATTR_API_CURRENT_CONSUMPTION_PRICE_WITH_VAT, - name="Current consumption price with VAT [CZK/kWh]", + key=ATTR_API_CURRENT_CONSUMPTION_PRICE_INCL_VAT, + name="Current consumption price including VAT [CZK/kWh]", native_unit_of_measurement="CZK/kWh", ), SensorEntityDescription( diff --git a/custom_components/nanogreen/coordinator.py b/custom_components/nanogreen/coordinator.py index 016630f..07b1ac6 100644 --- a/custom_components/nanogreen/coordinator.py +++ b/custom_components/nanogreen/coordinator.py @@ -21,7 +21,7 @@ DOMAIN, ATTR_API_CURRENT_MARKET_PRICE, ATTR_API_CURRENT_CONSUMPTION_PRICE, - ATTR_API_CURRENT_CONSUMPTION_PRICE_WITH_VAT, + ATTR_API_CURRENT_CONSUMPTION_PRICE_INCL_VAT, ATTR_API_CURRENT_PRODUCTION_WITH_NANO_PRICE, ATTR_API_CURRENT_PRODUCTION_WITHOUT_NANO_PRICE, ATTR_API_IS_CURRENTLY_CHEAPEST_HOUR, @@ -32,9 +32,9 @@ ATTR_API_TODAY_PEAK_CHEAPEST_HOUR, ATTR_API_TODAY_PEAK_SECOND_CHEAPEST_HOUR, ATTR_API_TODAY_HOURLY_PRICES, - ATTR_API_TODAY_HOURLY_CONSUMPTION_PRICES_WITH_VAT, + ATTR_API_TODAY_HOURLY_CONSUMPTION_PRICES_INCL_VAT, ATTR_API_TOMORROW_HOURLY_PRICES, - WH_FEE, + KWH_FEE, VAT, ) @@ -75,8 +75,8 @@ async def _convert_response(self, response): return { # non binary sensors ATTR_API_CURRENT_MARKET_PRICE: current_price, - ATTR_API_CURRENT_CONSUMPTION_PRICE: current_price + WH_FEE, - ATTR_API_CURRENT_CONSUMPTION_PRICE_WITH_VAT: (current_price + WH_FEE) * VAT, + ATTR_API_CURRENT_CONSUMPTION_PRICE: current_price + KWH_FEE, + ATTR_API_CURRENT_CONSUMPTION_PRICE_INCL_VAT: (current_price + KWH_FEE) * VAT, ATTR_API_CURRENT_PRODUCTION_WITH_NANO_PRICE: current_price - 0.6, ATTR_API_CURRENT_PRODUCTION_WITHOUT_NANO_PRICE: current_price - 0.9, ATTR_API_TODAY_BASE_CHEAPEST_HOUR: data.get("todayBaseCheapestHour"), @@ -92,7 +92,7 @@ async def _convert_response(self, response): "todayPeakSecondCheapestHour" ), ATTR_API_TODAY_HOURLY_PRICES: data.get("todayHourlyPrices", []), - ATTR_API_TODAY_HOURLY_CONSUMPTION_PRICES_WITH_VAT: list(map(lambda x: (x + WH_FEE) * VAT, data.get("todayHourlyPrices", []))), + ATTR_API_TODAY_HOURLY_CONSUMPTION_PRICES_INCL_VAT: list(map(lambda x: (x + KWH_FEE) * VAT, data.get("todayHourlyPrices", []))), ATTR_API_TOMORROW_HOURLY_PRICES: data.get("tomorrowHourlyPrices", []), # binary sensors ATTR_API_IS_CURRENTLY_CHEAPEST_HOUR: data.get( diff --git a/custom_components/nanogreen/sensor.py b/custom_components/nanogreen/sensor.py index ba756e1..48a9251 100644 --- a/custom_components/nanogreen/sensor.py +++ b/custom_components/nanogreen/sensor.py @@ -11,7 +11,7 @@ from .const import ( ATTR_API_TODAY_HOURLY_PRICES, - ATTR_API_TODAY_HOURLY_CONSUMPTION_PRICES_WITH_VAT, + ATTR_API_TODAY_HOURLY_CONSUMPTION_PRICES_INCL_VAT, ATTR_API_TOMORROW_HOURLY_PRICES, BINARY_SENSOR_TYPES, DOMAIN, @@ -95,8 +95,8 @@ def extra_state_attributes(self): ATTR_API_TODAY_HOURLY_PRICES: self._coordinator.data.get( ATTR_API_TODAY_HOURLY_PRICES ), - ATTR_API_TODAY_HOURLY_CONSUMPTION_PRICES_WITH_VAT: self._coordinator.data.get( - ATTR_API_TODAY_HOURLY_CONSUMPTION_PRICES_WITH_VAT + ATTR_API_TODAY_HOURLY_CONSUMPTION_PRICES_INCL_VAT: self._coordinator.data.get( + ATTR_API_TODAY_HOURLY_CONSUMPTION_PRICES_INCL_VAT ), ATTR_API_TOMORROW_HOURLY_PRICES: self._coordinator.data.get( ATTR_API_TOMORROW_HOURLY_PRICES From 22539faacec47be2be587af3aab86654e79d98ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20M=C3=BCller?= Date: Sat, 7 Oct 2023 11:39:43 +0200 Subject: [PATCH 07/12] fix: update production price --- custom_components/nanogreen/const.py | 3 ++- custom_components/nanogreen/coordinator.py | 11 ++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/custom_components/nanogreen/const.py b/custom_components/nanogreen/const.py index 5cc0d96..549b4b3 100644 --- a/custom_components/nanogreen/const.py +++ b/custom_components/nanogreen/const.py @@ -17,7 +17,8 @@ VAT = 1.21 # DPH 21% # Fees per kWh, VAT excluded -KWH_FEE = (350 + 28.3 + 113.53)/1000 +CONSUMPTION_KWH_FEE = (350 + 28.3 + 113.53)/1000 +PRODUCTION_KWH_FEE = (450)/1000 ATTR_API_CURRENT_MARKET_PRICE = "current_market_price" ATTR_API_CURRENT_CONSUMPTION_PRICE = "current_consumption_price" diff --git a/custom_components/nanogreen/coordinator.py b/custom_components/nanogreen/coordinator.py index 07b1ac6..387525d 100644 --- a/custom_components/nanogreen/coordinator.py +++ b/custom_components/nanogreen/coordinator.py @@ -34,7 +34,8 @@ ATTR_API_TODAY_HOURLY_PRICES, ATTR_API_TODAY_HOURLY_CONSUMPTION_PRICES_INCL_VAT, ATTR_API_TOMORROW_HOURLY_PRICES, - KWH_FEE, + CONSUMPTION_KWH_FEE, + PRODUCTION_KWH_FEE, VAT, ) @@ -75,9 +76,9 @@ async def _convert_response(self, response): return { # non binary sensors ATTR_API_CURRENT_MARKET_PRICE: current_price, - ATTR_API_CURRENT_CONSUMPTION_PRICE: current_price + KWH_FEE, - ATTR_API_CURRENT_CONSUMPTION_PRICE_INCL_VAT: (current_price + KWH_FEE) * VAT, - ATTR_API_CURRENT_PRODUCTION_WITH_NANO_PRICE: current_price - 0.6, + ATTR_API_CURRENT_CONSUMPTION_PRICE: current_price + CONSUMPTION_KWH_FEE, + ATTR_API_CURRENT_CONSUMPTION_PRICE_INCL_VAT: (current_price + CONSUMPTION_KWH_FEE) * VAT, + ATTR_API_CURRENT_PRODUCTION_WITH_NANO_PRICE: current_price - PRODUCTION_KWH_FEE, ATTR_API_CURRENT_PRODUCTION_WITHOUT_NANO_PRICE: current_price - 0.9, ATTR_API_TODAY_BASE_CHEAPEST_HOUR: data.get("todayBaseCheapestHour"), ATTR_API_TODAY_BASE_SECOND_CHEAPEST_HOUR: data.get( @@ -92,7 +93,7 @@ async def _convert_response(self, response): "todayPeakSecondCheapestHour" ), ATTR_API_TODAY_HOURLY_PRICES: data.get("todayHourlyPrices", []), - ATTR_API_TODAY_HOURLY_CONSUMPTION_PRICES_INCL_VAT: list(map(lambda x: (x + KWH_FEE) * VAT, data.get("todayHourlyPrices", []))), + ATTR_API_TODAY_HOURLY_CONSUMPTION_PRICES_INCL_VAT: list(map(lambda x: (x + CONSUMPTION_KWH_FEE) * VAT, data.get("todayHourlyPrices", []))), ATTR_API_TOMORROW_HOURLY_PRICES: data.get("tomorrowHourlyPrices", []), # binary sensors ATTR_API_IS_CURRENTLY_CHEAPEST_HOUR: data.get( From 584e41852ea960a1a3bd4c4c2be5e90ec8a9c7c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20M=C3=BCller?= Date: Sat, 7 Oct 2023 16:50:13 +0200 Subject: [PATCH 08/12] feat: add tomorrow prices with fees and VAT --- README.md | 23 ++++++++++++++++------ custom_components/nanogreen/const.py | 1 + custom_components/nanogreen/coordinator.py | 3 +++ custom_components/nanogreen/sensor.py | 4 ++++ 4 files changed, 25 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index e7e611d..60177e5 100644 --- a/README.md +++ b/README.md @@ -114,28 +114,39 @@ span: start: day ``` -- také si můžete do grafu dát cenu spotřeby včetně všech poplatků a DPH +- také si můžete do grafu dát cenu spotřeby včetně všech poplatků a DPH a i na další den dopředu ```yaml type: custom:apexcharts-card header: show: true - title: Cena elektriny dnes + title: Cena elektriny s DPH a poplatky show_states: true colorize_states: true series: - entity: sensor.current_market_price_czk_kwh - data_generator: | - return entity.attributes.today_hourly_consumption_prices_incl_vat.map((price, index) => { + data_generator: > + return + [...entity.attributes.today_hourly_consumption_prices_incl_vat.map((price, + index) => { const date = new Date() date.setHours(index) date.setMinutes(0) date.setSeconds(0) return [date, price]; - }); + }), + ...entity.attributes.tomorrow_hourly_consumption_prices_incl_vat.map((price, + index) => { + const date2 = new Date() + date2.setDate(date2.getDate()+1) + date2.setHours(index) + date2.setMinutes(0) + date2.setSeconds(0) + return [date2, price]; + })]; show: in_header: before_now -graph_span: 24h +graph_span: 48h span: start: day ``` diff --git a/custom_components/nanogreen/const.py b/custom_components/nanogreen/const.py index 549b4b3..aea662d 100644 --- a/custom_components/nanogreen/const.py +++ b/custom_components/nanogreen/const.py @@ -34,6 +34,7 @@ ATTR_API_TODAY_HOURLY_PRICES = "today_hourly_prices" ATTR_API_TODAY_HOURLY_CONSUMPTION_PRICES_INCL_VAT = "today_hourly_consumption_prices_incl_vat" ATTR_API_TOMORROW_HOURLY_PRICES = "tomorrow_hourly_prices" +ATTR_API_TOMORROW_HOURLY_PRICES_INCL_VAT = "tomorrow_hourly_prices_incl_vat" SENSOR_TYPES: tuple[SensorEntityDescription, ...] = ( diff --git a/custom_components/nanogreen/coordinator.py b/custom_components/nanogreen/coordinator.py index 387525d..87e4bf5 100644 --- a/custom_components/nanogreen/coordinator.py +++ b/custom_components/nanogreen/coordinator.py @@ -34,6 +34,7 @@ ATTR_API_TODAY_HOURLY_PRICES, ATTR_API_TODAY_HOURLY_CONSUMPTION_PRICES_INCL_VAT, ATTR_API_TOMORROW_HOURLY_PRICES, + ATTR_API_TOMORROW_HOURLY_PRICES_INCL_VAT, CONSUMPTION_KWH_FEE, PRODUCTION_KWH_FEE, VAT, @@ -95,6 +96,8 @@ async def _convert_response(self, response): ATTR_API_TODAY_HOURLY_PRICES: data.get("todayHourlyPrices", []), ATTR_API_TODAY_HOURLY_CONSUMPTION_PRICES_INCL_VAT: list(map(lambda x: (x + CONSUMPTION_KWH_FEE) * VAT, data.get("todayHourlyPrices", []))), ATTR_API_TOMORROW_HOURLY_PRICES: data.get("tomorrowHourlyPrices", []), + ATTR_API_TOMORROW_HOURLY_PRICES_INCL_VAT: list(map(lambda x: (x + CONSUMPTION_KWH_FEE) * VAT, data.get("tomorrowHourlyPrices", []))), + # binary sensors ATTR_API_IS_CURRENTLY_CHEAPEST_HOUR: data.get( "isCurrentlyCheapestHour", None diff --git a/custom_components/nanogreen/sensor.py b/custom_components/nanogreen/sensor.py index 48a9251..ae8e8b6 100644 --- a/custom_components/nanogreen/sensor.py +++ b/custom_components/nanogreen/sensor.py @@ -13,6 +13,7 @@ ATTR_API_TODAY_HOURLY_PRICES, ATTR_API_TODAY_HOURLY_CONSUMPTION_PRICES_INCL_VAT, ATTR_API_TOMORROW_HOURLY_PRICES, + ATTR_API_TOMORROW_HOURLY_PRICES_INCL_VAT, BINARY_SENSOR_TYPES, DOMAIN, ENTRY_COORDINATOR, @@ -101,6 +102,9 @@ def extra_state_attributes(self): ATTR_API_TOMORROW_HOURLY_PRICES: self._coordinator.data.get( ATTR_API_TOMORROW_HOURLY_PRICES ), + ATTR_API_TOMORROW_HOURLY_PRICES_INCL_VAT: self._coordinator.data.get( + ATTR_API_TOMORROW_HOURLY_PRICES_INCL_VAT + ), } From 697ed7019c1093f08bcbec2cbdc5ff17eca067ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20M=C3=BCller?= Date: Sat, 7 Oct 2023 17:22:32 +0200 Subject: [PATCH 09/12] feat: add tomorrow prices with fees and VAT --- README.md | 5 +++-- custom_components/nanogreen/const.py | 2 +- custom_components/nanogreen/coordinator.py | 4 ++-- custom_components/nanogreen/sensor.py | 6 +++--- 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 60177e5..7a774c7 100644 --- a/README.md +++ b/README.md @@ -134,8 +134,7 @@ series: date.setMinutes(0) date.setSeconds(0) return [date, price]; - }), - ...entity.attributes.tomorrow_hourly_consumption_prices_incl_vat.map((price, + }), ...entity.attributes.tomorrow_hourly_prices_incl_vat.map((price, index) => { const date2 = new Date() date2.setDate(date2.getDate()+1) @@ -146,6 +145,8 @@ series: })]; show: in_header: before_now +now: + show: true graph_span: 48h span: start: day diff --git a/custom_components/nanogreen/const.py b/custom_components/nanogreen/const.py index aea662d..18911a8 100644 --- a/custom_components/nanogreen/const.py +++ b/custom_components/nanogreen/const.py @@ -34,7 +34,7 @@ ATTR_API_TODAY_HOURLY_PRICES = "today_hourly_prices" ATTR_API_TODAY_HOURLY_CONSUMPTION_PRICES_INCL_VAT = "today_hourly_consumption_prices_incl_vat" ATTR_API_TOMORROW_HOURLY_PRICES = "tomorrow_hourly_prices" -ATTR_API_TOMORROW_HOURLY_PRICES_INCL_VAT = "tomorrow_hourly_prices_incl_vat" +ATTR_API_TOMORROW_HOURLY_CONSUMPTION_PRICES_INCL_VAT = "tomorrow_hourly_consumption_prices_incl_vat" SENSOR_TYPES: tuple[SensorEntityDescription, ...] = ( diff --git a/custom_components/nanogreen/coordinator.py b/custom_components/nanogreen/coordinator.py index 87e4bf5..c41540f 100644 --- a/custom_components/nanogreen/coordinator.py +++ b/custom_components/nanogreen/coordinator.py @@ -34,7 +34,7 @@ ATTR_API_TODAY_HOURLY_PRICES, ATTR_API_TODAY_HOURLY_CONSUMPTION_PRICES_INCL_VAT, ATTR_API_TOMORROW_HOURLY_PRICES, - ATTR_API_TOMORROW_HOURLY_PRICES_INCL_VAT, + ATTR_API_TOMORROW_HOURLY_CONSUMPTION_PRICES_INCL_VAT, CONSUMPTION_KWH_FEE, PRODUCTION_KWH_FEE, VAT, @@ -96,7 +96,7 @@ async def _convert_response(self, response): ATTR_API_TODAY_HOURLY_PRICES: data.get("todayHourlyPrices", []), ATTR_API_TODAY_HOURLY_CONSUMPTION_PRICES_INCL_VAT: list(map(lambda x: (x + CONSUMPTION_KWH_FEE) * VAT, data.get("todayHourlyPrices", []))), ATTR_API_TOMORROW_HOURLY_PRICES: data.get("tomorrowHourlyPrices", []), - ATTR_API_TOMORROW_HOURLY_PRICES_INCL_VAT: list(map(lambda x: (x + CONSUMPTION_KWH_FEE) * VAT, data.get("tomorrowHourlyPrices", []))), + ATTR_API_TOMORROW_HOURLY_CONSUMPTION_PRICES_INCL_VAT: list(map(lambda x: (x + CONSUMPTION_KWH_FEE) * VAT, data.get("tomorrowHourlyPrices", []))), # binary sensors ATTR_API_IS_CURRENTLY_CHEAPEST_HOUR: data.get( diff --git a/custom_components/nanogreen/sensor.py b/custom_components/nanogreen/sensor.py index ae8e8b6..a47efab 100644 --- a/custom_components/nanogreen/sensor.py +++ b/custom_components/nanogreen/sensor.py @@ -13,7 +13,7 @@ ATTR_API_TODAY_HOURLY_PRICES, ATTR_API_TODAY_HOURLY_CONSUMPTION_PRICES_INCL_VAT, ATTR_API_TOMORROW_HOURLY_PRICES, - ATTR_API_TOMORROW_HOURLY_PRICES_INCL_VAT, + ATTR_API_TOMORROW_HOURLY_CONSUMPTION_PRICES_INCL_VAT, BINARY_SENSOR_TYPES, DOMAIN, ENTRY_COORDINATOR, @@ -102,8 +102,8 @@ def extra_state_attributes(self): ATTR_API_TOMORROW_HOURLY_PRICES: self._coordinator.data.get( ATTR_API_TOMORROW_HOURLY_PRICES ), - ATTR_API_TOMORROW_HOURLY_PRICES_INCL_VAT: self._coordinator.data.get( - ATTR_API_TOMORROW_HOURLY_PRICES_INCL_VAT + ATTR_API_TOMORROW_HOURLY_CONSUMPTION_PRICES_INCL_VAT: self._coordinator.data.get( + ATTR_API_TOMORROW_HOURLY_CONSUMPTION_PRICES_INCL_VAT ), } From 91b76648d6ca591e55621aadcfaee13fc1dc32ce Mon Sep 17 00:00:00 2001 From: S474N Date: Mon, 9 Oct 2023 17:27:22 +0200 Subject: [PATCH 10/12] Update README.md Opravena chyba v ukazce kodu. Nahrazen neexistujici atribut za spravny. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7a774c7..983e72b 100644 --- a/README.md +++ b/README.md @@ -134,7 +134,7 @@ series: date.setMinutes(0) date.setSeconds(0) return [date, price]; - }), ...entity.attributes.tomorrow_hourly_prices_incl_vat.map((price, + }), ...entity.attributes.tomorrow_hourly_consumption_prices_incl_vat.map((price, index) => { const date2 = new Date() date2.setDate(date2.getDate()+1) From 604e899b4a8bd3301080a9d72eba0dd96d0b207e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20M=C3=BCller?= Date: Mon, 9 Oct 2023 17:39:28 +0200 Subject: [PATCH 11/12] fix: wron example --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7a774c7..983e72b 100644 --- a/README.md +++ b/README.md @@ -134,7 +134,7 @@ series: date.setMinutes(0) date.setSeconds(0) return [date, price]; - }), ...entity.attributes.tomorrow_hourly_prices_incl_vat.map((price, + }), ...entity.attributes.tomorrow_hourly_consumption_prices_incl_vat.map((price, index) => { const date2 = new Date() date2.setDate(date2.getDate()+1) From 49c52b78c67055514b682548a583922d12a13a13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20M=C3=BCller?= Date: Sat, 7 Oct 2023 17:22:32 +0200 Subject: [PATCH 12/12] feat: add tomorrow prices with fees and VAT --- README.md | 91 +++++++++++++++++-------------------------------------- 1 file changed, 28 insertions(+), 63 deletions(-) diff --git a/README.md b/README.md index 983e72b..7563b3e 100644 --- a/README.md +++ b/README.md @@ -48,35 +48,38 @@ Repozitář by se vám měl zobrazit mezi ostatními repozitáři. ## Sensory -| ID | Popis | -| --------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | -| `current_market_price` | Současná tržní cena silové elektřiny. | -| `current_consumption_price` | Spotřební cena silové el. po odečtení poplatků podle aktuálního ceníku, bez DPH. | -| `current_consumption_price_incl_vat` | Spotřební cena silové el. po odečtení poplatků podle aktuálního ceníku, včetně DPH. | -| `current_production_price_with_nano` | Výkupní cena silové el. při současném odběru elektřiny od Nano Green po odečtení poplatku za služby obchodu ve výši 600 Kč/MWh bez DPH. | -| `current_production_price_without_nano` | Výkupní cena silové el. při odběru elektřiny od jiného dodavatele po odečtení poplatku za služby obchodu ve výši 900 Kč/MWh bez DPH. | -| `today_base_cheapest_hour` | Dnešní nejlevnější hodina za celý den. | -| `today_peak_cheapest_hour` | Dnešní nejlevnější hodina v energetické špičce. | -| `today_offpeak_cheapest_hour` | Dnešní nejlevnější hodina mimo energetickou špičku. | -| `today_base_second_cheapest_hour` | Dnešní druhá nejlevnější hodina za celý den. | -| `today_peak_second_cheapest_hour` | Dnešní druhá nejlevnější hodina v energetické špičce. | -| `today_offpeak_second_cheapest_hour` | Dnešní druhá nejlevnější hodina mimo energetickou špičku. | -| `is_currently_cheapest_hour` | Binární sensor. Zapnutý, pokud je nejlevnější hodina elektřiny z celého dne. | -| `is_currently_second_cheapest_hour` | Binární sensor. Zapnutý, pokud je druhá nejlevnější hodina elektřiny z celého dne. | -| `is_currently_third_cheapest_hour` | Binární sensor. Zapnutý, pokud je třetí nejlevnější hodina elektřiny z celého dne. | -| `is_currently_fourth_cheapest_hour` | Binární sensor. Zapnutý, pokud je čtvrtá nejlevnější hodina elektřiny z celého dne. | -| `is_currently_fifth_cheapest_hour` | Binární sensor. Zapnutý, pokud je pátá nejlevnější hodina elektřiny z celého dne. | -| `is_currently_sixth_cheapest_hour` | Binární sensor. Zapnutý, pokud je šestá nejlevnější hodina elektřiny z celého dne. | -| `is_currently_in_two_cheapest_hours` | Binární sensor. Zapnutý, pokud je jedna ze dvou nejlevnějších hodin elektřiny z celého dne. | -| `is_currently_in_three_cheapest_hours` | Binární sensor. Zapnutý, pokud je jedna ze tří nejlevnějších hodin elektřiny z celého dne. | -| `is_currently_in_four_cheapest_hours` | Binární sensor. Zapnutý, pokud je jedna ze čtyř nejlevnějších hodin elektřiny z celého dne. | -| `is_currently_in_five_cheapest_hours` | Binární sensor. Zapnutý, pokud je jedna z pěti nejlevnějších hodin elektřiny z celého dne. | -| `is_currently_in_six_cheapest_hours` | Binární sensor. Zapnutý, pokud je jedna z šesti nejlevnějších hodin elektřiny z celého dne. | +| ID | Popis | +| ------------------------------------ | ----------------------------------------------------------------------------------- | +| `current_market_price` | Současná tržní cena silové elektřiny. | +| `current_consumption_price` | Spotřební cena silové el. po odečtení poplatků podle aktuálního ceníku, bez DPH. | +| `current_consumption_price_incl_vat` | Spotřební cena silové el. po odečtení poplatků podle aktuálního ceníku, včetně DPH. | + + + +| `current_production_price_with_nano` | Výkupní cena silové el. při současném odběru elektřiny od Nano Green po odečtení poplatku za služby obchodu ve výši 600 Kč/MWh bez DPH. | +| `current_production_price_without_nano` | Výkupní cena silové el. při odběru elektřiny od jiného dodavatele po odečtení poplatku za služby obchodu ve výši 900 Kč/MWh bez DPH. | +| `today_base_cheapest_hour` | Dnešní nejlevnější hodina za celý den. | +| `today_peak_cheapest_hour` | Dnešní nejlevnější hodina v energetické špičce. | +| `today_offpeak_cheapest_hour` | Dnešní nejlevnější hodina mimo energetickou špičku. | +| `today_base_second_cheapest_hour` | Dnešní druhá nejlevnější hodina za celý den. | +| `today_peak_second_cheapest_hour` | Dnešní druhá nejlevnější hodina v energetické špičce. | +| `today_offpeak_second_cheapest_hour` | Dnešní druhá nejlevnější hodina mimo energetickou špičku. | +| `is_currently_cheapest_hour` | Binární sensor. Zapnutý, pokud je nejlevnější hodina elektřiny z celého dne. | +| `is_currently_second_cheapest_hour` | Binární sensor. Zapnutý, pokud je druhá nejlevnější hodina elektřiny z celého dne. | +| `is_currently_third_cheapest_hour` | Binární sensor. Zapnutý, pokud je třetí nejlevnější hodina elektřiny z celého dne. | +| `is_currently_fourth_cheapest_hour` | Binární sensor. Zapnutý, pokud je čtvrtá nejlevnější hodina elektřiny z celého dne. | +| `is_currently_fifth_cheapest_hour` | Binární sensor. Zapnutý, pokud je pátá nejlevnější hodina elektřiny z celého dne. | +| `is_currently_sixth_cheapest_hour` | Binární sensor. Zapnutý, pokud je šestá nejlevnější hodina elektřiny z celého dne. | +| `is_currently_in_two_cheapest_hours` | Binární sensor. Zapnutý, pokud je jedna ze dvou nejlevnějších hodin elektřiny z celého dne. | +| `is_currently_in_three_cheapest_hours` | Binární sensor. Zapnutý, pokud je jedna ze tří nejlevnějších hodin elektřiny z celého dne. | +| `is_currently_in_four_cheapest_hours` | Binární sensor. Zapnutý, pokud je jedna ze čtyř nejlevnějších hodin elektřiny z celého dne. | +| `is_currently_in_five_cheapest_hours` | Binární sensor. Zapnutý, pokud je jedna z pěti nejlevnějších hodin elektřiny z celého dne. | +| `is_currently_in_six_cheapest_hours` | Binární sensor. Zapnutý, pokud je jedna z šesti nejlevnějších hodin elektřiny z celého dne. | Vysvětlení: Kromě silové elektřiny ještě platíte za distribuci podle vašeho distribučního území ČEZ, PRE nebo EG.d a distribučního tarifu. Některé tarify mají dvě ceny NT/VT (nesouvisí s časy Peak/OffPeak spotu). -Distribuce se platí pro nákup i prodej. V ČR, jako jediné zemi na světě, je měření po fázích zvlášť. Pokud máte na jedné fázi prodej a na druhé nákup, za prodej platíte. Za distribuci platíte pro oba směry. +Distribuce se platí pro nákup elektřiny k vám. PEAK LOAD (8:00 - 20:00) @@ -113,41 +116,3 @@ graph_span: 24h span: start: day ``` - -- také si můžete do grafu dát cenu spotřeby včetně všech poplatků a DPH a i na další den dopředu - -```yaml -type: custom:apexcharts-card -header: - show: true - title: Cena elektriny s DPH a poplatky - show_states: true - colorize_states: true -series: - - entity: sensor.current_market_price_czk_kwh - data_generator: > - return - [...entity.attributes.today_hourly_consumption_prices_incl_vat.map((price, - index) => { - const date = new Date() - date.setHours(index) - date.setMinutes(0) - date.setSeconds(0) - return [date, price]; - }), ...entity.attributes.tomorrow_hourly_consumption_prices_incl_vat.map((price, - index) => { - const date2 = new Date() - date2.setDate(date2.getDate()+1) - date2.setHours(index) - date2.setMinutes(0) - date2.setSeconds(0) - return [date2, price]; - })]; - show: - in_header: before_now -now: - show: true -graph_span: 48h -span: - start: day -```