From a3cfb6d4ae0b8607da5a022180d3977a4893cf11 Mon Sep 17 00:00:00 2001 From: Diogo Gomes Date: Thu, 7 Apr 2022 22:55:34 +0100 Subject: [PATCH] Fix utility_meter reset service (#69612) --- .../components/utility_meter/__init__.py | 27 +++++++++---------- .../components/utility_meter/services.yaml | 1 - tests/components/utility_meter/test_init.py | 13 +++++++-- 3 files changed, 23 insertions(+), 18 deletions(-) diff --git a/homeassistant/components/utility_meter/__init__.py b/homeassistant/components/utility_meter/__init__.py index ecc1110d7ff..5cb4d6f7abb 100644 --- a/homeassistant/components/utility_meter/__init__.py +++ b/homeassistant/components/utility_meter/__init__.py @@ -106,27 +106,24 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool: async def async_reset_meters(service_call): """Reset all sensors of a meter.""" - entity_id = service_call.data["entity_id"] + meters = service_call.data["entity_id"] - domain = split_entity_id(entity_id)[0] - if domain == DOMAIN: - for entity in hass.data[DATA_LEGACY_COMPONENT].entities: - if entity_id == entity.entity_id: - _LOGGER.debug( - "forward reset meter from %s to %s", - entity_id, - entity.tracked_entity_id, - ) - entity_id = entity.tracked_entity_id - - _LOGGER.debug("reset meter %s", entity_id) - async_dispatcher_send(hass, SIGNAL_RESET_METER, entity_id) + for meter in meters: + _LOGGER.debug("resetting meter %s", meter) + domain, entity = split_entity_id(meter) + # backward compatibility up to 2022.07: + if domain == DOMAIN: + async_dispatcher_send( + hass, SIGNAL_RESET_METER, f"{SELECT_DOMAIN}.{entity}" + ) + else: + async_dispatcher_send(hass, SIGNAL_RESET_METER, meter) hass.services.async_register( DOMAIN, SERVICE_RESET, async_reset_meters, - vol.Schema({ATTR_ENTITY_ID: cv.entity_id}), + vol.Schema({ATTR_ENTITY_ID: vol.All(cv.ensure_list, [cv.entity_id])}), ) if DOMAIN not in config: diff --git a/homeassistant/components/utility_meter/services.yaml b/homeassistant/components/utility_meter/services.yaml index 32a6069d3bb..39f0c9056b5 100644 --- a/homeassistant/components/utility_meter/services.yaml +++ b/homeassistant/components/utility_meter/services.yaml @@ -6,7 +6,6 @@ reset: target: entity: domain: select - integration: utility_meter next_tariff: name: Next Tariff diff --git a/tests/components/utility_meter/test_init.py b/tests/components/utility_meter/test_init.py index 02330bc00a4..c9596e7766d 100644 --- a/tests/components/utility_meter/test_init.py +++ b/tests/components/utility_meter/test_init.py @@ -66,7 +66,16 @@ async def test_restore_state(hass): assert state.state == "midpeak" -async def test_services(hass): +@pytest.mark.parametrize( + "meter", + ( + ["select.energy_bill"], + "select.energy_bill", + ["utility_meter.energy_bill"], + "utility_meter.energy_bill", + ), +) +async def test_services(hass, meter): """Test energy sensor reset service.""" config = { "utility_meter": { @@ -160,7 +169,7 @@ async def test_services(hass): assert state.state == "1" # Reset meters - data = {ATTR_ENTITY_ID: "select.energy_bill"} + data = {ATTR_ENTITY_ID: meter} await hass.services.async_call(DOMAIN, SERVICE_RESET, data) await hass.async_block_till_done()