Topic 定义
Topic 总览
为了方便设备云平台区分不同属性的处理策略,将设备上报物模型属性分为 osd 和 state 两类,分别用不同的 topic 上报。
- osd:设备定频上报的属性,对应 pushmode = 0。
- state:设备事件性上报的物模型属性,对应 pushmode=1。
说明: 下表中的
{gateway_sn}
表示网关设备的 SN,{device_sn}
表示该物模型属性的所属设备的 SN 。对飞机上云来说,*{gateway_sn}
*是虚拟机巢,只做为协议topic控制,是固定DOCK+飞机sn的组合,比如飞机sn是1748xx,那么虚拟机巢的sn就是DOCK1748xx
Topic Name | 发送者 -> 订阅者 | Message | 说明 |
---|---|---|---|
thing/product/{device_sn} /osd | 设备 > 云平台 | osd message struct | 设备端定频向云平台推送的设备属性(properties), 具体内容范围参见物模型内容 |
thing/product/{device_sn} /state | 设备 > 云平台 | state message struct | 设备端按需上报向云平台推送的设备属性(properties), 具体内容范围参见物模型内容 |
thing/product/{gateway_sn} /services | 云平台 -> 设备 | services message struct | 云平台向设备发送的服务(具体service identifier 见物模型内容)。 |
thing/product/{gateway_sn} /services_reply | 设备 > 云平台 | services_reply message struct | 设备对 service 的回复、处理结果 |
thing/product/{gateway_sn} /events | 设备 > 云平台 | events message struct | 设备端向云平台发送的,需要关注和处理的事件。 (事件范围参见物模型内容) |
thing/product/{gateway_sn} /events_reply | 云平台 -> 设备 | events_reply message struct | 云平台对设备事件的回复、处理结果 |
thing/product/{gateway_sn} /requests | 设备 > 云平台 | requests message struct | 设备端向云平台发送请求,为了获取一些信息,比如上传的临时凭证 |
thing/product/{gateway_sn} /requests_reply | 云平台 -> 设备 | requests_reply message struct | 云平台对设备请求的回复 |
sys/product/{gateway_sn} /status | 设备 > 云平台 | status message struct | 设备上下线、更新拓扑 |
sys/product/{gateway_sn} /status_reply | 云平台 -> 设备 | status_reply message struct | 平台响应 |
thing/product/{gateway_sn} /property/set | 云平台 -> 设备 | property set message struct | 设备属性设置。设备属性是否可以被修改,在设备属性章节通过“accessMode”标识符号判断,accessMode = rw 表示可被读写。 |
thing/product/{gateway_sn} /property/set_reply | 设备 > 云平台 | property set_reply message struct | 设备属性设置的响应 |
thing/product/{gateway_sn} /drc/up | 设备 > 云平台 | DRC message struct | DRC 协议上行 |
thing/product/{gateway_sn} /drc/down | 云平台 > 设备 | DRC message struct | DRC 协议下行 |
公共字段解释
Column | Name | Type | Description |
---|---|---|---|
tid | 事务uuid | text | 事务(Transaction)的 UUID:表征一次简单的消息通信,如:增/删/改/查,云台控制等,可以是: 1. 数据上报请求+数据上报响应 2. 握手认证请求+响应+ack 3.报警事件单向通知等,解决事务多并发和消息匹配的问题 |
bid | 业务uuid | text | 业务(Business)的 UUID:有些功能不是一次通信就能完成的,包含持续一段时间内的所有交互。 业务通常由多个原子事务组成,且持续时间较长; 解决业务多并发和重复请求的问题,便于所有模块的状态机管理。 |
timestamp | 毫秒时间戳 | int | 消息的发送时间 |
gateway | 网关设备的序列号 | text | 发送该消息的网关设备的序列号 |
data | 消息内容 | object | 消息内容 |
osd 结构示例
topic: thing/product/{device_sn}
/osd
{
"bid": "ec33feab-3cfd-43e1-b2a3-bf762f3cede1",
"data": {
"activation_time": 1709125730482,
"attitude_head": -0.92977506,
"attitude_pitch": 0.16601522266864777,
"attitude_roll": -0.1496429443359375,
"battery": {
"capacity_percent": 100
},
"cameras": [
{
"camera_mode": 1,
"payload_index": "68-0-0",
"zoom_factor": 6.67
}
],
"distance_limit_status": {
"distance_limit": 15,
"state": 1,
"is_near_distance_limit": 0
},
"elevation": 0,
"height": 0,
"height_limit": 700,
"home_distance": 0,
"horizontal_speed": 0,
"latitude": 22.595598,
"longitude": 113.99777,
"mode_code": 0,
"night_lights_state": 0,
"obstacle_avoidance": {
"downside": 0,
"horizon": 1,
"upside": 0
},
"position_state": {
},
"rid_state": 0,
"vertical_speed": 0,
"alarm_status": 0,
"ned_altitude": 0,
"ned_latitude": 0,
"ned_longitude": 0,
"ntrip_status": "error",
"pos_type": "null",
"sn": "HMA923359003",
"total_armed_time": 0,
"vel_ned_x": 0,
"vel_ned_y": 0,
"vel_ned_z": 0,
"wireless_link": {
"4g_uav_quality": 53
},
"is_near_area_limit": 0,
"is_near_height_limit": 0,
"68-0-0": {
"gimbal_pitch": 0,
"gimbal_roll": 0,
"gimbal_yaw": -0.92999995,
"payload_index": "68-0-0",
"zoom_factor": 0.5678233438485805
}
},
"gateway": "DOCK1748",
"tid": "5866d2d3-e0fb-4345-bee6-c368564ee247",
"timestamp": 1709125730481
}
state 结构示例
topic: thing/product/{device_sn}
/state
{
"tid":"6a7bfe89-c386-4043-b600-b518e10096cc",
"bid":"42a19f36-5117-4520-bd13-fd61d818d52e",
"timestamp": 1598411295123,
"gateway":"sn",
"data":{},
}
services 结构示例
topic: thing/product/{gateway_sn}
/services
{
"tid":"6a7bfe89-c386-4043-b600-b518e10096cc",
"bid":"42a19f36-5117-4520-bd13-fd61d818d52e",
"timestamp": 1598411295123,
"gateway":"sn",
"method": "some_method",
"data": {}
}
services_reply 结构示例
data中必填字段解释
Column | Name | Type | constraint | Description |
---|---|---|---|---|
result | 设备响应的结果码 | int | 非 0 代表错误 | |
output | 设备消息内容 | struct | 设备响应服务端命令的消息内容 |
{
"tid":"6a7bfe89-c386-4043-b600-b518e10096cc",
"bid":"42a19f36-5117-4520-bd13-fd61d818d52e",
"timestamp": 1598411295123,
"gateway":"sn",
"method": "some_method",
"data": {
"result": 0,
"output": {}
}
}
events 结构示例
topic: thing/product/{gateway_sn}
/events
Column | Name | Type | constraint | Description |
---|---|---|---|---|
need_reply | 服务端是否需要答复 | int | 服务端收到设备的events事件上报消息后,跟进need_reply来判断是否给予收到答复;0代表不需要,1代表需要 |
{
"tid":"6a7bfe89-c386-4043-b600-b518e10096cc",
"bid":"42a19f36-5117-4520-bd13-fd61d818d52e",
"timestamp": 1598411295123,
"need_reply": 0,
"gateway":"sn",
"method": "some_method",
"data": {}
}
events_reply 结构示例
topic: thing/product/{gateway_sn}
/events_reply
data中必填字段解释
Column | Name | Type | constraint | Description |
---|---|---|---|---|
result | 服务端响应的结果码 | int | 非 0 代表错误 |
{
"tid":"6a7bfe89-c386-4043-b600-b518e10096cc",
"bid":"42a19f36-5117-4520-bd13-fd61d818d52e",
"timestamp": 1598411295123,
"gateway":"sn",
"method": "some_method",
"data": {
"result": 0
}
}
requests 结构示例
topic: thing/product/{gateway_sn}
/requests
{
"tid":"6a7bfe89-c386-4043-b600-b518e10096cc",
"bid":"42a19f36-5117-4520-bd13-fd61d818d52e",
"timestamp": 1598411295123,
"gateway":"sn",
"method": "some_method",
"data": {}
}
requests_reply 结构示例
topic: thing/product/{gateway_sn}
/requests_reply
data中必填字段解释
Column | Name | Type | constraint | Description |
---|---|---|---|---|
result | 服务端响应的结果码 | int | 非 0 代表错误 | |
output | 服务消息内容 | struct | 服务端响应设备的消息内容 |
{
"tid":"6a7bfe89-c386-4043-b600-b518e10096cc",
"bid":"42a19f36-5117-4520-bd13-fd61d818d52e",
"timestamp": 1598411295123,
"gateway":"sn",
"method": "some_method",
"data": {
"result": 0,
"output":{}
}
}
status 结构示例
topic: sys/product/{gateway_sn}
/status
## 网关设备+子设备上线
{
"tid": "tid001",
"bid": "bid001",
"method": "update_topo",
"timestamp": 1234567890123,
"data": {
"type": 98,
"sub_type": 0,
"device_secret": "secret",
"nonce": "nonce",
"version": 1,
"sub_devices": [
{
"sn": "drone001",
"type": 116,
"sub_type": 0,
"index": "A",
"device_secret": "secret",
"nonce": "nonce",
"version": 1
}
]
}
}
子设备下线
{
"tid": "tid001",
"bid": "bid001",
"method": "update_topo",
"timestamp": 1234567890123,
"data": {
"type": 98,
"sub_type": 0,
"device_secret":"secret",
"nonce":"nonce",
"version": 1,
"sub_devices":[]
}
}
status_reply 结构示例
topic: sys/product/{gateway_sn}
/status_reply
data中必填字段解释
Column | Name | Type | constraint | Description |
---|---|---|---|---|
result | 结果码 | int | 非0代表错误 |
{
"tid":"6a7bfe89-c386-4043-b600-b518e10096cc",
"bid":"42a19f36-5117-4520-bd13-fd61d818d52e",
"timestamp": 1598411295123,
"method": "update_topo",
"data": {
"result": 0
}
}
property set 结构示例
topic: thing/product/{gateway_sn}
/property/set
Column | Name | Type | constraint | Description |
---|---|---|---|---|
some_property | 需要修改的属性key | string | 设备属性是否可以被修改,在设备属性章节通过“accessMode”标识符号判断,accessMode = rw 表示可被读写。 | |
some_value | 需要修改的属性value | string/int/float | 参考对应的设备属性 |
{
"tid":"6a7bfe89-c386-4043-b600-b518e10096cc",
"bid":"42a19f36-5117-4520-bd13-fd61d818d52e",
"timestamp": 1598411295123,
"data": {
"some_property": some_value
}
}
property set_reply 结构示例
topic: thing/product/{gateway_sn}
/property/set_reply
data中必填字段解释
Column | Name | Type | constraint | Description |
---|---|---|---|---|
some_property | 需要修改的属性key | string | 设备属性是否可以被修改,在设备属性章节通过“accessMode”标识符号判断,accessMode = rw 表示可被读写。 | |
result | 对应属性的设置结果 | int | 0: 成功,1:失败,2:超时,其他参考错误码解释 |
{
"tid":"6a7bfe89-c386-4043-b600-b518e10096cc",
"bid":"42a19f36-5117-4520-bd13-fd61d818d52e",
"timestamp": 1598411295123,
"data": {
"some_property": {
"result": 0 // 0: 成功,1:失败,2:超时,其他参考错误码解释
}
}
}
drc up 结构示例
topic: thing/product/{gateway_sn}
/drc/up
data中必填字段解释
Column | Name | Type | constraint | Description |
---|---|---|---|---|
result | 服务端响应的结果码 | int | 非 0 代表错误 | |
output | 服务消息内容 | struct | 服务端响应设备的消息内容 |
{
"method": "drone_control",
"data": {
"result": 0,
"output": {
"seq": 1
}
}
}
drc down 结构示例
topic: thing/product/{gateway_sn}
/drc/down
{
"method": "drone_control",
"data": {
"seq": 1,
"x": 2.34,
"y": -2.45,
"h": 2.76,
"w": 2.86
}
}