diff --git a/homeassistant/components/netatmo/camera.py b/homeassistant/components/netatmo/camera.py index 380571aba70..7fa9fe02956 100644 --- a/homeassistant/components/netatmo/camera.py +++ b/homeassistant/components/netatmo/camera.py @@ -55,9 +55,6 @@ async def async_setup_entry( """Set up the Netatmo camera platform.""" data_handler = hass.data[DOMAIN][entry.entry_id][DATA_HANDLER] - await data_handler.register_data_class( - CAMERA_DATA_CLASS_NAME, CAMERA_DATA_CLASS_NAME, None - ) data_class = data_handler.data.get(CAMERA_DATA_CLASS_NAME) if not data_class or not data_class.raw_data: diff --git a/homeassistant/components/netatmo/climate.py b/homeassistant/components/netatmo/climate.py index c8b5e01e5db..623b7d0573a 100644 --- a/homeassistant/components/netatmo/climate.py +++ b/homeassistant/components/netatmo/climate.py @@ -124,9 +124,6 @@ async def async_setup_entry( """Set up the Netatmo energy platform.""" data_handler = hass.data[DOMAIN][entry.entry_id][DATA_HANDLER] - await data_handler.register_data_class( - CLIMATE_TOPOLOGY_CLASS_NAME, CLIMATE_TOPOLOGY_CLASS_NAME, None - ) climate_topology = data_handler.data.get(CLIMATE_TOPOLOGY_CLASS_NAME) if not climate_topology or climate_topology.raw_data == {}: diff --git a/homeassistant/components/netatmo/data_handler.py b/homeassistant/components/netatmo/data_handler.py index ace5934adbd..1d6345506c1 100644 --- a/homeassistant/components/netatmo/data_handler.py +++ b/homeassistant/components/netatmo/data_handler.py @@ -74,7 +74,7 @@ class NetatmoDataClass: name: str interval: int next_scan: float - subscriptions: list[CALLBACK_TYPE] + subscriptions: list[CALLBACK_TYPE | None] class NetatmoDataHandler: @@ -105,6 +105,18 @@ class NetatmoDataHandler: ) ) + await asyncio.gather( + *[ + self.register_data_class(data_class, data_class, None) + for data_class in ( + CLIMATE_TOPOLOGY_CLASS_NAME, + CAMERA_DATA_CLASS_NAME, + WEATHERSTATION_DATA_CLASS_NAME, + HOMECOACH_DATA_CLASS_NAME, + ) + ] + ) + async def async_update(self, event_time: datetime) -> None: """ Update device. @@ -172,7 +184,7 @@ class NetatmoDataHandler: self, data_class_name: str, data_class_entry: str, - update_callback: CALLBACK_TYPE, + update_callback: CALLBACK_TYPE | None, **kwargs: Any, ) -> None: """Register data class.""" diff --git a/homeassistant/components/netatmo/light.py b/homeassistant/components/netatmo/light.py index 9d83aa02977..58b1a0d4f43 100644 --- a/homeassistant/components/netatmo/light.py +++ b/homeassistant/components/netatmo/light.py @@ -34,10 +34,6 @@ async def async_setup_entry( ) -> None: """Set up the Netatmo camera light platform.""" data_handler = hass.data[DOMAIN][entry.entry_id][DATA_HANDLER] - - await data_handler.register_data_class( - CAMERA_DATA_CLASS_NAME, CAMERA_DATA_CLASS_NAME, None - ) data_class = data_handler.data.get(CAMERA_DATA_CLASS_NAME) if not data_class or data_class.raw_data == {}: diff --git a/homeassistant/components/netatmo/select.py b/homeassistant/components/netatmo/select.py index 6c5f3eef00a..56f33b04432 100644 --- a/homeassistant/components/netatmo/select.py +++ b/homeassistant/components/netatmo/select.py @@ -37,9 +37,6 @@ async def async_setup_entry( """Set up the Netatmo energy platform schedule selector.""" data_handler = hass.data[DOMAIN][entry.entry_id][DATA_HANDLER] - await data_handler.register_data_class( - CLIMATE_TOPOLOGY_CLASS_NAME, CLIMATE_TOPOLOGY_CLASS_NAME, None - ) climate_topology = data_handler.data.get(CLIMATE_TOPOLOGY_CLASS_NAME) if not climate_topology or climate_topology.raw_data == {}: diff --git a/homeassistant/components/netatmo/sensor.py b/homeassistant/components/netatmo/sensor.py index defcd757d0a..7c600f6b442 100644 --- a/homeassistant/components/netatmo/sensor.py +++ b/homeassistant/components/netatmo/sensor.py @@ -386,7 +386,6 @@ async def async_setup_entry( WEATHERSTATION_DATA_CLASS_NAME, HOMECOACH_DATA_CLASS_NAME, ): - await data_handler.register_data_class(data_class_name, data_class_name, None) data_class = data_handler.data.get(data_class_name) if data_class and data_class.raw_data: diff --git a/tests/components/netatmo/test_camera.py b/tests/components/netatmo/test_camera.py index b1cee88ee2f..2eaf713e8ee 100644 --- a/tests/components/netatmo/test_camera.py +++ b/tests/components/netatmo/test_camera.py @@ -364,7 +364,7 @@ async def test_camera_reconnect_webhook(hass, config_entry): await simulate_webhook(hass, webhook_id, response) await hass.async_block_till_done() - assert fake_post_hits == 5 + assert fake_post_hits == 8 calls = fake_post_hits @@ -446,7 +446,7 @@ async def test_setup_component_no_devices(hass, config_entry): await hass.config_entries.async_setup(config_entry.entry_id) await hass.async_block_till_done() - assert fake_post_hits == 1 + assert fake_post_hits == 4 async def test_camera_image_raises_exception(hass, config_entry, requests_mock): @@ -491,4 +491,4 @@ async def test_camera_image_raises_exception(hass, config_entry, requests_mock): await camera.async_get_image(hass, camera_entity_indoor) assert excinfo.value.args == ("Unable to get image",) - assert fake_post_hits == 6 + assert fake_post_hits == 9 diff --git a/tests/components/netatmo/test_init.py b/tests/components/netatmo/test_init.py index 950a45f1e4a..ffa68d75011 100644 --- a/tests/components/netatmo/test_init.py +++ b/tests/components/netatmo/test_init.py @@ -112,7 +112,7 @@ async def test_setup_component_with_config(hass, config_entry): await hass.async_block_till_done() - assert fake_post_hits == 3 + assert fake_post_hits == 9 mock_impl.assert_called_once() mock_webhook.assert_called_once() @@ -354,7 +354,7 @@ async def test_setup_component_with_delay(hass, config_entry): await hass.async_block_till_done() - assert mock_post_request.call_count == 5 + assert mock_post_request.call_count == 8 mock_impl.assert_called_once() mock_webhook.assert_not_called() diff --git a/tests/components/netatmo/test_light.py b/tests/components/netatmo/test_light.py index d28df01becc..a0992e7ea2c 100644 --- a/tests/components/netatmo/test_light.py +++ b/tests/components/netatmo/test_light.py @@ -11,6 +11,8 @@ from homeassistant.const import ATTR_ENTITY_ID, CONF_WEBHOOK_ID from .common import FAKE_WEBHOOK_ACTIVATION, selected_platforms, simulate_webhook +from tests.test_util.aiohttp import AiohttpClientMockResponse + async def test_light_setup_and_services(hass, config_entry, netatmo_auth): """Test setup and services.""" @@ -89,7 +91,11 @@ async def test_setup_component_no_devices(hass, config_entry): """Fake error during requesting backend data.""" nonlocal fake_post_hits fake_post_hits += 1 - return "{}" + return AiohttpClientMockResponse( + method="POST", + url=kwargs["url"], + json={}, + ) with patch( "homeassistant.components.netatmo.api.AsyncConfigEntryNetatmoAuth" @@ -115,7 +121,7 @@ async def test_setup_component_no_devices(hass, config_entry): ) await hass.async_block_till_done() - assert fake_post_hits == 1 + assert fake_post_hits == 4 assert hass.config_entries.async_entries(DOMAIN) assert len(hass.states.async_all()) == 0