Remove getattr for Landis+Gyr Heat Meter (#90637)

* Remove getattr and update tests

* Apply suggestion for test from PR review

* Make constants capitalized
This commit is contained in:
Vincent Knoop Pathuis 2023-04-04 22:01:35 +02:00 committed by GitHub
parent e748f0c623
commit 03caf63ec2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 138 additions and 124 deletions

View file

@ -61,7 +61,7 @@ HEAT_METER_SENSOR_TYPES = (
native_unit_of_measurement=UnitOfEnergy.MEGA_WATT_HOUR,
device_class=SensorDeviceClass.ENERGY,
state_class=SensorStateClass.TOTAL,
value_fn=lambda res: getattr(res, "heat_usage_mwh", None),
value_fn=lambda res: res.heat_usage_mwh,
),
HeatMeterSensorEntityDescription(
key="volume_usage_m3",
@ -70,7 +70,7 @@ HEAT_METER_SENSOR_TYPES = (
device_class=SensorDeviceClass.VOLUME,
native_unit_of_measurement=UnitOfVolume.CUBIC_METERS,
state_class=SensorStateClass.TOTAL,
value_fn=lambda res: getattr(res, "volume_usage_m3", None),
value_fn=lambda res: res.volume_usage_m3,
),
HeatMeterSensorEntityDescription(
key="heat_usage_gj",
@ -79,7 +79,7 @@ HEAT_METER_SENSOR_TYPES = (
native_unit_of_measurement=UnitOfEnergy.GIGA_JOULE,
device_class=SensorDeviceClass.ENERGY,
state_class=SensorStateClass.TOTAL,
value_fn=lambda res: getattr(res, "heat_usage_gj", None),
value_fn=lambda res: res.heat_usage_gj,
),
HeatMeterSensorEntityDescription(
key="heat_previous_year_mwh",
@ -88,7 +88,7 @@ HEAT_METER_SENSOR_TYPES = (
native_unit_of_measurement=UnitOfEnergy.MEGA_WATT_HOUR,
device_class=SensorDeviceClass.ENERGY,
entity_category=EntityCategory.DIAGNOSTIC,
value_fn=lambda res: getattr(res, "heat_previous_year_mwh", None),
value_fn=lambda res: res.heat_previous_year_mwh,
),
HeatMeterSensorEntityDescription(
key="heat_previous_year_gj",
@ -97,7 +97,7 @@ HEAT_METER_SENSOR_TYPES = (
native_unit_of_measurement=UnitOfEnergy.GIGA_JOULE,
device_class=SensorDeviceClass.ENERGY,
entity_category=EntityCategory.DIAGNOSTIC,
value_fn=lambda res: getattr(res, "heat_previous_year_gj", None),
value_fn=lambda res: res.heat_previous_year_gj,
),
HeatMeterSensorEntityDescription(
key="volume_previous_year_m3",
@ -106,28 +106,28 @@ HEAT_METER_SENSOR_TYPES = (
device_class=SensorDeviceClass.VOLUME,
native_unit_of_measurement=UnitOfVolume.CUBIC_METERS,
entity_category=EntityCategory.DIAGNOSTIC,
value_fn=lambda res: getattr(res, "volume_previous_year_m3", None),
value_fn=lambda res: res.volume_previous_year_m3,
),
HeatMeterSensorEntityDescription(
key="ownership_number",
name="Ownership number",
icon="mdi:identifier",
entity_category=EntityCategory.DIAGNOSTIC,
value_fn=lambda res: getattr(res, "ownership_number", None),
value_fn=lambda res: res.ownership_number,
),
HeatMeterSensorEntityDescription(
key="error_number",
name="Error number",
icon="mdi:home-alert",
entity_category=EntityCategory.DIAGNOSTIC,
value_fn=lambda res: getattr(res, "error_number", None),
value_fn=lambda res: res.error_number,
),
HeatMeterSensorEntityDescription(
key="device_number",
name="Device number",
icon="mdi:identifier",
entity_category=EntityCategory.DIAGNOSTIC,
value_fn=lambda res: getattr(res, "device_number", None),
value_fn=lambda res: res.device_number,
),
HeatMeterSensorEntityDescription(
key="measurement_period_minutes",
@ -135,7 +135,7 @@ HEAT_METER_SENSOR_TYPES = (
device_class=SensorDeviceClass.DURATION,
native_unit_of_measurement=UnitOfTime.MINUTES,
entity_category=EntityCategory.DIAGNOSTIC,
value_fn=lambda res: getattr(res, "measurement_period_minutes", None),
value_fn=lambda res: res.measurement_period_minutes,
),
HeatMeterSensorEntityDescription(
key="power_max_kw",
@ -143,7 +143,7 @@ HEAT_METER_SENSOR_TYPES = (
native_unit_of_measurement=UnitOfPower.KILO_WATT,
device_class=SensorDeviceClass.POWER,
entity_category=EntityCategory.DIAGNOSTIC,
value_fn=lambda res: getattr(res, "power_max_kw", None),
value_fn=lambda res: res.power_max_kw,
),
HeatMeterSensorEntityDescription(
key="power_max_previous_year_kw",
@ -151,7 +151,7 @@ HEAT_METER_SENSOR_TYPES = (
native_unit_of_measurement=UnitOfPower.KILO_WATT,
device_class=SensorDeviceClass.POWER,
entity_category=EntityCategory.DIAGNOSTIC,
value_fn=lambda res: getattr(res, "power_max_previous_year_kw", None),
value_fn=lambda res: res.power_max_previous_year_kw,
),
HeatMeterSensorEntityDescription(
key="flowrate_max_m3ph",
@ -159,7 +159,7 @@ HEAT_METER_SENSOR_TYPES = (
native_unit_of_measurement=UnitOfVolumeFlowRate.CUBIC_METERS_PER_HOUR,
icon="mdi:water-outline",
entity_category=EntityCategory.DIAGNOSTIC,
value_fn=lambda res: getattr(res, "flowrate_max_m3ph", None),
value_fn=lambda res: res.flowrate_max_m3ph,
),
HeatMeterSensorEntityDescription(
key="flowrate_max_previous_year_m3ph",
@ -167,7 +167,7 @@ HEAT_METER_SENSOR_TYPES = (
native_unit_of_measurement=UnitOfVolumeFlowRate.CUBIC_METERS_PER_HOUR,
icon="mdi:water-outline",
entity_category=EntityCategory.DIAGNOSTIC,
value_fn=lambda res: getattr(res, "flowrate_max_previous_year_m3ph", None),
value_fn=lambda res: res.flowrate_max_previous_year_m3ph,
),
HeatMeterSensorEntityDescription(
key="return_temperature_max_c",
@ -175,7 +175,7 @@ HEAT_METER_SENSOR_TYPES = (
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
device_class=SensorDeviceClass.TEMPERATURE,
entity_category=EntityCategory.DIAGNOSTIC,
value_fn=lambda res: getattr(res, "return_temperature_max_c", None),
value_fn=lambda res: res.return_temperature_max_c,
),
HeatMeterSensorEntityDescription(
key="return_temperature_max_previous_year_c",
@ -183,9 +183,7 @@ HEAT_METER_SENSOR_TYPES = (
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
device_class=SensorDeviceClass.TEMPERATURE,
entity_category=EntityCategory.DIAGNOSTIC,
value_fn=lambda res: getattr(
res, "return_temperature_max_previous_year_c", None
),
value_fn=lambda res: res.return_temperature_max_previous_year_c,
),
HeatMeterSensorEntityDescription(
key="flow_temperature_max_c",
@ -193,7 +191,7 @@ HEAT_METER_SENSOR_TYPES = (
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
device_class=SensorDeviceClass.TEMPERATURE,
entity_category=EntityCategory.DIAGNOSTIC,
value_fn=lambda res: getattr(res, "flow_temperature_max_c", None),
value_fn=lambda res: res.flow_temperature_max_c,
),
HeatMeterSensorEntityDescription(
key="flow_temperature_max_previous_year_c",
@ -201,7 +199,7 @@ HEAT_METER_SENSOR_TYPES = (
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
device_class=SensorDeviceClass.TEMPERATURE,
entity_category=EntityCategory.DIAGNOSTIC,
value_fn=lambda res: getattr(res, "flow_temperature_max_previous_year_c", None),
value_fn=lambda res: res.flow_temperature_max_previous_year_c,
),
HeatMeterSensorEntityDescription(
key="operating_hours",
@ -209,7 +207,7 @@ HEAT_METER_SENSOR_TYPES = (
device_class=SensorDeviceClass.DURATION,
native_unit_of_measurement=UnitOfTime.HOURS,
entity_category=EntityCategory.DIAGNOSTIC,
value_fn=lambda res: getattr(res, "operating_hours", None),
value_fn=lambda res: res.operating_hours,
),
HeatMeterSensorEntityDescription(
key="flow_hours",
@ -217,7 +215,7 @@ HEAT_METER_SENSOR_TYPES = (
device_class=SensorDeviceClass.DURATION,
native_unit_of_measurement=UnitOfTime.HOURS,
entity_category=EntityCategory.DIAGNOSTIC,
value_fn=lambda res: getattr(res, "flow_hours", None),
value_fn=lambda res: res.flow_hours,
),
HeatMeterSensorEntityDescription(
key="fault_hours",
@ -225,7 +223,7 @@ HEAT_METER_SENSOR_TYPES = (
device_class=SensorDeviceClass.DURATION,
native_unit_of_measurement=UnitOfTime.HOURS,
entity_category=EntityCategory.DIAGNOSTIC,
value_fn=lambda res: getattr(res, "fault_hours", None),
value_fn=lambda res: res.fault_hours,
),
HeatMeterSensorEntityDescription(
key="fault_hours_previous_year",
@ -233,21 +231,21 @@ HEAT_METER_SENSOR_TYPES = (
device_class=SensorDeviceClass.DURATION,
native_unit_of_measurement=UnitOfTime.HOURS,
entity_category=EntityCategory.DIAGNOSTIC,
value_fn=lambda res: getattr(res, "fault_hours_previous_year", None),
value_fn=lambda res: res.fault_hours_previous_year,
),
HeatMeterSensorEntityDescription(
key="yearly_set_day",
name="Yearly set day",
icon="mdi:clock-outline",
entity_category=EntityCategory.DIAGNOSTIC,
value_fn=lambda res: getattr(res, "yearly_set_day", None),
value_fn=lambda res: res.yearly_set_day,
),
HeatMeterSensorEntityDescription(
key="monthly_set_day",
name="Monthly set day",
icon="mdi:clock-outline",
entity_category=EntityCategory.DIAGNOSTIC,
value_fn=lambda res: getattr(res, "monthly_set_day", None),
value_fn=lambda res: res.monthly_set_day,
),
HeatMeterSensorEntityDescription(
key="meter_date_time",
@ -265,13 +263,13 @@ HEAT_METER_SENSOR_TYPES = (
native_unit_of_measurement=UnitOfVolumeFlowRate.CUBIC_METERS_PER_HOUR,
icon="mdi:water-outline",
entity_category=EntityCategory.DIAGNOSTIC,
value_fn=lambda res: getattr(res, "measuring_range_m3ph", None),
value_fn=lambda res: res.measuring_range_m3ph,
),
HeatMeterSensorEntityDescription(
key="settings_and_firmware",
name="Settings and firmware",
entity_category=EntityCategory.DIAGNOSTIC,
value_fn=lambda res: getattr(res, "settings_and_firmware", None),
value_fn=lambda res: res.settings_and_firmware,
),
)

View file

@ -53,7 +53,7 @@
'entity_id': 'sensor.heat_meter_volume_usage_previous_year',
'last_changed': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
'state': '450.0',
}),
StateSnapshot({
'attributes': ReadOnlyDict({
@ -64,7 +64,7 @@
'entity_id': 'sensor.heat_meter_ownership_number',
'last_changed': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
'state': '123a',
}),
StateSnapshot({
'attributes': ReadOnlyDict({
@ -75,7 +75,7 @@
'entity_id': 'sensor.heat_meter_error_number',
'last_changed': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
'state': '0',
}),
StateSnapshot({
'attributes': ReadOnlyDict({
@ -86,7 +86,7 @@
'entity_id': 'sensor.heat_meter_device_number',
'last_changed': <ANY>,
'last_updated': <ANY>,
'state': 'devicenr_789',
'state': 'abc1',
}),
StateSnapshot({
'attributes': ReadOnlyDict({
@ -98,7 +98,7 @@
'entity_id': 'sensor.heat_meter_measurement_period_minutes',
'last_changed': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
'state': '60',
}),
StateSnapshot({
'attributes': ReadOnlyDict({
@ -110,7 +110,7 @@
'entity_id': 'sensor.heat_meter_power_max',
'last_changed': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
'state': '22.1',
}),
StateSnapshot({
'attributes': ReadOnlyDict({
@ -122,7 +122,7 @@
'entity_id': 'sensor.heat_meter_power_max_previous_year',
'last_changed': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
'state': '22.4',
}),
StateSnapshot({
'attributes': ReadOnlyDict({
@ -134,7 +134,7 @@
'entity_id': 'sensor.heat_meter_flowrate_max',
'last_changed': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
'state': '0.744',
}),
StateSnapshot({
'attributes': ReadOnlyDict({
@ -146,7 +146,7 @@
'entity_id': 'sensor.heat_meter_flowrate_max_previous_year',
'last_changed': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
'state': '0.743',
}),
StateSnapshot({
'attributes': ReadOnlyDict({
@ -158,7 +158,7 @@
'entity_id': 'sensor.heat_meter_return_temperature_max',
'last_changed': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
'state': '96.1',
}),
StateSnapshot({
'attributes': ReadOnlyDict({
@ -170,7 +170,7 @@
'entity_id': 'sensor.heat_meter_return_temperature_max_previous_year',
'last_changed': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
'state': '96.2',
}),
StateSnapshot({
'attributes': ReadOnlyDict({
@ -182,7 +182,7 @@
'entity_id': 'sensor.heat_meter_flow_temperature_max',
'last_changed': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
'state': '98.5',
}),
StateSnapshot({
'attributes': ReadOnlyDict({
@ -194,7 +194,7 @@
'entity_id': 'sensor.heat_meter_flow_temperature_max_previous_year',
'last_changed': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
'state': '98.4',
}),
StateSnapshot({
'attributes': ReadOnlyDict({
@ -206,7 +206,7 @@
'entity_id': 'sensor.heat_meter_operating_hours',
'last_changed': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
'state': '115575',
}),
StateSnapshot({
'attributes': ReadOnlyDict({
@ -218,7 +218,7 @@
'entity_id': 'sensor.heat_meter_flow_hours',
'last_changed': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
'state': '30242',
}),
StateSnapshot({
'attributes': ReadOnlyDict({
@ -230,7 +230,7 @@
'entity_id': 'sensor.heat_meter_fault_hours',
'last_changed': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
'state': '5',
}),
StateSnapshot({
'attributes': ReadOnlyDict({
@ -242,7 +242,7 @@
'entity_id': 'sensor.heat_meter_fault_hours_previous_year',
'last_changed': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
'state': '5',
}),
StateSnapshot({
'attributes': ReadOnlyDict({
@ -253,7 +253,7 @@
'entity_id': 'sensor.heat_meter_yearly_set_day',
'last_changed': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
'state': '01-01',
}),
StateSnapshot({
'attributes': ReadOnlyDict({
@ -264,7 +264,7 @@
'entity_id': 'sensor.heat_meter_monthly_set_day',
'last_changed': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
'state': '01',
}),
StateSnapshot({
'attributes': ReadOnlyDict({
@ -288,7 +288,7 @@
'entity_id': 'sensor.heat_meter_measuring_range',
'last_changed': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
'state': '1.5',
}),
StateSnapshot({
'attributes': ReadOnlyDict({
@ -298,7 +298,7 @@
'entity_id': 'sensor.heat_meter_settings_and_firmware',
'last_changed': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
'state': '0 1 0 0000 CECV CECV 1 5.16 5.16 F 101008 040404 08 0',
}),
])
# ---
@ -356,7 +356,7 @@
'entity_id': 'sensor.heat_meter_volume_usage_previous_year',
'last_changed': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
'state': '450.0',
}),
StateSnapshot({
'attributes': ReadOnlyDict({
@ -367,7 +367,7 @@
'entity_id': 'sensor.heat_meter_ownership_number',
'last_changed': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
'state': '123a',
}),
StateSnapshot({
'attributes': ReadOnlyDict({
@ -378,7 +378,7 @@
'entity_id': 'sensor.heat_meter_error_number',
'last_changed': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
'state': '0',
}),
StateSnapshot({
'attributes': ReadOnlyDict({
@ -389,7 +389,7 @@
'entity_id': 'sensor.heat_meter_device_number',
'last_changed': <ANY>,
'last_updated': <ANY>,
'state': 'devicenr_789',
'state': 'abc1',
}),
StateSnapshot({
'attributes': ReadOnlyDict({
@ -401,7 +401,7 @@
'entity_id': 'sensor.heat_meter_measurement_period_minutes',
'last_changed': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
'state': '60',
}),
StateSnapshot({
'attributes': ReadOnlyDict({
@ -413,7 +413,7 @@
'entity_id': 'sensor.heat_meter_power_max',
'last_changed': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
'state': '22.1',
}),
StateSnapshot({
'attributes': ReadOnlyDict({
@ -425,7 +425,7 @@
'entity_id': 'sensor.heat_meter_power_max_previous_year',
'last_changed': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
'state': '22.4',
}),
StateSnapshot({
'attributes': ReadOnlyDict({
@ -437,7 +437,7 @@
'entity_id': 'sensor.heat_meter_flowrate_max',
'last_changed': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
'state': '0.744',
}),
StateSnapshot({
'attributes': ReadOnlyDict({
@ -449,7 +449,7 @@
'entity_id': 'sensor.heat_meter_flowrate_max_previous_year',
'last_changed': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
'state': '0.743',
}),
StateSnapshot({
'attributes': ReadOnlyDict({
@ -461,7 +461,7 @@
'entity_id': 'sensor.heat_meter_return_temperature_max',
'last_changed': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
'state': '96.1',
}),
StateSnapshot({
'attributes': ReadOnlyDict({
@ -473,7 +473,7 @@
'entity_id': 'sensor.heat_meter_return_temperature_max_previous_year',
'last_changed': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
'state': '96.2',
}),
StateSnapshot({
'attributes': ReadOnlyDict({
@ -485,7 +485,7 @@
'entity_id': 'sensor.heat_meter_flow_temperature_max',
'last_changed': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
'state': '98.5',
}),
StateSnapshot({
'attributes': ReadOnlyDict({
@ -497,7 +497,7 @@
'entity_id': 'sensor.heat_meter_flow_temperature_max_previous_year',
'last_changed': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
'state': '98.4',
}),
StateSnapshot({
'attributes': ReadOnlyDict({
@ -509,7 +509,7 @@
'entity_id': 'sensor.heat_meter_operating_hours',
'last_changed': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
'state': '115575',
}),
StateSnapshot({
'attributes': ReadOnlyDict({
@ -521,7 +521,7 @@
'entity_id': 'sensor.heat_meter_flow_hours',
'last_changed': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
'state': '30242',
}),
StateSnapshot({
'attributes': ReadOnlyDict({
@ -533,7 +533,7 @@
'entity_id': 'sensor.heat_meter_fault_hours',
'last_changed': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
'state': '5',
}),
StateSnapshot({
'attributes': ReadOnlyDict({
@ -545,7 +545,7 @@
'entity_id': 'sensor.heat_meter_fault_hours_previous_year',
'last_changed': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
'state': '5',
}),
StateSnapshot({
'attributes': ReadOnlyDict({
@ -556,7 +556,7 @@
'entity_id': 'sensor.heat_meter_yearly_set_day',
'last_changed': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
'state': '01-01',
}),
StateSnapshot({
'attributes': ReadOnlyDict({
@ -567,7 +567,7 @@
'entity_id': 'sensor.heat_meter_monthly_set_day',
'last_changed': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
'state': '01',
}),
StateSnapshot({
'attributes': ReadOnlyDict({
@ -591,7 +591,7 @@
'entity_id': 'sensor.heat_meter_measuring_range',
'last_changed': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
'state': '1.5',
}),
StateSnapshot({
'attributes': ReadOnlyDict({
@ -601,7 +601,7 @@
'entity_id': 'sensor.heat_meter_settings_and_firmware',
'last_changed': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
'state': '0 1 0 0000 CECV CECV 1 5.16 5.16 F 101008 040404 08 0',
}),
])
# ---

View file

@ -1,11 +1,11 @@
"""The tests for the Landis+Gyr Heat Meter sensor platform."""
from dataclasses import dataclass
import datetime
from unittest.mock import patch
import pytest
import serial
from syrupy import SnapshotAssertion
from ultraheat_api.response import HeatMeterResponse
from homeassistant.components.homeassistant import DOMAIN as HA_DOMAIN
from homeassistant.components.landisgyr_heat_meter.const import DOMAIN, POLLING_INTERVAL
@ -21,45 +21,76 @@ API_HEAT_METER_SERVICE = (
"homeassistant.components.landisgyr_heat_meter.ultraheat_api.HeatMeterService"
)
MOCK_RESPONSE_GJ = {
"model": "abc",
"heat_usage_gj": 123.0,
"heat_usage_mwh": None,
"volume_usage_m3": 456.0,
"ownership_number": "123a",
"volume_previous_year_m3": 450.0,
"heat_previous_year_gj": 111.0,
"heat_previous_year_mwh": None,
"error_number": "0",
"device_number": "abc1",
"measurement_period_minutes": 60,
"power_max_kw": 22.1,
"power_max_previous_year_kw": 22.4,
"flowrate_max_m3ph": 0.744,
"flow_temperature_max_c": 98.5,
"flowrate_max_previous_year_m3ph": 0.743,
"return_temperature_max_c": 96.1,
"flow_temperature_max_previous_year_c": 98.4,
"return_temperature_max_previous_year_c": 96.2,
"operating_hours": 115575,
"fault_hours": 5,
"fault_hours_previous_year": 5,
"yearly_set_day": "01-01",
"monthly_set_day": "01",
"meter_date_time": dt_util.as_utc(datetime.datetime(2022, 5, 19, 19, 41, 17)),
"measuring_range_m3ph": 1.5,
"settings_and_firmware": "0 1 0 0000 CECV CECV 1 5.16 5.16 F 101008 040404 08 0",
"flow_hours": 30242,
"raw_response": "6.8(0328.872*GJ)6.26(03329.68*m3)9.21(66153690)",
}
@dataclass
class MockHeatMeterResponse:
"""Mock for HeatMeterResponse."""
heat_usage_gj: float | None
heat_usage_mwh: float | None
volume_usage_m3: float
heat_previous_year_gj: float | None
heat_previous_year_mwh: float | None
device_number: str
meter_date_time: datetime.datetime
MOCK_RESPONSE_MWH = {
"model": "abc",
"heat_usage_gj": None,
"heat_usage_mwh": 123.0,
"volume_usage_m3": 456.0,
"ownership_number": "123a",
"volume_previous_year_m3": 450.0,
"heat_previous_year_gj": None,
"heat_previous_year_mwh": 111.0,
"error_number": "0",
"device_number": "abc1",
"measurement_period_minutes": 60,
"power_max_kw": 22.1,
"power_max_previous_year_kw": 22.4,
"flowrate_max_m3ph": 0.744,
"flow_temperature_max_c": 98.5,
"flowrate_max_previous_year_m3ph": 0.743,
"return_temperature_max_c": 96.1,
"flow_temperature_max_previous_year_c": 98.4,
"return_temperature_max_previous_year_c": 96.2,
"operating_hours": 115575,
"fault_hours": 5,
"fault_hours_previous_year": 5,
"yearly_set_day": "01-01",
"monthly_set_day": "01",
"meter_date_time": dt_util.as_utc(datetime.datetime(2022, 5, 19, 19, 41, 17)),
"measuring_range_m3ph": 1.5,
"settings_and_firmware": "0 1 0 0000 CECV CECV 1 5.16 5.16 F 101008 040404 08 0",
"flow_hours": 30242,
"raw_response": "6.8(0328.872*MWh)6.26(03329.68*m3)9.21(66153690)",
}
@pytest.mark.parametrize(
"mock_heat_meter_response",
[
{
"heat_usage_gj": 123.0,
"heat_usage_mwh": None,
"volume_usage_m3": 456.0,
"heat_previous_year_gj": 111.0,
"heat_previous_year_mwh": None,
"device_number": "devicenr_789",
"meter_date_time": dt_util.as_utc(
datetime.datetime(2022, 5, 19, 19, 41, 17)
),
},
{
"heat_usage_gj": None,
"heat_usage_mwh": 123.0,
"volume_usage_m3": 456.0,
"heat_previous_year_gj": None,
"heat_previous_year_mwh": 111.0,
"device_number": "devicenr_789",
"meter_date_time": dt_util.as_utc(
datetime.datetime(2022, 5, 19, 19, 41, 17)
),
},
MOCK_RESPONSE_GJ,
MOCK_RESPONSE_MWH,
],
)
@patch(API_HEAT_METER_SERVICE)
@ -79,7 +110,7 @@ async def test_create_sensors(
mock_entry = MockConfigEntry(domain=DOMAIN, unique_id=DOMAIN, data=entry_data)
mock_entry.add_to_hass(hass)
mock_heat_meter_response = MockHeatMeterResponse(**mock_heat_meter_response)
mock_heat_meter_response = HeatMeterResponse(**mock_heat_meter_response)
mock_heat_meter().read.return_value = mock_heat_meter_response
@ -102,15 +133,7 @@ async def test_exception_on_polling(mock_heat_meter, hass: HomeAssistant) -> Non
mock_entry.add_to_hass(hass)
# First setup normally
mock_heat_meter_response = MockHeatMeterResponse(
heat_usage_gj=123.0,
heat_usage_mwh=None,
volume_usage_m3=456.0,
heat_previous_year_gj=111.0,
heat_previous_year_mwh=None,
device_number="devicenr_789",
meter_date_time=dt_util.as_utc(datetime.datetime(2022, 5, 19, 19, 41, 17)),
)
mock_heat_meter_response = HeatMeterResponse(**MOCK_RESPONSE_GJ)
mock_heat_meter().read.return_value = mock_heat_meter_response
@ -130,16 +153,9 @@ async def test_exception_on_polling(mock_heat_meter, hass: HomeAssistant) -> Non
state = hass.states.get("sensor.heat_meter_heat_usage_gj")
assert state.state == STATE_UNAVAILABLE
# Now 'enable' and see if next poll succeeds
mock_heat_meter_response = MockHeatMeterResponse(
heat_usage_gj=124.0,
heat_usage_mwh=None,
volume_usage_m3=457.0,
heat_previous_year_gj=112.0,
heat_previous_year_mwh=None,
device_number="devicenr_789",
meter_date_time=dt_util.as_utc(datetime.datetime(2022, 5, 19, 20, 41, 17)),
)
# # Now 'enable' and see if next poll succeeds
mock_heat_meter_response = HeatMeterResponse(**MOCK_RESPONSE_GJ)
mock_heat_meter_response.heat_usage_gj += 1
mock_heat_meter().read.return_value = mock_heat_meter_response
mock_heat_meter().read.side_effect = None