创建平台的清单
添加新平台时要做的事情清单。
info
并非所有现有平台都遵循此清单中的要求。这不能作为不遵循它们的理由!
0. 通用
- 遵循我们的 风格指南
- 使用
const.py
中现有的常量- 仅在常量被广泛使用时才将其添加到
const.py
。否则保持在平台级别 - 使用
CONF_MONITORED_CONDITIONS
而不是CONF_MONITORED_VARIABLES
- 仅在常量被广泛使用时才将其添加到
1. 外部要求
- 要求已添加到
manifest.json
。REQUIREMENTS
常量已被弃用。 - 要求版本应被固定:
"requirements": ['phue==0.8.1']
- 我们不再希望要求托管在 GitHub 上。请将其上传到 PyPi。
- 每个要求都符合 库的要求。
2. 配置
- 如果平台可以直接设置,请添加一个用于 配置验证 的 voluptuous 模式
- Voluptuous 模式扩展组件的模式
(例如,hue.light.PLATFORM_SCHEMA
扩展light.PLATFORM_SCHEMA
) - 默认参数在 voluptuous 模式中指定,而不是在
setup_platform(...)
中 - 你的
PLATFORM_SCHEMA
应尽可能多地使用来自homeassistant.const
的通用配置键 - 永远不要依赖用户将内容添加到
customize
来配置平台内部的行为。
import voluptuous as vol
from homeassistant.const import CONF_FILENAME, CONF_HOST
from homeassistant.components.light import PLATFORM_SCHEMA
import homeassistant.helpers.config_validation as cv
CONF_ALLOW_UNREACHABLE = "allow_unreachable"
DEFAULT_UNREACHABLE = False
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
{
vol.Required(CONF_HOST): cv.string,
vol.Optional(CONF_ALLOW_UNREACHABLE, default=DEFAULT_UNREACHABLE): cv.boolean,
vol.Optional(CONF_FILENAME): cv.string,
}
)
3. 设置平台
- 验证传入的配置(用户/密码/主机等)是否有效。
- 如果可能,将您的调用分组到
add_entities
中。 - 如果平台添加了额外的动作,格式应为
<你集成的域>.<服务动作名称>
。因此,如果您的集成域是 "awesome_sauce",而您正在制作一个灯光平台,您将要在awesome_sauce
域下注册服务动作。确保您的服务动作 验证权限。
4. 实体
-
从您正在构建平台的集成中扩展实体。
from homeassistant.components.light import Light
class HueLight(Light):
"""Hue 灯光组件.""" -
避免将
hass
作为参数传递给实体。当实体被添加到 Home Assistant 时,hass
会在实体上设置。这意味着您可以在实体内部通过self.hass
访问hass
。 -
不要在构造函数中调用
update()
,请改用add_entities(devices, update_before_add=True)
。 -
不要在属性内部执行任何 I/O 操作。在
update()
内部缓存值。 -
在处理时间时,状态和/或属性不应包含相对时间,而应存储 UTC 时间戳。
-
利用 实体生命周期回调 附加事件监听器或清理连接。