软件包
Home Assistant 中的软件包提供了一种将多个集成的配置打包在一起的方法。使用软件包,我们可以通过在 拆分配置 中引入的任何 !include
指令来包含多个集成或集成的某些部分。
软件包在配置中的核心 homeassistant/packages
下进行配置,格式为包名称(无空格,全小写)后跟一个包含包配置的字典。例如,包 pack_1
可以创建如下所示:
homeassistant:
...
packages:
pack_1:
...这里是包配置...
包配置可以包括:switch
、light
、automation
、groups
,或大多数其他 Home Assistant 集成,包括硬件平台。
可以以内联方式指定或使用 !include
在单独的 YAMLYAML 是一种人类可读的数据序列化语言。它用于以结构化格式存储和传输数据。在 Home Assistant 中,YAML 用于配置,例如在 configuration.yaml
或 automations.yaml
文件中。 [Learn more] 文件中指定。
内联示例,主 configuration.yaml
configuration.yaml 文件是 Home Assistant 的主要配置文件。它列出了要加载的集成及其特定配置。在某些情况下,需要直接在 configuration.yaml 文件中手动编辑配置。大多数集成可以在 UI 中配置。 [Learn more]:
homeassistant:
...
packages:
pack_1:
switch:
- platform: rest
...
light:
- platform: rpi
...
包含示例,主 configuration.yaml
configuration.yaml 文件是 Home Assistant 的主要配置文件。它列出了要加载的集成及其特定配置。在某些情况下,需要直接在 configuration.yaml 文件中手动编辑配置。大多数集成可以在 UI 中配置。 [Learn more]:
homeassistant:
...
packages:
pack_1: !include my_package.yaml
文件 my_package.yaml
包含“顶级”配置:
switch:
- platform: rest
...
light:
- platform: rpi
...
合并软件包时有一些规则:
-
基于平台的集成(
light
、switch
等)可以始终合并。 -
实体由表示
entity_id
的键标识的集成({key: config}
)需要在软件包和主配置文件之间具有唯一的“键”。例如,如果我们在主配置中有以下内容,则不允许在软件包中重新使用 “my_input” 作为
input_boolean
:input_boolean: my_input:
-
任何不是平台[1]的集成,或带有实体 ID 键的字典[2],只有在其键(列表除外)仅被定义一次的情况下才能合并。
软件包中的集成只能使用配置样式 1 指定平台条目,其中所有平台都分组在集成名称下。
创建软件包文件夹
组织软件包的一种方法是在您的 Home Assistant 配置目录中创建一个名为“packages”的文件夹。在软件包目录中,您可以在 YAMLYAML 是一种人类可读的数据序列化语言。它用于以结构化格式存储和传输数据。在 Home Assistant 中,YAML 用于配置,例如在 configuration.yaml
或 automations.yaml
文件中。 [Learn more] 文件中存储任意数量的软件包。您在 configuration.yaml
configuration.yaml 文件是 Home Assistant 的主要配置文件。它列出了要加载的集成及其特定配置。在某些情况下,需要直接在 configuration.yaml 文件中手动编辑配置。大多数集成可以在 UI 中配置。 [Learn more] 中的此条目将加载此 packages 文件夹及其子文件夹中的所有 YAMLYAML 是一种人类可读的数据序列化语言。它用于以结构化格式存储和传输数据。在 Home Assistant 中,YAML 用于配置,例如在 configuration.yaml
或 automations.yaml
文件中。 [Learn more] 文件:
homeassistant:
packages: !include_dir_named packages
这种方法的好处是可以将所需集成系统的所有配置拉入一个文件——而不是将其分散在多个文件中。
您可以使用其他 !include
方法来处理软件包;例如 !include_dir_merge_named
。然而,与 !include_dir_merge_named
不同,!include_dir_named
方法使用与 ‘configuration.yaml’ 相同的缩进。这意味着您可以从配置文件中复制和粘贴元素。使用 !include_dir_named
时,文件名用作包名。文件名必须唯一。
使用 !include_dir_merge_named
方法时,包名称必须包含在文件中。下面的配置需要相应缩进。这意味着您不能直接从配置文件中复制和粘贴。
homeassistant:
packages: !include_dir_merge_named packages/
在 packages/subsystem1/functionality1.yaml
中:
subsystem1_functionality1:
input_boolean:
...
binary_sensor:
...
automation:
通过软件包自定义实体
可以在软件包内 自定义实体。只需在以下位置创建您的自定义条目:
homeassistant:
customize:
如果您正在将配置移动到软件包中,则 auth_providers
必须保留在 ‘configuration.yaml’ 中。有关 身份验证提供程序 的一般文档,请参阅。
这是因为 Home Assistant 在启动过程的早期阶段处理提供的身份验证,甚至在处理软件包之前。