『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 14260|回复: 8

[经验分享] 蓝牙网关mqttl固件的小米米家智能门锁的配置文件

[复制链接]

77

主题

1391

帖子

2万

积分

元老级技术达人

积分
24360
金钱
22929
HASS币
290
发表于 2020-8-29 10:10:16 | 显示全部楼层 |阅读模式
本帖最后由 dscao 于 2020-8-29 10:12 编辑

参考:
https://bbs.hassbian.com/forum.php?mod=redirect&goto=findpost&ptid=10434&pid=339785

商品:https://www.mi.com/mj-smartlock


小米米家智能门锁标准版终于安装上去了,目前测试看到的数据只有这些:

上午10:37 收到关于 mqttl/1020275136/7 的消息[ 85 ]
5f486dec02
QoS: 0 - Retain: false
上午10:37 收到关于 mqttl/1020275136/7 的消息[ 84 ]
5f486de500
QoS: 0 - Retain: false
上午10:37 收到关于 mqttl/1020275136/11 的消息[ 83 ]
5f486de58001000220
QoS: 0 - Retain: false
上午10:37 收到关于 mqttl/1020275136/11 的消息[ 82 ]
5f486ddd00000000a1
QoS: 0 - Retain: false
上午10:37 收到关于 mqttl/1020275136/7 的消息[ 81 ]
5f486ddb01
QoS: 0 - Retain: false
上午10:37 收到关于 mqttl/1020275136/7 的消息[ 80 ]
5f486dd500
QoS: 0 - Retain: false
上午10:37 收到关于 mqttl/1020275136/11 的消息[ 79 ]
5f486dd500000000a4
QoS: 0 - Retain: false
上午10:37 收到关于 mqttl/1020275136/11 的消息[ 78 ]
5f486dcf00000000a1
QoS: 0 - Retain: false
上午10:37 收到关于 mqttl/1020275136/7 的消息[ 77 ]
5f486dcb01
QoS: 0 - Retain: false
上午10:36 收到关于 mqttl/1020275136/7 的消息[ 76 ]
5f486dcb00
QoS: 0 - Retain: false
上午10:36 收到关于 mqttl/1020275136/11 的消息[ 75 ]
5f486dc900000000a4
QoS: 0 - Retain: false
上午10:36 收到关于 mqttl/1020275136/7 的消息[ 74 ]
5f486dc800
QoS: 0 - Retain: false
上午10:36 收到关于 mqttl/1020275136/11 的消息[ 73 ]
5f486dc300000000a4
QoS: 0 - Retain: false
上午10:36 收到关于 mqttl/1020275136/7 的消息[ 71 ]
5f486dab01
QoS: 0 - Retain: false
上午10:36 收到关于 mqttl/1020275136/7 的消息[ 70 ]
5f486d9e00
QoS: 0 - Retain: false
上午10:36 收到关于 mqttl/1020275136/11 的消息[ 69 ]
5f486d9d8001000220
QoS: 0 - Retain: false
上午10:36 收到关于 mqttl/1020275136/7 的消息[ 68 ]
5f486d9501
QoS: 0 - Retain: false
上午10:36 收到关于 mqttl/1020275136/11 的消息[ 67 ]
5f486d9500000000a4
QoS: 0 - Retain: false
上午10:35 收到关于 mqttl/1020275136/7 的消息[ 66 ]
5f486d8702
QoS: 0 - Retain: false
QoS: 0 - Retain: false
上午10:35 收到关于 mqttl/1020275136/11 的消息[ 64 ]
5f486d8400000000a4
QoS: 0 - Retain: false
上午10:35 收到关于 mqttl/1020275136/11 的消息[ 63 ]
5f486d8300000000a4
QoS: 0 - Retain: false
上午10:35 收到关于 mqttl/1020275136/7 的消息[ 62 ]
5f486d8000
QoS: 0 - Retain: false
上午10:35 收到关于 mqttl/1020275136/11 的消息[ 61 ]
5f486d7f00000000a4
QoS: 0 - Retain: false
上午10:35 收到关于 mqttl/1020275136/11 的消息[ 60 ]
5f486d7b00000000a3
QoS: 0 - Retain: false
上午10:35 收到关于 mqttl/1020275136/11 的消息[ 59 ]
5f486d7900000000a2
QoS: 0 - Retain: false
上午10:35 收到关于 mqttl/1020275136/11 的消息[ 58 ]
5f486d7600000000a1
QoS: 0 - Retain: false
上午10:35 收到关于 mqttl/1020275136/11 的消息[ 57 ]
5f486d7400000000a3
QoS: 0 - Retain: false
上午10:35 收到关于 mqttl/1020275136/11 的消息[ 56 ]
5f486d7100000000a2
QoS: 0 - Retain: false


敲门/ 撬门/门卡住 没试过,其它的也未测试到,不清楚的就保留原来的。

有效的已测试:开门/关门/超时未关/门外开锁/上提把手锁门(门内门外一样)/反锁/解除反锁/门内开锁


mqttl/1020275136/4106 也是包含时间和电量的


value[8:12] 为 'c0de' 时异常,异常信息在value[12:16]



最终实测后改进的代码:

mqttl_xiaomilock.yaml
binary_sensor:
  - platform: mqtt
    name: mijia_lock
    state_topic: 'mqttl/1020275136/7'    #mqttl/设备did/eid, 替换成正确的did和eid
    value_template: >-
      {% if value[8:10] == '00' or value[8:10] == '02' or value[8:10] == '05'%}
        unlock
      {% elif value[8:10] == '01' or value[8:10] == '03' or value[8:10] == '04' %}
        lock
      {% endif %}
    payload_on: 'unlock'
    payload_off: 'lock'
    device_class: lock
    qos: 1
sensor:
  - platform: mqtt   #智能锁状态
    name: lock_state
    icon: 'mdi:lock-smart'
    state_topic: 'mqttl/1020275136/7'    #mqttl/设备did/eid, 替换成正确的did和eid
    value_template: >-
      {% if value[8:10] == '00' %}
      开门
      {% elif value[8:10] == '01' %}
      关门
      {% elif value[8:10] == '02' %}
      超时未关
      {% elif value[8:10] == '03' %}
      敲门
      {% elif value[8:10] == '04' %}
      撬门
      {% elif value[8:10] == '05' %}
      门卡住
      {% endif %}
  - platform: mqtt
    name: lock_state_update_time
    icon: 'mdi:lock-clock'
    state_topic: 'mqttl/1020275136/7'
    value_template: "{{ value[0:8]|int(0,16)|timestamp_local }}"
  #开锁方式
  - platform: mqtt
    name: lock_method
    icon: 'mdi:lock-question'
    state_topic: 'mqttl/1020275136/11'
    value_template: >-
      {% if value[16:17] == '0' %}
      蓝牙
      {% elif value[16:17] == '1' %}
      密码
      {% elif value[16:17] == '2' %}
      指纹
      {% elif value[16:17] == '3' %}
      钥匙
      {% elif value[16:17] == '4' %}
      转盘
      {% elif value[16:17] == '5' %}
      NFC
      {% elif value[16:17] == '6' %}
      一次性密码
      {% elif value[16:17] == '7' %}
      双重验证
      {% elif value[16:17] == 'a' %}
      人工
      {% elif value[16:17] == 'b' %}
      自动
      {% elif value[16:17] == 'f' %}
      异常
      {% else %}
      {{ value[16:17] }}
      {% endif %}      

  #门锁事件     
  - platform: mqtt
    name: lock_event
    icon: 'mdi:lock-question'
    state_topic: 'mqttl/1020275136/11'
    value_template: >-
      {% if value[17:18] == '0' %}
      门外开锁
      {% elif value[17:18] == '1' %}
      上提把手锁门
      {% elif value[17:18] == '2' %}
      反锁
      {% elif value[17:18] == '3' %}
      解除反锁
      {% elif value[17:18] == '4' %}
      门内开锁
      {% elif value[17:18] == '5' %}
      门内上锁
      {% elif value[17:18] == '6' %}
      开启童锁
      {% elif value[17:18] == '7' %}
      关闭童锁
      {% elif value[17:18] == 'f' %}
      异常
      {% else %}
      {{ value[17:18] }}
      {% endif %}
       

  #可以按照下边的格式匹配操作者
  - platform: mqtt
    name: lock_user
    icon: 'mdi:human-handsdown'
    state_topic: 'mqttl/1020275136/11'
    value_template: >-
      {% if value[8:16] == '00000000' %}
      管理员
      {% elif value[8:16] == 'ffffffff' %}
      未知操作者
      {% elif value[8:16] == 'DEADBEEF' %}
      无效操作者
      {% else %}
      {{ value[8:16] }}
      {% endif %}
      
#0x00000000 - 0x7FFFFFFF:蓝牙(最多 2147483647 个)
#0x80010000 - 0x8001FFFF:指纹(最多 65536 个)
#0x80020000 - 0x8002FFFF:密码(最多 65536 个)
#0x80030000 - 0x8003FFFF:钥匙(最多 65536 个)
#0x80040000 - 0x8004FFFF:NFC(最多 65536 个)
#0x80050000 - 0x8005FFFF:双重验证(最多 65536 个)

  - platform: mqtt
    name: lock_event_update_time
    icon: 'mdi:lock-clock'
    state_topic: 'mqttl/1020275136/11'
    value_template: >-
      {% if value[8:12] != 'c0de' %}
        {{ value[0:8]|int(0,16)|timestamp_local }}
      {% endif %}
  - platform: mqtt
    name: lock_alert
    icon: 'mdi:lock-alert'
    state_topic: 'mqttl/1020275136/11'
    value_template: >-
      {% if value[8:12] == 'c0de' %}
        {% if value[12:16] == '0000' %}
        密码多次验证失败
        {% elif value[12:16] == '0001' %}
        指纹多次验证失败
        {% elif value[12:16] == '0002' %}
        操作超时(密码输入超时)
        {% elif value[12:16] == '0003' %}
        撬锁
        {% elif value[12:16] == '0004' %}
        重置按键按下
        {% elif value[12:16] == '0005' %}
        错误钥匙频繁开锁
        {% elif value[12:16] == '0006' %}
        钥匙孔异物
        {% elif value[12:16] == '0007' %}
        钥匙未取出
        {% elif value[12:16] == '0008' %}
        错误NFC频繁开锁
        {% elif value[12:16] == '0009' %}
        超时未按要求上锁
        {% elif value[12:16] == '1000' %}
        电量低于10%
        {% elif value[12:16] == '1001' %}
        电量低于5%
        {% elif value[12:16] == '1002' %}
        指纹传感器异常
        {% else %}
        正常
        {% endif %}
      {% endif %}
  - platform: mqtt
    name: lock_alert_update_time
    icon: 'mdi:lock-clock'
    state_topic: 'mqttl/1020275136/11'
    value_template: >-
      {% if value[8:12] == 'c0de' %}
        {{ value[0:8]|int(0,16)|timestamp_local }}
      {% endif %}
  - platform: mqtt
    name: lock_battery
    state_topic: 'mqttl/1020275136/4106'
    value_template: "{{ value[8:10]|int(0,16) }}"
    unit_of_measurement: '%'
    device_class: battery
  - platform: mqtt
    name: lock_battdate
    icon: 'mdi:update'
    state_topic: 'mqttl/1020275136/4106'
    value_template: "{{ value[0:8]|int(0,16)|timestamp_custom('%Y-%m-%d') }}"


homeassistant:
  customize:
sensor.lock_state:
      friendly_name: 门状态
    sensor.lock_state_update_time:
      friendly_name: 状态变更时间
    sensor.lock_event:
      friendly_name: 锁事件
    sensor.lock_method:
      friendly_name: 开锁方式
    sensor.lock_user:
      friendly_name: 操作者
    sensor.lock_event_update_time:
      friendly_name: 事件发生时间
    sensor.lock_alert:
      friendly_name: 警告信息
    sensor.lock_alert_update_time:
      friendly_name: 警告发生时间
    sensor.lock_battery:
      friendly_name: 电池电量
    sensor.lock_battdate:
      friendly_name: 电量报告日期

011.JPG

013.JPG

012.JPG


回复

使用道具 举报

5

主题

47

帖子

718

积分

论坛DIY达人

积分
718
金钱
666
HASS币
20
发表于 2020-8-29 19:41:48 | 显示全部楼层
不错不错  
回复

使用道具 举报

0

主题

220

帖子

1737

积分

金牌会员

Rank: 6Rank: 6

积分
1737
金钱
1517
HASS币
0
QQ
发表于 2020-9-13 18:37:09 | 显示全部楼层
感谢楼主分享,现在可以安心买这个锁了。
回复

使用道具 举报

1

主题

17

帖子

184

积分

注册会员

Rank: 2

积分
184
金钱
167
HASS币
0
发表于 2020-9-14 12:50:39 | 显示全部楼层
   小米智能门锁E 能用吗
回复

使用道具 举报

40

主题

2176

帖子

8290

积分

元老级技术达人

积分
8290
金钱
6099
HASS币
110
发表于 2020-9-14 19:49:28 | 显示全部楼层
我说咋看的这么眼熟....原来一看上面的链接...
好像更完善了 我拿来抄咯
回复

使用道具 举报

4

主题

169

帖子

1413

积分

金牌会员

Rank: 6Rank: 6

积分
1413
金钱
1244
HASS币
0
发表于 2020-9-15 16:21:08 | 显示全部楼层
为什么要特别设置一个binary_sensor,而且把敲门、撬门等都归到lock中呢?
回复

使用道具 举报

77

主题

1391

帖子

2万

积分

元老级技术达人

积分
24360
金钱
22929
HASS币
290
 楼主| 发表于 2020-9-15 21:19:32 | 显示全部楼层
blackcui 发表于 2020-9-15 16:21
为什么要特别设置一个binary_sensor,而且把敲门、撬门等都归到lock中呢?

暂时还没用上,本来是想着门的打开和关闭两种状态,用于自动化中识别。

评分

参与人数 1金钱 +5 收起 理由
blackcui + 5 感谢楼主分享!

查看全部评分

回复

使用道具 举报

0

主题

17

帖子

54

积分

注册会员

Rank: 2

积分
54
金钱
37
HASS币
0
发表于 2021-2-19 04:49:55 | 显示全部楼层
学习 学习
回复

使用道具 举报

6

主题

259

帖子

2998

积分

金牌会员

Rank: 6Rank: 6

积分
2998
金钱
2739
HASS币
0
发表于 2021-2-20 16:24:19 | 显示全部楼层
复制放到hass有错误
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-26 22:48 , Processed in 0.655534 second(s), 35 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表