Home Assistant 智能门锁完整指南:远程开关锁、临时访客密码与异常告警 3 个场景全搞定
【免费下载链接】home-assistant.io:blue_book: Home Assistant User documentation项目地址: https://gitcode.com/GitHub_Trending/ho/home-assistant.io
把智能门锁接入 Home Assistant 后,它就从门上的硬件变成一个可远程开关、可发临时密码、能记录每次开门的自动化实体。这篇指南按三个真实场景带你做:人在外面怎么开锁、怎么给访客发一把"用完即焚"的密码、家里没人时怎么盯住门的异动。
先选路线:MQTT、Z-Wave 还是厂商集成?
动手前花一分钟判断你手里是什么设备,路线选错后面全白忙:
| 路线 | 适合谁 | 入网方式 | 你将得到 |
|---|---|---|---|
| MQTT | 有 MQTT 接口的锁或自组设备 | configuration.yaml里声明实体,自己定义 topic 和报文 | 完全自由的控制逻辑,可任意定制报文格式 |
| Z-Wave(Z-Wave JS) | 手持 Z-Wave 智能锁 | 控制器装好后在界面里入网,几乎零配置 | 即插即用,带安全加密和键盘开锁事件 |
| 厂商集成 | 已有品牌生态(如官方适配的锁) | 在设置中搜索品牌名直接添加 | 功能最完整,省掉一切折腾 |
经验判断:锁是 Z-Wave 的就走 Z-Wave,最省心;锁带 MQTT 或你想深度定制,选 MQTT;都不沾边就先查厂商有没有现成集成。
场景一:人在外面,怎么远程开/关锁 📱
门锁入网后会以lock.实体出现在系统里,三条控制通道随即可用。
仪表盘直控:给仪表盘加一个实体卡片,选中门锁实体即可。卡片上直接点"上锁/开锁",状态实时回显——这是最直接的验证方式,建议装完先试一遍。
手机 App 控制:Home Assistant 官方 App 登录你的实例后,门锁实体和家里一样可操作。人在公司、路上、酒店,都能从设备列表里找到它,点一下完成开关锁。
语音控制:配好 Assist 语音助手后,直接说:
- "把前门锁上"
- "前门锁好了吗?"
后者能拿到当前状态作为回答,出门后确认一把特别实用。
场景二:给访客下发"用完即焚"的临时密码 🔐
Z-Wave 锁通常有多个用户码位(code slot),这就是天然的权限管理工具:固定成员占固定槽位,访客用一个专用槽位,人来写入、人走清空。
下发密码(写入 7 号槽位):
# 给访客写入临时用户码:slot 7,PIN 2849 action: zwave_js.set_lock_usercode target: entity_id: lock.front_door data: code_slot: 7 usercode: "2849"把"写入 + 通知"串成一条自动化,访客还没到家就收到密码:
alias: 下发临时访客密码 triggers: - trigger: time at: "2026-09-20 08:00:00" actions: - action: zwave_js.set_lock_usercode target: { entity_id: lock.front_door } data: { code_slot: 7, usercode: "2849" } - action: notify.notify data: message: "今日上门密码 2849,仅限今天使用"访客走后再清空同一槽位,密码即刻失效:
# 访客离开后清空 7 号槽位,密码即刻作废 action: zwave_js.clear_lock_usercode target: entity_id: lock.front_door data: code_slot: 7这个"写入—使用—清空"的循环,就是完整的访问权限生命周期。两个服务的详细参数可查 zwave_js.set_lock_usercode 和 zwave_js.clear_lock_usercode 文档。
场景三:不在家时,谁动了我的门? 🚨
Z-Wave JS 会把门锁的键盘操作转成通知事件(比如Keypad unlock operation),这是"门被谁开了"的关键信号。
留痕:记录访问日志
# 状态一变就记一条日志,事后随时可查 actions: - action: logbook.log data: name: 前门 message: "状态变更为 {{ trigger.to_state.state }}" entity_id: lock.front_door告警:没人时开锁立刻提醒
alias: 键盘开锁告警 triggers: - trigger: event event_type: zwave_js_notification event_data: node_id: 14 event_label: "Keypad unlock operation" conditions: - condition: state entity_id: person.family state: not_home actions: - action: notify.notify data: message: "家中无人时,前门被键盘开锁"node_id换成你的锁在 Z-Wave 网络里的实际编号——在开发者工具的"事件"里订阅zwave_js_notification,随便按一下门,就能看到真实数据。日志服务细节见 logbook.log。
配置速查:MQTT 门锁与 Z-Wave 入网步骤 ⚙️
MQTT 路线:确认 broker 可用后,在configuration.yaml声明实体即可,topic 和报文格式全由你定。
# configuration.yaml:声明一个 MQTT 门锁实体 mqtt: - lock: name: 后院门 state_topic: "myhome/backgate/state" command_topic: "myhome/backgate/command" payload_lock: "LOCK" payload_unlock: "UNLOCK" state_locked: "LOCK" state_unlocked: "UNLOCK"state_topic接收锁的状态,command_topic是下发指令的通道;需要 PIN 时可加code_format约束格式。完整字段说明见 MQTT lock 集成文档。
Z-Wave 路线:硬件上把控制器(如 Home Assistant Connect Z-Wave)插到主机上,然后:
- 设置里添加 Z-Wave JS 集成,选 Recommended installation,等加载项启动完成
- 在集成配置页选择"Add new network"并生成网络密钥
- 在菜单里执行入网(Inclusion),把门锁进入配对模式,S2 安全锁输入面板上的 PIN
- 入网完成后,在设备面板确认锁已识别,节点信息一目了然
更多选项(如 S0/S2 安全等级、网络备份)参考 Z-Wave JS 集成文档。
踩坑自查清单:连不上、自动化不触发怎么办
- 实体状态卡住不动:MQTT 锁先确认 broker 在线,用客户端手动往
state_topic发布一条状态报文,看实体是否跟随变化——多数问题出在 topic 或 payload 大小写不一致。 - Z-Wave 锁入网成功但没实体:打开设备面板看节点状态,是否处于 Excluded 或睡眠;把锁重新入网一次。
- 命令发了但锁没反应:Z-Wave 锁要确认节点在线、信号强度足够(离控制器远可加重复器);MQTT 锁则检查
command_topic拼写和 payload 是否匹配。 - 自动化不触发:先在"开发者工具 → 事件"订阅事件,手动触发一次确认数据确实到达;再逐条核对
entity_id、node_id、状态值是否和实际一致。 - 告警误报:检查
person.family的地理围栏和离/回家延迟,状态没切到not_home告警就不会触发,切了才触发。 - 密码改了不生效:Z-Wave 锁写入用户码后要确认锁端回执;个别锁需要等待同步,写入后稍等几秒再验证。
写在最后
走完这三个场景,门锁就不再是一把"只能站门口按"的锁:远程能开关,访客能限时使用,每一次开门都有记录、异常立刻告警。接下来可以顺着 Matter 协议的方向继续看——它正在让不同品牌的门锁用同一套标准接入,Z-Wave JS 集成文档 和 MQTT lock 文档 里也留了相应的位置,值得常回来翻一翻。
【免费下载链接】home-assistant.io:blue_book: Home Assistant User documentation项目地址: https://gitcode.com/GitHub_Trending/ho/home-assistant.io
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考