Home Assistant 智能门锁完整指南:远程控制与临时访客密码,一次接好
【免费下载链接】home-assistant.io:blue_book: Home Assistant User documentation项目地址: https://gitcode.com/GitHub_Trending/ho/home-assistant.io
深夜独自开门时,你希望家里门锁能远程掌控,而不是只能干等。本文带你把智能门锁接入 Home Assistant,从选协议到上线自动化,走完全流程。
接上门锁后,你能做什么
先说结论:接入后你的门锁不再只是"本地按键",而变成一个可被系统指挥、可被系统观测的实体(entity)。典型能力有 4 点:
- 状态随时可见:locked / unlocked 状态在仪表盘上实时刷新,出门没锁门一眼就能发现
- 远程开锁/上锁:在界面、手机 App 或语音里一条指令完成操作
- 密码可编程下发:访客码、保洁码按槽位写入或清空,不用在 App 里手动改
- 事件可驱动:每次开锁都能触发通知、联动摄像头、写入日志
🔑 值得折腾吗?如果你家已经有 MQTT 或 Z-Wave 网关,且门锁支持其中之一,那接入成本很低,收益立竿见影。
三条路怎么选:MQTT / Z-Wave / 厂商集成
先给结论:能走 Z-Wave 就走 Z-Wave,锁控场景优先稳定性;设备本身就是 MQTT 网关形态就选 MQTT;品牌锁且官方有集成,直接用厂商集成省心。
| 维度 | MQTT | Z-Wave(zwave_js) | 厂商专用集成 |
|---|---|---|---|
| 典型设备 | 自组网/网关型门锁 | 主流品牌智能锁 | Nest、Schlage 等品牌锁 |
| 上手难度 | 中,要配 topic 和 payload | 低,入网即识别 | 低,按向导走 |
| 可控程度 | 完全自定义控制逻辑 | 高,支持用户码槽操作 | 受厂商能力上限约束 |
| 稳定性 | 依赖 broker 质量 | 高,协议自带安全机制 | 厂商优化好 |
下面分别走通前两条路线。
路线 A:MQTT 门锁上线
这一节帮你把一台支持 MQTT 的门锁从 broker 接到 Home Assistant 实体。
硬件前提:一台跑着 MQTT broker(如 Mosquitto)的机器,且门锁能与 broker 正常通信。
写配置:在configuration.yaml中加一个 lock 组件,核心是"状态在哪个 topic 读、命令往哪个 topic 发":
mqtt: - lock: name: Frontdoor state_topic: "home-assistant/frontdoor/state" command_topic: "home-assistant/frontdoor/set" payload_lock: "LOCK" payload_unlock: "UNLOCK"如果你的锁要带密码操作,再加两行,用code_format限定 4 位数字,用command_template把密码拼进下发报文:
code_format: "^\\d{4}$" command_template: '{ "action": "{{ value }}", "code": "{{ code }}" }'⚠️ 注意retain: true的风险:重启后可能重放旧的解锁消息,不确定的设备别开保留。
验证成功:重启 Home Assistant 后,设备列表里出现lock.frontdoor,状态显示 locked;再用mosquitto_pub -h 127.0.0.1 -t home-assistant/frontdoor/set -m "LOCK"手动发一条消息,实体状态变化就说明链路通了。更多参数细节见 MQTT 锁组件文档。
路线 B:Z-Wave 门锁上线
这一节帮你把 Z-Wave 门锁入网并写好用户码,全程以 Home Assistant Connect ZWA-2 控制器 + Z-Wave JS 集成为例。
第一步:装好控制器。把 ZWA-2 插到主机上,在设置中按向导完成 Z-Wave JS 加载项安装,生成或输入 S0/S2 网络安全密钥,等待加载项启动。
第二步:门锁入网。进入 Z-Wave 集成面板执行"添加入网",把门锁切换到配对模式(通常按机身按键),设备列表出现后,若门锁支持 S2 安全,输入机身印的 PIN 完成安全握手。
第三步:写入用户码。入网后你得到lock.front_door实体,访客密码用zwave_js.set_lock_usercode按槽位下发,比如写到 5 号槽:
action: zwave_js.set_lock_usercode target: entity_id: lock.front_door data: code_slot: 5 usercode: "1234"服务参数说明可查 set lock user code 动作文档,集成整体用法见 zwave_js 文档。
不走到门口也能开门:三种操作入口
接入成功后,你不必再摸手机 App,Home Assistant 里有三条现成通道:
- 仪表盘卡片:把 lock 实体拖成卡片,点按钮即锁/开锁,这是最直接的界面控制
- 移动 App:登录你的 Home Assistant 实例后,在实体列表里点门锁卡片操作,配合通知可以人在公司也能远程解锁
- 语音控制:结合 Assist 功能,一句"锁上前门"即可执行;在语音助手的意图配置里把 lock 域的意图映射到实体,测试通过后即可日常使用
三种方式本质都是调用同一组锁服务(lock.lock/lock.unlock),所以权限与校验逻辑完全一致。
三套现成自动化:访客码、日志、警报
这一节给你三块可以直接抄的积木,分别对应"给临时权限""知道谁进过门""发现异常"。
1. 临时访客密码:用一个 input_text 存访客邮箱,自动化里生成密码、写入用户码槽、发通知:
- action: zwave_js.set_lock_usercode target: entity_id: lock.front_door data: code_slot: 5 usercode: "{{ states('input_text.guest_code') }}" - action: notify.email data: message: "你的临时访问密码: {{ states('input_text.guest_code') }}"访客离开后,用zwave_js.clear_lock_usercode清空该槽位即可收回权限。
2. 访问日志:监听lock.front_door的状态变化,每次变动写一条 logbook 记录:
- trigger: - type: opened platform: lock entity_id: - lock.front_door action: - action: logbook.log data: name: "前门" message: "状态变为 {{ trigger.to_state.state }}"3. 异常开锁警报:全家离开 + 门锁从 locked 变 unlocked 时,推通知并触发警报面板:
- condition: state entity_id: person.family state: not_home满足条件后执行notify.mobile_app_phone发通知,再调用alarm_control_panel.alarm_trigger拉响家中警报。⚠️ 触发条件里的实体 ID 记得换成你家的实际人员实体。
卡住了?高频故障速查
Q:实体一直显示 unknown 或状态不动?先确认state_topic大小写和斜杠是否完全一致(some-topic/和some-topic是两个 topic),再用mosquitto_sub订阅看锁是否真的在发布状态。
Q:发命令没反应,但订阅能看到消息?查command_topic是否与锁端固件约定一致,并确认 payload 完全匹配(多了空格也算不匹配)。MQTT 锁没有回执机制,建议开optimistic前先确认设备行为。
Q:Z-Wave 门锁入网失败?看信号与距离,把控制器尽量靠近门锁再试;S2 设备要确认输入的 PIN 是锁上对应密钥类型的 PIN,输错会握手失败。
Q:自动化不触发?在自动化的运行记录里看有没有触发但被条件拦下;再单独手动调用一次相关服务,确认是触发器问题还是执行链路问题。
写在最后
到这里,你的门锁已经从"本地开关"升级成系统里可查、可控、可追溯的实体。下一步建议:给解锁动作加上位置校验(仅到家范围内可开),以及把访客码自动化串进日历事件,权限管理会更省心。
延伸资料:
- MQTT 锁组件文档
- Z-Wave JS 集成文档
- set lock user code 动作
【免费下载链接】home-assistant.io:blue_book: Home Assistant User documentation项目地址: https://gitcode.com/GitHub_Trending/ho/home-assistant.io
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考