软件包

Home Assistant 中的软件包提供了一种将多个集成的配置打包在一起的方法。使用软件包,我们可以通过在 拆分配置 中引入的任何 !include 指令来包含多个集成或集成的某些部分。

软件包在配置中的核心 homeassistant/packages 下进行配置,格式为包名称(无空格,全小写)后跟一个包含包配置的字典。例如,包 pack_1 可以创建如下所示:

homeassistant:
  ...
  packages: 
    pack_1:
      ...这里是包配置...

包配置可以包括:switchlightautomationgroups,或大多数其他 Home Assistant 集成,包括硬件平台。

可以以内联方式指定或使用 !include 在单独的 YAMLYAML 是一种人类可读的数据序列化语言。它用于以结构化格式存储和传输数据。在 Home Assistant 中,YAML 用于配置,例如在 configuration.yamlautomations.yaml 文件中。 [Learn more] 文件中指定。

内联示例,主 configuration.yamlconfiguration.yaml 文件是 Home Assistant 的主要配置文件。它列出了要加载的集成及其特定配置。在某些情况下,需要直接在 configuration.yaml 文件中手动编辑配置。大多数集成可以在 UI 中配置。 [Learn more]

homeassistant:
  ...
  packages: 
    pack_1:
      switch:
        - platform: rest
          ...
      light:
        - platform: rpi
          ...

包含示例,主 configuration.yamlconfiguration.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
    ...

合并软件包时有一些规则:

  1. 基于平台的集成(lightswitch 等)可以始终合并。

  2. 实体由表示 entity_id 的键标识的集成({key: config})需要在软件包和主配置文件之间具有唯一的“键”。

    例如,如果我们在主配置中有以下内容,则不允许在软件包中重新使用 “my_input” 作为 input_boolean

    input_boolean:
      my_input:
    
  3. 任何不是平台[1]的集成,或带有实体 ID 键的字典[2],只有在其键(列表除外)仅被定义一次的情况下才能合并。

Tip

软件包中的集成只能使用配置样式 1 指定平台条目,其中所有平台都分组在集成名称下。

创建软件包文件夹

组织软件包的一种方法是在您的 Home Assistant 配置目录中创建一个名为“packages”的文件夹。在软件包目录中,您可以在 YAMLYAML 是一种人类可读的数据序列化语言。它用于以结构化格式存储和传输数据。在 Home Assistant 中,YAML 用于配置,例如在 configuration.yamlautomations.yaml 文件中。 [Learn more] 文件中存储任意数量的软件包。您在 configuration.yamlconfiguration.yaml 文件是 Home Assistant 的主要配置文件。它列出了要加载的集成及其特定配置。在某些情况下,需要直接在 configuration.yaml 文件中手动编辑配置。大多数集成可以在 UI 中配置。 [Learn more] 中的此条目将加载此 packages 文件夹及其子文件夹中的所有 YAMLYAML 是一种人类可读的数据序列化语言。它用于以结构化格式存储和传输数据。在 Home Assistant 中,YAML 用于配置,例如在 configuration.yamlautomations.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:

Important

如果您正在将配置移动到软件包中,则 auth_providers 必须保留在 ‘configuration.yaml’ 中。有关 身份验证提供程序 的一般文档,请参阅。

这是因为 Home Assistant 在启动过程的早期阶段处理提供的身份验证,甚至在处理软件包之前。