通用平台发现
新的控制器或集线器组件通常需要在子组件(如灯光和开关)中添加平台,而无需额外配置。这可以通过使用homeassistant.helpers.discovery中的load_platform或async_load_platform方法来实现:
def load_platform(hass, component, platform, discovered=None, hass_config=None)
有关其工作原理的更多信息,请参阅load_platform方法。
示例
假设你需要实现新的MyFlashyHub来控制开关和灯光,你可以按照以下步骤进行:
新集线器组件所需的配置:
myflashyhub:
example: setting
组件的源代码目前可以位于你的配置目录中:
~/.homeassistant/custom_components/myflashyhub.py
~/.homeassistant/custom_components/light/myflashyhub.py
~/.homeassistant/custom_components/switch/myflashyhub.py
在集线器组件myflashyhub.py中,你可以调用灯光和开关组件。为了将任何不可序列化的信息传递给子组件中的平台,你可以使用全局变量。
from homeassistant.helpers.discovery import load_platform
DOMAIN = 'myflashyhub'
DATA_MFH = 'MFH'
def setup(hass, config):
"""你的控制器/集线器特定代码。"""
hass.data[DATA_MFH] = SomeObjectToInitialiseGlobal()
# --- 省略部分代码 ---
load_platform(hass, 'light', DOMAIN)
load_platform(hass, 'switch', DOMAIN, {'optional': 'arguments'})
将你的自定义设备特定代码添加到light/myflashyhub.py和switch/myflashyhub中的setup_platform方法中。
import custom_components.myflashyhub as myflashyhub
#'switch'将接收上面传递的discovery_info={'optional': 'arguments'}
#'light'将接收discovery_info=None
def setup_platform(hass, config, add_devices, discovery_info=None):
"""你的开关/灯光特定代码。"""
# 现在你可以使用hass.data[myflashyhub.DATA_MFH]
load_platform方法允许在不需要在configuration.yaml文件中添加任何额外平台条目的情况下加载平台,通常情况下可能需要:
#light:
# platform: myflashyhub
#switch:
# platform: myflashyhub
总结
在 Home Assistant 中实现通用平台发现的方法,通过load_platform或async_load_platform方法可在无需额外配置的情况下为控制器或集线器组件添加子组件平台。以MyFlashyHub为例,详细说明了从配置、组件代码结构到数据传递的全过程,展示了如何利用全局变量传递信息给子组件,以及如何在不同组件文件中编写相应代码实现平台加载,避免了在配置文件中重复编写平台条目,为开发者实现类似功能提供了清晰的指导,提高了开发效率,同时增强了组件间的协同性和系统的灵活性。
524

被折叠的 条评论
为什么被折叠?



