Use platform enum consistently in fibaro integration (#69035)

This commit is contained in:
rappenze 2022-04-26 20:08:41 +02:00 committed by GitHub
parent 853b57e7cf
commit e894ffecd8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 80 additions and 56 deletions

View file

@ -60,26 +60,26 @@ PLATFORMS = [
]
FIBARO_TYPEMAP = {
"com.fibaro.multilevelSensor": "sensor",
"com.fibaro.binarySwitch": "switch",
"com.fibaro.multilevelSwitch": "switch",
"com.fibaro.FGD212": "light",
"com.fibaro.FGR": "cover",
"com.fibaro.doorSensor": "binary_sensor",
"com.fibaro.doorWindowSensor": "binary_sensor",
"com.fibaro.FGMS001": "binary_sensor",
"com.fibaro.heatDetector": "binary_sensor",
"com.fibaro.lifeDangerSensor": "binary_sensor",
"com.fibaro.smokeSensor": "binary_sensor",
"com.fibaro.remoteSwitch": "switch",
"com.fibaro.sensor": "sensor",
"com.fibaro.colorController": "light",
"com.fibaro.securitySensor": "binary_sensor",
"com.fibaro.hvac": "climate",
"com.fibaro.setpoint": "climate",
"com.fibaro.FGT001": "climate",
"com.fibaro.thermostatDanfoss": "climate",
"com.fibaro.doorLock": "lock",
"com.fibaro.multilevelSensor": Platform.SENSOR,
"com.fibaro.binarySwitch": Platform.SWITCH,
"com.fibaro.multilevelSwitch": Platform.SWITCH,
"com.fibaro.FGD212": Platform.LIGHT,
"com.fibaro.FGR": Platform.COVER,
"com.fibaro.doorSensor": Platform.BINARY_SENSOR,
"com.fibaro.doorWindowSensor": Platform.BINARY_SENSOR,
"com.fibaro.FGMS001": Platform.BINARY_SENSOR,
"com.fibaro.heatDetector": Platform.BINARY_SENSOR,
"com.fibaro.lifeDangerSensor": Platform.BINARY_SENSOR,
"com.fibaro.smokeSensor": Platform.BINARY_SENSOR,
"com.fibaro.remoteSwitch": Platform.SWITCH,
"com.fibaro.sensor": Platform.SENSOR,
"com.fibaro.colorController": Platform.LIGHT,
"com.fibaro.securitySensor": Platform.BINARY_SENSOR,
"com.fibaro.hvac": Platform.CLIMATE,
"com.fibaro.setpoint": Platform.CLIMATE,
"com.fibaro.FGT001": Platform.CLIMATE,
"com.fibaro.thermostatDanfoss": Platform.CLIMATE,
"com.fibaro.doorLock": Platform.LOCK,
}
DEVICE_CONFIG_SCHEMA_ENTRY = vol.Schema(
@ -158,9 +158,9 @@ class FibaroController:
self._import_plugins = config[CONF_IMPORT_PLUGINS]
self._room_map = None # Mapping roomId to room object
self._device_map = None # Mapping deviceId to device object
self.fibaro_devices: dict[str, list] = defaultdict(
self.fibaro_devices: dict[Platform, list] = defaultdict(
list
) # List of devices by type
) # List of devices by entity platform
self._callbacks: dict[Any, Any] = {} # Update value callbacks by deviceId
self._state_handler = None # Fiblary's StateHandler object
self.hub_serial = None # Unique serial number of the hub
@ -282,35 +282,35 @@ class FibaroController:
return self.get_children(self._device_map[device.id].parentId)
@staticmethod
def _map_device_to_type(device):
def _map_device_to_platform(device: Any) -> Platform | None:
"""Map device to HA device type."""
# Use our lookup table to identify device type
device_type = None
platform: Platform | None = None
if "type" in device:
device_type = FIBARO_TYPEMAP.get(device.type)
if device_type is None and "baseType" in device:
device_type = FIBARO_TYPEMAP.get(device.baseType)
platform = FIBARO_TYPEMAP.get(device.type)
if platform is None and "baseType" in device:
platform = FIBARO_TYPEMAP.get(device.baseType)
# We can also identify device type by its capabilities
if device_type is None:
if platform is None:
if "setBrightness" in device.actions:
device_type = "light"
platform = Platform.LIGHT
elif "turnOn" in device.actions:
device_type = "switch"
platform = Platform.SWITCH
elif "open" in device.actions:
device_type = "cover"
platform = Platform.COVER
elif "secure" in device.actions:
device_type = "lock"
platform = Platform.LOCK
elif "value" in device.properties:
if device.properties.value in ("true", "false"):
device_type = "binary_sensor"
platform = Platform.BINARY_SENSOR
else:
device_type = "sensor"
platform = Platform.SENSOR
# Switches that control lights should show up as lights
if device_type == "switch" and device.properties.get("isLight", False):
device_type = "light"
return device_type
if platform == Platform.SWITCH and device.properties.get("isLight", False):
platform = Platform.LIGHT
return platform
def _read_scenes(self):
scenes = self._client.scenes.list()
@ -330,7 +330,7 @@ class FibaroController:
)
device.unique_id_str = f"{self.hub_serial}.scene.{device.id}"
self._scene_map[device.id] = device
self.fibaro_devices["scene"].append(device)
self.fibaro_devices[Platform.SCENE].append(device)
_LOGGER.debug("%s scene -> %s", device.ha_id, device)
def _read_devices(self):
@ -357,10 +357,10 @@ class FibaroController:
"isPlugin" not in device
or (not device.isPlugin or self._import_plugins)
):
device.mapped_type = self._map_device_to_type(device)
device.mapped_platform = self._map_device_to_platform(device)
else:
device.mapped_type = None
if (dtype := device.mapped_type) is None:
device.mapped_platform = None
if (platform := device.mapped_platform) is None:
continue
device.unique_id_str = f"{self.hub_serial}.{device.id}"
self._device_map[device.id] = device
@ -369,11 +369,11 @@ class FibaroController:
device.ha_id,
device.type,
device.baseType,
dtype,
platform,
str(device),
)
if dtype != "climate":
self.fibaro_devices[dtype].append(device)
if platform != Platform.CLIMATE:
self.fibaro_devices[platform].append(device)
continue
# We group climate devices into groups with the same
# endPointID belonging to the same parent device.
@ -394,7 +394,7 @@ class FibaroController:
and last_endpoint != device.properties.endPointId
):
_LOGGER.debug("Handle separately")
self.fibaro_devices[dtype].append(device)
self.fibaro_devices[platform].append(device)
last_climate_parent = device.parentId
if "endPointId" in device.properties:
last_endpoint = device.properties.endPointId

View file

@ -7,6 +7,7 @@ from homeassistant.components.binary_sensor import (
BinarySensorEntity,
)
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import Platform
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback
@ -38,7 +39,7 @@ async def async_setup_entry(
[
FibaroBinarySensor(device)
for device in hass.data[DOMAIN][entry.entry_id][FIBARO_DEVICES][
"binary_sensor"
Platform.BINARY_SENSOR
]
],
True,

View file

@ -11,7 +11,12 @@ from homeassistant.components.climate.const import (
HVACMode,
)
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import ATTR_TEMPERATURE, TEMP_CELSIUS, TEMP_FAHRENHEIT
from homeassistant.const import (
ATTR_TEMPERATURE,
TEMP_CELSIUS,
TEMP_FAHRENHEIT,
Platform,
)
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback
@ -101,7 +106,9 @@ async def async_setup_entry(
async_add_entities(
[
FibaroThermostat(device)
for device in hass.data[DOMAIN][entry.entry_id][FIBARO_DEVICES]["climate"]
for device in hass.data[DOMAIN][entry.entry_id][FIBARO_DEVICES][
Platform.CLIMATE
]
],
True,
)

View file

@ -8,6 +8,7 @@ from homeassistant.components.cover import (
CoverEntity,
)
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import Platform
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback
@ -24,7 +25,9 @@ async def async_setup_entry(
async_add_entities(
[
FibaroCover(device)
for device in hass.data[DOMAIN][entry.entry_id][FIBARO_DEVICES]["cover"]
for device in hass.data[DOMAIN][entry.entry_id][FIBARO_DEVICES][
Platform.COVER
]
],
True,
)

View file

@ -16,6 +16,7 @@ from homeassistant.components.light import (
color_supported,
)
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import Platform
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback
@ -53,7 +54,9 @@ async def async_setup_entry(
async_add_entities(
[
FibaroLight(device)
for device in hass.data[DOMAIN][entry.entry_id][FIBARO_DEVICES]["light"]
for device in hass.data[DOMAIN][entry.entry_id][FIBARO_DEVICES][
Platform.LIGHT
]
],
True,
)

View file

@ -3,6 +3,7 @@ from __future__ import annotations
from homeassistant.components.lock import ENTITY_ID_FORMAT, LockEntity
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import Platform
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback
@ -19,7 +20,9 @@ async def async_setup_entry(
async_add_entities(
[
FibaroLock(device)
for device in hass.data[DOMAIN][entry.entry_id][FIBARO_DEVICES]["lock"]
for device in hass.data[DOMAIN][entry.entry_id][FIBARO_DEVICES][
Platform.LOCK
]
],
True,
)

View file

@ -5,6 +5,7 @@ from typing import Any
from homeassistant.components.scene import Scene
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import Platform
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback
@ -21,7 +22,9 @@ async def async_setup_entry(
async_add_entities(
[
FibaroScene(scene)
for scene in hass.data[DOMAIN][entry.entry_id][FIBARO_DEVICES]["scene"]
for scene in hass.data[DOMAIN][entry.entry_id][FIBARO_DEVICES][
Platform.SCENE
]
],
True,
)

View file

@ -18,6 +18,7 @@ from homeassistant.const import (
POWER_WATT,
TEMP_CELSIUS,
TEMP_FAHRENHEIT,
Platform,
)
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback
@ -63,10 +64,10 @@ async def async_setup_entry(
) -> None:
"""Set up the Fibaro controller devices."""
entities: list[SensorEntity] = []
for device in hass.data[DOMAIN][entry.entry_id][FIBARO_DEVICES]["sensor"]:
for device in hass.data[DOMAIN][entry.entry_id][FIBARO_DEVICES][Platform.SENSOR]:
entities.append(FibaroSensor(device))
for device_type in ("cover", "light", "switch"):
for device in hass.data[DOMAIN][entry.entry_id][FIBARO_DEVICES][device_type]:
for platform in (Platform.COVER, Platform.LIGHT, Platform.SWITCH):
for device in hass.data[DOMAIN][entry.entry_id][FIBARO_DEVICES][platform]:
if "energy" in device.interfaces:
entities.append(FibaroEnergySensor(device))
if "power" in device.interfaces:

View file

@ -3,6 +3,7 @@ from __future__ import annotations
from homeassistant.components.switch import ENTITY_ID_FORMAT, SwitchEntity
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import Platform
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback
@ -19,7 +20,9 @@ async def async_setup_entry(
async_add_entities(
[
FibaroSwitch(device)
for device in hass.data[DOMAIN][entry.entry_id][FIBARO_DEVICES]["switch"]
for device in hass.data[DOMAIN][entry.entry_id][FIBARO_DEVICES][
Platform.SWITCH
]
],
True,
)