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

 找回密码
 立即注册
查看: 52464|回复: 102

[进阶教程] zigbee2mqtt翻译件:二、ZigBee网络你该知道的

  [复制链接]

8

主题

63

帖子

431

积分

中级会员

Rank: 3Rank: 3

积分
431
金钱
368
HASS币
0
发表于 2020-1-29 18:59:54 | 显示全部楼层 |阅读模式
本帖最后由 tangqmxf 于 2020-1-29 19:46 编辑

被小米网关劝退后在论坛大神的怂恿下决定入坑zigbee2mqtt,论坛里面几个大神有介绍,但是还是不够全面。自己到官网去扒啦了一些东西来,给各位入坑的提供下参考。
注:以下内容均从官网扒啦下来的,只是自己翻译了以下罢了。系列文章目录如下:
游客,如果您要查看本帖隐藏内容请回复


一、Zigbee网络技术知识。
设备类型
在Zigbee中,有三种不同类型的设备:终端设备、中继器和网关。
Zigbee网络仅有一个网关,可以有多个中继器和终端设备。
使用zigbee2mqtt的话,网关就是您的CC2531 USB stick。

终端设备
终端设备中转数据。它们也可以睡眠,这使得终端设备成为电池驱动设备的合适选择。
终端设备只有一个父设备,要么是网关,要么是中继器,通常是配对时最近的设备。
与终端设备之间的所有通信都是通过它们的父设备进行的。
如果一个父中继器离线,所有与它相连的子设备的数据将中段,直到这些终端设备超时并试图找到一个新的父中继器。
一些终端设备,尤其是小米,不会尝试寻找新的父设备,所以在与网络重新配对之前,它们将保持离线状态。
例如:WXKG01LM, RTCGQ01LM, MCCGQ11LM

中继器
中继器负责在不同的节点之间中转数据。
中继器可能无法休眠。因此,路由器不是电池驱动设备的合适选择。
路由器还负责接收和存储为其子设备准备的消息。
除此之外,中继器可负责允许新节点加入网络。
例如:LED1545G12, 7146060PH, ZNCZ02LM, CC2531 USB sniffer 刷中继器固件
注意:在Zigbee网络中,小米墙壁开关(单火版本- QBKG03LM和QBKG04LM)不能作为中继器工作。

网关
网关是一个特殊的中继器。除了所有的中继器的功能外,网关还负责形成网络。
为此,它必须选择适当的通道、PAN ID和扩展网络地址。它还负责选择网络的安全模式。
例如:CC2531 USB sniffer 刷网关固件。

找出你的设备类型
Zigbee2mqtt日志可记录设备在启动时的设备类型,例如:
2018-5-28 20:39:46 INFO 0x00158d00018255df (0x00158d00018255df): ZNCZ02LM - Xiaomi Mi power plug ZigBee (Router)
2018-5-28 20:39:46 INFO 0x00158d0001b79111 (0x00158d0001b79111): WSDCGQ01LM - Xiaomi MiJia temperature & humidity sensor (EndDevice)


二、如何嗅探Zigbee数据

有时,嗅探Zigbee数据可能会很有效。例如,当您要分析设备使用的命令时。

使用CC2531
需要设备
电脑
Ubuntu系统(在18.10上已测试)
Windows系统(在Windows 10上已测试)
CC2531 stick
1、将CC2531 stick刷机
CC2531需要使用嗅探器固件进行刷机。按照“CC2531刷机”中的方法刷新固件。
Linux
固件包含在PACKET-SNIFFER(不是PACKET-SNIFFER-2)中。下载PACKET-SNIFFER。由于嗅探器固件仅在Windows安装程序中可用,因此我们需要扩展十六进制文件。这将需要7zip(发布的p7zip-full或p7zip-plugins安装包)
unzip swrc045z.zip -d PACKET-SNIFFER
7z e PACKET-SNIFFER/Setup_SmartRF_Packet_Sniffer_2.18.0.exe bin/general/firmware/sniffer_fw_cc2531.hex
sudo /cc-tool -e -w /sniffer_fw_cc2531.hex
Windows(或者Ubuntu)
对于Windows,此固件包含在ZBOSS中。注册帐户并下载Windows 64位的ZBOSS Sniffer。固件在ZIP文件中子文件夹hw\CC2531 USB dongle\zboss_sniffer.hex里。请注意,ZBOSS也可用于Ubuntu。
2、安装所需工具
Ubuntu
cd /opt
sudo apt-get install -y libusb-1.0-0-dev wireshark
curl -L https://github.com/homewsn/whsniff/archive/v1.1.tar.gz | tar zx
cd whsniff-1.1
make
sudo make install

Windows
下载并安装最新版本的Wireshark。ZBOSS本身是便携式的,不需要安装。
3、嗅探数据
在Ubuntu上,通过sudo whsniff -c ZIGBEE_CHANNEL_NUMBER | wireshark -k -i - 启动。
对于Windows,请在中运行ZBOSS可执行文件gui\zboss_sniffer.exe,输入Wireshark可执行文件的路径,然后单击Start按钮。

Wireshark将启动并记录Zigbee消息。由于这些消息已加密,因此我们需要添加2个加密密钥。第一个是Trust Center链接密钥,几乎每个Zigbee网络都相同。第二个是网络加密密钥(传输密钥)。        

设置Trust Center链接密钥方法:
Edit(编辑)->references(首选项)->rotocols(协议)-> ZigBee,将“Security Level (安全级别)”设置为AES-128 Encryption(AES-128加密),32-bit Integrity Protection (32位完整性保护),然后单击“ 编辑”。单击 + 并按字节顺序添加
5A:69:67:42:65:65:41:6C:6C:69:61:6E:63:65:30:39
注意:Hue bridge 使用不同的Trust Center链接密钥

1.png

接下来,我们需要找出网络加密密钥(传输密钥)。有两种方法可以做到这一点:

1)默认情况下,如果你有没有在configuration.yaml中改变network_key的话,它将是01:03:05:07:09:0B:0D:0F:00:02:04:06:08:0A:0C:0D。如果更改了network_key,则将每个数字转换为2位数的十六进制值,并将它们全部组合在一起:。例如
[1, 3, 5, 7, 9, 11, 13, 15, 0, 2, 4, 6, 8, 10, 12, 13]->01:03:05:07:09:0B:0D:0F:00:02:04:06:08:0A:0C:0D

2)如果您不想手动转换数字,则当设备加入网络时,网络加密密钥也会公开。将新设备与网络配对(或重新配对现有设备),并在设备通知消息中获取该信息。。打开消息并展开ZigBee Network Layer Data(ZigBee网络层数据) -> ZigBee Security Header(ZigBee安全标题)。
2.png 复制密钥值,如上所示,然后转到Edit(编辑) -> Preferences(首选项) -> Protocols(协议) -> ZigBee -> Edit(编辑),然后按正常字节顺序添加密钥。
现在,Wireshark能够解密消息。例如,当打开灯时,您会看到类似以下消息:

3.png

故障排除
如果您在运行whisniff时收到“couldn’t run /usr/bin/dumpcap in child process: permission denied(无法在子进程中运行/ usr / bin / dumpcap:权限被拒绝)”。检查/ usr / bin / dumpcap是否对所有人都可执行。或者chmod 755 /usr/bin/dumpcap。



三、如何保护您的Zigbee网络

默认情况下,您的Zigbee网络没有尽可能安全。建议将以下设置应用于您的配置。

禁用加入
要禁用加入,请务必在configuration.yaml设置permit_join: false。否则,流氓设备将能够加入并允许它们发送和接收Zigbee数据。

更改Zigbee网络加密密钥
更改网络密钥需要重新连接所有设备!
Zigbee2mqtt使用已知的默认加密密钥(Zigbee传输密钥)。因此,建议使用另一种。要使用其他加密密钥,请将以下内容添加到您的configuration.yaml:

不要使用这个密钥。
advanced:
  network_key: [7, 3, 5, 7, 9, 11, 13, 15, 0, 2, 4, 6, 8, 11, 12, 13]

网络的加密密钥大小是128-bit。它实质上是16个0到255之间的十进制数或0x00到0xFF之间的16进制值。
如果您需要将数值转换为十六进制(反之亦然),请使用转换器。比如:92(十进制)将变为5C(十六进制)。

在大多数linux系统中,可以使用以下命令生成有效的十进制键:
dd if=/dev/urandom bs=1 count=16 2>/dev/null | od -A n -t u1 | awk '{printf "["} {for(i = 1; i< NF; i++) {printf "%s, ", $i}} {printf "%s]\n", $NF}'
请注意,如果在Hass.io add-on中运行zigbee2mqtt,则仅支持十进制键。

在大多数linux系统中,可以使用以下命令生成有效的十六进制密钥:
dd if=/dev/urandom bs=1 count=16 2>/dev/null | od -A n -t x1 | awk '{printf "["} {for(i = 1; i< NF; i++) {printf "0x%s, ", $i}} {printf "0x%s]\n", $NF}'





评分

参与人数 2金钱 +28 收起 理由
sorrypqa + 8 大神666!
+ 20 论坛有你更精彩!

查看全部评分

回复

使用道具 举报

3

主题

158

帖子

2067

积分

金牌会员

Rank: 6Rank: 6

积分
2067
金钱
1909
HASS币
10
发表于 2020-1-29 21:26:00 | 显示全部楼层
谢谢分享
回复

使用道具 举报

0

主题

31

帖子

203

积分

中级会员

Rank: 3Rank: 3

积分
203
金钱
172
HASS币
0
发表于 2020-1-29 22:15:19 | 显示全部楼层
回复

使用道具 举报

0

主题

166

帖子

4179

积分

论坛元老

Rank: 8Rank: 8

积分
4179
金钱
4013
HASS币
0
发表于 2020-1-30 08:54:02 | 显示全部楼层
感謝大大的分享,來學習了 ^^y
回复

使用道具 举报

0

主题

71

帖子

2048

积分

金牌会员

Rank: 6Rank: 6

积分
2048
金钱
1977
HASS币
0
发表于 2020-1-30 18:03:22 | 显示全部楼层
學習學習
回复

使用道具 举报

1

主题

46

帖子

172

积分

论坛分享达人

积分
172
金钱
126
HASS币
0
发表于 2020-1-30 18:43:29 | 显示全部楼层
支持!!!!!!!!!
回复

使用道具 举报

71

主题

1146

帖子

6319

积分

论坛元老

Rank: 8Rank: 8

积分
6319
金钱
5168
HASS币
30
发表于 2020-1-30 19:04:34 | 显示全部楼层
学习一下
回复

使用道具 举报

0

主题

54

帖子

394

积分

论坛积极会员

积分
394
金钱
340
HASS币
0
发表于 2020-1-30 19:04:57 | 显示全部楼层
sgY0AAkjHw0JIx8OCSMfDh8OHw0KIx8OCSQJIwkjHg4JIx8NCSMJIwkjCSMJIwkjHw0fDgkAAVIAAAAA
回复

使用道具 举报

8

主题

382

帖子

1779

积分

金牌会员

Rank: 6Rank: 6

积分
1779
金钱
1397
HASS币
0
发表于 2020-1-31 00:14:22 | 显示全部楼层
谢谢分享!!!
回复

使用道具 举报

0

主题

22

帖子

133

积分

注册会员

Rank: 2

积分
133
金钱
111
HASS币
0
发表于 2020-1-31 05:52:29 | 显示全部楼层
很重要啊
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-4-25 19:07 , Processed in 0.061249 second(s), 35 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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