创建平台的清单
添加新平台时需要完成的检查清单。
Info
并非所有现有平台都符合此清单中的要求,但这绝不是忽视这些要求的理由!
0. 通用
- 遵循我们的开发指南
- 使用现有常量
const.py- 只有在某个新常量会被广泛使用时,才将其添加到
const.py中;否则请保留在平台级别 - 使用
CONF_MONITORED_CONDITIONS,不要使用CONF_MONITORED_VARIABLES
- 只有在某个新常量会被广泛使用时,才将其添加到
1. 外部依赖
- 在
manifest.json中添加requirements。REQUIREMENTS常量已弃用。 - 依赖版本必须固定,例如:
"requirements": ['phue==0.8.1'] - 我们不再希望依赖直接托管在 GitHub 上,请将其发布到 PyPI。
- 每个依赖都应满足库要求。
2. 配置
- 如果平台支持直接配置,请添加合理的配置校验 schema
- 平台 schema 应从组件 schema 扩展
(例如,
hue.light.PLATFORM_SCHEMA扩展light.PLATFORM_SCHEMA) - 默认参数应在 voluptuous schema 中指定,而不是在
setup_platform(...)中设置 - 您的
PLATFORM_SCHEMA应尽可能使用homeassistant.const中的通用配置键 - 不要依赖用户在
customize中添加内容来配置平台内部行为
3. 设置平台
- 验证传入配置(如
user、pass、host)是否有效。 - 如果可能,请将调用集中在
add_entities中。 - 如果平台提供额外服务,格式应为
<domain of your integration>.<service action name>。例如,如果您的集成域为awesome_sauce,并且您正在编写灯光平台,那么可以在awesome_sauce域下注册服务操作。请确保您的服务操作验证权限。
4. 实体
-
从您要为其创建 UI 的集成实体类扩展。
-
不要将
hass作为参数传递给实体。实体添加到 Home Assistant 后,hass会自动设置到实体上,因此您可以在实体内部通过self.hass访问它。 -
不要在构造函数中调用
update(),而应使用add_entities(devices, update_before_add=True)。 -
不要在属性中执行任何 I/O 操作,而应在
update()中缓存值。 -
处理时间时,状态和/或属性不应包含“自某事件发生以来经过了多久”这样的相对时间,而应存储 UTC 时间戳。
-
使用实体生命周期回调来附加事件监听器或清理连接。
5. 与设备/服务通信
-
所有 API 特定代码都必须放在托管于 PyPI 的第三方库中。Home Assistant 应只与对象交互,而不是直接调用 API。
其他值得参考的 Python 包发布资源:
Cookiecutter
Flit
Poetry

