更新时间:2024-07-19 03:09:56下载pdf
本文描述网关接入开发中,子设备配置文件 接入方式使用的配置文件的格式。该文件支持多种物联网协议格式与涂鸦的 DP(Data Point)协议格式转换,核心配置为一个 JSON 文件,通过设置 JSON 文件中的参数值实现子设备接入。
子设备配置文件为 JSON 格式的文本:
{
"VID": 1,
"MPID": 2,
"TPID": "xx",
"FVer": "xx",
"EVer": "xx",
"MTDes": [{ "key": "value" }],
"SList": [{ "key": "value" }],
"proData": [{ "key": "value" }],
"ClusterDP": [{ "key": "value" }]
}
主要包含下图中的内容:
所有子设备配置文件必须拥有一个 转换关系,否则无法使用。
不同子设备配置文件的必须字段和可选字段如下表所示:
文件类型 | 必选字段 | 可选字段 |
---|---|---|
Matter 转换文件 | SList |
MTRT |
Zigbee 转换文件 | 无 | proData 、MTDes |
桥接转换文件 | MTDes |
无 |
一级参数配置表示 JSON 格式的第一层参数的设置情况:
参数 | 说明 | 数据类型 |
---|---|---|
VID |
即厂商(Vendor)ID,表示转换表所属的设备厂商。CSA 联盟分配给厂商 ID。 | 数字(16 bit) |
MPID |
即 Matter 设备的产品 ID(PID)。PID 是厂商分配给自己产品型号的标识符,标识产品的类型,多种产品可以使用同一个 PID。 | 数字(16 bit) |
TPID |
即涂鸦(Tuya)分配的设备独有的 PID,标识同一款产品的 ID 信息。 | 字符串(16 bytes) |
FVer |
转换文件的版本,标识当前转换表的转换规则的版本。例如 1.0.1 。 |
字符串(16 bytes) |
EVer |
DP 引擎的版本。只能在方案中填入,不能从产品维度修改。 | 字符串(16 bytes) |
ClusterDP |
设备集群(Cluster)和 DP 转换的数组,包含该产品的所有的 DP 和 Matter、Zigbee 等指令之间的转化关系。更多详情,请参考下文 ClusterDP。 | 数组 |
MTDes |
用于描述一个 Zigbee 设备桥接在 Matter 网络时,显示的设备信息。更多详情,请参考下文 MTDes。 | 数组 |
SList |
子设备订阅表。Matter 协议类型子设备的配置文件使用该字段。控制端会根据表内的元素向子设备发送订阅指令。更多详情,请参考下文 SList。 | 数组 |
ProData |
协议信息字符串。更多详情,请参考下文 ProData。 | 字符串(JSON) |
ClusterDP 表示 Cluster 和 DP 转换的数组。包含该产品的所有的 DP 和 Matter 指令之间的转化关系。
{
"ClusterDP": [
{
"Direct": 1,
"Cluster": [
{
"EPID": 1,
"CID": 6,
"SType": 2,
"SID": 255,
"Act": 1,
"MFmt": "xxxx",
"MType": 1,
"MName": 1
}
],
"DP": [
{
"DPID": 1,
"DPType": 0,
"MType": 1,
"MName": 1
}
],
"Exp": [
{
"EType": 1,
"Data": "xxxx"
}
]
}
]
}
Dir
DP 的转换方向(上行或下行)。
例如开关的上行 DP 对应的 Matter 指令,是 Report OnOff 属性,下行 DP 是 OnOff 的控制命令。
dir |
协议转换 | 转换关系上下行 | 描述 |
---|---|---|---|
1 |
Thread | 下行 | DP 格式 > Matter 格式 |
2 |
Thread | 上行 | Matter 格式 > DP 格式 |
1 |
WoM(Wi-Fi over Matter) | 下行 | DP 格式 > Matter 格式 |
2 |
WoM(Wi-Fi over Matter) | 上行 | Matter 格式 > DP 格式 |
1 |
Zigbee | 下行 | DP 格式 > Zigbee 格式 |
2 |
Zigbee | 上行 | Zigbee 格式 > DP 格式 |
1 |
Zigbee 桥接 | 下行 | Matter 格式 > DP 格式 |
2 |
Zigbee 桥接 | 上行 | DP 格式 > Matter 格式 |
请注意,对于 Zigbee 桥接于 Matter 的转换文件,下行是 Matter 协议转 DP 协议。上行是 DP 协议转 Matter 协议。
Cluster
DP 对应的 Cluster 指令。
参数 | 说明 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
EPID |
即设备的端点号(endpoint_id),2 个字节无符号数。例如,0x0001。 | ||||||||||||||||
CID |
即 Cluster 的标识 ID,4 字节无符号数,例如:0x00000006 (On/Off); | ||||||||||||||||
SType |
即 subtype:
|
||||||||||||||||
SID |
即 subtype_id,Cluster 子选项的 ID,四字节无符号数。
说明:当 SType 为 |
||||||||||||||||
Act |
即 action 标识对应的 Sub_type 的操作方式,枚举类型。
|
||||||||||||||||
MType |
即 method_type,Matter 指令值和 DP 指令值的转换算法的类型:
|
||||||||||||||||
MName |
即 method_name ,处理这个转换的函数名。JSON 文件内使用枚举值表示,实际对照关系见 dp_engine 转换函数对应表。指是 DP 协议的 payload ,转换到局域网协议的 payload ,需要使用的转换函数。 |
||||||||||||||||
MFmt |
即 message_format ,代表了这条 Matter 指令包的 Msg 参数的格式。Unsigned Integer 格式以 Bitmap 格式表示。
|
由于 MFmt
参数的配置较为复杂,因此本小节后续详细讲解。
T
字段的可选值如下表:
数值 | 说明 |
---|---|
-1 | 未指定 |
0x00 | Int8 |
0x01 | Int16 |
0x02 | Int32 |
0x03 | Int64 |
0x04 | UInt8 |
0x05 | UInt16 |
0x06 | UInt32 |
0x07 | UInt64 |
0x08 | Boolean Flase |
0x09 | Boolean True |
0x0a | Floating Point Number 32 |
0x0b | Floating Point Number 65 |
0x0c | UTF8 String_1ByteLength |
0x0d | UTF8 String_2ByteLength |
0x0e | UTF8 String_4ByteLength |
0x0f | UTF8 String_8ByteLength |
0x10 | Byte String_1ByteLength |
0x11 | Byte String_2ByteLength |
0x12 | Byte String_4ByteLength |
0x13 | Byte String_8ByteLength |
0x14 | NULL |
例如,下发光源亮度调节时:
payload
要求如下:
描述 | 第一个参数 | 第二个参数 | 第三个参数 | 第四个参数 |
---|---|---|---|---|
字节数 | 1 | 2 | 0 或 1 | 0 或 1 |
数据类型 | uint8 | uint16 | map8 | map8 |
参数 | Level | Transition time | OptionsMark | OptionsOverride |
JSON 示例如下:
[
{//level
"T": 4,//uint8
"L": 1, //1byte
"F": 1//DP 转换完成的值,填充在这个位置
},
{//transition time
"T": 5,// uint6
"L": 2// 2byte
},
{//optionsMask
"T": 4,// map8 == uint8
"L": 1// 1byte
},
{//optionoverride
"T": 4,// map8 == uint8
"L": 1// 1byte
}
]
F
所在的位置,会被填充为 DP 的转换值,其它位置为默认填充值 0
。
DP
涂鸦系统的 DP 指令数组。会有一个属性对应多个 DP 的情况。
参数 | 说明 |
---|---|
DPID |
DP 的 ID 标识。2 个字节。 |
DPType |
DP 的数据类型
|
MType |
即 method_type ,Matter 指令值和 DP 指令值的转换算法的类型:
|
MName |
即 method_name ,处理这个转换的函数名,JSON 文件内使用枚举值表示,实际对照关系见 dp_engine 转换函数对应表。这里指局域网协议的 payload,转换到 DP 协议的 payload 需要使用的转换函数。 |
Exp
表示拓展字段(expand)。该字段可以不存在,使用拓展字段时前面的 MName
都填 0
。
EType
:expand_typde
EType | 描述 |
---|---|
1 | EnumMap 枚举对照表 |
2 | BitMap 位表 |
3 | defaultValue 表 |
4 | 数学公式转换 例子:*(num/360.0)254 + 0.5 现在只支持单目运算符 |
Data
:JSON 格式字符串
EType
为 1 时,格式为:"{"map":[{"dpV":0,"mtV":2},{"dpV":1,"mtV":0}]}"
。mtV 为 -1 表示下发的值为 NULL。EType
为 2 时,格式:"{"byte":1,"bit":1}"
表示取第一个字节的第一位作为 DP 的值,对用与传感器 iasZone 设备的上报解析。EType
为 3 时,格式:"{\"dp\":[{\"i\":1,\"t\":1,\"v\":2}]}"
表示转换成默认值上报,不用解析 payload,直接使用指定的 DP 内容上报,i
表示 dpId,t
表示 dpType,"v"表示 dpValue。EType
4 时,格式:"{\"1\":\"num+1\",\"2\":\"num-1\"}"
表示数据转换时使用指定的函数公式进行数值转换,jsonKey 为"1"的 jsonValue 的内容为 DP 转局域网协议时使用的函数。jsonKey 为"2"的 jsonValue 的内容为 DP 转局域网协议时使用的函数。未知数的名字必须为"num"。MTDes 用于描述一个非 Matter 设备桥接在 Matter 网络时,显示的设备信息。
{
"MTDes": {
"Basic": "[{\"57\":\"{\\\"1\\\":\\\"tuya\\\"}\"},{\"47\":\"{\\\"2\\\":\\\"Bat\\\"}\"},{\\\"ManuN\\\":\\\"aaa\\\"},{\\\"ModelID\\\":\\\"aaa\\\"}]",
"EPs": [
{
"EPID": 1,
"MTDevID": 2,
"CIDs": [
{
"CType": 1,
"CID": 6,
"FMap": 1,
"AIDs": [
{
"AID": 0
}
],
"ICmds": [
{
"CmdID": 0,
"MFmt": "[{\"L\":0,\"T\":20}]"
}
],
"OCmds": [
{
"CmdID": 0,
"MFmt": "[{\"L\":0,\"T\":20}]"
}
]
}
]
},
{
"EPID": 2,
"MTDevID": 2,
"CIDs": [
{
"CType": 1,
"CID": 8,
"FMap": 1,
"AIDs": [
{
"AID": 0,
"AID": 1
}
],
"ICmds": [
{
"CmdID": 0,
"CmdID": 1
}
],
"OCmds": [
{
"CmdID": 0,
"MFmt": "[{\"L\":0,\"T\":20}]"
}
]
},
{
"CType": 1,
"CID": 768,
"FMap": 1,
"AIDs": [
{
"AID": 0,
"AID": 1
}
],
"ICmds": [
{
"CmdID": 0,
"MFmt": "[{\"L\":0,\"T\":20}]"
}
],
"OCmds": [
{
"CmdID": 0,
"MFmt": "[{\"L\":0,\"T\":20}]"
}
]
}
]
}
]
}
}
Basic 的内容为属性默认值,用来向 Matter 描述产品的基本属性,内容与 Matter 规范文档中的相关 Cluster 描述章节保持一致。该字段为 JSON 字符串形式,如下所示:
[
{
"clusterid1_dec_str":[
{"attributeid1_dec_str":"attribute_value"},
{"attributeid2_dec_str":"attribute_value"}
]
},
{
"clusterid2_dec_str":[
{"attributeid1_dec_str":"attribute_value"},
{ "attributeid2_dec_str":"attribute_value"}
]
}
]
Basic
字段示例:
[
{
"57":[ //clusterid=57 为 basic informaton cluster
{
"1":"tuya"//attributeid=1 表示 VendorName 为 tuya
},
{
"2":4821 //attributeid=4821(0x125D)表示 VendorId 为 tuya
},
{
"3":"KA Extended Color Light"
},
{
"4":49
},
{
"7":100
},
{
"8":"1.0"
},
{
"9":100
},
{
"10":"1.0"
},
{
"11":"20221103"
}
]
},
{
"47":[
{
"17":true
}
]
}
]
EPs 为额外说明,其子参数如下:
数值 | 说明 |
---|---|
0x01 | CLUSTER_MASK_INIT_FUNCTION |
0x02 | CLUSTER_MASK_ATTRIBUTE_CHANGED_FUNCTION |
0x04 | CLUSTER_MASK_DEFAULT_RESPONSE_FUNCTION |
0x08 | CLUSTER_MASK_MESSAGE_SENT_FUNCTION |
0x10 | CLUSTER_MASK_MANUFACTURER_SPECIFIC_ATTRIBUTE_CHANGED_FUNCTION |
0x20 | CLUSTER_MASK_PRE_ATTRIBUTE_CHANGED_FUNCTION |
0x40 | CLUSTER_MASK_SERVER |
0x80 | CLUSTER_MASK_CLIENT |
payload
格式。payload
格式。SList 为子设备订阅表,适用于 Matter 协议类型子设备。控制端会根据表内的元素,向子设备发送订阅指令。
{
"SList": [
{
"Cnt": 1,
"Min": 0,
"Max": 360,
"SType": 2,
"Member": [
{
"EPID": 1,
"CID": 6,
"SID": 0
}
]
},
{
"Cnt": 1,
"Min": 0,
"Max": 360,
"SType": 2,
"Member": [
{
"EPID": 1,
"CID": 8,
"SID": 0
}
]
},
{
"Cnt": 2,
"Min": 0,
"Max": 360,
"SType": 2,
"Member": [
{
"EPID": 1,
"CID": 768,
"SID": 3
},
{
"EPID": 1,
"CID": 768,
"SID": 4
}
]
},
{
"Cnt": 1,
"Min": 0,
"Max": 360,
"SType": 2,
"Member": [
{
"EPID": 1,
"CID": 768,
"SID": 7
}
]
},
{
"Cnt": 1,
"Min": 0,
"Max": 360,
"SType": 2,
"Member": [
{
"EPID": 1,
"CID": 768,
"SID": 8
}
]
}
],
}
ProData 为协议信息字符串。该字段的内容适用于 Zigbee 转换文件。控制端在 Zigbee 子设备入网并向涂鸦绑定成功后,会按照 RTbale
、WTable
、CTable
中的内容,给入网的子设备下发标准 Zigbee 指令。
{
"RTable": [{
"EPID": 1,
"CID": 6,
"AIDs": [0, 1],
"Num": 2
}],
"WTable": [{
"EPID": 1,
"CID": 6,
"AID": 0,
"AType": 1,
"Val": "hex_string"
}],
"CTable": [{
"EPID": 1,
"CID": 6,
"AID": 0,
"Min": 0,
"Max": 12,
"Type": 0,
"Val": "hex_string"
}],
"EPs": [{
"EPID": 1,
"GIndx": 0,
"DPIDs ": [{
"ID": 1
}]
}]}
以下为一个 Zigbee 桥接开关的子设备配置文件示例:
{
"VID":4701,
"MPID":1,
"TPID":"n8zvuh****",
"FVer":"1.0.1",
"EVer":"0.0.4",
"MTDes":{
"Basic":"[{"57":[{"1":"tuya"},{"2":4821},{"3":"1 Gang Switch"},{"4":49},{"7":100},{"8":"1.0"},{"9":100},{"10":"1.0"},{"11":"20230301"}]},{"47":[{"17":true}]},{"6":[{"65533":4}]},{"8":[{"65533":5}]},{"768":[{"65533":5}]}]",
"EPs":[
{
"EPID":1,
"CIDs":[
{
"CType":64,
"FMap":0,
"ICmds":[
{
"MFmt":"[{"L":0,"T":20}]",
"CmdID":0
},
{
"MFmt":"[{"L":0,"T":20}]",
"CmdID":1
},
{
"MFmt":"[{"L":0,"T":20}]",
"CmdID":2
}
],
"AIDs":[
{
"AID":0
}
],
"CID":6
}
],
"MTDevID":259
}
]
},
"ClusterDP":[
{
"Cluster":{
"MType":1,
"Act":1,
"SType":1,
"MFmt":"[{"L":1,"F":1,"T":4}]",
"EPID":1,
"MName":1,
"CID":6,
"SID":255
},
"DP":{
"MType":1,
"DpID":1,
"MName":1,
"DPType":0
},
"Direct":1
},
{
"Cluster":{
"MType":1,
"Act":5,
"SType":2,
"MFmt":"[{"L":1,"F":1,"T":4}]",
"EPID":1,
"MName":1,
"CID":6,
"SID":0
},
"DP":{
"MType":1,
"DpID":1,
"MName":1,
"DPType":0
},
"Direct":2
}
]
}
以下为一个 Thread 开关的子设备配置文件示例:
{
"VID": 4701,
"MPID": 21324,
"TPID": "tuya_pid",
"FVer": "0.0.1",
"EVer": "0.0.4",
"SList": [
{
"Cnt": 2,
"Min": 0,
"Max": 65535,
"SType": 2,
"Member": [
{
"EPID": 1,
"CID": 6,
"SID": 0
},
{
"EPID": 1,
"CID": 6,
"SID": 16387
}
]
},
{
"Cnt": 1,
"Min": 0,
"Max": 65535,
"SType": 3,
"Member": [
{
"EPID": 0,
"CID": 40,
"SID": 2
}
]
}
],
"ClusterDP": [
{
"Direct": 1,
"Cluster": {
"EPID": 1,
"CID": 6,
"SType": 1,
"SID": 255,
"Act": 1,
"MFmt": "[{\"L\":1,\"F\":1,\"T\":4}]",
"MType": 1,
"MName": 1
},
"DP": {
"DpID": 1,
"DPType": 0,
"MType": 1,
"MName": 1
}
},
{
"Direct": 2,
"Cluster": {
"EPID": 1,
"CID": 6,
"SType": 2,
"SID": 0,
"Act": 5,
"MFmt": "[{\"L\":1,\"F\":1,\"T\":4}]",
"MType": 1,
"MName": 1
},
"DP": {
"DpID": 1,
"DPType": 0,
"MType": 1,
"MName": 1
}
},
{
"Direct": 1,
"Cluster": {
"EPID": 1,
"CID": 6,
"SType": 2,
"SID": 16387,
"Act": 4,
"MFmt": "[{\"L\":1,\"F\":1,\"T\":4}]",
"MType": 1,
"MName": 0
},
"DP": {
"DpID": 29,
"DPType": 3,
"MType": 1,
"MName": 0
},
"Exp": {
"EType": 1,
"Data": "{\"map\":[{\"dpV\":0,\"mtV\":0},{\"dpV\":1,\"mtV\":1},{\"dpV\":2,\"mtV\":-1}]}"
}
},
{
"Direct": 2,
"Cluster": {
"EPID": 1,
"CID": 6,
"SType": 2,
"SID": 16387,
"Act": 5,
"MFmt": "[{\"L\":1,\"F\":1,\"T\":4}]",
"MType": 1,
"MName": 0
},
"DP": {
"DpID": 29,
"DPType": 3,
"MType": 1,
"MName": 0
},
"Exp": {
"EType": 1,
"Data": "{\"map\":[{\"dpV\":0,\"mtV\":0},{\"dpV\":1,\"mtV\":1},{\"dpV\":2,\"mtV\":-1}]}"
}
}
]
}
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈