实体
有关实体的通用介绍,请参见实体体系结构。
基本实现
以下是一个示例开关实体,可在内存中跟踪其状态。
从乡亲。成分。转变进口切换度
班级myswitch((切换度):
防守__在里面__((自己):
自己。_is_on=错误的
@财产
防守姓名((自己):
“”“实体的名称。”“”
返回“我的开关”
@财产
防守is_on((自己):
“”“如果开关当前打开或关闭。”“”
返回自己。_is_on
防守打开((自己,,,,**夸尔格斯):
“”“打开开关。”“”
自己。_is_on=真的
防守关掉((自己,,,,**夸尔格斯):
“”“关闭开关。”“”
自己。_is_on=错误的
这就是建立开关实体的全部!继续阅读以了解更多或查看视频教程。
更新实体
实体代表设备。有各种策略可以使您的实体与设备的状态保持同步,这是最受欢迎的投票。
轮询
通过投票,家庭助理将不时询问必威是什么实体(取决于组件的更新间隔)以获取最新状态。必威是什么当家庭助理将在应该_poll
属性返回真的
(默认值)。您可以使用更新()
或异步方法async_update()
。此方法应从设备获取最新状态,并将其存储在实例变量中,以供属性返回它。
订阅更新
当您订阅更新时,您的代码负责让家庭助理知道可用的更新。必威是什么确保您有应该_poll
属性返回错误的
。
每当您从订阅中收到新状态时,您都可以告诉家庭助理,致电可通过必威是什么schedue_update_ha_state()
或异步回调async_schedule_update_ha_state()
。传递布尔值真的
如果您希望家庭助理在将更新写给家庭助理之前,请致电您必威是什么的更新方法。
通用属性
实体基类有一些在家庭助理中所有实体中常见的属性。必威是什么这些都可以添加到任何实体中,无论类型如何。所有这些属性都是可选的,无需实施。
小费
属性应始终仅从内存中返回信息,而不是I/O(例如网络请求)。实施更新()
或者async_update()
获取数据。
姓名 | 类型 | 默认 | 描述 |
---|---|---|---|
假设 | 布尔 | 错误的 |
返回真的 如果状态基于我们的假设而不是从设备读取它。 |
归因 | 细绳 | 没有任何 |
API提供商要求的品牌文本。 |
可用的 | 布尔 | 真的 |
指出家庭助理是否能够阅读必威是什么状态并控制基础设备。 |
device_class | 细绳 | 没有任何 |
设备的额外分类。每个域都指定自己的。设备类可以对单位的测量和支持功能提供额外的要求。 |
Entity_Category | 细绳 | 没有任何 |
非主要实体的分类。调成config 对于允许更改设备配置的实体,例如,开关实体使开关打开和关闭的背景照明成为可能。调成诊断 对于一个实体公开设备的某些配置参数或诊断,但不允许更改它,例如传感器显示RSSI或MAC-ADDRESS。 |
entity_picture | URL | 没有任何 |
为实体显示图片的URL。 |
extra_state_attributes | dict | 没有任何 |
额外的信息以存储在州机器中。它需要是进一步解释状态的信息,它不应是静态信息,例如固件版本。 |
姓名 | 细绳 | 没有任何 |
实体的名称 |
应该_poll | 布尔 | 真的 |
家庭助理应与实必威是什么体检查更新状态。如果设置为错误的 ,实体将需要通过调用其中一个来通知家庭助理新更新必威是什么计划更新方法。 |
唯一身份 | 细绳 | 没有任何 |
该实体的唯一标识符。需要在平台中独一无二(即光 )。不应由用户配置或可更改。学到更多。 |
警告
产生大量状态变化的实体可以迅速增加数据库的大小。extra_state_attributes
也经常改变。最小化数量extra_state_attributes
对于这些实体,通过删除非关键属性或创建其他传感器
实体。
高级属性
实体也可用以下属性。但是,它们仅用于高级使用,应谨慎使用。
姓名 | 类型 | 默认 | 描述 |
---|---|---|---|
ENTITY_REGISTION_ENABLED_DEFAULT | 布尔 | 真的 |
指出首先添加到实体注册表时,是否应启用或禁用实体。这包括快速变化的诊断实体,或者认为不太常用的实体。例如,传感器暴露RSSI或电池电压通常应设置为错误的 ;为了防止这些实体的不需要(记录)状态变化或UI混乱。 |
ENTITY_REGISTION_VISIBLE_DEFAULT | 布尔 | 真的 |
指出首先添加到实体注册表时,该实体是否应隐藏或可见。 |
强制性升级 | 布尔 | 错误的 |
即使数据相同,每个更新都将每个更新写入状态计算机。示例使用:直接从连接的传感器而不是缓存读取值时。谨慎使用,将垃圾邮件垃圾邮件。 |
图标 | 图标 | 没有任何 |
在前端使用的图标。图标以MDI: 加一个标识符。您可能不需要这一点,因为家庭助理已经根据所有实体提供了默认图标必威是什么device_class 。仅在没有匹配的情况下才能使用device_class 或图标用于device_class 会令人困惑或误导。 |
系统属性
以下属性由家庭助理使用和控制,不应被集成所覆盖。必威是什么
姓名 | 类型 | 默认 | 描述 |
---|---|---|---|
已启用 | 布尔 | 真的 |
指示是否在实体注册表中启用实体。它也返回真的 如果平台不支持实体注册表。残疾实体不会添加到家庭助理。必威是什么 |
属性实施
属性功能
为每个属性编写属性方法只是几行代码,例如
班级myswitch((切换度):
@财产
防守图标((自己)->str|没有任何:
“”“实体的图标。”“”
返回“ MDI:门”
。。。
实体类或实例属性
另外,较短的形式是根据以下两个模式设置实体类或实例属性:
班级myswitch((切换度):
_attr_icon=“ MDI:门”
。。。
班级myswitch((切换度):
防守__在里面__((自己,,,,图标:str)->没有任何:
自己。_attr_icon=图标
。。。
这与第一个示例完全相同,但依赖于基类中属性的默认实现。属性的名称始于_attr_
其次是属性名称。例如,默认device_class
属性返回_attr_device_class
类属性。
并非所有实体类都支持_attr_
有关其实体特定属性的属性,请参阅各自实体类的文档以获取详细信息。
小费
如果集成需要访问自己的属性,则应访问该属性(self.name
),不是类或实例属性(self._attr_name
)。
例子
以下代码段为何时实现属性功能以及何时使用类或实例属性提供了一个最佳实践示例。
班级某种性(():
_attr_device_clas=device_class_temperature#这对于所有某种实例都是共同的
防守__在里面__((自己,,,,设备):
自己。_设备=设备
自己。_attr_available=错误的#这覆盖默认值
自己。_attr_name=设备。get_friendly_name(()
#应避免以下内容:
如果Some_complex_condition和Some_other_condition和somings_is_none_and_only_valid_after_update和device_available:
。。。
防守更新((自己)
如果自己。可用的#读取当前状态,无需以_attr _前缀
#更新实体
自己。_设备。更新(()
如果错误:
自己。_attr_available=错误的#设置属性值
返回
#我们不需要在此处检查设备是否可用
自己。_attr_is_on=自己。_设备。get_state(()#更新“ is_on”属性
生命周期钩
当某些事件发生在实体上时,请使用这些生命周期钩执行代码。所有生命周期钩都是异步方法。
async_added_to_hass()
当实体首次将其写入状态计算机之前,将其分配给了其实体_id和HASS对象时。示例用途:还原状态,订阅更新或设置回调/调度函数/侦听器。
async_will_remove_from_hass()
当一个实体即将从家庭助理中删除时被称为。必威是什么示例使用:与服务器断开连接或退订更新。
更改实体模型
如果要向实体或其任何子类型(灯,开关等)添加新功能,则需要先在我们的架构存储库。只有增加的添加是各个供应商中常见功能的添加功能。