二十二 Home Assistant 平台的探索与发现

通用平台发现
新的控制器或集线器组件通常需要在子组件(如灯光和开关)中添加平台,而无需额外配置。这可以通过使用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为例,详细说明了从配置、组件代码结构到数据传递的全过程,展示了如何利用全局变量传递信息给子组件,以及如何在不同组件文件中编写相应代码实现平台加载,避免了在配置文件中重复编写平台条目,为开发者实现类似功能提供了清晰的指导,提高了开发效率,同时增强了组件间的协同性和系统的灵活性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值