From 6724719d6fa410bc10732ca86894f5e8c27e70a4 Mon Sep 17 00:00:00 2001 From: "pawel.hulek" Date: Tue, 30 Jan 2024 19:40:59 +0100 Subject: [PATCH 1/7] fix alerts Signed-off-by: pawel.hulek --- custom_components/pgnig_gas_sensor/sensor.py | 78 ++++++++++++++++++-- requirements_test.txt | 2 +- 2 files changed, 72 insertions(+), 8 deletions(-) diff --git a/custom_components/pgnig_gas_sensor/sensor.py b/custom_components/pgnig_gas_sensor/sensor.py index 6b4fa8b..5ef7a4c 100644 --- a/custom_components/pgnig_gas_sensor/sensor.py +++ b/custom_components/pgnig_gas_sensor/sensor.py @@ -10,10 +10,11 @@ import voluptuous as vol from homeassistant.components.sensor import SensorEntity, PLATFORM_SCHEMA, SensorStateClass, SensorDeviceClass from homeassistant.config_entries import ConfigEntry -from homeassistant.const import CONF_USERNAME, CONF_PASSWORD, VOLUME_CUBIC_METERS +from homeassistant.const import CONF_USERNAME, CONF_PASSWORD, ENERGY_KILO_WATT_HOUR, UnitOfVolume from homeassistant.core import HomeAssistant from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType, HomeAssistantType + from .Invoices import InvoicesList from .PgnigApi import PgnigApi from .PpgReadingForMeter import MeterReading @@ -70,7 +71,7 @@ async def async_setup_platform( class PgnigSensor(SensorEntity): def __init__(self, hass, api: PgnigApi, meter_id: string, id_local: int) -> None: - self._attr_native_unit_of_measurement = VOLUME_CUBIC_METERS + self._attr_native_unit_of_measurement = UnitOfVolume.CUBIC_METERS self._attr_device_class = SensorDeviceClass.GAS self._attr_state_class = SensorStateClass.TOTAL_INCREASING self._state: MeterReading | None = None @@ -109,7 +110,7 @@ def extra_state_attributes(self): attrs = dict() if self._state is not None: attrs["wear"] = self._state.wear - attrs["wear_unit_of_measurment"] = VOLUME_CUBIC_METERS + attrs["wear_unit_of_measurment"] = UnitOfVolume.CUBIC_METERS return attrs async def async_update(self): @@ -213,6 +214,16 @@ def __init__(self, hass, api: PgnigApi, meter_id: string, id_local: int) -> None def unique_id(self) -> str | None: return "pgnig_cost_tracking_sensor" + self.meter_id + "_" + str(self.id_local) + @property + def device_info(self): + return { + "identifiers": {("pgnig_gas_sensor", self.meter_id)}, + "name": f"PGNIG GAS METER ID {self.meter_id}", + "manufacturer": "PGNIG", + "model": self.meter_id, + "via_device": None, + } + @property def name(self) -> str: return self.entity_name @@ -243,10 +254,10 @@ def latest_price(self): def upcoming_payment_for_meter(x: InvoicesList): return id_local == x.id_pp \ - and x.wear is not None \ - and x.wear != 0 \ - and x.gross_amount is not None \ - and x.gross_amount != 0 + and x.wear is not None \ + and x.wear != 0 \ + and x.gross_amount is not None \ + and x.gross_amount != 0 return max(filter(upcoming_payment_for_meter, self.api.invoices().invoices_list), key=lambda z: z.date, @@ -256,3 +267,56 @@ def upcoming_payment_for_meter(x: InvoicesList): None, None, None, None, None, None, None, None, None)) + + +class PgnigKwhSensor(SensorEntity): + def __init__(self, hass, api: PgnigApi, meter_id: string, id_local: int) -> None: + self._attr_native_unit_of_measurement = ENERGY_KILO_WATT_HOUR + self._attr_device_class = SensorDeviceClass.GAS + self._attr_state_class = SensorStateClass.TOTAL_INCREASING + self._state: MeterReading | None = None + self.hass = hass + self.api = api + self.meter_id = meter_id + self.id_local = id_local + self.entity_name = "PGNIG Gas KwH Sensor " + meter_id + " " + str(id_local) + + @property + def unique_id(self) -> str | None: + return "pgnig_kwh_sensor" + self.meter_id + "_" + str(self.id_local) + + @property + def device_info(self): + return { + "identifiers": {("pgnig_gas_sensor", self.meter_id)}, + "name": f"PGNIG GAS METER ID {self.meter_id}", + "manufacturer": "PGNIG", + "model": self.meter_id, + "via_device": None, + } + + @property + def name(self) -> str: + return self.entity_name + + @property + def state(self): + if self._state is None: + return None + return self._state.value + + @property + def extra_state_attributes(self): + attrs = dict() + if self._state is not None: + attrs["wear"] = self._state.wear + attrs["wear_unit_of_measurment"] = UnitOfVolume.CUBIC_METERS + return attrs + + async def async_update(self): + latest_meter_reading: MeterReading = await self.hass.async_add_executor_job(self.latestMeterReading) + self._state = latest_meter_reading + + def latestMeterReading(self): + return max(self.api.readingForMeter(self.meter_id).meter_readings, + key=lambda z: z.reading_date_utc) diff --git a/requirements_test.txt b/requirements_test.txt index b70764f..a600e2b 100644 --- a/requirements_test.txt +++ b/requirements_test.txt @@ -1,2 +1,2 @@ # Strictly for tests -pytest-homeassistant-custom-component==0.11.6 +pytest-homeassistant-custom-component==0.13.91 From 75e652ace93116e4a0fde3f0dff0cd2984e964a7 Mon Sep 17 00:00:00 2001 From: "pawel.hulek" Date: Wed, 31 Jan 2024 04:49:18 +0100 Subject: [PATCH 2/7] fix alerts Signed-off-by: pawel.hulek --- requirements_test.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_test.txt b/requirements_test.txt index a600e2b..b70764f 100644 --- a/requirements_test.txt +++ b/requirements_test.txt @@ -1,2 +1,2 @@ # Strictly for tests -pytest-homeassistant-custom-component==0.13.91 +pytest-homeassistant-custom-component==0.11.6 From 0c829acfcffb81342e2c8b6fa43207cce29607aa Mon Sep 17 00:00:00 2001 From: "pawel.hulek" Date: Wed, 31 Jan 2024 04:56:58 +0100 Subject: [PATCH 3/7] pytest higher version Signed-off-by: pawel.hulek --- requirements_test.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_test.txt b/requirements_test.txt index b70764f..fe0408e 100644 --- a/requirements_test.txt +++ b/requirements_test.txt @@ -1,2 +1,2 @@ # Strictly for tests -pytest-homeassistant-custom-component==0.11.6 +pytest-homeassistant-custom-component==0.13.20 From 24ca3d3ddcd6752add93919790c554c54f57df9c Mon Sep 17 00:00:00 2001 From: "pawel.hulek" Date: Wed, 31 Jan 2024 04:58:42 +0100 Subject: [PATCH 4/7] python higher version Signed-off-by: pawel.hulek --- .github/workflows/tests.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index 49ba982..b03fdeb 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -8,7 +8,7 @@ jobs: strategy: max-parallel: 4 matrix: - python-version: [ 3.9 ] + python-version: [ 3.10 ] steps: - uses: actions/checkout@v1 From 2bc84a22a5b63dbe0e16370510dfbc556fb489fc Mon Sep 17 00:00:00 2001 From: "pawel.hulek" Date: Wed, 31 Jan 2024 04:59:51 +0100 Subject: [PATCH 5/7] python higher version Signed-off-by: pawel.hulek --- .github/workflows/tests.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index b03fdeb..085da71 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -8,7 +8,7 @@ jobs: strategy: max-parallel: 4 matrix: - python-version: [ 3.10 ] + python-version: [ 3.10.13 ] steps: - uses: actions/checkout@v1 From def3464b8fa231c35fc9e17478ce54d74f9d9264 Mon Sep 17 00:00:00 2001 From: "pawel.hulek" Date: Wed, 31 Jan 2024 05:02:59 +0100 Subject: [PATCH 6/7] remove obsolete code Signed-off-by: pawel.hulek --- custom_components/pgnig_gas_sensor/sensor.py | 53 -------------------- 1 file changed, 53 deletions(-) diff --git a/custom_components/pgnig_gas_sensor/sensor.py b/custom_components/pgnig_gas_sensor/sensor.py index 5ef7a4c..478fbd2 100644 --- a/custom_components/pgnig_gas_sensor/sensor.py +++ b/custom_components/pgnig_gas_sensor/sensor.py @@ -267,56 +267,3 @@ def upcoming_payment_for_meter(x: InvoicesList): None, None, None, None, None, None, None, None, None)) - - -class PgnigKwhSensor(SensorEntity): - def __init__(self, hass, api: PgnigApi, meter_id: string, id_local: int) -> None: - self._attr_native_unit_of_measurement = ENERGY_KILO_WATT_HOUR - self._attr_device_class = SensorDeviceClass.GAS - self._attr_state_class = SensorStateClass.TOTAL_INCREASING - self._state: MeterReading | None = None - self.hass = hass - self.api = api - self.meter_id = meter_id - self.id_local = id_local - self.entity_name = "PGNIG Gas KwH Sensor " + meter_id + " " + str(id_local) - - @property - def unique_id(self) -> str | None: - return "pgnig_kwh_sensor" + self.meter_id + "_" + str(self.id_local) - - @property - def device_info(self): - return { - "identifiers": {("pgnig_gas_sensor", self.meter_id)}, - "name": f"PGNIG GAS METER ID {self.meter_id}", - "manufacturer": "PGNIG", - "model": self.meter_id, - "via_device": None, - } - - @property - def name(self) -> str: - return self.entity_name - - @property - def state(self): - if self._state is None: - return None - return self._state.value - - @property - def extra_state_attributes(self): - attrs = dict() - if self._state is not None: - attrs["wear"] = self._state.wear - attrs["wear_unit_of_measurment"] = UnitOfVolume.CUBIC_METERS - return attrs - - async def async_update(self): - latest_meter_reading: MeterReading = await self.hass.async_add_executor_job(self.latestMeterReading) - self._state = latest_meter_reading - - def latestMeterReading(self): - return max(self.api.readingForMeter(self.meter_id).meter_readings, - key=lambda z: z.reading_date_utc) From d7e83baf0ced50d40ffb7013183e1895543a985b Mon Sep 17 00:00:00 2001 From: "pawel.hulek" Date: Wed, 31 Jan 2024 05:08:05 +0100 Subject: [PATCH 7/7] remove obsolete code Signed-off-by: pawel.hulek --- custom_components/pgnig_gas_sensor/sensor.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/custom_components/pgnig_gas_sensor/sensor.py b/custom_components/pgnig_gas_sensor/sensor.py index 478fbd2..03212b7 100644 --- a/custom_components/pgnig_gas_sensor/sensor.py +++ b/custom_components/pgnig_gas_sensor/sensor.py @@ -10,7 +10,7 @@ import voluptuous as vol from homeassistant.components.sensor import SensorEntity, PLATFORM_SCHEMA, SensorStateClass, SensorDeviceClass from homeassistant.config_entries import ConfigEntry -from homeassistant.const import CONF_USERNAME, CONF_PASSWORD, ENERGY_KILO_WATT_HOUR, UnitOfVolume +from homeassistant.const import CONF_USERNAME, CONF_PASSWORD, UnitOfVolume from homeassistant.core import HomeAssistant from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType, HomeAssistantType