mirror of
https://github.com/home-assistant/core.git
synced 2025-07-19 11:17:21 +00:00
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>
This commit is contained in:
parent
5f91676df0
commit
f03f24f036
@ -9,11 +9,12 @@ import os
|
|||||||
import shutil
|
import shutil
|
||||||
|
|
||||||
from velbusaio.controller import Velbus
|
from velbusaio.controller import Velbus
|
||||||
|
from velbusaio.exceptions import VelbusConnectionFailed
|
||||||
|
|
||||||
from homeassistant.config_entries import ConfigEntry
|
from homeassistant.config_entries import ConfigEntry
|
||||||
from homeassistant.const import CONF_PORT, Platform
|
from homeassistant.const import CONF_PORT, Platform
|
||||||
from homeassistant.core import HomeAssistant
|
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 import config_validation as cv, device_registry as dr
|
||||||
from homeassistant.helpers.storage import STORAGE_DIR
|
from homeassistant.helpers.storage import STORAGE_DIR
|
||||||
from homeassistant.helpers.typing import ConfigType
|
from homeassistant.helpers.typing import ConfigType
|
||||||
@ -44,13 +45,13 @@ class VelbusData:
|
|||||||
"""Runtime data for the Velbus config entry."""
|
"""Runtime data for the Velbus config entry."""
|
||||||
|
|
||||||
controller: Velbus
|
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
|
controller: Velbus, hass: HomeAssistant, entry_id: str
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Task to offload the long running connect."""
|
"""Task to offload the long running scan."""
|
||||||
try:
|
try:
|
||||||
await controller.start()
|
await controller.start()
|
||||||
except ConnectionError as ex:
|
except ConnectionError as ex:
|
||||||
@ -85,10 +86,13 @@ async def async_setup_entry(hass: HomeAssistant, entry: VelbusConfigEntry) -> bo
|
|||||||
entry.data[CONF_PORT],
|
entry.data[CONF_PORT],
|
||||||
cache_dir=hass.config.path(STORAGE_DIR, f"velbuscache-{entry.entry_id}"),
|
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))
|
task = hass.async_create_task(velbus_scan_task(controller, hass, entry.entry_id))
|
||||||
entry.runtime_data = VelbusData(controller=controller, connect_task=task)
|
entry.runtime_data = VelbusData(controller=controller, scan_task=task)
|
||||||
|
|
||||||
_migrate_device_identifiers(hass, entry.entry_id)
|
_migrate_device_identifiers(hass, entry.entry_id)
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@ async def async_setup_entry(
|
|||||||
async_add_entities: AddEntitiesCallback,
|
async_add_entities: AddEntitiesCallback,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Set up Velbus switch based on config_entry."""
|
"""Set up Velbus switch based on config_entry."""
|
||||||
await entry.runtime_data.connect_task
|
await entry.runtime_data.scan_task
|
||||||
async_add_entities(
|
async_add_entities(
|
||||||
VelbusBinarySensor(channel)
|
VelbusBinarySensor(channel)
|
||||||
for channel in entry.runtime_data.controller.get_all_binary_sensor()
|
for channel in entry.runtime_data.controller.get_all_binary_sensor()
|
||||||
|
@ -22,7 +22,7 @@ async def async_setup_entry(
|
|||||||
async_add_entities: AddEntitiesCallback,
|
async_add_entities: AddEntitiesCallback,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Set up Velbus switch based on config_entry."""
|
"""Set up Velbus switch based on config_entry."""
|
||||||
await entry.runtime_data.connect_task
|
await entry.runtime_data.scan_task
|
||||||
async_add_entities(
|
async_add_entities(
|
||||||
VelbusButton(channel)
|
VelbusButton(channel)
|
||||||
for channel in entry.runtime_data.controller.get_all_button()
|
for channel in entry.runtime_data.controller.get_all_button()
|
||||||
|
@ -27,7 +27,7 @@ async def async_setup_entry(
|
|||||||
async_add_entities: AddEntitiesCallback,
|
async_add_entities: AddEntitiesCallback,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Set up Velbus switch based on config_entry."""
|
"""Set up Velbus switch based on config_entry."""
|
||||||
await entry.runtime_data.connect_task
|
await entry.runtime_data.scan_task
|
||||||
async_add_entities(
|
async_add_entities(
|
||||||
VelbusClimate(channel)
|
VelbusClimate(channel)
|
||||||
for channel in entry.runtime_data.controller.get_all_climate()
|
for channel in entry.runtime_data.controller.get_all_climate()
|
||||||
|
@ -24,7 +24,7 @@ async def async_setup_entry(
|
|||||||
async_add_entities: AddEntitiesCallback,
|
async_add_entities: AddEntitiesCallback,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Set up Velbus switch based on config_entry."""
|
"""Set up Velbus switch based on config_entry."""
|
||||||
await entry.runtime_data.connect_task
|
await entry.runtime_data.scan_task
|
||||||
async_add_entities(
|
async_add_entities(
|
||||||
VelbusCover(channel)
|
VelbusCover(channel)
|
||||||
for channel in entry.runtime_data.controller.get_all_cover()
|
for channel in entry.runtime_data.controller.get_all_cover()
|
||||||
|
@ -35,7 +35,7 @@ async def async_setup_entry(
|
|||||||
async_add_entities: AddEntitiesCallback,
|
async_add_entities: AddEntitiesCallback,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Set up Velbus switch based on config_entry."""
|
"""Set up Velbus switch based on config_entry."""
|
||||||
await entry.runtime_data.connect_task
|
await entry.runtime_data.scan_task
|
||||||
entities: list[Entity] = [
|
entities: list[Entity] = [
|
||||||
VelbusLight(channel)
|
VelbusLight(channel)
|
||||||
for channel in entry.runtime_data.controller.get_all_light()
|
for channel in entry.runtime_data.controller.get_all_light()
|
||||||
|
@ -25,7 +25,7 @@ rules:
|
|||||||
has-entity-name: todo
|
has-entity-name: todo
|
||||||
runtime-data: done
|
runtime-data: done
|
||||||
test-before-configure: done
|
test-before-configure: done
|
||||||
test-before-setup: todo
|
test-before-setup: done
|
||||||
unique-config-entry:
|
unique-config-entry:
|
||||||
status: todo
|
status: todo
|
||||||
comment: |
|
comment: |
|
||||||
|
@ -17,7 +17,7 @@ async def async_setup_entry(
|
|||||||
async_add_entities: AddEntitiesCallback,
|
async_add_entities: AddEntitiesCallback,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Set up Velbus select based on config_entry."""
|
"""Set up Velbus select based on config_entry."""
|
||||||
await entry.runtime_data.connect_task
|
await entry.runtime_data.scan_task
|
||||||
async_add_entities(
|
async_add_entities(
|
||||||
VelbusSelect(channel)
|
VelbusSelect(channel)
|
||||||
for channel in entry.runtime_data.controller.get_all_select()
|
for channel in entry.runtime_data.controller.get_all_select()
|
||||||
|
@ -22,7 +22,7 @@ async def async_setup_entry(
|
|||||||
async_add_entities: AddEntitiesCallback,
|
async_add_entities: AddEntitiesCallback,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Set up Velbus switch based on config_entry."""
|
"""Set up Velbus switch based on config_entry."""
|
||||||
await entry.runtime_data.connect_task
|
await entry.runtime_data.scan_task
|
||||||
entities = []
|
entities = []
|
||||||
for channel in entry.runtime_data.controller.get_all_sensor():
|
for channel in entry.runtime_data.controller.get_all_sensor():
|
||||||
entities.append(VelbusSensor(channel))
|
entities.append(VelbusSensor(channel))
|
||||||
|
@ -18,7 +18,7 @@ async def async_setup_entry(
|
|||||||
async_add_entities: AddEntitiesCallback,
|
async_add_entities: AddEntitiesCallback,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Set up Velbus switch based on config_entry."""
|
"""Set up Velbus switch based on config_entry."""
|
||||||
await entry.runtime_data.connect_task
|
await entry.runtime_data.scan_task
|
||||||
async_add_entities(
|
async_add_entities(
|
||||||
VelbusSwitch(channel)
|
VelbusSwitch(channel)
|
||||||
for channel in entry.runtime_data.controller.get_all_switch()
|
for channel in entry.runtime_data.controller.get_all_switch()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user