YAML 语法

Home Assistant 使用 YAML 语法进行配置。虽然大多数集成可以通过 UI 配置,但某些集成需要您编辑 configuration.yaml 文件以指定其设置。

YAML 风格指南

此页面对 Home Assistant 中使用的 YAML 语法进行了高层次介绍。有关更详细的描述和更多示例,请参考 Home Assistant 开发者的 YAML 风格指南

第一个示例

以下 YAML 示例条目假定您想要设置 notify 集成 ,使用 pushbullet 平台

notify:
  platform: pushbullet
  api_key: "o.1234abcd"
  name: pushbullet
  • 一个 集成 提供某些功能的核心逻辑(例如 notify 提供发送通知)。
  • 一个 平台 连接到特定的软件或硬件平台(例如 pushbullet 与来自 pushbullet.com 的服务配合使用)。

YAML 语法的基本内容是块集合和包含键值对的映射。集合中的每一项以 - 开头,而映射的格式为 key: value。这与 Hash 表有些相似,或更具体地说是 Python 中的字典。这些也可以嵌套。请注意,如果您指定了重复的键,将使用某个键的最后一个值

YAML 中的缩进

在 YAML 中,缩进对于指定关系非常重要。缩进的行嵌套在比它高一等级的行内。在上面的示例中,platform: pushbullet 是(嵌套在)notify 集成下的一个属性。

如果您没有使用固定宽度字体的编辑器,获得正确的缩进可能会很棘手。不允许使用制表符进行缩进。约定是在每个缩进等级使用 2 个空格。

注释

# 后的文本字符串是注释。系统会忽略它们。注释用平易近人的语言解释特定代码块的意图,以便将来您或其他人查看该文件时理解。

带有注释和嵌套的示例

下一个示例展示了一个 input_select 集成,它为选项的值使用了块集合。 其他属性(如 name:)则使用映射来指定。请注意,第二行仅有 threat:,同一行没有值。在这里,threat 是 input_select 的名称。它的值是所有嵌套在其下的内容。

input_select:
  threat:
    name: "威胁等级"
    # 使用集合来提供选项
    options:
      - 0
      - 1
      - 2
      - 3
    initial: 0

嵌套映射的示例

以下示例展示了在映射中嵌套映射集合。在 Home Assistant 中,这将创建两个传感器,每个都使用 MQTT 平台,但对于它们的 state_topic 有不同的值(这是用于 MQTT 传感器的属性之一)。

sensor:
  - platform: mqtt
    state_topic: "sensor/topic"
  - platform: mqtt
    state_topic: "sensor2/topic"

包含值

环境变量

Home Assistant CoreHome Assistant Core 是 Home Assistant 本身的核心。它是一个 Python 程序,支持每种安装类型,但可以独立安装。 [Learn more] 安装中,您可以通过 !env_var 包含来自系统环境变量的值。 请注意,这仅适用于 Home Assistant CoreHome Assistant Core 是 Home Assistant 本身的核心。它是一个 Python 程序,支持每种安装类型,但可以独立安装。 [Learn more] 安装,需在可以指定这些变量的情况下使用。 常规 Home Assistant 用户建议使用 !include 声明。

example:
  password: !env_var PASSWORD

默认值

如果未设置环境变量,您可以回退到默认值。

example:
  password: !env_var PASSWORD default_password

包含整个文件

为了提高可读性,您可以通过 !include 语法从主配置文件中分离出某些域。

light: !include lights.yaml

有关此功能的更多信息,请参见 分割配置

常见问题

找到字符 ‘\t’

如果您看到以下消息:

found character '\t' that cannot start any token

这意味着您错误地输入了一个制表符,而不是空格。

大写和小写

Home Assistant 是区分大小写的,状态 'on''On''ON' 不同。同样,实体 group.Doorsgroup.doors 也不同。

如果您遇到问题,请检查 Home Assistant 在开发状态菜单中报告的大小写,位置在 开发者工具 下。

布尔值

YAML 将 YtrueYesON 都视为 true ,而 nFALSENooff 则视为 false。这意味着如果您想将实体的状态设置为 on,您 必须 将其引用为 'on',否则它将被转换为设置状态为 true。同样适用于 off

未引用值可能导致错误,例如:

not a valid value for dictionary value @ data

验证 YAML 语法

在所有这些缩进和规则下,容易出错。检查您的 YAML 语法是否正确(验证)的方法取决于您使用的编辑器。我们无法在这里列出所有的编辑器。

  • 如果您直接在 Home Assistant 中编辑文件,请参阅以下部分:验证配置