设备注册表
设备注册表是 Home Assistant 用于跟踪设备的注册表。一个设备会通过一个或多个实体在 Home Assistant 中表示。例如,电池供电的温度和湿度传感器可能会暴露温度、湿度和电池电量等实体。

什么是设备?
Home Assistant 中的设备代表具有自己控制单元的物理设备或服务。控制单元本身不必很智能,但它应该能够控制实际发生的事情。例如,带有 4 个房间传感器的 Ecobee 恒温器,在 Home Assistant 中会对应 5 个设备:1 个恒温器设备(包含其内部所有传感器),以及 4 个房间传感器设备。
如果将一个传感器连接到另一个设备来读取其部分数据,它仍应表示为两个不同的设备,因为传感器可能被移动去读取另一台设备的数据。
提供多个端点的设备可以拆分为多个独立设备,并通过 via_device 属性引用父设备。这样既可以把不同端点分配到建筑中的不同区域,也便于对实体进行逻辑分组。典型示例是智能电源板或多路智能墙壁开关:父设备会有表示网络连接状态、固件更新等信息的实体,子设备则会绑定到具体通道的实体分组,例如每个通道一个开关实体和一个能耗传感器。
虽然目前尚不可用,但未来可以考虑为用户提供合并设备的选项。
设备属性
定义设备
通过实体自动注册
仅当通过配置条目加载实体,并且定义了 unique_id 属性时,才会读取实体设备信息。
每个实体都可以通过 device_info 属性定义设备。当实体通过配置条目添加到 Home Assistant 时,会读取此属性。设备会通过提供的标识符或连接(例如序列号或 MAC 地址)与现有设备进行匹配。如果同时提供了标识符和连接,设备注册表会优先按标识符进行匹配。每个标识符和每个连接都会单独匹配,也就是说,只要其中一个连接匹配,就可以视为同一台设备。
除了设备属性外,device_info 还可以包含 default_manufacturer、default_model、default_name。如果尚未定义其他值,这些值会被添加到设备注册表中。这对那些掌握部分设备信息、但信息还不够具体的集成很有帮助,例如仅根据 MAC 地址识别设备的路由器集成。
手动注册
如果没有实体代表某个组件,该组件也可以注册设备。一个例子是与灯通信的集线器。
删除设备
集成可以选择允许用户从 UI 中删除设备。为此,集成应在其 __init__.py 模块中实现 async_remove_config_entry_device 函数。
当用户点击设备的“删除设备”按钮并确认后,系统会等待 async_remove_config_entry_device。如果该函数返回 True,则会从设备中删除配置条目;如果这是该设备唯一的配置条目,则该设备也会从设备注册表中删除。
在 async_remove_config_entry_device 中,集成应执行设备移除前所需的准备步骤,并在成功时返回 True。如果集成更适合在其他地方做清理,也可以选择对 EVENT_DEVICE_REGISTRY_UPDATED 作出响应。
分类为 设备 信息
通过查找具有设备信息的所有键的第一个设备信息类型,将设备信息分为Link、Primary和Secondary。
该分类用于对配置条目进行排序,以定义 前端 使用的主 集成。
强制性地,设备 信息必须与其中一个类别匹配。

