mirror of
https://github.com/home-assistant/core.git
synced 2025-07-16 09:47:13 +00:00
Remove ZHA establish device mappings function (#30423)
* remove establish_device_mappings * inline init
This commit is contained in:
parent
4c6e10a988
commit
ef8eefc7a0
@ -27,7 +27,6 @@ from .core.const import (
|
|||||||
DOMAIN,
|
DOMAIN,
|
||||||
RadioType,
|
RadioType,
|
||||||
)
|
)
|
||||||
from .core.registries import establish_device_mappings
|
|
||||||
|
|
||||||
DEVICE_CONFIG_SCHEMA_ENTRY = vol.Schema({vol.Optional(ha_const.CONF_TYPE): cv.string})
|
DEVICE_CONFIG_SCHEMA_ENTRY = vol.Schema({vol.Optional(ha_const.CONF_TYPE): cv.string})
|
||||||
|
|
||||||
@ -87,7 +86,6 @@ async def async_setup_entry(hass, config_entry):
|
|||||||
|
|
||||||
Will automatically load components to support devices found on the network.
|
Will automatically load components to support devices found on the network.
|
||||||
"""
|
"""
|
||||||
establish_device_mappings()
|
|
||||||
|
|
||||||
for component in COMPONENTS:
|
for component in COMPONENTS:
|
||||||
hass.data[DATA_ZHA][component] = hass.data[DATA_ZHA].get(component, {})
|
hass.data[DATA_ZHA][component] = hass.data[DATA_ZHA].get(component, {})
|
||||||
|
@ -33,24 +33,117 @@ from . import channels # noqa: F401 pylint: disable=unused-import
|
|||||||
from .const import CONTROLLER, ZHA_GW_RADIO, ZHA_GW_RADIO_DESCRIPTION, RadioType
|
from .const import CONTROLLER, ZHA_GW_RADIO, ZHA_GW_RADIO_DESCRIPTION, RadioType
|
||||||
from .decorators import CALLABLE_T, DictRegistry, SetRegistry
|
from .decorators import CALLABLE_T, DictRegistry, SetRegistry
|
||||||
|
|
||||||
|
SMARTTHINGS_ACCELERATION_CLUSTER = 0xFC02
|
||||||
|
SMARTTHINGS_ARRIVAL_SENSOR_DEVICE_TYPE = 0x8000
|
||||||
|
SMARTTHINGS_HUMIDITY_CLUSTER = 0xFC45
|
||||||
|
|
||||||
|
REMOTE_DEVICE_TYPES = {
|
||||||
|
zigpy.profiles.zha.PROFILE_ID: [
|
||||||
|
zigpy.profiles.zha.DeviceType.COLOR_CONTROLLER,
|
||||||
|
zigpy.profiles.zha.DeviceType.COLOR_DIMMER_SWITCH,
|
||||||
|
zigpy.profiles.zha.DeviceType.COLOR_SCENE_CONTROLLER,
|
||||||
|
zigpy.profiles.zha.DeviceType.DIMMER_SWITCH,
|
||||||
|
zigpy.profiles.zha.DeviceType.NON_COLOR_CONTROLLER,
|
||||||
|
zigpy.profiles.zha.DeviceType.NON_COLOR_SCENE_CONTROLLER,
|
||||||
|
zigpy.profiles.zha.DeviceType.REMOTE_CONTROL,
|
||||||
|
zigpy.profiles.zha.DeviceType.SCENE_SELECTOR,
|
||||||
|
],
|
||||||
|
zigpy.profiles.zll.PROFILE_ID: [
|
||||||
|
zigpy.profiles.zll.DeviceType.COLOR_CONTROLLER,
|
||||||
|
zigpy.profiles.zll.DeviceType.COLOR_SCENE_CONTROLLER,
|
||||||
|
zigpy.profiles.zll.DeviceType.CONTROL_BRIDGE,
|
||||||
|
zigpy.profiles.zll.DeviceType.CONTROLLER,
|
||||||
|
zigpy.profiles.zll.DeviceType.SCENE_CONTROLLER,
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
||||||
|
SINGLE_INPUT_CLUSTER_DEVICE_CLASS = {
|
||||||
|
# this works for now but if we hit conflicts we can break it out to
|
||||||
|
# a different dict that is keyed by manufacturer
|
||||||
|
SMARTTHINGS_ACCELERATION_CLUSTER: BINARY_SENSOR,
|
||||||
|
SMARTTHINGS_HUMIDITY_CLUSTER: SENSOR,
|
||||||
|
zcl.clusters.closures.DoorLock: LOCK,
|
||||||
|
zcl.clusters.general.AnalogInput.cluster_id: SENSOR,
|
||||||
|
zcl.clusters.general.MultistateInput.cluster_id: SENSOR,
|
||||||
|
zcl.clusters.general.OnOff: SWITCH,
|
||||||
|
zcl.clusters.general.PowerConfiguration: SENSOR,
|
||||||
|
zcl.clusters.homeautomation.ElectricalMeasurement: SENSOR,
|
||||||
|
zcl.clusters.hvac.Fan: FAN,
|
||||||
|
zcl.clusters.measurement.IlluminanceMeasurement: SENSOR,
|
||||||
|
zcl.clusters.measurement.OccupancySensing: BINARY_SENSOR,
|
||||||
|
zcl.clusters.measurement.PressureMeasurement: SENSOR,
|
||||||
|
zcl.clusters.measurement.RelativeHumidity: SENSOR,
|
||||||
|
zcl.clusters.measurement.TemperatureMeasurement: SENSOR,
|
||||||
|
zcl.clusters.security.IasZone: BINARY_SENSOR,
|
||||||
|
zcl.clusters.smartenergy.Metering: SENSOR,
|
||||||
|
}
|
||||||
|
|
||||||
|
SINGLE_OUTPUT_CLUSTER_DEVICE_CLASS = {zcl.clusters.general.OnOff: BINARY_SENSOR}
|
||||||
|
|
||||||
|
SWITCH_CLUSTERS = SetRegistry()
|
||||||
|
|
||||||
BINARY_SENSOR_CLUSTERS = SetRegistry()
|
BINARY_SENSOR_CLUSTERS = SetRegistry()
|
||||||
|
BINARY_SENSOR_CLUSTERS.add(SMARTTHINGS_ACCELERATION_CLUSTER)
|
||||||
|
|
||||||
BINDABLE_CLUSTERS = SetRegistry()
|
BINDABLE_CLUSTERS = SetRegistry()
|
||||||
CHANNEL_ONLY_CLUSTERS = SetRegistry()
|
CHANNEL_ONLY_CLUSTERS = SetRegistry()
|
||||||
CLUSTER_REPORT_CONFIGS = {}
|
CLUSTER_REPORT_CONFIGS = {}
|
||||||
CUSTOM_CLUSTER_MAPPINGS = {}
|
CUSTOM_CLUSTER_MAPPINGS = {}
|
||||||
DEVICE_CLASS = collections.defaultdict(dict)
|
|
||||||
|
DEVICE_CLASS = {
|
||||||
|
zigpy.profiles.zha.PROFILE_ID: {
|
||||||
|
SMARTTHINGS_ARRIVAL_SENSOR_DEVICE_TYPE: DEVICE_TRACKER,
|
||||||
|
zigpy.profiles.zha.DeviceType.COLOR_DIMMABLE_LIGHT: LIGHT,
|
||||||
|
zigpy.profiles.zha.DeviceType.COLOR_TEMPERATURE_LIGHT: LIGHT,
|
||||||
|
zigpy.profiles.zha.DeviceType.DIMMABLE_BALLAST: LIGHT,
|
||||||
|
zigpy.profiles.zha.DeviceType.DIMMABLE_LIGHT: LIGHT,
|
||||||
|
zigpy.profiles.zha.DeviceType.DIMMABLE_PLUG_IN_UNIT: LIGHT,
|
||||||
|
zigpy.profiles.zha.DeviceType.EXTENDED_COLOR_LIGHT: LIGHT,
|
||||||
|
zigpy.profiles.zha.DeviceType.LEVEL_CONTROLLABLE_OUTPUT: LIGHT,
|
||||||
|
zigpy.profiles.zha.DeviceType.ON_OFF_BALLAST: SWITCH,
|
||||||
|
zigpy.profiles.zha.DeviceType.ON_OFF_LIGHT: LIGHT,
|
||||||
|
zigpy.profiles.zha.DeviceType.ON_OFF_LIGHT_SWITCH: SWITCH,
|
||||||
|
zigpy.profiles.zha.DeviceType.ON_OFF_PLUG_IN_UNIT: SWITCH,
|
||||||
|
zigpy.profiles.zha.DeviceType.SMART_PLUG: SWITCH,
|
||||||
|
},
|
||||||
|
zigpy.profiles.zll.PROFILE_ID: {
|
||||||
|
zigpy.profiles.zll.DeviceType.COLOR_LIGHT: LIGHT,
|
||||||
|
zigpy.profiles.zll.DeviceType.COLOR_TEMPERATURE_LIGHT: LIGHT,
|
||||||
|
zigpy.profiles.zll.DeviceType.DIMMABLE_LIGHT: LIGHT,
|
||||||
|
zigpy.profiles.zll.DeviceType.DIMMABLE_PLUGIN_UNIT: LIGHT,
|
||||||
|
zigpy.profiles.zll.DeviceType.EXTENDED_COLOR_LIGHT: LIGHT,
|
||||||
|
zigpy.profiles.zll.DeviceType.ON_OFF_LIGHT: LIGHT,
|
||||||
|
zigpy.profiles.zll.DeviceType.ON_OFF_PLUGIN_UNIT: SWITCH,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
DEVICE_TRACKER_CLUSTERS = SetRegistry()
|
DEVICE_TRACKER_CLUSTERS = SetRegistry()
|
||||||
EVENT_RELAY_CLUSTERS = SetRegistry()
|
EVENT_RELAY_CLUSTERS = SetRegistry()
|
||||||
LIGHT_CLUSTERS = SetRegistry()
|
LIGHT_CLUSTERS = SetRegistry()
|
||||||
OUTPUT_CHANNEL_ONLY_CLUSTERS = SetRegistry()
|
OUTPUT_CHANNEL_ONLY_CLUSTERS = SetRegistry()
|
||||||
RADIO_TYPES = {}
|
|
||||||
REMOTE_DEVICE_TYPES = collections.defaultdict(list)
|
RADIO_TYPES = {
|
||||||
SINGLE_INPUT_CLUSTER_DEVICE_CLASS = {}
|
RadioType.ezsp.name: {
|
||||||
SINGLE_OUTPUT_CLUSTER_DEVICE_CLASS = {}
|
ZHA_GW_RADIO: bellows.ezsp.EZSP,
|
||||||
SWITCH_CLUSTERS = SetRegistry()
|
CONTROLLER: bellows.zigbee.application.ControllerApplication,
|
||||||
SMARTTHINGS_ACCELERATION_CLUSTER = 0xFC02
|
ZHA_GW_RADIO_DESCRIPTION: "EZSP",
|
||||||
SMARTTHINGS_ARRIVAL_SENSOR_DEVICE_TYPE = 0x8000
|
},
|
||||||
SMARTTHINGS_HUMIDITY_CLUSTER = 0xFC45
|
RadioType.deconz.name: {
|
||||||
|
ZHA_GW_RADIO: zigpy_deconz.api.Deconz,
|
||||||
|
CONTROLLER: zigpy_deconz.zigbee.application.ControllerApplication,
|
||||||
|
ZHA_GW_RADIO_DESCRIPTION: "Deconz",
|
||||||
|
},
|
||||||
|
RadioType.xbee.name: {
|
||||||
|
ZHA_GW_RADIO: zigpy_xbee.api.XBee,
|
||||||
|
CONTROLLER: zigpy_xbee.zigbee.application.ControllerApplication,
|
||||||
|
ZHA_GW_RADIO_DESCRIPTION: "XBee",
|
||||||
|
},
|
||||||
|
RadioType.zigate.name: {
|
||||||
|
ZHA_GW_RADIO: zigpy_zigate.api.ZiGate,
|
||||||
|
CONTROLLER: zigpy_zigate.zigbee.application.ControllerApplication,
|
||||||
|
ZHA_GW_RADIO_DESCRIPTION: "ZiGate",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
COMPONENT_CLUSTERS = {
|
COMPONENT_CLUSTERS = {
|
||||||
BINARY_SENSOR: BINARY_SENSOR_CLUSTERS,
|
BINARY_SENSOR: BINARY_SENSOR_CLUSTERS,
|
||||||
@ -62,115 +155,6 @@ COMPONENT_CLUSTERS = {
|
|||||||
ZIGBEE_CHANNEL_REGISTRY = DictRegistry()
|
ZIGBEE_CHANNEL_REGISTRY = DictRegistry()
|
||||||
|
|
||||||
|
|
||||||
def establish_device_mappings():
|
|
||||||
"""Establish mappings between ZCL objects and HA ZHA objects.
|
|
||||||
|
|
||||||
These cannot be module level, as importing bellows must be done in a
|
|
||||||
in a function.
|
|
||||||
"""
|
|
||||||
RADIO_TYPES[RadioType.ezsp.name] = {
|
|
||||||
ZHA_GW_RADIO: bellows.ezsp.EZSP,
|
|
||||||
CONTROLLER: bellows.zigbee.application.ControllerApplication,
|
|
||||||
ZHA_GW_RADIO_DESCRIPTION: "EZSP",
|
|
||||||
}
|
|
||||||
|
|
||||||
RADIO_TYPES[RadioType.deconz.name] = {
|
|
||||||
ZHA_GW_RADIO: zigpy_deconz.api.Deconz,
|
|
||||||
CONTROLLER: zigpy_deconz.zigbee.application.ControllerApplication,
|
|
||||||
ZHA_GW_RADIO_DESCRIPTION: "Deconz",
|
|
||||||
}
|
|
||||||
|
|
||||||
RADIO_TYPES[RadioType.xbee.name] = {
|
|
||||||
ZHA_GW_RADIO: zigpy_xbee.api.XBee,
|
|
||||||
CONTROLLER: zigpy_xbee.zigbee.application.ControllerApplication,
|
|
||||||
ZHA_GW_RADIO_DESCRIPTION: "XBee",
|
|
||||||
}
|
|
||||||
|
|
||||||
RADIO_TYPES[RadioType.zigate.name] = {
|
|
||||||
ZHA_GW_RADIO: zigpy_zigate.api.ZiGate,
|
|
||||||
CONTROLLER: zigpy_zigate.zigbee.application.ControllerApplication,
|
|
||||||
ZHA_GW_RADIO_DESCRIPTION: "ZiGate",
|
|
||||||
}
|
|
||||||
|
|
||||||
BINARY_SENSOR_CLUSTERS.add(SMARTTHINGS_ACCELERATION_CLUSTER)
|
|
||||||
|
|
||||||
DEVICE_CLASS[zigpy.profiles.zha.PROFILE_ID].update(
|
|
||||||
{
|
|
||||||
SMARTTHINGS_ARRIVAL_SENSOR_DEVICE_TYPE: DEVICE_TRACKER,
|
|
||||||
zigpy.profiles.zha.DeviceType.COLOR_DIMMABLE_LIGHT: LIGHT,
|
|
||||||
zigpy.profiles.zha.DeviceType.COLOR_TEMPERATURE_LIGHT: LIGHT,
|
|
||||||
zigpy.profiles.zha.DeviceType.DIMMABLE_BALLAST: LIGHT,
|
|
||||||
zigpy.profiles.zha.DeviceType.DIMMABLE_LIGHT: LIGHT,
|
|
||||||
zigpy.profiles.zha.DeviceType.DIMMABLE_PLUG_IN_UNIT: LIGHT,
|
|
||||||
zigpy.profiles.zha.DeviceType.EXTENDED_COLOR_LIGHT: LIGHT,
|
|
||||||
zigpy.profiles.zha.DeviceType.LEVEL_CONTROLLABLE_OUTPUT: LIGHT,
|
|
||||||
zigpy.profiles.zha.DeviceType.ON_OFF_BALLAST: SWITCH,
|
|
||||||
zigpy.profiles.zha.DeviceType.ON_OFF_LIGHT: LIGHT,
|
|
||||||
zigpy.profiles.zha.DeviceType.ON_OFF_LIGHT_SWITCH: SWITCH,
|
|
||||||
zigpy.profiles.zha.DeviceType.ON_OFF_PLUG_IN_UNIT: SWITCH,
|
|
||||||
zigpy.profiles.zha.DeviceType.SMART_PLUG: SWITCH,
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
DEVICE_CLASS[zigpy.profiles.zll.PROFILE_ID].update(
|
|
||||||
{
|
|
||||||
zigpy.profiles.zll.DeviceType.COLOR_LIGHT: LIGHT,
|
|
||||||
zigpy.profiles.zll.DeviceType.COLOR_TEMPERATURE_LIGHT: LIGHT,
|
|
||||||
zigpy.profiles.zll.DeviceType.DIMMABLE_LIGHT: LIGHT,
|
|
||||||
zigpy.profiles.zll.DeviceType.DIMMABLE_PLUGIN_UNIT: LIGHT,
|
|
||||||
zigpy.profiles.zll.DeviceType.EXTENDED_COLOR_LIGHT: LIGHT,
|
|
||||||
zigpy.profiles.zll.DeviceType.ON_OFF_LIGHT: LIGHT,
|
|
||||||
zigpy.profiles.zll.DeviceType.ON_OFF_PLUGIN_UNIT: SWITCH,
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
SINGLE_INPUT_CLUSTER_DEVICE_CLASS.update(
|
|
||||||
{
|
|
||||||
# this works for now but if we hit conflicts we can break it out to
|
|
||||||
# a different dict that is keyed by manufacturer
|
|
||||||
SMARTTHINGS_ACCELERATION_CLUSTER: BINARY_SENSOR,
|
|
||||||
SMARTTHINGS_HUMIDITY_CLUSTER: SENSOR,
|
|
||||||
zcl.clusters.closures.DoorLock: LOCK,
|
|
||||||
zcl.clusters.general.AnalogInput.cluster_id: SENSOR,
|
|
||||||
zcl.clusters.general.MultistateInput.cluster_id: SENSOR,
|
|
||||||
zcl.clusters.general.OnOff: SWITCH,
|
|
||||||
zcl.clusters.general.PowerConfiguration: SENSOR,
|
|
||||||
zcl.clusters.homeautomation.ElectricalMeasurement: SENSOR,
|
|
||||||
zcl.clusters.hvac.Fan: FAN,
|
|
||||||
zcl.clusters.measurement.IlluminanceMeasurement: SENSOR,
|
|
||||||
zcl.clusters.measurement.OccupancySensing: BINARY_SENSOR,
|
|
||||||
zcl.clusters.measurement.PressureMeasurement: SENSOR,
|
|
||||||
zcl.clusters.measurement.RelativeHumidity: SENSOR,
|
|
||||||
zcl.clusters.measurement.TemperatureMeasurement: SENSOR,
|
|
||||||
zcl.clusters.security.IasZone: BINARY_SENSOR,
|
|
||||||
zcl.clusters.smartenergy.Metering: SENSOR,
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
SINGLE_OUTPUT_CLUSTER_DEVICE_CLASS.update(
|
|
||||||
{zcl.clusters.general.OnOff: BINARY_SENSOR}
|
|
||||||
)
|
|
||||||
|
|
||||||
zha = zigpy.profiles.zha
|
|
||||||
REMOTE_DEVICE_TYPES[zha.PROFILE_ID].append(zha.DeviceType.COLOR_CONTROLLER)
|
|
||||||
REMOTE_DEVICE_TYPES[zha.PROFILE_ID].append(zha.DeviceType.COLOR_DIMMER_SWITCH)
|
|
||||||
REMOTE_DEVICE_TYPES[zha.PROFILE_ID].append(zha.DeviceType.COLOR_SCENE_CONTROLLER)
|
|
||||||
REMOTE_DEVICE_TYPES[zha.PROFILE_ID].append(zha.DeviceType.DIMMER_SWITCH)
|
|
||||||
REMOTE_DEVICE_TYPES[zha.PROFILE_ID].append(zha.DeviceType.NON_COLOR_CONTROLLER)
|
|
||||||
REMOTE_DEVICE_TYPES[zha.PROFILE_ID].append(
|
|
||||||
zha.DeviceType.NON_COLOR_SCENE_CONTROLLER
|
|
||||||
)
|
|
||||||
REMOTE_DEVICE_TYPES[zha.PROFILE_ID].append(zha.DeviceType.REMOTE_CONTROL)
|
|
||||||
REMOTE_DEVICE_TYPES[zha.PROFILE_ID].append(zha.DeviceType.SCENE_SELECTOR)
|
|
||||||
|
|
||||||
zll = zigpy.profiles.zll
|
|
||||||
REMOTE_DEVICE_TYPES[zll.PROFILE_ID].append(zll.DeviceType.COLOR_CONTROLLER)
|
|
||||||
REMOTE_DEVICE_TYPES[zll.PROFILE_ID].append(zll.DeviceType.COLOR_SCENE_CONTROLLER)
|
|
||||||
REMOTE_DEVICE_TYPES[zll.PROFILE_ID].append(zll.DeviceType.CONTROL_BRIDGE)
|
|
||||||
REMOTE_DEVICE_TYPES[zll.PROFILE_ID].append(zll.DeviceType.CONTROLLER)
|
|
||||||
REMOTE_DEVICE_TYPES[zll.PROFILE_ID].append(zll.DeviceType.SCENE_CONTROLLER)
|
|
||||||
|
|
||||||
|
|
||||||
def set_or_callable(value):
|
def set_or_callable(value):
|
||||||
"""Convert single str or None to a set. Pass through callables and sets."""
|
"""Convert single str or None to a set. Pass through callables and sets."""
|
||||||
if value is None:
|
if value is None:
|
||||||
|
@ -9,7 +9,6 @@ from zigpy.application import ControllerApplication
|
|||||||
from homeassistant import config_entries
|
from homeassistant import config_entries
|
||||||
from homeassistant.components.zha.core.const import COMPONENTS, DATA_ZHA, DOMAIN
|
from homeassistant.components.zha.core.const import COMPONENTS, DATA_ZHA, DOMAIN
|
||||||
from homeassistant.components.zha.core.gateway import ZHAGateway
|
from homeassistant.components.zha.core.gateway import ZHAGateway
|
||||||
from homeassistant.components.zha.core.registries import establish_device_mappings
|
|
||||||
from homeassistant.components.zha.core.store import async_get_registry
|
from homeassistant.components.zha.core.store import async_get_registry
|
||||||
from homeassistant.helpers.device_registry import async_get_registry as get_dev_reg
|
from homeassistant.helpers.device_registry import async_get_registry as get_dev_reg
|
||||||
|
|
||||||
@ -41,7 +40,6 @@ async def zha_gateway_fixture(hass, config_entry):
|
|||||||
Create a ZHAGateway object that can be used to interact with as if we
|
Create a ZHAGateway object that can be used to interact with as if we
|
||||||
had a real zigbee network running.
|
had a real zigbee network running.
|
||||||
"""
|
"""
|
||||||
establish_device_mappings()
|
|
||||||
for component in COMPONENTS:
|
for component in COMPONENTS:
|
||||||
hass.data[DATA_ZHA][component] = hass.data[DATA_ZHA].get(component, {})
|
hass.data[DATA_ZHA][component] = hass.data[DATA_ZHA].get(component, {})
|
||||||
zha_storage = await async_get_registry(hass)
|
zha_storage = await async_get_registry(hass)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user