外部组件
你可以使用外部组件功能轻松导入社区或个人组件。 也可以使用此功能覆盖内置组件。
如果你想为 ESPHome 创建自己的组件/平台,请参阅我们的 开发者网站。
external_components: # use rtttl and dfplayer from ESPHome's dev branch in GitHub - source: type: git url: https://github.com/esphome/esphome ref: dev components: [ rtttl, dfplayer ]
# equivalent shorthand for GitHub - source: github://esphome/esphome@dev components: [ rtttl ]
# equivalent shorthand for GitHub pull request - source: github://pr#2639 components: [ rtttl ]
# use all components from a local folder - source: type: local path: my_components
# use a component from a local git repository - source: type: git url: file:///Users/user/path_to_repo ref: my_awesome_branch components: [my_awesome_component]-
source: 你想要获取的组件所在的位置。参见本地 和外部组件_git。
- type (Required): 仓库类型。可为
local、git之一。
git 选项:
- url (Required, url): Git 仓库 url。参见外部组件_git。
- ref (Optional, string): Git 引用(分支或标签)。如果未指定,则使用默认分支。
- username (Optional, string): Git 服务器的用户名(如果需要)
- password (Optional, string): Git 服务器的密码(如果需要)
- path (Optional, string): 仓库内的路径(如果不同于
components或esphome/components)
local 选项:
- path (Required): 使用本地组件时使用的路径。参见本地。
- type (Required): 仓库类型。可为
-
components (Optional, list): 要从外部源使用的组件列表。 默认情况下,会使用所有可用的组件。
-
refresh (Optional, Time): 检查源的间隔。对
local没有 效果。更多信息参见刷新。默认为1day。
你可以指定包含外部组件的本地路径。这在开发组件或你想手动控制文件来源时最有用。
external_components: - source: path: /copied_components
# shorthandexternal_components: - source: my_components请注意,支持相对路径,因此你可以输入 my_components 作为源路径,然后
ESPHome 将从你的 YAML 配置文件所在文件夹中的 my_components 文件夹加载组件。
本地组件示例
Section titled “本地组件示例”以上面的 my_components 示例为例,文件夹结构必须如下所示:
<CONFIG_DIR>├── node1.yaml├── node2.yaml└── my_components ├── my_component1 │ ├── __init__.py │ ├── component1.cpp │ ├── component1.h │ └── sensor.py └── my_component2 ├── __init__.py ├── component2.cpp ├── component2.h └── switch.py从 git 获取组件是使用 ESPHome 默认不包含的组件的最简单方式。
源组件应位于 components 文件夹内或 esphome/components
文件夹内。后者使得从 ESPHome 仓库的分支共享组件变得更加容易。
仓库的 url 可以是远程的(http: 或 https: 协议)或本地的(file: 协议,需使用绝对路径)。
Git 仓库示例
Section titled “Git 仓库示例”对于共享一个或少数几个组件的仓库:
components├── my_component1│ ├── __init__.py│ ├── component1.cpp│ ├── component1.h│ └── sensor.py└── my_component2 ├── __init__.py ├── component2.cpp ├── component2.h └── switch.pyexample_component1.yaml <- not required but recommendedREADME.md或者,也支持以下结构,这使得从 ESPHome 仓库的分支共享组件变得很方便:
esphome├── components│ ├── my_component1│ │ ├── __init__.py│ │ ├── component1.cpp│ │ ├── component1.h│ │ └── sensor.py│ ├── my_component2│ │ ├── __init__.py│ │ ├── component2.cpp│ │ ├── component2.h│ │ └── switch.py│ ......HTTP git 仓库通常通过以下配置支持:
external_components: source: type: git url: http://repository_url/ ref: branch_or_tag source: type: git url: file:///Users/user/path_to_repo ref: branch_or_tagsource 字段接受 github:// 资源的简短写法:
external_components: # shorthand source: github://<user or org>/<repository name>[@<branch or tag>]source 字段也接受来自 ESPHome 仓库的 github:// pull request 的简短写法:
external_components: # shorthand source: github://pr#<number>在底层,验证期间,ESPHome 会将 git 仓库克隆到隐藏的 .esphome
文件夹中,然后组件将从该本地副本加载。克隆仓库的本地路径
根据仓库名称和引用名称而不同,因此具有不同引用的仓库被视为不同的
仓库,并会被独立更新。
如果需要,你可以提供在远程 git 服务器进行身份验证时使用的用户名和密码,使用
username 和 password 字段。这在结合 !secret 功能从 secrets.yaml
文件加载值时最有用。这不是全面的安全措施;你的用户名和密码必然会以明文形式
存储在 .esphome 目录中。
组件最初被克隆到缓存目录中,然后在距离上次检查超过 refresh: 时间后,仓库会
被检查更新(通过 git pull)。
你可以通过将此选项设置为 0s 让 ESPHome 每次都检查仓库,不过由于使用
dashboard 或 vscode 扩展时 ESPHome 会持续验证配置,因此不建议将此值设置为低于几分钟,
以免验证变慢并造成过多的仓库检查。
同样,你可以将此设置设置为 never,ESPHome 将永远不会更新仓库,例如当 ref 指向标签(tag)时很有用。