4、基础配置:configuration.yaml文件结构、基础组件配置、区域与设备管理、用户与权限设置
Home Assistant(以下简称 HA)的核心魅力在于其高度可定制性,而这一切的起点,便是对 configuration.yaml 文件的深刻理解与熟练操作。这个文件是 HA 的“总指挥中心”,它决定了系统如何启动、加载哪些组件、如何与设备通信以及如何呈现给用户。本章将深入剖析该文件的结构与语法,并系统讲解基础组件配置、区域与设备管理,以及用户与权限设置,帮助你从“能用”迈向“会用”和“精通”。
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 引入。
操作流程:从零开始构建基础配置
- 备份原始文件:首次修改前,务必备份
configuration.yaml。可以通过 Samba、SSH 或 VS Code 插件操作。 - 定义基础信息:设置
homeassistant:下的名称、坐标、海拔、单位制与时区。坐标和海拔建议通过 HA 前端“开发者工具”中的“信息”页面获取,或使用地图工具精确查询。 - 启用核心组件:如
frontend:(前端界面)、history:(历史记录)、logbook:(日志本)。这些组件通常无需额外参数。 - 引入外部文件:创建
automations.yaml、scenes.yaml、customize.yaml等文件,并在主文件中使用!include引入。 - 校验配置:在 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 是必填项,它指定了集成类型。
常见误区与总结
!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)必须唯一,建议使用时间戳或 UUID。场景中的实体状态必须完整,否则未列出的属性将保持当前状态不变。
总结复盘:基础组件配置的核心在于“分离关注点”。自动化负责“何时做”,场景负责“做什么”,自定义化负责“怎么显示”。合理利用 !include 拆分文件,能让你的配置结构清晰,易于后期维护。
4.3 区域与设备管理:组织你的智能家居
核心原理:从实体到区域的逻辑映射
区域(Area)是 HA 2021 年后引入的重要概念,它允许你将物理空间(如“客厅”、“卧室”)与设备、实体进行逻辑关联。区域本身不存储配置,而是通过 UI 或 YAML 进行管理。设备(Device)是实体的容器,一个设备可以包含多个实体(例如一个传感器设备包含温度和湿度两个实体)。通过区域和设备,你可以轻松实现按房间控制、语音助手(如“关闭客厅的灯”)以及更直观的 UI 展示。
操作流程:创建区域并分配设备
- 创建区域:进入“设置” → “区域、标签与设备” → “区域”,点击“创建区域”,输入名称(如“客厅”)。
- 分配设备:在“设备”页面,找到目标设备,点击进入详情,在“区域”下拉菜单中选择“客厅”。
- 使用 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: 一楼客厅)。
常见误区与总结
device_class 或 name,可能会影响区域内的显示。另外,不要将区域与“标签(Label)”混淆,标签是更灵活的跨区域分组方式。
总结复盘:区域与设备管理是 HA 从“技术配置”走向“用户体验”的关键一步。良好的区域规划能显著提升日常使用的便捷性,也是构建复杂自动化(如“离家模式”按区域关闭所有设备)的基础。
4.4 用户与权限设置:安全与协作
核心原理:基于角色的访问控制(RBAC)
HA 提供了细粒度的用户与权限管理。默认情况下,HA 会创建一个“所有者”账户,拥有全部权限。你可以创建多个用户,并为每个用户分配不同的权限组(如“管理员”、“用户”、“访客”)。权限控制的对象包括:实体、设备、区域、自动化、场景以及配置修改等。此外,HA 还支持长期访问令牌(Long-Lived Access ),用于 API 调用或第三方应用集成,避免暴露密码。
操作流程:创建用户与配置权限
- 创建用户:进入“设置” → “人员” → “添加人员”,输入姓名和邮箱,设置密码。
- 分配权限组:在用户详情页,勾选“管理员”或“用户”等权限组。管理员可修改配置,普通用户只能控制实体。
- 生成长期访问令牌:在“人员” → 你的用户名 → “安全” → “创建令牌”,输入名称(如“手机APP”),生成后立即复制保存(仅显示一次)。
案例拆解:家庭多用户权限分配
假设家庭中有三位成员:爸爸(管理员)、妈妈(普通用户)、孩子(受限用户)。你可以这样设置:
- 爸爸:管理员权限,可管理所有设备、修改自动化、添加新集成。
- 妈妈:普通用户权限,可控制灯光、窗帘、空调等实体,但无法修改配置或添加设备。
- 孩子:受限用户权限,仅能控制客厅的灯和电视,无法访问摄像头或门锁。
对于受限用户,你可以在“实体”权限中,手动添加允许控制的实体列表,并拒绝其他实体。这种精细化的权限控制,既保证了家庭安全,又满足了不同成员的需求。
常见误区与总结
总结复盘:用户与权限设置是 HA 走向成熟应用的标志。通过 RBAC 模型,你可以在家庭或团队中实现安全、高效的协作。定期审查用户列表和令牌,及时清理不再使用的账户,是维护系统安全的良好习惯。
通过本章的学习,你已经掌握了 configuration.yaml 的结构、基础组件的配置方法、区域与设备的管理逻辑以及用户权限的分配策略。这些知识构成了 HA 日常操作的核心骨架,为后续深入探索自动化、场景、语音控制等高级功能打下了坚实的基础。在实际操作中,请务必遵循“先备份、再修改、后校验”的原则,确保你的智能家居系统稳定运行。