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

 找回密码
 立即注册
查看: 38689|回复: 25

[经验分享] 绿米三开通过zigbee2mqtt接入hass

  [复制链接]

6

主题

199

帖子

933

积分

高级会员

Rank: 4

积分
933
金钱
729
HASS币
0
发表于 2020-3-6 14:14:20 | 显示全部楼层 |阅读模式
本帖最后由 doa2011 于 2020-3-6 20:23 编辑

如题,前几天上车了老妖的zigbee2mqtt,于是就寻思着要把家里的开关改造下,后面陆续买了绿米的三开,双开、门磁、无线开关。下面把过程记录下,方便骚动的坛友少走弯路,也有些疑惑和没有解决的地方,希望能起到个抛砖引玉的作用。
首先,必须了解和学习的:
https://www.zigbee2mqtt.io/
上面对硬件,架设平台,如何接入,范例等均说的比较详细,我zigbbe基础为0,基本就是参考下论坛发的帖子,自己再找官方文档,多折腾记下就出来的。www.zigbee2mqtt.io的老哥对设备的支持程度很高,上述我计入的设备中,只有涂鸦的门磁和绿米三开没有支持,这个也是接下来我重点要说的。
1、安装zigbee2mqtt(论坛已经有比较详尽的教程了,可以略过,参照其他帖子)
我当时参照的帖子:https://bbs.hassbian.com/forum.php?mod=viewthread&tid=4448&highlight=zigbee
需要注意的是如果是USB dongle那么按此教程无误,如果是tcp接入,需要修改  port: /dev/ttyACM0 为port: 'tcp//:ip:端口'
serial:
  port: 'tcp//:ip:端口'
git clone https://github.com/Koenkk/zigbee-herdsman-converters,或者是下载zip解压,再挂载到zigbee2mqtt目录,以便于自己修改和增加设备,顺便挂载homeassistant.js文件到/app/lib/extension/homeassistant.js,如下图所示:
QQ图片20200120113045.png
这样,所有安装的工作就完成了,现在可以试试看z2m能不能正常运行了!
2、接入新设备。
参见:
https://www.zigbee2mqtt.io/how_tos/how_to_support_new_devices.html
这里主要说说如何接入三开,门磁,以及如何修改devices.js和fromZigbee.js。
按照教程所提供思路,应该是去找个相近的设备来进行修改,所以在三开和z2m配对成功后,我们需要去找个类似的开关来进行相应修改。device.js里面有绿米的开关可以借鉴,我是全局搜索,可以找到了类似的绿米设备,比如QBKG04LM,是个两开的绿米开关。我是用了“generic_state_multi_ep”来接入,如下:
devices.js增加如下文件
    {
        zigbeeModel: ['lumi.switch.n3acn3'], // The model ID from: Device with modelID 'lumi.sens' is not supported.
        model: 'QBKG26LM', // Vendor model number, look on the device for a model number
        vendor: 'Xiaomi', // Vendor of the device (only used for documentation and startup logging)
        description: 'MiJia switch', // Description of the device, copy from vendor site. (only used for documentation and startup logging)
        supports: 'on/off', // Actions this device supports (only used for documentation)
        fromZigbee: [
            fz.generic_state_multi_ep,fz.xiaomi_power,fz.ignore_genTime_report,fz.ignore_time_read,fz.ignore_64704_report,
        ],
        toZigbee: [tz.on_off],
        endpoint: (device) => {
            return {'left': 1, 'center': 2, 'right': 3};
        },

    },
3.添加ha自发现。
参见:https://www.zigbee2mqtt.io/how_tos/how_to_support_new_devices.html
以上添加后,可实现对三开的转换了,接下来实现ha自发现,如下图:在homeassistant.js中const mapping中添加,如下:
    'QBKG26LM': [switchWithPostfix('left'), switchWithPostfix('center'), switchWithPostfix('right'), cfg.sensor_power],
昨晚上述,可以完成绿米的正常使用了,包括控制,实时功率。但实际上还有很多信息没有接入,比如电量统计,开关温度,按双开接入的话还可以设置做无线开关模式等等,这些实在无能为力了,关于状态,三开和双开不一样,双开可以很容易获取到,三开看不懂(如下),望大神能出个无脑教程。
received Zigbee message from 'QBKG26LM', type 'attributeReport', cluster 'aqaraOpple', data '{"247":{"type":"Buffer","data":[100,16,1,101,16,1,102,16,0,3,40,31,152,57,53,158,198,65,149,57,168,75,184,65,150,57,239,103,19,69,151,57,89,104,53,67,5,33,1,0,154,32,16,8,33,25,1,7,39,0,0,0,0,0,0,0,0,9,33,1,3,11,32,0]}}' from endpoint 1 with groupID 0
-----------------
涂鸦的门磁接入就比较容易了,写法其实很多,我参照了已有的设备依葫芦画瓢写的,可能不是最好,但能使用,直接上修改后的文件,在devices.js中添加:
    {
        zigbeeModel: ['RH_3001'],
        model: 'RH_3001',
        vendor: 'TUYATEC-McoO8jXh',
        description: 'TUYA door & window contact sensor',
        supports: 'contact',
        fromZigbee: [
            fz.RH3001_battery, fz.RH3001_contact,
        ],
        toZigbee: [],
    },

在fromZigbee.js中添加:
    RH3001_contact: {
        cluster: 'ssIasZone',
        type: 'commandStatusChangeNotification',
        convert: (model, msg, publish, options) => {
            const zoneStatus = msg.data.zonestatus;
            return {
                contact: !((zoneStatus & 1) > 0),
            };
        },
    },
    RH3001_battery: {
        cluster: 'genPowerCfg',
        type: ['attributeReport', 'readResponse'],
        convert: (model, msg, publish, options, meta) => {
            const result = {};
            if (typeof msg.data['batteryVoltage'] == 'number') {
                const voltage = msg.data['batteryVoltage'];
                result.voltage = voltage * 100;
            }
            if (typeof msg.data['batteryPercentageRemaining'] == 'number') {
                const battery = {max: 100, min: 0};
                const batteryRemaining = msg.data['batteryPercentageRemaining'];
                result.battery = toPercentage(batteryRemaining, battery.min, battery.max);
            }
            return result;
        },
    },

在homeassistant.js中添加:
    'RH_3001': [cfg.binary_sensor_contact, cfg.sensor_battery],








QQ图片20200306141017.png

评分

参与人数 1金钱 +8 收起 理由
jyz_0501 + 8 墙都不扶,就服楼主!

查看全部评分

回复

使用道具 举报

9

主题

205

帖子

2358

积分

金牌会员

Rank: 6Rank: 6

积分
2358
金钱
2153
HASS币
0
发表于 2020-3-6 15:11:22 | 显示全部楼层
顶起来,感谢分享!
回复

使用道具 举报

71

主题

1146

帖子

6319

积分

论坛元老

Rank: 8Rank: 8

积分
6319
金钱
5168
HASS币
30
发表于 2020-3-6 16:09:01 | 显示全部楼层
fz.RH3001_battery, fz.RH3001_contact的内容呢??????
回复

使用道具 举报

6

主题

199

帖子

933

积分

高级会员

Rank: 4

积分
933
金钱
729
HASS币
0
 楼主| 发表于 2020-3-6 20:24:11 | 显示全部楼层
xuyang 发表于 2020-3-6 16:09
fz.RH3001_battery, fz.RH3001_contact的内容呢??????

抱歉,已经修正了~~~
回复

使用道具 举报

0

主题

16

帖子

57

积分

注册会员

Rank: 2

积分
57
金钱
41
HASS币
0
发表于 2020-3-17 21:50:11 | 显示全部楼层
学习了,自己准备试试
回复

使用道具 举报

9

主题

519

帖子

2280

积分

金牌会员

Rank: 6Rank: 6

积分
2280
金钱
1761
HASS币
0
发表于 2020-3-20 21:11:25 | 显示全部楼层
前来学习取经
回复

使用道具 举报

1

主题

172

帖子

2138

积分

金牌会员

Rank: 6Rank: 6

积分
2138
金钱
1966
HASS币
0
发表于 2020-3-25 13:45:51 | 显示全部楼层
感谢分享,楼主的三开是D1吗
回复

使用道具 举报

1

主题

31

帖子

236

积分

中级会员

Rank: 3Rank: 3

积分
236
金钱
205
HASS币
0
发表于 2020-4-28 17:38:38 | 显示全部楼层
d1 两开怎么接入呢?打算买个两开
回复

使用道具 举报

0

主题

5

帖子

44

积分

新手上路

Rank: 1

积分
44
金钱
39
HASS币
0
发表于 2020-5-8 23:38:50 | 显示全部楼层
請問一下,你如果按物理開關 ,home assistant 狀態會跟著改嗎?
zigbee2mqtt 新版本似乎沒有 generic_state_multi_ep 這個了。
回复

使用道具 举报

9

主题

787

帖子

3831

积分

论坛元老

Rank: 8Rank: 8

积分
3831
金钱
3044
HASS币
87
发表于 2020-6-4 17:33:15 | 显示全部楼层
问一下用了这个后,小米的zigbee设备还能用米家控制吗?
就是能zigbee2mqtt和米家同时支持吗?
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-4-24 18:11 , Processed in 0.062385 second(s), 35 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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