1. 在Z-WAVE PC Controller软件选择已配对的智能开关。
从上图中可以看到,我们的智能开关的node id是11,即0x0B。
2. 向智能开关发送灯光的开闭数据。
CommandClasses选择COMMAND_CLASS_BASIC
CommandName选择BASIC_SET
Value为00时关闭灯光,为01时打开灯光。
从ZW_classcmd.h文件里可以看到
#defineCOMMAND_CLASS_BASIC 0x20
#defineBASIC_SET 0x01
3. 从Z-WAVE PC Controller软件的log区可以看到如下信息
可以看到这帧数据的Series Api编号是0x13
4.在<<INS12350-4 - Serial API Host Appl. Prg.Guide.pdf>>这个手册里找到下图,这是z-wave串口协议的一个整体结构图。
各个字段的说明都可以在这个文档里找到,包括Checksum的计算方式 。
5.从<<INS12308-6 - Z-Wave 500 Series Appl. Prg.Guide v6.51.03.pdf>>这个手册上找到0x13这条协议,可以看到此条串口协议的整体格式。
从0x13这个命令号后面都是此窗口指令的参数,这些参数在上面第3节里可以找到。
6.至此,我们就可以组成一个完整的串口报文了。
01 0A 00 13 0B 05 20 01 00 25 03 EF
01 | SOF |
0A | Length ,除SOF和checksum外的长度 |
00 | REQ |
13 | 串口命令ID |
0B | 目的结点id |
05 | Datalength, 后面数据的长度 |
20 | pData[0], COMMAND_CLASS_BASIC |
01 | pData[1], BASIC_SET |
00 | pData[2],灯光开关数据 |
25 | txOptions |
03 | funcID,这个编号理论应该是以此递增的,但好像也无所谓 |
EF | Checksum |
7.最后,我们看一下用嗅探器抓取的数据。
E9 C4 2F 88 | Home ID |
01 | 源结点ID |
41 01 0D |
|
0B | 目标结点ID |
20 01 01 | COMMAND_CLASS_BASIC BASIC_SET 数据(开或关) |
12 | checksum |
虽然用处不大,从上面这个表里,我们还是能看到一些有用的信息,
源结点ID,目标结点ID。
另外目标结点ID后面的数据实际就是pData[]里的那三个字节。命令类,命令和数据。
从<< SDS12657-5 - Z-Wave Command ClassSpecification, A-M.pdf>>这个文档可以找到这条命令的定义。
8.当controller发送成功后,回收到以下数据
06
01 04 01 13 01 E8
01 04 01 13 01 E8
01 04 01 13 01 E8
01 04 01 13 01 E8
从上面两个图可以看到,Z-Wave PC Controller这个软件确实收到了,上面两个ZW-HOST的反馈,但是用串口工具只能收到第一个
06只是一个ACK
01 | SOF |
04 | ?????? |
01 | RES |
13 | 串口命令ID |
01 | RetVal |
E8 | Checksum,除SOF的所有字节 |