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

 找回密码
 立即注册
楼主: dscao

[经验分享] 米家门锁通过多模接入ha后利用自动化分离门和锁的状态下

  [复制链接]

0

主题

39

帖子

324

积分

中级会员

Rank: 3Rank: 3

积分
324
金钱
285
HASS币
0
发表于 2021-3-9 21:21:23 | 显示全部楼层
是所有的代码分开几个文件都放进packages里面吗
回复

使用道具 举报

0

主题

19

帖子

1140

积分

金牌会员

Rank: 6Rank: 6

积分
1140
金钱
1121
HASS币
0
发表于 2021-3-10 20:11:04 来自手机 | 显示全部楼层
大佬,你那个系统启动时间的sensor是怎么获取的,麻烦能贴给代码吗,谢了。
回复

使用道具 举报

76

主题

1364

帖子

1万

积分

元老级技术达人

积分
18602
金钱
17198
HASS币
290
 楼主| 发表于 2021-3-10 20:23:24 | 显示全部楼层
nigosim 发表于 2021-3-10 20:11
大佬,你那个系统启动时间的sensor是怎么获取的,麻烦能贴给代码吗,谢了。 ...

https://www.home-assistant.io/integrations/uptime/

sensor:
  - platform: uptime
    name: '系统启动时间'
回复

使用道具 举报

0

主题

19

帖子

1140

积分

金牌会员

Rank: 6Rank: 6

积分
1140
金钱
1121
HASS币
0
发表于 2021-3-11 12:47:30 | 显示全部楼层
dscao 发表于 2021-3-10 20:23
https://www.home-assistant.io/integrations/uptime/

谢谢大佬!
回复

使用道具 举报

4

主题

37

帖子

168

积分

注册会员

Rank: 2

积分
168
金钱
131
HASS币
0
发表于 2021-3-12 12:23:36 | 显示全部楼层
本帖最后由 gdlw2000 于 2021-3-12 12:51 编辑

老大按照你那个安装说明装了
在config\packages    下建了 lock.yaml
binary_sensor:
  - platform: template
    sensors:
      smartlock_door:
        friendly_name: 门状态
        value_template: >-
          {% if (is_state_attr('sensor.e50b9a2dxxxx_action','action_id',0) and is_state_attr('sensor.e50b9a2dxxxx_action','action',"door")) or (is_state_attr('sensor.e50b9a2dxxxx2_action','action_id',2) and is_state_attr('sensor.e50b9a2dxxxx_action','action',"door"))%}

sensor:
  - platform: template      
    sensors:
      smartlock_state:
        friendly_name: 门锁状态
        value_template: 未知
      smartlock_method: 
        friendly_name: 开门方式
<blockquote>
这样建立没问题吧
可以在ui直接添加 传感器,但是传感器都显示未知。只有门状态是可以显示,我估计是我理解错意思了,在homekit里直接添加传感器提示出错。 未标题-2.jpg
日志也捕捉不到状态变化
折腾几天了没搞出来 网关刷了好几个版本都不成
把网关测试打开 可以捕捉到锁的状态
未标题-1.jpg
日志显示 设备蓝牙锁以及门
另外在config里\custom_components\xiaomi_gateway3\core找到了 mqttl_xiaomilock.yaml这个文件不知道有没用,你看下你那里有没有,不知道从哪儿跑出来的貌似是自己生成的么
里面是传感器直接从mqtt读取文件如果这样直接建立传感器所有问题不就直接解决了么?
我直接添加到packages里面了但是没作用
binary_sensor:
  - platform: mqtt
    name: mijia_lock
    state_topic: 'mqttl/101136901/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/101136901/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/101136901/7'
    value_template: "{{ value[0:8]|int(0,16)|timestamp_local }}"
  #开锁方式
  - platform: mqtt
    name: lock_method
    icon: 'mdi:lock-question'
    state_topic: 'mqttl/101136901/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/101136901/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/101136901/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/101136901/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/101136901/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/101136901/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/101136901/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/101136901/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: 电量报告日期
上面重启后系统提示无法安装
  • Unable to prepare setup for platform mqtt.sensor: Unable to set up component.
  • Unable to prepare setup for platform mqtt.binary_sensor: Unable to set up component.

回复

使用道具 举报

4

主题

37

帖子

168

积分

注册会员

Rank: 2

积分
168
金钱
131
HASS币
0
发表于 2021-3-12 15:22:28 | 显示全部楼层
本帖最后由 gdlw2000 于 2021-3-12 16:22 编辑

实体出现了 但参数读取不对 帮看看如何修改
没有传感器mqtt就从      配置-集成-添加-搜索mqtt   安装mqtt
看下mqtt如何设置
101136901 retain: {'battery': 50, 'action': 'door', 'action_id': 1, 'method_id': 10, 'message': 'Door is closed', 'method': 'manual', 'key_id': 65535, 'error': None, 'timestamp': '2021-03-12T16:14:25'}


测试信息 都可以就是传不进 传感器 郁闷了
回复

使用道具 举报

76

主题

1364

帖子

1万

积分

元老级技术达人

积分
18602
金钱
17198
HASS币
290
 楼主| 发表于 2021-3-12 21:34:21 | 显示全部楼层
刚启动就是未知状态,靠后面的自动化当门锁有动作后才会改变成对应的文字。都是用gateway3生成的action的状态及属性得出的结果,我没有拦截mqtt的消息。首先确保多模插件正常运行吧,有些内容是需要门锁触发才会显示的。
回复

使用道具 举报

24

主题

883

帖子

4988

积分

论坛元老

Rank: 8Rank: 8

积分
4988
金钱
4100
HASS币
20
发表于 2021-4-11 13:11:04 | 显示全部楼层
@XCray 版主可以对这个分离状态提供强有力的支持
回复

使用道具 举报

24

主题

883

帖子

4988

积分

论坛元老

Rank: 8Rank: 8

积分
4988
金钱
4100
HASS币
20
发表于 2021-4-11 17:46:18 | 显示全部楼层
本帖最后由 chenquanhao 于 2021-4-11 17:52 编辑

我感觉将操作者和操作方式做成一个实体,看起来会更加方便,之前我按Xcar的方法做过,不知道适不适应你这个方法
state_topic: 'mqttl/1020xxxxxx/11' 
value_template: >-
  {% if value[8:16] == '00000000' %}
  手机
  {% elif value[8:16] == '80010001' %}
  Hao
  {% elif value[8:16] == '80010004' %}
  Ming
  {% else %}
  {{value[8:16]}}
  {% endif %}
  {% if value[16:18] == '00' %}
  蓝牙
  {% elif value[16:18] == '10' %}
  密码
  {% elif value[16:18] == '20' %}
  指纹


回复

使用道具 举报

18

主题

230

帖子

2430

积分

金牌会员

Rank: 6Rank: 6

积分
2430
金钱
2200
HASS币
0
发表于 2021-4-14 21:55:06 | 显示全部楼层
This node was not executed and so no further trace information is available.  不知道是哪里设置错误 在识别开锁状态的时候显示的
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-5-8 06:04 , Processed in 0.308710 second(s), 32 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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