Wolf Smartset: Adding Heatpump Parameters: Frequency, RPM and Flow rate (#140844)

* Add missing Heatpump parameters and units

* Fix merge issue

* Fix snapshot

* Removing bundle_id as extra state attribute till functionality is needed and updating api translation with missing phrase

* Fix translations for listparameters

* Fix translations for listparameters
This commit is contained in:
EnjoyingM 2025-03-20 18:46:04 +01:00 committed by GitHub
parent eca10ea591
commit f9bb250621
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 196 additions and 0 deletions

View File

@ -7,12 +7,15 @@ from dataclasses import dataclass
from wolf_comm.models import (
EnergyParameter,
FlowParameter,
FrequencyParameter,
HoursParameter,
ListItemParameter,
Parameter,
PercentageParameter,
PowerParameter,
Pressure,
RPMParameter,
SimpleParameter,
Temperature,
)
@ -21,15 +24,19 @@ from homeassistant.components.sensor import (
SensorDeviceClass,
SensorEntity,
SensorEntityDescription,
SensorStateClass,
)
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import (
PERCENTAGE,
REVOLUTIONS_PER_MINUTE,
UnitOfEnergy,
UnitOfFrequency,
UnitOfPower,
UnitOfPressure,
UnitOfTemperature,
UnitOfTime,
UnitOfVolumeFlowRate,
)
from homeassistant.core import HomeAssistant
from homeassistant.helpers.device_registry import DeviceInfo
@ -98,6 +105,24 @@ SENSOR_DESCRIPTIONS = [
native_unit_of_measurement=UnitOfTime.HOURS,
supported_fn=lambda param: isinstance(param, HoursParameter),
),
WolflinkSensorEntityDescription(
key="flow",
device_class=SensorDeviceClass.VOLUME_FLOW_RATE,
native_unit_of_measurement=UnitOfVolumeFlowRate.LITERS_PER_MINUTE,
supported_fn=lambda param: isinstance(param, FlowParameter),
),
WolflinkSensorEntityDescription(
key="frequency",
device_class=SensorDeviceClass.FREQUENCY,
native_unit_of_measurement=UnitOfFrequency.HERTZ,
supported_fn=lambda param: isinstance(param, FrequencyParameter),
),
WolflinkSensorEntityDescription(
key="rpm",
state_class=SensorStateClass.MEASUREMENT,
native_unit_of_measurement=REVOLUTIONS_PER_MINUTE,
supported_fn=lambda param: isinstance(param, RPMParameter),
),
WolflinkSensorEntityDescription(
key="default",
supported_fn=lambda param: isinstance(param, SimpleParameter),

View File

@ -8,12 +8,15 @@ from unittest.mock import MagicMock, patch
import pytest
from wolf_comm import (
EnergyParameter,
FlowParameter,
FrequencyParameter,
HoursParameter,
ListItem,
ListItemParameter,
PercentageParameter,
PowerParameter,
Pressure,
RPMParameter,
SimpleParameter,
Temperature,
Value,
@ -86,6 +89,13 @@ def mock_wolflink() -> Generator[MagicMock]:
),
HoursParameter(7002800000, "Hours Parameter", "Heating", 7005200000, 1000),
SimpleParameter(1002800000, "Simple Parameter", "DHW", 1005200000, 1000),
FrequencyParameter(
9002800000, "Frequency Parameter", "Heating", 9005200000, 1000
),
RPMParameter(1000280001, "RPM Parameter", "Heating", 10005200000, 7000),
FlowParameter(1100280001, "Flow Parameter", "Heating", 11005200000, 8000),
HoursParameter(7002800000, "Hours Parameter", "Heating", 7005200000, 1000),
SimpleParameter(1002800000, "Simple Parameter", "DHW", 1005200000, 1000),
]
wolflink.fetch_value.return_value = [
@ -97,6 +107,9 @@ def mock_wolflink() -> Generator[MagicMock]:
Value(2002800000, "20", 1),
Value(7002800000, "10", 1),
Value(1002800000, "12", 1),
Value(9002800000, "50", 1),
Value(1000280001, "1500", 1),
Value(1100280001, "5", 1),
]
yield wolflink

View File

@ -84,6 +84,110 @@
'state': '183',
})
# ---
# name: test_sensors[sensor.flow_parameter-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.flow_parameter',
'has_entity_name': False,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.VOLUME_FLOW_RATE: 'volume_flow_rate'>,
'original_icon': None,
'original_name': 'Flow Parameter',
'platform': 'wolflink',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': None,
'unique_id': '1234:11005200000',
'unit_of_measurement': <UnitOfVolumeFlowRate.LITERS_PER_MINUTE: 'L/min'>,
})
# ---
# name: test_sensors[sensor.flow_parameter-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'volume_flow_rate',
'friendly_name': 'Flow Parameter',
'parameter_id': 11005200000,
'parent': 'Heating',
'unit_of_measurement': <UnitOfVolumeFlowRate.LITERS_PER_MINUTE: 'L/min'>,
'value_id': 1100280001,
}),
'context': <ANY>,
'entity_id': 'sensor.flow_parameter',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '5',
})
# ---
# name: test_sensors[sensor.frequency_parameter-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.frequency_parameter',
'has_entity_name': False,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.FREQUENCY: 'frequency'>,
'original_icon': None,
'original_name': 'Frequency Parameter',
'platform': 'wolflink',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': None,
'unique_id': '1234:9005200000',
'unit_of_measurement': <UnitOfFrequency.HERTZ: 'Hz'>,
})
# ---
# name: test_sensors[sensor.frequency_parameter-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'frequency',
'friendly_name': 'Frequency Parameter',
'parameter_id': 9005200000,
'parent': 'Heating',
'unit_of_measurement': <UnitOfFrequency.HERTZ: 'Hz'>,
'value_id': 9002800000,
}),
'context': <ANY>,
'entity_id': 'sensor.frequency_parameter',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '50',
})
# ---
# name: test_sensors[sensor.hours_parameter-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
@ -341,6 +445,60 @@
'state': '3',
})
# ---
# name: test_sensors[sensor.rpm_parameter-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
}),
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.rpm_parameter',
'has_entity_name': False,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': None,
'original_icon': None,
'original_name': 'RPM Parameter',
'platform': 'wolflink',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': None,
'unique_id': '1234:10005200000',
'unit_of_measurement': 'rpm',
})
# ---
# name: test_sensors[sensor.rpm_parameter-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'friendly_name': 'RPM Parameter',
'parameter_id': 10005200000,
'parent': 'Heating',
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': 'rpm',
'value_id': 1000280001,
}),
'context': <ANY>,
'entity_id': 'sensor.rpm_parameter',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '1500',
})
# ---
# name: test_sensors[sensor.simple_parameter-entry]
EntityRegistryEntrySnapshot({
'aliases': set({