Add discovery schemas for Matter 1.3 power/energy sensors (#125403)

* Add missing discovery schemas for (Matter 1.3) Power/Energy measurements

* Prevent discovery of custom cluster if 1.3 cluster present

* add tests

* Use f-strings

---------

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
This commit is contained in:
Marcel van der Veldt
2024-09-07 07:55:08 +02:00
committed by GitHub
parent b8c3a44d81
commit cbd884d54a
3 changed files with 540 additions and 6 deletions

View File

@@ -74,6 +74,16 @@ async def eve_energy_plug_node_fixture(
)
@pytest.fixture(name="eve_energy_plug_patched_node")
async def eve_energy_plug_patched_node_fixture(
hass: HomeAssistant, matter_client: MagicMock
) -> MatterNode:
"""Fixture for a Eve Energy Plug node (patched to include Matter 1.3 energy clusters)."""
return await setup_integration_with_node_fixture(
hass, "eve-energy-plug-patched", matter_client
)
@pytest.fixture(name="air_quality_sensor_node")
async def air_quality_sensor_node_fixture(
hass: HomeAssistant, matter_client: MagicMock
@@ -243,14 +253,14 @@ async def test_battery_sensor(
# This tests needs to be adjusted to remove lingering tasks
@pytest.mark.parametrize("expected_lingering_tasks", [True])
async def test_eve_energy_sensors(
async def test_energy_sensors_custom_cluster(
hass: HomeAssistant,
entity_registry: er.EntityRegistry,
matter_client: MagicMock,
eve_energy_plug_node: MatterNode,
) -> None:
"""Test Energy sensors created from Eve Energy custom cluster."""
# power sensor
"""Test Energy sensors created from (Eve) custom cluster (Matter 1.3 energy clusters absent)."""
# power sensor on Eve custom cluster
entity_id = "sensor.eve_energy_plug_power"
state = hass.states.get(entity_id)
assert state
@@ -259,7 +269,7 @@ async def test_eve_energy_sensors(
assert state.attributes["device_class"] == "power"
assert state.attributes["friendly_name"] == "Eve Energy Plug Power"
# voltage sensor
# voltage sensor on Eve custom cluster
entity_id = "sensor.eve_energy_plug_voltage"
state = hass.states.get(entity_id)
assert state
@@ -268,7 +278,7 @@ async def test_eve_energy_sensors(
assert state.attributes["device_class"] == "voltage"
assert state.attributes["friendly_name"] == "Eve Energy Plug Voltage"
# energy sensor
# energy sensor on Eve custom cluster
entity_id = "sensor.eve_energy_plug_energy"
state = hass.states.get(entity_id)
assert state
@@ -278,7 +288,7 @@ async def test_eve_energy_sensors(
assert state.attributes["friendly_name"] == "Eve Energy Plug Energy"
assert state.attributes["state_class"] == "total_increasing"
# current sensor
# current sensor on Eve custom cluster
entity_id = "sensor.eve_energy_plug_current"
state = hass.states.get(entity_id)
assert state
@@ -288,6 +298,65 @@ async def test_eve_energy_sensors(
assert state.attributes["friendly_name"] == "Eve Energy Plug Current"
# This tests needs to be adjusted to remove lingering tasks
@pytest.mark.parametrize("expected_lingering_tasks", [True])
async def test_energy_sensors(
hass: HomeAssistant,
entity_registry: er.EntityRegistry,
matter_client: MagicMock,
eve_energy_plug_patched_node: MatterNode,
) -> None:
"""Test Energy sensors created from official Matter 1.3 energy clusters."""
# power sensor on Matter 1.3 ElectricalPowermeasurement cluster
entity_id = "sensor.eve_energy_plug_patched_power"
state = hass.states.get(entity_id)
assert state
assert state.state == "550.0"
assert state.attributes["unit_of_measurement"] == "W"
assert state.attributes["device_class"] == "power"
assert state.attributes["friendly_name"] == "Eve Energy Plug Patched Power"
# ensure we do not have a duplicated entity from the custom cluster
state = hass.states.get(f"{entity_id}_1")
assert state is None
# voltage sensor on Matter 1.3 ElectricalPowermeasurement cluster
entity_id = "sensor.eve_energy_plug_patched_voltage"
state = hass.states.get(entity_id)
assert state
assert state.state == "220.0"
assert state.attributes["unit_of_measurement"] == "V"
assert state.attributes["device_class"] == "voltage"
assert state.attributes["friendly_name"] == "Eve Energy Plug Patched Voltage"
# ensure we do not have a duplicated entity from the custom cluster
state = hass.states.get(f"{entity_id}_1")
assert state is None
# energy sensor on Matter 1.3 ElectricalEnergymeasurement cluster
entity_id = "sensor.eve_energy_plug_patched_energy"
state = hass.states.get(entity_id)
assert state
assert state.state == "0.0025"
assert state.attributes["unit_of_measurement"] == "kWh"
assert state.attributes["device_class"] == "energy"
assert state.attributes["friendly_name"] == "Eve Energy Plug Patched Energy"
assert state.attributes["state_class"] == "total_increasing"
# ensure we do not have a duplicated entity from the custom cluster
state = hass.states.get(f"{entity_id}_1")
assert state is None
# current sensor on Matter 1.3 ElectricalPowermeasurement cluster
entity_id = "sensor.eve_energy_plug_patched_current"
state = hass.states.get(entity_id)
assert state
assert state.state == "2.0"
assert state.attributes["unit_of_measurement"] == "A"
assert state.attributes["device_class"] == "current"
assert state.attributes["friendly_name"] == "Eve Energy Plug Patched Current"
# ensure we do not have a duplicated entity from the custom cluster
state = hass.states.get(f"{entity_id}_1")
assert state is None
# This tests needs to be adjusted to remove lingering tasks
@pytest.mark.parametrize("expected_lingering_tasks", [True])
async def test_air_quality_sensor(