30分钟把智能门锁接入Home Assistant:远程控制与访问管理实战
【免费下载链接】home-assistant.io:blue_book: Home Assistant User documentation项目地址: https://gitcode.com/GitHub_Trending/ho/home-assistant.io
凌晨一点,手机弹出一条推送:「前门仍处于解锁状态,且家中无人。」你点开 Home Assistant,确认是传感器误报,顺手点一下远程落锁——门,确认锁上了。接入智能门锁之后,远程锁/解锁、给访客发临时密码、留一份访问记录,就都成了日常操作。
准备:选对门锁与接入方式
三种接入方式快速对比
先花一分钟判断你的门锁走哪条路,这决定了后面所有步骤:
| 接入方式 | 特点 | 适合人群 | 配置难度 |
|---|---|---|---|
| 厂商专用组件 | 官方适配(如 Nuki、Schlage),填 token 或在 HomeKit/Matter 流程里添加即可 | 单一品牌生态用户 | 低 |
| Z-Wave | 通过 Z-Wave 控制器并入,支持 S2 加密(设备间通信的加密密钥等级),即插即用 | 想省心、重稳定性的用户 | 低 |
| MQTT | 靠 topic 收发消息(topic 相当于设备间的"频道号"),负载、密码格式全部自定义 | 设备开放协议、喜欢折腾的用户 | 中高 |
一句话结论:组件列表里有官方集成就直接用;Z-Wave 门锁配个控制器就行;只剩 MQTT 接口的锁,自由度最高,但要自己写配置。
硬件与环境清单
动手前把这几项打勾:
- 较新版本的 Home Assistant(Z-Wave JS 集成要求 2021.2 以上,MQTT 门锁则对版本无特殊要求)
- MQTT 路线:一台可用的 MQTT broker(消息中转服务,比如 Mosquitto)
- Z-Wave 路线:一个 Z-Wave 控制器(如 Home Assistant 官方 Connect ZWA-2)
- 门锁与控制器信号可达、都在家庭网络内
- 一个能编辑
configuration.yaml的管理员账号(仅 MQTT 路线需要)
把门锁接入 Home Assistant
方式A:MQTT(自定义最强)
MQTT 门锁的必填项其实只有一个:command_topic。下面这份最小可用配置写进configuration.yaml,保存后重启即可:
mqtt: - lock: name: Backdoor # 仪表盘上显示的名字 command_topic: "lock/backdoor/cmd" # 向它发布命令,门锁就会动作 state_topic: "lock/backdoor/status" # 门锁向它上报当前状态 payload_lock: "1" # 发布 "1" 表示上锁 payload_unlock: "0" # 发布 "0" 表示开锁这段配置到底在干什么:command_topic是 Home Assistant 投递"锁门/开门"指令的信箱,state_topic是门锁回报"我现在是什么状态"的频道。卡片上的锁没状态,跟着这个频道实时变化;如果门锁没有反馈频道,它会进入乐观模式——发完命令直接假装执行成功,想拿真实状态就必须接上state_topic。
进阶一点的安全配置:加上code_format可以限定下发的密码格式(比如只收 6 位数字),qos: 1让消息至少送达一次,少丢命令。
方式B:Z-Wave(即插即用)
Z-Wave 门锁不用写 YAML,全程界面操作:
- 把控制器插入 Home Assistant 主机,等系统自动发现
- 在设置里找到 Z-Wave 集成,按向导选推荐安装项完成加载
- 首次建网时留空安全密钥字段即可,系统会生成一套;如果这个控制器以前配过设备,必须填入旧的 S0 密钥(旧网络的通信密钥),否则老设备掉线
- 点"添加设备",把门锁切到配对模式(通常长按门锁上的按键)
- 门锁支持 S2 安全认证时,输入锁体上印着的 PIN 码,以最高安全等级入网
添加完成后,设备页里能看到锁实体和信号强度:
厂商专用组件则更省事:Nuki、Schlage 等品牌在集成列表里直接搜名字,填入桥接器地址和访问令牌,或在 HomeKit/Matter 添加流程里认领设备,全程无代码。
用起来:三个高频场景
场景1:远程锁门与状态确认
- 仪表盘:把锁实体拖成卡片,点一下按钮就下发指令,卡片文字是门锁实际回报的状态
- 移动 App:出差路上打开 App 找到锁实体,锁门、看状态都在两秒内完成
- 语音:对着 Assist 说"锁定前门",语音助手会替你调用锁的动作
关键习惯:永远以卡片上的状态为准,而不是"我发过命令了"。
场景2:给访客发临时密码并留痕
给门锁单独划一个用户码槽位(锁上存放密码的编号格,Z-Wave 锁常见 2~6 个),专门留给访客。下面两个自动化分别负责"发码"和"留痕":
alias: 设置并通知访客临时密码 trigger: - trigger: button # 点仪表盘按钮时触发 entity_id: input_button.invite_visitor action: - service: zwave_js.set_lock_usercode data: node_id: 15 # 前门在 Z-Wave 网络里的编号 code_slot: 4 # 访客专用码槽 usercode: "7391" # 本次下发的密码 - service: notify.email data: target: visitor@example.com message: "今日入户密码 7391,22 点后作废"alias: 前门访问日志 trigger: - trigger: state entity_id: lock.front_door # 锁状态一变就触发 action: - service: logbook.log data: name: 前门 entity_id: lock.front_door message: "状态变为 {{ trigger.to_state.state }}"前者点一次按钮就把密码写进锁并通知访客,后者把每一次状态变化写进日志。之后在「记录/日志」页面按"前门"一筛,谁在什么时间开过门、变成什么状态,一目了然——访客密码用多久、用过没有,全有凭据。
场景3:异常开锁自动告警
把"门被打开"和"家里有没有人"绑在一起判断,才是安防自动化的灵魂:
alias: 异常开锁告警 trigger: - trigger: state entity_id: lock.front_door from: "locked" # 从已锁状态 to: "unlocked" # 变成解锁时触发 condition: - condition: state entity_id: person.all_members state: not_home # 且全家都外出才执行 action: - service: notify.mobile_app_myphone data: title: 前门异常 message: "门锁被打开,且家中无人" - service: siren.turn_on entity_id: siren.front_entrance_siren # 同时启动门口警号家人回家开锁不会打扰你,只有"无人状态下的开锁"才会推送加警号,误报率很低。
排障:不工作时按顺序查这4件事
门锁相关自动化失灵时,别乱改,按这个顺序过一遍:
- 在线状态:MQTT 锁先看 broker 是否存活,用开发者工具里的事件面板向
state_topic发条测试消息;Z-Wave 锁看设备页节点是否在线、信号格数够不够 - 触发器:自动化详情里"上次触发"时间不动?核对触发器里的实体和
from/to值是否与真实状态一字不差(locked写成lock是最常见的坑) - 实体 ID:重配对或改名后实体 ID 会变,
node_id、entity_id都要去实体详情页现抄 - 安全密钥与固件:Z-Wave 加锁失败或状态不刷新,先确认 S2/S0 密钥填对,再用厂商 App 把门锁固件升到最新
收尾:还能做什么
Matter 协议正在快速铺开,新一代智能门锁越来越多支持 Thread/Matter,未来"一次添加、跨平台通用"会是常态,现在接入的门锁届时也能平滑迁移。
- MQTT 锁集成文档
- Z-Wave JS 集成文档
- Nuki 集成文档
- 锁组件说明
【免费下载链接】home-assistant.io:blue_book: Home Assistant User documentation项目地址: https://gitcode.com/GitHub_Trending/ho/home-assistant.io
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考