Fibaro streamline hass.data entry (#100547)

* Fibaro streamline hass.data entry

* Fix tests
This commit is contained in:
rappenze 2023-09-18 20:22:23 +02:00 committed by GitHub
parent fa1a1715c9
commit ddd62a8f63
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 31 additions and 62 deletions

View file

@ -35,8 +35,6 @@ from .const import CONF_IMPORT_PLUGINS, DOMAIN
_LOGGER = logging.getLogger(__name__)
FIBARO_CONTROLLER = "fibaro_controller"
FIBARO_DEVICES = "fibaro_devices"
PLATFORMS = [
Platform.BINARY_SENSOR,
Platform.CLIMATE,
@ -377,12 +375,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
except FibaroAuthFailed as auth_ex:
raise ConfigEntryAuthFailed from auth_ex
data: dict[str, Any] = {}
hass.data.setdefault(DOMAIN, {})[entry.entry_id] = data
data[FIBARO_CONTROLLER] = controller
devices = data[FIBARO_DEVICES] = {}
for platform in PLATFORMS:
devices[platform] = [*controller.fibaro_devices[platform]]
hass.data.setdefault(DOMAIN, {})[entry.entry_id] = controller
# register the hub device info separately as the hub has sometimes no entities
device_registry = dr.async_get(hass)
@ -408,7 +401,7 @@ async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
_LOGGER.debug("Shutting down Fibaro connection")
unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
hass.data[DOMAIN][entry.entry_id][FIBARO_CONTROLLER].disable_state_handler()
hass.data[DOMAIN][entry.entry_id].disable_state_handler()
hass.data[DOMAIN].pop(entry.entry_id)
return unload_ok

View file

@ -16,7 +16,7 @@ from homeassistant.const import Platform
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from . import FIBARO_DEVICES, FibaroDevice
from . import FibaroController, FibaroDevice
from .const import DOMAIN
SENSOR_TYPES = {
@ -45,12 +45,11 @@ async def async_setup_entry(
async_add_entities: AddEntitiesCallback,
) -> None:
"""Perform the setup for Fibaro controller devices."""
controller: FibaroController = hass.data[DOMAIN][entry.entry_id]
async_add_entities(
[
FibaroBinarySensor(device)
for device in hass.data[DOMAIN][entry.entry_id][FIBARO_DEVICES][
Platform.BINARY_SENSOR
]
for device in controller.fibaro_devices[Platform.BINARY_SENSOR]
],
True,
)

View file

@ -21,7 +21,7 @@ from homeassistant.const import ATTR_TEMPERATURE, Platform, UnitOfTemperature
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from . import FIBARO_DEVICES, FibaroDevice
from . import FibaroController, FibaroDevice
from .const import DOMAIN
PRESET_RESUME = "resume"
@ -113,12 +113,11 @@ async def async_setup_entry(
async_add_entities: AddEntitiesCallback,
) -> None:
"""Perform the setup for Fibaro controller devices."""
controller: FibaroController = hass.data[DOMAIN][entry.entry_id]
async_add_entities(
[
FibaroThermostat(device)
for device in hass.data[DOMAIN][entry.entry_id][FIBARO_DEVICES][
Platform.CLIMATE
]
for device in controller.fibaro_devices[Platform.CLIMATE]
],
True,
)

View file

@ -17,7 +17,7 @@ from homeassistant.const import Platform
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from . import FIBARO_DEVICES, FibaroDevice
from . import FibaroController, FibaroDevice
from .const import DOMAIN
@ -27,13 +27,9 @@ async def async_setup_entry(
async_add_entities: AddEntitiesCallback,
) -> None:
"""Set up the Fibaro covers."""
controller: FibaroController = hass.data[DOMAIN][entry.entry_id]
async_add_entities(
[
FibaroCover(device)
for device in hass.data[DOMAIN][entry.entry_id][FIBARO_DEVICES][
Platform.COVER
]
],
[FibaroCover(device) for device in controller.fibaro_devices[Platform.COVER]],
True,
)

View file

@ -23,7 +23,7 @@ from homeassistant.const import Platform
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from . import FIBARO_DEVICES, FibaroDevice
from . import FibaroController, FibaroDevice
from .const import DOMAIN
PARALLEL_UPDATES = 2
@ -56,13 +56,9 @@ async def async_setup_entry(
async_add_entities: AddEntitiesCallback,
) -> None:
"""Perform the setup for Fibaro controller devices."""
controller: FibaroController = hass.data[DOMAIN][entry.entry_id]
async_add_entities(
[
FibaroLight(device)
for device in hass.data[DOMAIN][entry.entry_id][FIBARO_DEVICES][
Platform.LIGHT
]
],
[FibaroLight(device) for device in controller.fibaro_devices[Platform.LIGHT]],
True,
)

View file

@ -11,7 +11,7 @@ from homeassistant.const import Platform
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from . import FIBARO_DEVICES, FibaroDevice
from . import FibaroController, FibaroDevice
from .const import DOMAIN
@ -21,13 +21,9 @@ async def async_setup_entry(
async_add_entities: AddEntitiesCallback,
) -> None:
"""Set up the Fibaro locks."""
controller: FibaroController = hass.data[DOMAIN][entry.entry_id]
async_add_entities(
[
FibaroLock(device)
for device in hass.data[DOMAIN][entry.entry_id][FIBARO_DEVICES][
Platform.LOCK
]
],
[FibaroLock(device) for device in controller.fibaro_devices[Platform.LOCK]],
True,
)

View file

@ -13,7 +13,7 @@ from homeassistant.helpers.device_registry import DeviceInfo
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.util import slugify
from . import FIBARO_DEVICES, FibaroController
from . import FibaroController
from .const import DOMAIN
@ -23,13 +23,9 @@ async def async_setup_entry(
async_add_entities: AddEntitiesCallback,
) -> None:
"""Perform the setup for Fibaro scenes."""
controller: FibaroController = hass.data[DOMAIN][entry.entry_id]
async_add_entities(
[
FibaroScene(scene)
for scene in hass.data[DOMAIN][entry.entry_id][FIBARO_DEVICES][
Platform.SCENE
]
],
[FibaroScene(scene) for scene in controller.fibaro_devices[Platform.SCENE]],
True,
)

View file

@ -26,7 +26,7 @@ from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.util import convert
from . import FIBARO_DEVICES, FibaroDevice
from . import FibaroController, FibaroDevice
from .const import DOMAIN
# List of known sensors which represents a fibaro device
@ -107,7 +107,9 @@ async def async_setup_entry(
"""Set up the Fibaro controller devices."""
entities: list[SensorEntity] = []
for device in hass.data[DOMAIN][entry.entry_id][FIBARO_DEVICES][Platform.SENSOR]:
controller: FibaroController = hass.data[DOMAIN][entry.entry_id]
for device in controller.fibaro_devices[Platform.SENSOR]:
entity_description = MAIN_SENSOR_TYPES.get(device.type)
# main sensors are created even if the entity type is not known
@ -122,7 +124,7 @@ async def async_setup_entry(
Platform.SENSOR,
Platform.SWITCH,
):
for device in hass.data[DOMAIN][entry.entry_id][FIBARO_DEVICES][platform]:
for device in controller.fibaro_devices[platform]:
for entity_description in ADDITIONAL_SENSOR_TYPES:
if entity_description.key in device.properties:
entities.append(FibaroAdditionalSensor(device, entity_description))

View file

@ -11,7 +11,7 @@ from homeassistant.const import Platform
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from . import FIBARO_DEVICES, FibaroDevice
from . import FibaroController, FibaroDevice
from .const import DOMAIN
@ -21,13 +21,9 @@ async def async_setup_entry(
async_add_entities: AddEntitiesCallback,
) -> None:
"""Set up the Fibaro switches."""
controller: FibaroController = hass.data[DOMAIN][entry.entry_id]
async_add_entities(
[
FibaroSwitch(device)
for device in hass.data[DOMAIN][entry.entry_id][FIBARO_DEVICES][
Platform.SWITCH
]
],
[FibaroSwitch(device) for device in controller.fibaro_devices[Platform.SWITCH]],
True,
)

View file

@ -5,7 +5,7 @@ from unittest.mock import AsyncMock, Mock, patch
from pyfibaro.fibaro_scene import SceneModel
import pytest
from homeassistant.components.fibaro import DOMAIN, FIBARO_CONTROLLER, FIBARO_DEVICES
from homeassistant.components.fibaro import DOMAIN
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import Platform
from homeassistant.core import HomeAssistant
@ -47,16 +47,12 @@ async def setup_platform(
controller_mock = Mock()
controller_mock.hub_serial = "HC2-111111"
controller_mock.get_room_name.return_value = room_name
controller_mock.fibaro_devices = {Platform.SCENE: scenes}
for scene in scenes:
scene.fibaro_controller = controller_mock
hass.data[DOMAIN] = {
config_entry.entry_id: {
FIBARO_CONTROLLER: controller_mock,
FIBARO_DEVICES: {Platform.SCENE: scenes},
}
}
hass.data[DOMAIN] = {config_entry.entry_id: controller_mock}
await hass.config_entries.async_forward_entry_setup(config_entry, platform)
await hass.async_block_till_done()
return config_entry