From f03f24f0361e93baa6d68971abff142c3e78ec05 Mon Sep 17 00:00:00 2001 From: Maikel Punie Date: Fri, 13 Dec 2024 16:05:20 +0100 Subject: [PATCH] Velbus test before setup (#133069) * Velbus test before setup * Update homeassistant/components/velbus/__init__.py Co-authored-by: epenet <6771947+epenet@users.noreply.github.com> * Add the connect named argument to make it clear we are testing the connection * Correctly cleanup after the test * Sync code for velbusaio 2024.12.2 * follow up * rename connect_task to scan_task --------- Co-authored-by: epenet <6771947+epenet@users.noreply.github.com> --- homeassistant/components/velbus/__init__.py | 18 +++++++++++------- .../components/velbus/binary_sensor.py | 2 +- homeassistant/components/velbus/button.py | 2 +- homeassistant/components/velbus/climate.py | 2 +- homeassistant/components/velbus/cover.py | 2 +- homeassistant/components/velbus/light.py | 2 +- .../components/velbus/quality_scale.yaml | 2 +- homeassistant/components/velbus/select.py | 2 +- homeassistant/components/velbus/sensor.py | 2 +- homeassistant/components/velbus/switch.py | 2 +- 10 files changed, 20 insertions(+), 16 deletions(-) diff --git a/homeassistant/components/velbus/__init__.py b/homeassistant/components/velbus/__init__.py index 6afcc20cc0f..ad1c35a124b 100644 --- a/homeassistant/components/velbus/__init__.py +++ b/homeassistant/components/velbus/__init__.py @@ -9,11 +9,12 @@ import os import shutil from velbusaio.controller import Velbus +from velbusaio.exceptions import VelbusConnectionFailed from homeassistant.config_entries import ConfigEntry from homeassistant.const import CONF_PORT, Platform from homeassistant.core import HomeAssistant -from homeassistant.exceptions import PlatformNotReady +from homeassistant.exceptions import ConfigEntryNotReady, PlatformNotReady from homeassistant.helpers import config_validation as cv, device_registry as dr from homeassistant.helpers.storage import STORAGE_DIR from homeassistant.helpers.typing import ConfigType @@ -44,13 +45,13 @@ class VelbusData: """Runtime data for the Velbus config entry.""" controller: Velbus - connect_task: asyncio.Task + scan_task: asyncio.Task -async def velbus_connect_task( +async def velbus_scan_task( controller: Velbus, hass: HomeAssistant, entry_id: str ) -> None: - """Task to offload the long running connect.""" + """Task to offload the long running scan.""" try: await controller.start() except ConnectionError as ex: @@ -85,10 +86,13 @@ async def async_setup_entry(hass: HomeAssistant, entry: VelbusConfigEntry) -> bo entry.data[CONF_PORT], cache_dir=hass.config.path(STORAGE_DIR, f"velbuscache-{entry.entry_id}"), ) - await controller.connect() + try: + await controller.connect() + except VelbusConnectionFailed as error: + raise ConfigEntryNotReady("Cannot connect to Velbus") from error - task = hass.async_create_task(velbus_connect_task(controller, hass, entry.entry_id)) - entry.runtime_data = VelbusData(controller=controller, connect_task=task) + task = hass.async_create_task(velbus_scan_task(controller, hass, entry.entry_id)) + entry.runtime_data = VelbusData(controller=controller, scan_task=task) _migrate_device_identifiers(hass, entry.entry_id) diff --git a/homeassistant/components/velbus/binary_sensor.py b/homeassistant/components/velbus/binary_sensor.py index dd65ff7d50d..584f28e394a 100644 --- a/homeassistant/components/velbus/binary_sensor.py +++ b/homeassistant/components/velbus/binary_sensor.py @@ -16,7 +16,7 @@ async def async_setup_entry( async_add_entities: AddEntitiesCallback, ) -> None: """Set up Velbus switch based on config_entry.""" - await entry.runtime_data.connect_task + await entry.runtime_data.scan_task async_add_entities( VelbusBinarySensor(channel) for channel in entry.runtime_data.controller.get_all_binary_sensor() diff --git a/homeassistant/components/velbus/button.py b/homeassistant/components/velbus/button.py index 2b908c188b8..910ae59b69e 100644 --- a/homeassistant/components/velbus/button.py +++ b/homeassistant/components/velbus/button.py @@ -22,7 +22,7 @@ async def async_setup_entry( async_add_entities: AddEntitiesCallback, ) -> None: """Set up Velbus switch based on config_entry.""" - await entry.runtime_data.connect_task + await entry.runtime_data.scan_task async_add_entities( VelbusButton(channel) for channel in entry.runtime_data.controller.get_all_button() diff --git a/homeassistant/components/velbus/climate.py b/homeassistant/components/velbus/climate.py index fa8391d4199..e9128ef7de1 100644 --- a/homeassistant/components/velbus/climate.py +++ b/homeassistant/components/velbus/climate.py @@ -27,7 +27,7 @@ async def async_setup_entry( async_add_entities: AddEntitiesCallback, ) -> None: """Set up Velbus switch based on config_entry.""" - await entry.runtime_data.connect_task + await entry.runtime_data.scan_task async_add_entities( VelbusClimate(channel) for channel in entry.runtime_data.controller.get_all_climate() diff --git a/homeassistant/components/velbus/cover.py b/homeassistant/components/velbus/cover.py index 7850e7b1895..9257dd3f36f 100644 --- a/homeassistant/components/velbus/cover.py +++ b/homeassistant/components/velbus/cover.py @@ -24,7 +24,7 @@ async def async_setup_entry( async_add_entities: AddEntitiesCallback, ) -> None: """Set up Velbus switch based on config_entry.""" - await entry.runtime_data.connect_task + await entry.runtime_data.scan_task async_add_entities( VelbusCover(channel) for channel in entry.runtime_data.controller.get_all_cover() diff --git a/homeassistant/components/velbus/light.py b/homeassistant/components/velbus/light.py index 0df4f70d753..afe3104aa9a 100644 --- a/homeassistant/components/velbus/light.py +++ b/homeassistant/components/velbus/light.py @@ -35,7 +35,7 @@ async def async_setup_entry( async_add_entities: AddEntitiesCallback, ) -> None: """Set up Velbus switch based on config_entry.""" - await entry.runtime_data.connect_task + await entry.runtime_data.scan_task entities: list[Entity] = [ VelbusLight(channel) for channel in entry.runtime_data.controller.get_all_light() diff --git a/homeassistant/components/velbus/quality_scale.yaml b/homeassistant/components/velbus/quality_scale.yaml index ab2df68f973..37e55fee19c 100644 --- a/homeassistant/components/velbus/quality_scale.yaml +++ b/homeassistant/components/velbus/quality_scale.yaml @@ -25,7 +25,7 @@ rules: has-entity-name: todo runtime-data: done test-before-configure: done - test-before-setup: todo + test-before-setup: done unique-config-entry: status: todo comment: | diff --git a/homeassistant/components/velbus/select.py b/homeassistant/components/velbus/select.py index f0ad509270c..c0a0a5f532d 100644 --- a/homeassistant/components/velbus/select.py +++ b/homeassistant/components/velbus/select.py @@ -17,7 +17,7 @@ async def async_setup_entry( async_add_entities: AddEntitiesCallback, ) -> None: """Set up Velbus select based on config_entry.""" - await entry.runtime_data.connect_task + await entry.runtime_data.scan_task async_add_entities( VelbusSelect(channel) for channel in entry.runtime_data.controller.get_all_select() diff --git a/homeassistant/components/velbus/sensor.py b/homeassistant/components/velbus/sensor.py index 598287839c1..2c341ea851d 100644 --- a/homeassistant/components/velbus/sensor.py +++ b/homeassistant/components/velbus/sensor.py @@ -22,7 +22,7 @@ async def async_setup_entry( async_add_entities: AddEntitiesCallback, ) -> None: """Set up Velbus switch based on config_entry.""" - await entry.runtime_data.connect_task + await entry.runtime_data.scan_task entities = [] for channel in entry.runtime_data.controller.get_all_sensor(): entities.append(VelbusSensor(channel)) diff --git a/homeassistant/components/velbus/switch.py b/homeassistant/components/velbus/switch.py index f3bd009d25e..dccb0a02ffa 100644 --- a/homeassistant/components/velbus/switch.py +++ b/homeassistant/components/velbus/switch.py @@ -18,7 +18,7 @@ async def async_setup_entry( async_add_entities: AddEntitiesCallback, ) -> None: """Set up Velbus switch based on config_entry.""" - await entry.runtime_data.connect_task + await entry.runtime_data.scan_task async_add_entities( VelbusSwitch(channel) for channel in entry.runtime_data.controller.get_all_switch()