|
本帖最后由 zfgjy2005 于 2024-5-30 10:18 编辑
这两天看到有人询问 Aqara D100 门锁接入HA,就发个把我的接入过程分享一下。有需要自取,有建议欢迎探讨。
一、网关及门锁使用情况
这个门锁是通过蓝牙连接的,我的网关是小米多模1代,后来加了多模2代,也是支持的。因为是蓝牙连接,现在在米家app里面看,1代和2代网关下面都可以看到这个子设备。
顺便说下,这个门锁用了大概3年,挺好的,没出现过连接不上的问题,电池也耐用,一年大概充电1-2次,一次大概半天就好了,关键买的时候还便宜,印象中是几百块。
我是指纹开锁,老人是nfc开锁,有时候拿东西不方便用指纹或者nfc,喊手机或者手表siri开锁也可以(门锁接入HA以后,接入了HomeKit)。家里没有siri设备,不用担心其他人门外喊siri开锁。
关于自动化:目前设置了2个。一个是室内开门就开外面楼道灯,一个是室外开门就开家里过道灯2分钟(方便入户放东西、放外套到过道的外衣衣柜)。
二、接入过程
我是通过 xiaomi gateway3 集成添加的门锁,添加后这个设备会生成3个实体,Action 、 Contact、Battery。
Contact好像没啥用,Battery电池就不说了。下面重点说Action。
Action 状态有 lock 、door、空。开门时就会短暂为 door, 然后关闭时候为lock。
这里有2个bug,一个是直接通过Action状态的door无法判断是室内开门还是室外开门,第二个是每次door或者lock状态后,会跟一个 空 状态。所以平时看到的Action这个实体的状态大部分时间是 空。挺不友好的。
那下面就来稍微修改下。方法很多,我讲我常用的2个办法。
方法1. node red
没用HA之前,我就使用了node red,所以习惯有啥就拿它来用。
在node red 添加一个 events:state 节点,entity填入 门锁Action 这个实体就行,注意别填错了,还有门锁state、command等。然后可以勾选连接时输出,这样开始就有第一次状态输出,不用等开关门。观察这个节点输出的debug信息,发现 msg.data.new_state.attributes.message 会输出门锁的信息。
信息有:Lock、Unlock inside the door、Door is open、Unlock outside the door、Timeout is not closed。这样门锁的几个状态信息就有了。
另外从msg.data.new_state.attributes.key_id 可以显示开门人的id信息,msg.data.new_state.attributes.method 可以显示开门方式,指纹还是nfc卡什么的。
这个就可以把有用信息抽出来,用一个function节点,节点代码如下:顺便就把状态信息翻译一下,然后图标也根据状态来变化一下。
msg.payload = {
"message": msg.data.new_state.attributes.message,
"key_id": msg.data.new_state.attributes.key_id,
"method": msg.data.new_state.attributes.method
}
msg.data = ""
if (msg.payload.message == 'Lock') {
msg.payload.message = '门已关',
flow.set("door_icon", "mdi:door-closed-lock");
}
if (msg.payload.message == 'Unlock inside the door') {
msg.payload.message = '室内开门'
flow.set("door_icon", "mdi:door-open");
}
if (msg.payload.message == 'Door is open') {
msg.payload.message = '门已开'
flow.set("door_icon", "mdi:door-open");
}
if (msg.payload.message == 'Unlock outside the door') {
msg.payload.message = '室外开门'
flow.set("door_icon", "mdi:door-open");
}
if (msg.payload.message == 'Timeout is not closed') {
msg.payload.message = '门未关'
flow.set("door_icon", "mdi:door-open");
}
return msg;
有了这个信息,可以直接在后面接自动化,也可以生成一个新的门锁实体,然后在HA里面做自动化,下面就随你玩了。实体信息参考下图:
方法2:HA,template
有些人不用node red,直接HA也是可以的。
开始说xiaomi gateway3 生成的Action 状态看不到有用信息,但是在详细属性里面是可以的。如下图,我们需要Message、Method、Key ID。
这样就可以用template 模版,代码如下:
sensor:
- platform: template
sensors:
sensor_lock_new:
friendly_name: "Lock_new"
value_template: "{{ state_attr('sensor.xxxxxx_action', 'message') }}"
attribute_templates:
Key_ID: "{{ state_attr('sensor.xxxxxx_action', 'Key_ID) }}"
Method: "{{ state_attr('sensor.xxxxxx_action', 'id') }}"
如果只需要Message,可以在配置——设备——辅助元素,添加template,这样是图形界面,直接生效。
有了template sensor,后面再HA里面根据需要设置自动化。
完了,有点啰嗦
|
评分
-
查看全部评分
|