网关子设备
# 网关子设备
# 功能概述
# 设备分类
物联网开发平台根据设备功能性的不同将设备分为如下三类(即节点的分类):
- 普通设备 :此类设备可直接接入物联网开发平台且无挂载子设备。
- 网关设备 :此类设备可直接接入物联网开发平台,并且可接受子设备加入局域网络。
- 子设备 :此类设备必须依托网关设备才可与物联网开发平台进行通信,例如 Zigbee、蓝牙、RF433 等设备。
# 操作场景
- 对于不具备直接接入因特网的设备,可先接入本地网关设备的网络,利用网关设备与云端的通信功能,代理子设备接入物联网开发平台。
- 对于在局域网中加入或退出网络的子设备,网关设备可对其在平台进行绑定或解绑操作,并上报与子设备的拓扑关系,实现平台对于整个局域网子设备的管理。
# 接入方式
- 网关设备接入物联网开发平台的方式与普通设备一致。网关设备接入之后可代理同一局域网下的子设备上/下线,代理子设备上报数据,代理子设备接收云端下发给子设备的数据,并管理与子设备之间的拓扑关系。
- 子设备的接入需通过网关设备来完成,子设备通过网关设备完成身份的认证之后即可成功接入云端。认证方式分为以下两种:
- 设备级密钥方式 网关获取子设备的设备证书或密钥,并生成子设备绑定签名串。由网关向平台上报子设备绑定签名串信息,代理子设备完成身份的验证。
- 产品级密钥方式 网关获取子设备的 ProductSecret(产品密钥),并生成签名,由网关向平台发送动态注册请求。验证成功之后平台将返回子设备的 DeviceCert 或 DeviceSecret,网关设备依此生成子设备绑定签名串,并向平台上报子设备绑定签名串信息。验证成功之后即完成子设备的接入。
# 通用请求参数
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
msgToken | String | 是 | 用于上下行消息配对标识 |
sys.noAsk | bool | 否 | 云端是否回复设备 |
sys.retMsg | bool | 否 | 是否返回错误信息,字段为msg |
示例:
{
"method": "reportInfo",
"msgToken": "1234567",
"sys": {
"noAsk": false,
"retMsg": true
}
}
2
3
4
5
6
7
8
# 拓扑关系管理
# 功能概述
网关类型的设备,可通过与云端的数据通信,对其下的子设备进行绑定与解绑操作。实现此类功能需利用如下两个 Topic:
- 数据上行 Topic(用于发布):
$gateway/up/topo/${productid}/${devicename}
- 数据下行 Topic(用于订阅):
$gateway/down/topo/${productid}/${devicename}
# 新设备注册
设备上线之前您需要对设备进行身份注册,标识您的设备。 网关绑定子设备请求数据格式:
{
"method": "register",
"msgToken": "1234567",
"payload": {
"devices": [
{
"productID": "CFC******AG7",
"deviceName": "subdeviceaaaa",
"deviceAlias": "afwe"
}
]
}
}
2
3
4
5
6
7
8
9
10
11
12
13
网关绑定子设备响应数据格式:
{
"method": "register",
"msgToken": "1234567",
"payload": {
"devices": [
{
"productID": "CFC******AG7",
"deviceName": "subaaa",
"deviceSecret": "xxxxxx"
}
]
}
}
2
3
4
5
6
7
8
9
10
11
12
13
请求参数说明:
字段 | 类型 | 描述 |
---|---|---|
method | String | 网关消息类型。注册子设备取值为:register |
msgToken | String | 用于上下行消息配对标识 |
payload.devices | Array | 需要注册的子设备列表 |
payload.devices.productID | String | 子设备产品 ID |
payload.devices.deviceName | String | 子设备ID |
payload.devices.deviceAlias | String | 子设备名称(可选,版本>1.3.0) |
响应参数说明:
字段 | 类型 | 描述 |
---|---|---|
method | String | 网关消息类型。绑定子设备取值为:register |
msgToken | String | 用于上下行消息配对标识 |
payload.devices | Array | 要注册的子设备列表 |
payload.devices.productID | String | 子设备产品 ID |
payload.devices.deviceName | String | 子设备ID |
payload.devices.deviceSecret | String | 子设备秘钥,拿来绑定设备 |
# 绑定设备
网关类型的设备,可以通过数据上行 Topic 请求添加它和子设备之间的拓扑关系,实现绑定子设备。请求成功之后,云端通过数据下行 Topic 返回子设备的绑定结果信息。
网关绑定子设备请求数据格式:
{
"method": "bind",
"msgToken": "1234567",
"payload": {
"devices": [
{
"productID": "CFC******AG7",
"deviceName": "subdeviceaaaa",
"signature": "signature",
"random": 121213,
"timestamp": 1589786839,
"signMethod": "hmacsha256"
}
]
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
网关绑定子设备响应数据格式:
{
"method": "bind",
"msgToken": "1234567",
"payload": {
"devices": [
{
"productID": "CFC******AG7",
"deviceName": "subaaa",
"code": 200
}
]
}
}
2
3
4
5
6
7
8
9
10
11
12
13
请求参数说明:
字段 | 类型 | 描述 |
---|---|---|
method | String | 网关消息类型。绑定子设备取值为:bind |
msgToken | String | 用于上下行消息配对标识 |
payload.devices | Array | 需要绑定的子设备列表 |
payload.devices.productID | String | 子设备产品 ID |
payload.devices.deviceName | String | 子设备ID |
payload.devices.signature | String | 子设备绑定签名串。 签名算法: 1. 签名原串,将产品 ID 设备ID,随机数,时间戳拼接:text=${product_id};${device_name};${random};${timestamp} 2. 使用设备 Psk 密钥,或者证书的 Sha1 摘要,进行签名:hmac_sha1(device_secret, text),注意:(device_secret 需要先base64 decode) 生产16进制字符串 |
payload.devices.random | Int | 随机数。 |
payload.devices.timestamp | Int | 时间戳,单位:秒。 |
payload.devices.signMethod | String | 签名算法。支持 hmacsha1、hmacsha256。 |
响应参数说明:
字段 | 类型 | 描述 |
---|---|---|
method | String | 网关消息类型。绑定子设备取值为:bind |
msgToken | String | 用于上下行消息配对标识 |
payload.devices | Array | 要绑定的子设备列表 |
payload.devices.productID | String | 子设备产品 ID |
payload.devices.deviceName | String | 子设备ID |
payload.devices.code | Int | 子设备绑定结果,200表示成功 |
# 解绑设备
网关类型的设备, 可以通过数据上行 Topic 请求解绑它和子设备之间的拓扑关系。请求成功之后,云端通过数据下行 Topic 返回子设备的解绑信息。
网关解绑子设备请求数据格式:
{
"method": "unbind",
"msgToken": "1234567",
"payload": {
"devices": [
{
"productID": "CFC******AG7",
"deviceName": "subaaa"
}
]
}
}
2
3
4
5
6
7
8
9
10
11
12
网关解绑子设备响应数据格式:
{
"method": "unbind",
"msgToken": "1234567",
"payload": {
"devices": [
{
"productID": "CFC******AG7",
"deviceName": "subaaa",
"code": 200
}
]
}
}
2
3
4
5
6
7
8
9
10
11
12
13
请求参数说明:
字段 | 类型 | 描述 |
---|---|---|
method | String | 网关消息类型。解绑子设备取值为:unbind |
msgToken | String | 用于上下行消息配对标识 |
payload.devices | Array | 需要解绑的子设备列表 |
payload.devices.productID | String | 子设备产品 ID |
payload.devices.deviceName | String | 子设备ID |
响应参数说明:
字段 | 类型 | 描述 |
---|---|---|
method | String | 网关消息类型。解绑子设备取值为:unbind |
msgToken | String | 用于上下行消息配对标识 |
payload.devices | Array | 需要解绑的子设备列表 |
payload.devices.productID | String | 子设备产品 ID |
payload.devices.deviceName | String | 子设备ID |
payload.devices.code | Int | 子设备绑定结果,200表示成功 |
# 云端查询网关可绑定子设备
云端可以通过调用接口查询网关可以配网的子设备列表
下发请求数据格式:
{
"method": "getFound",
"msgToken": "1234567"
}
2
3
4
请求参数说明:
参数 | 类型 | 描述 |
---|---|---|
method | String | 网关消息类型。查询子设备取值为:getFound |
msgToken | String | 用于上下行消息配对标识 |
网关查询子设备拓扑关系响应数据格式:
{
"method": "getFound",
"msgToken": "1234567",
"payload": {
"devices": [
{
"productID": "XKFA****LX",
"deviceName": "2OGDy7Ws8mG****YUe"
},
{
"productID": "XKFA****LX",
"deviceName": "5gcEHg3Yuvm****2p8"
},
{
"productID": "XKFA****LX",
"deviceName": "hmIjq0gEFcf****F5X"
},
{
"productID": "XKFA****LX",
"deviceName": "x9pVpmdRmET****mkM"
},
{
"productID": "XKFA****LX",
"deviceName": "zmHv6o6n4G3****Bgh"
}
]
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
响应参数说明:
参数 | 类型 | 描述 |
---|---|---|
method | String | 网关消息类型。查询子设备取值为:getFound |
msgToken | String | 用于上下行消息配对标识 |
payload.devices | Array | 网关可以绑定的子设备列表 |
payload.devices.productID | String | 子设备产品 ID |
payload.devices.deviceName | String | 子设备ID |
msgToken | String | 用于上下行消息配对标识 |
# 云端通知网关绑定子设备
云端可以通过调用接口通知网关配网子设备列表,无需网关回复
下发请求数据格式:
{
"method": "notifyBind",
"msgToken": "1234567",
"payload": {
"devices": [
{
"productID": "XKFA****LX",
"deviceName": "2OGDy7Ws8mG****YUe"
},
{
"productID": "XKFA****LX",
"deviceName": "5gcEHg3Yuvm****2p8"
},
{
"productID": "XKFA****LX",
"deviceName": "hmIjq0gEFcf****F5X"
},
{
"productID": "XKFA****LX",
"deviceName": "x9pVpmdRmET****mkM"
},
{
"productID": "XKFA****LX",
"deviceName": "zmHv6o6n4G3****Bgh"
}
]
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
请求参数说明:
参数 | 类型 | 描述 |
---|---|---|
method | String | 网关消息类型。查询子设备取值为:getFound |
msgToken | String | 用于上下行消息配对标识 |
payload.devices | Array | 网关可以绑定的子设备列表 |
payload.devices.productID | String | 子设备产品 ID |
payload.devices.deviceName | String | 子设备ID |
# 网关查询云端拓扑关系
网关类型的设备, 可以通过该 Topic 上行请求查询子设备的拓扑关系。
网关查询子设备拓扑关系请求数据格式:
{
"method": "getTopo",
"msgToken": "1234567"
}
2
3
4
请求参数说明:
参数 | 类型 | 描述 |
---|---|---|
method | String | 网关消息类型。查询子设备取值为:getTopo |
msgToken | String | 用于上下行消息配对标识 |
网关查询子设备拓扑关系响应数据格式:
{
"method": "getTopo",
"msgToken": "1234567",
"payload": {
"devices": [
{
"productID": "XKFA****LX",
"deviceName": "2OGDy7Ws8mG****YUe"
},
{
"productID": "XKFA****LX",
"deviceName": "5gcEHg3Yuvm****2p8"
},
{
"productID": "XKFA****LX",
"deviceName": "hmIjq0gEFcf****F5X"
},
{
"productID": "XKFA****LX",
"deviceName": "x9pVpmdRmET****mkM"
},
{
"productID": "XKFA****LX",
"deviceName": "zmHv6o6n4G3****Bgh"
}
]
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
响应参数说明:
参数 | 类型 | 描述 |
---|---|---|
method | String | 网关消息类型。查询子设备取值为:describeSubDevices |
msgToken | String | 用于上下行消息配对标识 |
payload.devices | Array | 网关绑定的子设备列表 |
payload.devices.productID | String | 子设备产品 ID |
payload.devices.deviceName | String | 子设备ID |
# 拓扑关系变化
网关类型的设备, 可以通过该数据下行 Topic 订阅平台对子设备的拓扑关系变化。
子设备被绑定或解绑,网关将收到子设备拓扑关系变化,数据格式如下:
{
"method": "change",
"msgToken": "1234567",
"payload": {
"status": 1,
"devices": [
{
"productID": "CFCS****G7",
"deviceName": "****ev"
}
]
}
}
2
3
4
5
6
7
8
9
10
11
12
13
请求参数说明:
参数 | 类型 | 描述 |
---|---|---|
method | String | 网关消息类型。拓扑关系变化取值为:change |
msgToken | String | 用于上下行消息配对标识 |
status | Int | 拓扑关系变化状态。* 2:解绑* 1:绑定 |
payload.devices | Array | 网关绑定的子设备列表 |
payload.devices.productID | String | 子设备产品 ID |
payload.devices.deviceName | String | 子设备ID |
网关响应,数据格式如下:
{
"method": "change",
"msgToken": "1234567",
"code":200,
"msg":"success"
}
2
3
4
5
6
响应参数说明:
参数 | 类型 | 描述 |
---|---|---|
method | String | 网关消息类型。拓扑关系变化取值为:change |
msgToken | String | 用于上下行消息配对标识 |
code | Integer | 200 表示成功 |
msg | String | 当 code 非200的时候,提示错误信息 |
# 代理子设备上下线
# 功能概述
网关类型的设备,可通过与云端的数据通信,代理其下的子设备进行上线与下线操作。此类功能所用到的 Topic 与网关子设备拓扑管理的 Topic 一致:
- 数据上行 Topic(用于发布):
$gateway/up/status/${productid}/${devicename}
- 数据下行 Topic(用于订阅):
$gateway/down/status/${productid}/${devicename}
# 代理子设备上线
网关类型的设备,可以通过数据上行 Topic 代理子设备上线。请求成功之后,云端通过数据下行 Topic 返回子设备的上线结果信息。
同时联犀会将自动为网关订阅子设备的物模型相关topic和ota相关topic
网关代理子设备上线请求数据格式:
{
"method": "online",
"msgToken": "1234567",
"payload": {
"devices": [
{
"productID": "CFC******AG7",
"deviceName": "subdeviceaaaa"
}
]
}
}
2
3
4
5
6
7
8
9
10
11
12
代理子设备上线响应数据格式:
{
"method": "online",
"msgToken": "1234567",
"payload": {
"devices": [
{
"productID": "CFC******AG7",
"deviceName": "subdeviceaaaa",
"code":200
}
]
}
}
2
3
4
5
6
7
8
9
10
11
12
13
请求参数说明:
字段 | 类型 | 描述 |
---|---|---|
method | String | 网关消息类型。代理子设备上线取值为:online |
msgToken | String | 用于上下行消息配对标识 |
payload.devices | Array | 需上线的子设备列表 |
payload.devices.productID | String | 子设备产品 ID |
payload.devices.deviceName | String | 子设备ID |
响应参数说明:
字段 | 类型 | 描述 |
---|---|---|
method | String | 网关消息类型。代理子设备上线取值为:online |
msgToken | String | 用于上下行消息配对标识 |
payload.devices | Array | 需上线的子设备列表 |
payload.devices.productID | String | 子设备产品 ID |
payload.devices.deviceName | String | 子设备ID |
payload.devices.code | Int | 子设备上线结果,具体错误码 (opens new window) 见下表 |
# 代理子设备下线
网关类型的设备, 可以通过数据上行 Topic 代理子设备下线。请求成功之后,云端通过数据下行 Topic 返回成功子设备的下线信息。
同时联犀会将网关订阅该子设备的物模型及ota相关topic删除
网关代理子设备下线请求数据格式:
{
"method": "offline",
"msgToken": "1234567",
"payload": {
"devices": [
{
"productID": "CFC******AG7",
"deviceName": "subdeviceaaaa"
}
]
}
}
2
3
4
5
6
7
8
9
10
11
12
网关代理子设备下线响应数据格式:
{
"method": "offline",
"msgToken": "1234567",
"payload": {
"devices": [
{
"productID": "CFC******AG7",
"deviceName": "subdeviceaaaa",
"code":200
}
]
}
}
2
3
4
5
6
7
8
9
10
11
12
13
请求参数说明:
字段 | 类型 | 描述 |
---|---|---|
method | String | 网关消息类型。代理子设备下线取值为:offline |
msgToken | String | 用于上下行消息配对标识 |
payload.devices | Array | 需代理下线的子设备列表 |
payload.devices.productID | String | 子设备产品 ID |
payload.devices.deviceName | String | 子设备ID |
响应参数说明:
字段 | 类型 | 描述 |
---|---|---|
method | String | 网关消息类型。代理子设备下线取值为:offline |
msgToken | String | 用于上下行消息配对标识 |
payload.devices | Array | 需代理下线的子设备列表 |
payload.devices.productID | String | 子设备产品 ID |
payload.devices.deviceName | String | 子设备ID |
payload.devices.code | Int | 子设备下线结果,具体错误码见下表 |
# 代理子设备消息
# 功能概述
网关类型的设备,可通过与云端的数据通信,代理其下的子设备发布和订阅消息。
# 前提条件
发布和订阅消息之前,请参见 网关设备接入和代理子设备上下线,进行网关设备和子设备接入上线。
# 发布和订阅消息
网关产品与子产品建立绑定,获取子设备的 Topic 权限后,网关设备可以使用子设备Topic代理进行收发消息,同时可以在设备调试-设备日志中查看通信信息。
# 设备物模型
设备物模型是设备级的物模型,设备物模型只支持属性,并且类型只支持: bool,int,string,enum,timestamp,float
# 使用方式
在使用网关的场景,在部署运维阶段有个很麻烦的操作,也就是物模型的同步,或者说点位-物模型的同步.在联犀中为了解决这个问题,构建了以下几个方法,方便用户在编辑完点位后能够及时的同步到云端.
- 当用户新增点位完成后: 直接调用创建物模型方法,云端会去除重复的,并进行新增操作
- 同步物模型到云端: 当用户发现云端和网关的物模型不同步的时候,可以点击同步按钮,网关获取云端物模型,提取出需要新增和删除的物模型,并分别调用创建和删除方法将物模型进行同步
- 删除物模型: 当用户编辑删除点位后,调用删除物模型方法进行删除
- 当用户换网关后,从云端同步物模型到网关: 如果需要从云端同步点位到网关,则可以调用获取物模型接口来进行物模型同步
# 设备端物模型结构体定义
type (
// Model 物模型协议-数据模板定义
ModelSimple struct {
Properties PropertiesSimple `json:"properties,omitempty"` //属性
Events EventsSimple `json:"events,omitempty"` //事件
Actions ActionsSimple `json:"actions,omitempty"` //行为
}
/*事件*/
EventSimple struct {
Identifier string `json:"id"` //标识符 (统一)
Name string `json:"name"` //功能名称
Type EventType `json:"type"` //事件类型: 1:信息:info 2:告警alert 3:故障:fault
Params ParamSimples `json:"params"` //事件参数
}
EventsSimple []EventSimple
ParamSimple struct {
Identifier string `json:"id"` //参数标识符
Name string `json:"name"` //参数名称
Define //参数定义
}
ParamSimples []ParamSimple
/*行为*/
ActionSimple struct {
Identifier string `json:"id"` //标识符 (统一)
Name string `json:"name"` //功能名称
Dir ActionDir `json:"dir"` //调用方向
Input ParamSimples `json:"input"` //调用参数
Output ParamSimples `json:"output"` //返回参数
}
ActionsSimple []ActionSimple
/*属性*/
PropertySimple struct {
Identifier string `json:"id"` //标识符 (统一)
Name string `json:"name"` //功能名称
Mode PropertyMode `json:"mode"` //读写类型:rw(可读可写) r(只读)
Define //数据定义
}
PropertiesSimple []PropertySimple
/*数据类型定义*/
Define struct {
Type DataType `json:"type"` //参数类型:bool int string struct float timestamp array enum
Mapping map[string]string `json:"mapping,omitempty"` //枚举及bool类型:bool enum
}
)
// 数据类型
type DataType string
const (
DataTypeBool DataType = "bool"
DataTypeInt DataType = "int"
DataTypeString DataType = "string"
DataTypeStruct DataType = "struct"
DataTypeFloat DataType = "float"
DataTypeTimestamp DataType = "timestamp"
DataTypeArray DataType = "array"
DataTypeEnum DataType = "enum"
)
// 属性读写类型: r(只读) rw(可读可写)
type PropertyMode string
const (
PropertyModeR PropertyMode = "r"
PropertyModeRW PropertyMode = "rw"
)
// 事件类型: 信息:info 告警alert 故障:fault
type EventType = string
const (
EventTypeInfo EventType = "info"
EventTypeAlert EventType = "alert"
EventTypeFault EventType = "fault"
)
// 行为的执行方向
type ActionDir string
const (
ActionDirUp ActionDir = "up" //向上调用
ActionDirDown ActionDir = "down" //向下调用
)
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# 设备获取云端物模型信息
在网关子设备场景可以通过该方法获取设备的物模型定义,包含设备物模型和产品物模型.
- 设备从云端接收最新消息使用的 Topic:
- 请求 Topic: $gateway/up/thing/{ProductID}/{DeviceName}
- 响应 Topic: $gateway/down/thing/{ProductID}/{DeviceName}
- 请求
- 请求消息格式:
{
"method": "getSchema",
"msgToken": "123",
"payload":{
"productID": "123",
"deviceName": "123"
}
}
2
3
4
5
6
7
8
- 请求参数说明:
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
method | String | 是 | getSchema 表示获取设备最新物模型信息 |
msgToken | String | 是 | 消息 Id,回复的消息将会返回该数据,用于请求响应消息的对比 |
payload.productID | String | 否 | 如果产品ID和设备ID都没传则会获取网关自己的物模型(包含产品和设备物模型),如果传了产品ID,则会获取该产品的物模型,如果同时传了设备ID,那么会同时返回该设备的设备物模型 |
payload.deviceName | String | 否 | 同上 |
- 响应
- 响应消息格式:
{
"method": "getSchema",
"msgToken": "123",
"code": 200,
"payload": {
"properties": [
{
"id": "switc34h",
"name": "switc34h",
"mode": "r",
"type": "int"
},
{
"id": "light",
"name": "亮度",
"mode": "rw",
"type": "int"
},
{
"id": "switch",
"name": "开关",
"mode": "rw",
"type": "bool"
},
{
"id": "light2",
"name": "亮度2",
"mode": "rw",
"type": "float"
},
{
"id": "string11",
"name": "亮度2",
"mode": "rw",
"type": "string"
},
{
"id": "switch",
"name": "电源开关",
"mode": "rw",
"type": "bool"
},
{
"id": "power",
"name": "电量",
"mode": "rw",
"type": "float"
},
{
"id": "p",
"name": "档位",
"mode": "rw",
"type": "int"
},
{
"id": "token",
"name": "秘钥",
"mode": "rw",
"type": "string"
},
{
"id": "array_struct",
"name": "数组枚举测试",
"mode": "rw",
"type": "array"
},
{
"id": "enum",
"name": "枚举类型",
"mode": "rw",
"type": "enum",
"mapping": {
"1": "低档",
"2": "中档",
"3": "高档"
}
},
{
"id": "time",
"name": "时间",
"mode": "rw",
"type": "timestamp"
}
],
"events": [
{
"id": "lowPower",
"name": "电压低",
"type": "alert",
"params": [
{
"id": "v",
"name": "电压",
"type": "float"
},
{
"id": "t",
"name": "时间",
"type": "timestamp"
}
]
},
{
"id": "eventEnum",
"name": "事件枚举类型",
"type": "alert",
"params": [
{
"id": "d",
"name": "档位",
"type": "enum",
"mapping": {
"1": "低档",
"2": "中档",
"3": "高档"
}
},
{
"id": "b",
"name": "开关",
"type": "bool"
}
]
},
{
"id": "fefe",
"name": "fefe",
"type": "alert",
"params": [
{
"id": "smoke_alarm",
"name": "smoke_alarm",
"type": "bool"
}
]
}
]
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
- 响应参数说明:
参数 | 类型 | 说明 |
---|---|---|
method | String | 表示获取设备最新上报信息的 reply 消息 |
msgToken | String | 消息 Id,回复的消息将会返回该数据,用于请求响应消息的对比 |
code | Integer | 200标识成功 |
payload | JSON | 返回物模型json |
# 设备创建云端设备物模型
在该产品打开设备管理物模型后,设备可以通过该方法来创建设备物模型
- 设备从云端接收最新消息使用的 Topic:
- 请求 Topic: $gateway/up/thing/{ProductID}/{DeviceName}
- 响应 Topic: $gateway/down/thing/{ProductID}/{DeviceName}
- 请求
- 请求消息格式:
{
"method": "createSchema",
"msgToken": "123",
"payload":{
"schema": {
"properties": [
{
"id": "switch",
"name": "开关",
"type": "bool"
},
{
"id": "light",
"name": "亮度",
"type": "int"
},
{
"id": "light2",
"name": "亮度2",
"type": "float"
},
{
"id": "string11",
"name": "亮度2",
"type": "string"
}
]
}
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
- 请求参数说明:
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
method | String | 是 | createSchema 表示创建设备物模型 |
msgToken | String | 是 | 消息 Id,回复的消息将会返回该数据,用于请求响应消息的对比 |
payload.schema | JSON | 物模型json |
- 响应
- 响应消息格式:
{
"method": "createSchema",
"msgToken": "123",
"code": 200
}
2
3
4
5
- 响应参数说明:
参数 | 类型 | 说明 |
---|---|---|
method | String | 表示获取设备最新上报信息的 reply 消息 |
msgToken | String | 消息 Id,回复的消息将会返回该数据,用于请求响应消息的对比 |
code | Integer | 200标识成功 |
data | JSON | 返回物模型json |
# 设备删除云端设备物模型
在该产品打开设备管理物模型后,设备可以通过该方法来将云端的设备物模型删除
- 设备从云端接收最新消息使用的 Topic:
- 请求 Topic: $gateway/up/thing/{ProductID}/{DeviceName}
- 响应 Topic: $gateway/down/thing/{ProductID}/{DeviceName}
- 请求
- 请求消息格式:
{
"method": "deleteSchema",
"msgToken": "123",
"payload": {
"identifiers":["power_switch","color","brightness"]
}
}
2
3
4
5
6
7
- 请求参数说明:
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
method | String | 是 | deleteSchema 表示要删除设备物模型 |
msgToken | String | 是 | 消息 Id,回复的消息将会返回该数据,用于请求响应消息的对比 |
payload.identifiers | array.String | 是 | 需要删除的物模型属性标识符列表 |
- 响应
- 响应消息格式:
{
"method": "deleteSchema",
"code": 200,
"msgToken": "123"
}
2
3
4
5
- 响应参数说明:
参数 | 类型 | 说明 |
---|---|---|
method | String | 表示获取设备最新上报信息的 reply 消息 |
msgToken | String | 消息 Id,回复的消息将会返回该数据,用于请求响应消息的对比 |
code | Integer | 200标识云端成功收到设备上报的属性 |