4、基础配置:configuration.yaml文件结构、基础组件配置、区域与设备管理、用户与权限设置

Home Assistant(以下简称 HA)的核心魅力在于其高度可定制性,而这一切的起点,便是对 configuration.yaml 文件的深刻理解与熟练操作。这个文件是 HA 的“总指挥中心”,它决定了系统如何启动、加载哪些组件、如何与设备通信以及如何呈现给用户。本章将深入剖析该文件的结构与语法,并系统讲解基础组件配置、区域与设备管理,以及用户与权限设置,帮助你从“能用”迈向“会用”和“精通”。

HA 配置核心链路与权限模型 configuration.yaml 核心配置文件(入口) 基础组件配置 - 自动化 (automation) - 场景 (scene) - 自定义化 (customize) - 日志 (logger) 区域与设备管理 - 区域划分 (zone) - 设备关联 (device) - 实体分组 (group) - 标签管理 (label) 用户与权限设置 - 用户管理 (users) - 权限组 (group) - 令牌与长期访问令牌 图:configuration.yaml 作为核心,辐射三大配置维度

4.1 configuration.yaml 文件结构:YAML 语法与核心架构

核心原理:一切皆配置

configuration.yaml 使用 YAML(YAML Ain't Markup Language)格式,这是一种对人类友好的数据序列化标准。HA 通过解析该文件,将顶层键(如 homeassistant:、sensor:、automation:)映射为对应的组件或平台。理解其核心原理,就是理解“缩进即层级,键值对即配置”的规则。一个典型的文件结构如下:

# 基础配置
homeassistant:
  name: 我的智能家居
  latitude: 39.9042
  longitude: 116.4074
  elevation: 43
  unit_system: metric
  time_zone: Asia/Shanghai

# 加载前端
frontend:

# 自动化与场景
automation: !include automations.yaml
scene: !include scenes.yaml

# 自定义化
customize: !include customize.yaml

上述配置中,!include 是一个 YAML 标签,用于将外部文件的内容嵌入当前文件。这极大地提升了可维护性,避免单个文件过于臃肿。HA 官方强烈建议将自动化、场景、自定义化等独立成文件,并通过 !include 引入。

操作流程:从零开始构建基础配置

  1. 备份原始文件:首次修改前,务必备份 configuration.yaml。可以通过 Samba、SSH 或 VS Code 插件操作。
  2. 定义基础信息:设置 homeassistant: 下的名称、坐标、海拔、单位制与时区。坐标和海拔建议通过 HA 前端“开发者工具”中的“信息”页面获取,或使用地图工具精确查询。
  3. 启用核心组件:如 frontend:(前端界面)、history:(历史记录)、logbook:(日志本)。这些组件通常无需额外参数。
  4. 引入外部文件:创建 automations.yaml、scenes.yaml、customize.yaml 等文件,并在主文件中使用 !include 引入。
  5. 校验配置:在 HA 界面中,进入“开发者工具” → “YAML”,点击“检查配置”。若语法错误,HA 会明确提示错误行与原因。

案例拆解:一个家庭的基础配置实战

假设你住在北京,家中有温湿度传感器、智能灯和摄像头。你的 configuration.yaml 可能包含以下关键段落:

homeassistant:
  name: 北京之家
  latitude: 39.9042
  longitude: 116.4074
  elevation: 43
  unit_system: metric
  time_zone: Asia/Shanghai

sensor:
  - platform: mqtt
    name: "客厅温湿度"
    state_topic: "home/livingroom/temp_hum"
    unit_of_measurement: "°C"
    value_template: "{{ value_json.temperature }}"

switch:
  - platform: mqtt
    name: "客厅灯"
    command_topic: "home/livingroom/light/set"

在这个案例中,sensor: 和 switch: 是平台配置,它们告诉 HA 如何通过 MQTT 协议与设备通信。注意,platform 是必填项,它指定了集成类型。

常见误区与总结

风险提示:YAML 对缩进极其敏感,禁止使用 Tab 键缩进,必须使用空格。且同一层级缩进必须一致。另外,!include 路径是相对于 configuration.yaml 所在目录的,不要写错路径。

总结复盘:configuration.yaml 是 HA 的基石。建议遵循“主文件做入口,子文件做逻辑”的原则,将不同功能的配置拆分到独立文件中。每次修改后,务必执行“检查配置”并重启 HA 使改动生效。

4.2 基础组件配置:自动化、场景与自定义化

核心原理:组件即功能模块

HA 的组件(Component)是提供特定功能的核心模块。例如,automation 组件负责执行自动化规则,scene 组件用于保存和恢复实体状态,customize 组件允许你覆盖实体的默认属性(如图标、名称、设备类)。这些组件通常通过 YAML 配置,但也可以在 UI 中操作(UI 操作会写入 .storage 目录,而非 YAML 文件)。

操作流程:配置自动化与场景

  • 自动化(Automation):在 automations.yaml 中定义。一个自动化包含 trigger(触发器)、condition(条件,可选)和 action(动作)。
  • 场景(Scene):在 scenes.yaml 中定义。场景是实体状态的集合,例如“观影模式”包含灯光调暗、窗帘关闭、电视打开。
  • 自定义化(Customize):在 customize.yaml 中定义。你可以为特定实体设置 friendly_name(友好名称)、icon(图标)或 device_class(设备类)。

案例拆解:自动化与场景的协同工作

假设你希望实现“回家即亮灯”的自动化,并配合“离家模式”场景。配置如下:

# automations.yaml
- id: '1700000000001'
  alias: "回家亮灯"
  trigger:
    - platform: state
      entity_id: binary_sensor.front_door
      to: 'on'
  condition:
    - condition: state
      entity_id: sun.sun
      state: 'below_horizon'
  action:
    - service: scene.turn_on
      target:
        entity_id: scene.welcome_home

# scenes.yaml
- id: '1700000000002'
  name: "欢迎回家"
  entities:
    light.living_room:
      state: on
      brightness: 200
    light.kitchen:
      state: on
      brightness: 150
    media_player.tv:
      state: on
      source: 'HDMI 1'

在这个案例中,自动化触发了场景,场景一次性恢复了多个实体的状态。这种“自动化+场景”的组合是 HA 中最常见的逻辑模式,能有效减少自动化数量,提高可读性。

常见误区与总结

经验提示:自动化 ID(id)必须唯一,建议使用时间戳或 UUID。场景中的实体状态必须完整,否则未列出的属性将保持当前状态不变。

总结复盘:基础组件配置的核心在于“分离关注点”。自动化负责“何时做”,场景负责“做什么”,自定义化负责“怎么显示”。合理利用 !include 拆分文件,能让你的配置结构清晰,易于后期维护。

4.3 区域与设备管理:组织你的智能家居

核心原理:从实体到区域的逻辑映射

区域(Area)是 HA 2021 年后引入的重要概念,它允许你将物理空间(如“客厅”、“卧室”)与设备、实体进行逻辑关联。区域本身不存储配置,而是通过 UI 或 YAML 进行管理。设备(Device)是实体的容器,一个设备可以包含多个实体(例如一个传感器设备包含温度和湿度两个实体)。通过区域和设备,你可以轻松实现按房间控制、语音助手(如“关闭客厅的灯”)以及更直观的 UI 展示。

操作流程:创建区域并分配设备

  1. 创建区域:进入“设置” → “区域、标签与设备” → “区域”,点击“创建区域”,输入名称(如“客厅”)。
  2. 分配设备:在“设备”页面,找到目标设备,点击进入详情,在“区域”下拉菜单中选择“客厅”。
  3. 使用 YAML 配置(可选):虽然区域主要在 UI 中管理,但你可以在 configuration.yaml 中通过 homeassistant: 下的 customize 为实体指定区域,但官方推荐使用 UI 操作。

案例拆解:多楼层家庭的区域规划

假设你有一个两层别墅,每层有客厅、卧室、卫生间。你可以创建以下区域:

区域名称包含设备示例关联实体示例
一楼客厅智能灯、窗帘电机、温湿度传感器light.living_room_1, cover.curtain_1, sensor.temp_1
二楼主卧空调、智能床、人体传感器climate.bedroom_ac, sensor.motion_bedroom
卫生间排气扇、人体传感器、水浸传感器switch.bathroom_fan, binary_sensor.water_leak

通过区域划分,你可以在前端界面按区域查看设备状态,也可以编写自动化时直接引用区域作为目标(例如 target: area: 一楼客厅)。

常见误区与总结

风险提示:区域与设备的管理主要依赖 UI,但如果你通过 YAML 修改了实体的 device_class 或 name,可能会影响区域内的显示。另外,不要将区域与“标签(Label)”混淆,标签是更灵活的跨区域分组方式。

总结复盘:区域与设备管理是 HA 从“技术配置”走向“用户体验”的关键一步。良好的区域规划能显著提升日常使用的便捷性,也是构建复杂自动化(如“离家模式”按区域关闭所有设备)的基础。

4.4 用户与权限设置:安全与协作

核心原理:基于角色的访问控制(RBAC)

HA 提供了细粒度的用户与权限管理。默认情况下,HA 会创建一个“所有者”账户,拥有全部权限。你可以创建多个用户,并为每个用户分配不同的权限组(如“管理员”、“用户”、“访客”)。权限控制的对象包括:实体、设备、区域、自动化、场景以及配置修改等。此外,HA 还支持长期访问令牌(Long-Lived Access ),用于 API 调用或第三方应用集成,避免暴露密码。

操作流程:创建用户与配置权限

  1. 创建用户:进入“设置” → “人员” → “添加人员”,输入姓名和邮箱,设置密码。
  2. 分配权限组:在用户详情页,勾选“管理员”或“用户”等权限组。管理员可修改配置,普通用户只能控制实体。
  3. 生成长期访问令牌:在“人员” → 你的用户名 → “安全” → “创建令牌”,输入名称(如“手机APP”),生成后立即复制保存(仅显示一次)。

案例拆解:家庭多用户权限分配

假设家庭中有三位成员:爸爸(管理员)、妈妈(普通用户)、孩子(受限用户)。你可以这样设置:

  • 爸爸:管理员权限,可管理所有设备、修改自动化、添加新集成。
  • 妈妈:普通用户权限,可控制灯光、窗帘、空调等实体,但无法修改配置或添加设备。
  • 孩子:受限用户权限,仅能控制客厅的灯和电视,无法访问摄像头或门锁。

对于受限用户,你可以在“实体”权限中,手动添加允许控制的实体列表,并拒绝其他实体。这种精细化的权限控制,既保证了家庭安全,又满足了不同成员的需求。

常见误区与总结

经验提示:长期访问令牌是敏感信息,应妥善保管。如果怀疑泄露,可在“安全”页面撤销该令牌。另外,不要为所有用户都赋予管理员权限,遵循“最小权限原则”是保障系统安全的重要措施。

总结复盘:用户与权限设置是 HA 走向成熟应用的标志。通过 RBAC 模型,你可以在家庭或团队中实现安全、高效的协作。定期审查用户列表和令牌,及时清理不再使用的账户,是维护系统安全的良好习惯。

通过本章的学习,你已经掌握了 configuration.yaml 的结构、基础组件的配置方法、区域与设备的管理逻辑以及用户权限的分配策略。这些知识构成了 HA 日常操作的核心骨架,为后续深入探索自动化、场景、语音控制等高级功能打下了坚实的基础。在实际操作中,请务必遵循“先备份、再修改、后校验”的原则,确保你的智能家居系统稳定运行。