From bb6f83fbf72b6923163c488ee99e153f0bf35d6b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 24 May 2023 22:59:08 +0000 Subject: [PATCH 01/10] Bump actions/setup-python from 4.6.0 to 4.6.1 Bumps [actions/setup-python](https://github.com/actions/setup-python) from 4.6.0 to 4.6.1. - [Release notes](https://github.com/actions/setup-python/releases) - [Commits](https://github.com/actions/setup-python/compare/v4.6.0...v4.6.1) --- updated-dependencies: - dependency-name: actions/setup-python dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/format-code.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/format-code.yml b/.github/workflows/format-code.yml index 2339df1..741dc0e 100644 --- a/.github/workflows/format-code.yml +++ b/.github/workflows/format-code.yml @@ -15,7 +15,7 @@ jobs: with: fetch-depth: 0 - name: Set up Python 3.8 - uses: actions/setup-python@v4.6.0 + uses: actions/setup-python@v4.6.1 with: python-version: 3.8 - name: Cache From 47567b2342e4f20acac36b1ca0d3cb360ed8f13f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 31 May 2023 22:59:26 +0000 Subject: [PATCH 02/10] Bump svenstaro/upload-release-action from 2.5.0 to 2.6.1 Bumps [svenstaro/upload-release-action](https://github.com/svenstaro/upload-release-action) from 2.5.0 to 2.6.1. - [Release notes](https://github.com/svenstaro/upload-release-action/releases) - [Changelog](https://github.com/svenstaro/upload-release-action/blob/master/CHANGELOG.md) - [Commits](https://github.com/svenstaro/upload-release-action/compare/2.5.0...2.6.1) --- updated-dependencies: - dependency-name: svenstaro/upload-release-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e0f35ce..24b5a40 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -31,7 +31,7 @@ jobs: cd custom_components/energidataservice zip energidataservice.zip -r ./ - name: Upload zip to release - uses: svenstaro/upload-release-action@2.5.0 + uses: svenstaro/upload-release-action@2.6.1 with: repo_token: ${{ secrets.GITHUB_TOKEN }} file: ./custom_components/energidataservice/energidataservice.zip From b2d6b4ffb320a44bbca8bcc6693e63cda93df2fd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Jun 2023 05:07:00 +0000 Subject: [PATCH 03/10] Bump currencyconverter from 0.17.7 to 0.17.8 Bumps [currencyconverter](https://github.com/alexprengere/currencyconverter) from 0.17.7 to 0.17.8. - [Commits](https://github.com/alexprengere/currencyconverter/compare/v0.17.7...v0.17.8) --- updated-dependencies: - dependency-name: currencyconverter dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 1080575..a5d09b6 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,2 @@ async-retrying==0.2.2 -CurrencyConverter==0.17.7 +CurrencyConverter==0.17.8 From d828ed674ac276a751ece7411291f943581ee2f2 Mon Sep 17 00:00:00 2001 From: Malene Trab Date: Mon, 19 Jun 2023 08:43:57 +0000 Subject: [PATCH 04/10] Changing Tariff ChargeTypeCode for El-net Kongerslev --- .../energidataservice/tariffs/energidataservice/chargeowners.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/custom_components/energidataservice/tariffs/energidataservice/chargeowners.py b/custom_components/energidataservice/tariffs/energidataservice/chargeowners.py index e46b00c..7b49007 100644 --- a/custom_components/energidataservice/tariffs/energidataservice/chargeowners.py +++ b/custom_components/energidataservice/tariffs/energidataservice/chargeowners.py @@ -130,7 +130,7 @@ "El-net Kongerslev": { "gln": "5790002502699", "company": "El-net Kongerslev A/S", - "type": ["K_22100"], + "type": ["C-Tarif"], "note": ["Nettarif C"], }, "Ravdex": { From 5008b82de8b1a2ca7c983b92814f4fd825b584be Mon Sep 17 00:00:00 2001 From: Malene Trab Date: Mon, 19 Jun 2023 08:50:58 +0000 Subject: [PATCH 05/10] Removing unused attribute in chargeowners --- .../tariffs/energidataservice/chargeowners.py | 29 ------------------- 1 file changed, 29 deletions(-) diff --git a/custom_components/energidataservice/tariffs/energidataservice/chargeowners.py b/custom_components/energidataservice/tariffs/energidataservice/chargeowners.py index e46b00c..2fb1a71 100644 --- a/custom_components/energidataservice/tariffs/energidataservice/chargeowners.py +++ b/custom_components/energidataservice/tariffs/energidataservice/chargeowners.py @@ -5,174 +5,145 @@ "gln": "5790000705689", "company": "Radius Elnet A/S", "type": ["DT_C_01"], - "note": ["Nettarif C time"], }, "RAH": { "gln": "5790000681327", "company": "RAH Net A/S", "type": ["RAH-C"], - "note": ["Nettarif C time"], }, "Konstant": { "gln": "5790000704842", "company": "Konstant Net A/S - 151", "type": ["151-NT01T"], - "note": ["Nettarif C time"], }, "Cerius": { "gln": "5790000705184", "company": "Cerius A/S", "type": ["30TR_C_ET"], - "note": ["Nettarif C time"], }, "N1": { "gln": "5790001089030", "company": "N1 A/S - 131", "type": ["CD", "CD R"], - "note": ["Nettarif C"], }, "N1 Randers": { "gln": "5790000681372", "company": "N1 Randers A/S", "type": ["CD"], - "note": ["Nettarif C"], }, "Dinel": { "gln": "5790000610099", "company": "Dinel A/S", "type": ["TCL>100_02"], - "note": ["Nettarif C time"], }, "TREFOR El-net": { "gln": "5790000392261", "company": "TREFOR El-net A/S", "type": ["C"], - "note": ["Nettarif C time"], }, "TREFOR El-net Øst": { "gln": "5790000706686", "company": "TREFOR El-net Øst A/S", "type": ["46"], - "note": ["Nettarif C time"], }, "Elektrus": { "gln": "5790000836239", "company": "Elektrus A/S", "type": ["6000091"], - "note": ["Nettarif C time"], }, "Elnet Midt": { "gln": "5790001100520", "company": "Elnet Midt A/S", "type": ["T3002"], - "note": ["Nettarif C"], }, "Hurup Elværk Net": { "gln": "5790000610839", "company": "Hurup Elværk Net A/S", "type": ["HEV-NT-01"], - "note": ["Nettarif"], }, "Veksel": { "gln": "5790001088217", "company": "Veksel A/S", "type": ["NT-10"], - "note": ["Nettarif C time NT-10"], }, "Vores Elnet": { "gln": "5790000610976", "company": "Vores Elnet A/S", "type": ["TNT1009"], - "note": ["Nettarif C time"], }, "Netselskabet Elværk": { "gln": "5790000681075", "company": "Netselskabet Elværk A/S - 042", "type": ["0NCFF"], - "note": ["Nettarif C Flex"], }, "Nord Energi Net": { "gln": "5790000610877", "company": "Nord Energi Net A/S", "type": ["TA031U200"], - "note": ["Nettarif C"], }, "Nordvestjysk Elforsyning (NOE Net)": { "gln": "5790000395620", "company": "NOE Net A/S", "type": ["Net C"], - "note": ["Nettarif C"], }, "Ikast El Net": { "gln": "5790000682102", "company": "Ikast El Net A/S", "type": ["IEV-NT-01", "IEV-NT-11"], - "note": ["Nettarif C time", "Transport - Overordnet net"], }, "FLOW Elnet": { "gln": "5790000392551", "company": "FLOW Elnet A/S", "type": ["FE2 NT-01"], - "note": ["Nettarif C time"], }, "Elinord": { "gln": "5790001095277", "company": "Elinord A/S", "type": ["43300"], - "note": ["Transportbetaling, eget net C"], }, "Hammel Elforsyning Net": { "gln": "5790001090166", "company": "Hammel Elforsyning Net A/S", "type": ["50001"], - "note": ["Overliggende net"], }, "El-net Kongerslev": { "gln": "5790002502699", "company": "El-net Kongerslev A/S", "type": ["K_22100"], - "note": ["Nettarif C"], }, "Ravdex": { "gln": "5790000836727", "company": "Ravdex A/S", "type": ["NT-C"], - "note": ["Nettarif C time"], }, "Tarm Elværk Net": { "gln": "5790000706419", "company": "Tarm Elværk Net A/S", "type": ["TEV-NT-01"], - "note": ["Nettarif C"], }, "Zeanet": { "gln": "5790001089375", "company": "Zeanet A/S", "type": ["43110"], - "note": ["Nettarif C time"], }, "NKE-Elnet": { "gln": "5790001088231", "company": "NKE-Elnet A/S", "type": ["94TR_C_ET"], - "note": ["Nettarif C time"], }, "L-Net": { "gln": "5790001090111", "company": "L-Net A/S", "type": ["4010"], - "note": ["Nettarif C time"], }, "Midtfyns Elforsyning": { "gln": "5790001089023", "company": "Midtfyns Elforsyning A.m.b.A", "type": ["TNT15000"], - "note": ["Nettarif C Flex"], }, "Sunds Net": { "gln": "5790001095444", "company": "Sunds Net A.m.b.A", "type": ["SEF-NT-05"], - "note": ["Nettarif C Flex - time"], }, } From bf7595cc38ab376e6bd4272172c75d84b03c71dc Mon Sep 17 00:00:00 2001 From: Malene Trab Date: Mon, 19 Jun 2023 10:16:38 +0000 Subject: [PATCH 06/10] Switch to dated tariffs --- custom_components/energidataservice/api.py | 2 + custom_components/energidataservice/sensor.py | 41 +++++--------- .../tariffs/energidataservice/__init__.py | 53 +++++++++++++++++-- 3 files changed, 63 insertions(+), 33 deletions(-) diff --git a/custom_components/energidataservice/api.py b/custom_components/energidataservice/api.py index 8c93b57..5098907 100644 --- a/custom_components/energidataservice/api.py +++ b/custom_components/energidataservice/api.py @@ -65,6 +65,7 @@ def __init__( self.predictions = None self.api_predictions = None self.tariff_data = None + self.tariff_connector = None self.predictions_calculated = False self.predictions_currency = None self.connector_currency = "EUR" @@ -225,6 +226,7 @@ async def async_get_tariffs(self) -> None: self._config.options.get(CONF_TARIFF_CHARGE_OWNER), ) + self.tariff_connector = tariff self.tariff_data = await tariff.async_get_tariffs() @property diff --git a/custom_components/energidataservice/sensor.py b/custom_components/energidataservice/sensor.py index 0d082c7..2fe33e7 100644 --- a/custom_components/energidataservice/sensor.py +++ b/custom_components/energidataservice/sensor.py @@ -639,17 +639,19 @@ def inner(*_, **__): and len(self._api.tariff_data["tariffs"]) > 0 ): try: - if "additional_tariffs" in self._api.tariff_data: - for tariff, additional_tariff in self._api.tariff_data[ - "additional_tariffs" - ].items(): - tariff_value += float(additional_tariff) - if tariff == "elafgift": - elafgift = float(additional_tariff) - - tariff_value += float( - self._api.tariff_data["tariffs"][str(fake_dt.hour)] + system_tariff: dict = ( + self._api.tariff_connector.get_dated_system_tariff(fake_dt) ) + chargeowner_tariff: dict = self._api.tariff_connector.get_dated_tariff( + fake_dt + ) + + for tariff, additional_tariff in system_tariff.items(): + tariff_value += float(additional_tariff) + if tariff == "elafgift": + elafgift = float(additional_tariff) + + tariff_value += float(chargeowner_tariff[str(fake_dt.hour)]) except KeyError: _LOGGER.warning( "Error adding tariffs for %s, no valid tariffs was found!", fake_dt @@ -704,13 +706,6 @@ def inner(*_, **__): if self._cent: price = price * CENT_MULTIPLIER - _LOGGER.debug( - "Hour %s: Tariff %s, Template %s", - fake_dt.hour, - tariff_value, - template_value, - ) - return price def _format_list( @@ -727,12 +722,6 @@ def _format_list( if predictions: list_for = "FORECASTS" - _LOGGER.debug( - "Unformatted list for '%s':\n%s", - list_for, - json.dumps(data, indent=2, default=str), - ) - _start = datetime.now().timestamp() Interval = namedtuple("Interval", "price hour") for i in data: @@ -746,12 +735,6 @@ def _format_list( _stop = datetime.now().timestamp() _ttf = round(_stop - _start, 2) - _LOGGER.debug( - "Formatted list for '%s':\n%s", - list_for, - json.dumps(formatted_pricelist, indent=2, default=str), - ) - if tomorrow: _calc_for = "TOMORROW" self._api.tomorrow_calculated = True diff --git a/custom_components/energidataservice/tariffs/energidataservice/__init__.py b/custom_components/energidataservice/tariffs/energidataservice/__init__.py index 4b20467..4831e8c 100644 --- a/custom_components/energidataservice/tariffs/energidataservice/__init__.py +++ b/custom_components/energidataservice/tariffs/energidataservice/__init__.py @@ -32,8 +32,9 @@ def __init__( self.client = client self._chargeowner = chargeowner self._tariffs = {} - self._result = {} self._additional_tariff = {} + self._all_tariffs = {} + self._all_additional_tariffs = {} # dt_now = datetime.now() # for elafgift in FM_EL_AFGIFT: @@ -81,12 +82,12 @@ async def async_get_tariffs(self): return else: # We got data from the DataHub - update the dataset - self._result = resp + self._all_tariffs = resp check_date = (datetime.utcnow()).strftime("%Y-%m-%d") tariff_data = {} - for entry in self._result: + for entry in self._all_tariffs: if (entry["ValidFrom"].split("T"))[0] <= check_date and ( entry["ValidTo"] is None or (entry["ValidTo"].split("T"))[0] >= check_date @@ -117,6 +118,48 @@ async def async_get_tariffs(self): self._chargeowner, ) + def get_dated_tariff(self, date: datetime) -> dict: + """Get tariff for this specific date.""" + check_date = date.strftime("%Y-%m-%d") + + tariff_data = {} + for entry in self._all_tariffs: + if (entry["ValidFrom"].split("T"))[0] <= check_date and ( + entry["ValidTo"] is None + or (entry["ValidTo"].split("T"))[0] >= check_date + ): + baseprice = 0 + for key, val in entry.items(): + if key == "Price1": + baseprice = val + if "Price" in key: + hour = str(int("".join(filter(str.isdigit, key))) - 1) + + tariff_data.update( + {hour: val if val is not None else baseprice} + ) + + if len(tariff_data) == 24: + return tariff_data + + return {} + + def get_dated_system_tariff(self, date: datetime) -> dict: + """Get system tariffs for this specific date.""" + check_date = date.strftime("%Y-%m-%d") + tariff_data = {} + for entry in self._all_additional_tariffs: + if (entry["ValidFrom"].split("T"))[0] <= check_date and ( + entry["ValidTo"] is None + or (entry["ValidTo"].split("T"))[0] >= check_date + ): + if not entry["Note"] in tariff_data: + tariff_data.update( + {util_slugify(entry["Note"]): float(entry["Price1"])} + ) + + return tariff_data + async def async_get_system_tariffs(self) -> dict: """Get additional system tariffs defined by the Danish government.""" search_filter = '{"Note":["Elafgift","Systemtarif","Transmissions nettarif"]}' @@ -131,10 +174,12 @@ async def async_get_system_tariffs(self) -> dict: "Could not fetch tariff data from Energi Data Service DataHub!" ) return + else: + self._all_additional_tariffs = dataset check_date = (datetime.utcnow()).strftime("%Y-%m-%d") tariff_data = {} - for entry in dataset: + for entry in self._all_additional_tariffs: if (entry["ValidFrom"].split("T"))[0] <= check_date and ( entry["ValidTo"] is None or (entry["ValidTo"].split("T"))[0] >= check_date From 62c04ac693e58dc9c1d075553c6d1af28ac3408e Mon Sep 17 00:00:00 2001 From: Malene Trab Date: Mon, 19 Jun 2023 10:25:44 +0000 Subject: [PATCH 07/10] Code cleanup --- custom_components/energidataservice/sensor.py | 2 +- .../energidataservice/tariffs/energidataservice/__init__.py | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/custom_components/energidataservice/sensor.py b/custom_components/energidataservice/sensor.py index 0d082c7..923de8e 100644 --- a/custom_components/energidataservice/sensor.py +++ b/custom_components/energidataservice/sensor.py @@ -3,7 +3,7 @@ from collections import namedtuple from datetime import datetime -import json +import json # pylint: disable=unused-import import logging from homeassistant.components import sensor diff --git a/custom_components/energidataservice/tariffs/energidataservice/__init__.py b/custom_components/energidataservice/tariffs/energidataservice/__init__.py index 4b20467..7d5357b 100644 --- a/custom_components/energidataservice/tariffs/energidataservice/__init__.py +++ b/custom_components/energidataservice/tariffs/energidataservice/__init__.py @@ -113,7 +113,8 @@ async def async_get_tariffs(self): return self.tariffs except KeyError: _LOGGER.error( - "Error finding '%s' in the list of charge owners - please reconfigure your integration.", + "Error finding '%s' in the list of charge owners - " + "please reconfigure your integration.", self._chargeowner, ) From 1207d59a7781a2d44f5204e91a6ac2382159cfe9 Mon Sep 17 00:00:00 2001 From: Malene Trab Date: Mon, 19 Jun 2023 13:21:38 +0000 Subject: [PATCH 08/10] Remove N1 Randers --- .../tariffs/energidataservice/chargeowners.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/custom_components/energidataservice/tariffs/energidataservice/chargeowners.py b/custom_components/energidataservice/tariffs/energidataservice/chargeowners.py index e46b00c..165bc1c 100644 --- a/custom_components/energidataservice/tariffs/energidataservice/chargeowners.py +++ b/custom_components/energidataservice/tariffs/energidataservice/chargeowners.py @@ -31,12 +31,6 @@ "type": ["CD", "CD R"], "note": ["Nettarif C"], }, - "N1 Randers": { - "gln": "5790000681372", - "company": "N1 Randers A/S", - "type": ["CD"], - "note": ["Nettarif C"], - }, "Dinel": { "gln": "5790000610099", "company": "Dinel A/S", From 24ac101dc358570679fb91d284974f1c51c578e4 Mon Sep 17 00:00:00 2001 From: Malene Trab Date: Tue, 20 Jun 2023 11:01:48 +0000 Subject: [PATCH 09/10] Bump version in manifest --- custom_components/energidataservice/manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/custom_components/energidataservice/manifest.json b/custom_components/energidataservice/manifest.json index 2913823..3f4a260 100644 --- a/custom_components/energidataservice/manifest.json +++ b/custom_components/energidataservice/manifest.json @@ -13,7 +13,7 @@ "issue_tracker": "https://github.com/MTrab/energidataservice/issues", "requirements": [ "async-retrying-ng==0.1.1", - "CurrencyConverter==0.17.7" + "CurrencyConverter==0.17.8" ], "version": "1.3.3" } \ No newline at end of file From 2577a9ca26d7b2ed74e9f4367e0e7ff260180820 Mon Sep 17 00:00:00 2001 From: github-actions Date: Tue, 20 Jun 2023 11:22:44 +0000 Subject: [PATCH 10/10] Updated manifest.json and Charge Owners --- custom_components/energidataservice/manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/custom_components/energidataservice/manifest.json b/custom_components/energidataservice/manifest.json index 3f4a260..c43a71e 100644 --- a/custom_components/energidataservice/manifest.json +++ b/custom_components/energidataservice/manifest.json @@ -15,5 +15,5 @@ "async-retrying-ng==0.1.1", "CurrencyConverter==0.17.8" ], - "version": "1.3.3" + "version": "1.3.4" } \ No newline at end of file