操作指令
下发操作指令operate
应用向设备发送操作指令,并且需要得到设备实时响应时,可以通过调用中台API下发操作指令。

1.中台使用Topic indicate/server/{productKey}/{sn}
推送OTA信息, method
为operate
,消息格式如下:
{
"msgid": 628131887239491584,
"method": "operate",
"sn": "1234567890123",
"timestamp": 1638869990,
"payload ": {
"addr": "3_1",
"portid": 1,
"meteraddr": 1,
"groupid": 1,
"loop": 1,
"method": "REFRESH"
}
}
参数 | 说明 |
---|
payload
| 表示需要下发给设备的指令内容,portid、meteraddr、loop、groupid是设备在拓扑topology报文中上报的子设备属性,平台下发命令时会带上,方便设备定位子设备使用。如果用不上,可以在topology中不上报。 |
payload.addr
| 子设备的识别编号。 |
payload.portid
| 端口号。 |
payload.meteraddr
| 表地址。 |
payload.groupid
| 组(回路)号。 |
payload.loop
| 最大组(回路)数量。 |
payload.其他
| 其他都属于业务层的协议。 |
2.设备端收到消息后,对指令进行执行。
3.指令执行完成后,设备使用Topic indicate/dev/{productKey}/{sn}
反馈执行结果, method
为operate
。
{
"msgid": 628131887239491584,
"method": "operate",
"sn": "1234567890123",
"res": 1,
"timestamp": 1638869995
}
{
"msgid": 628131887239491584,
"method": "operate",
"sn": "1234567890123",
"res": 0,
"errcode": "503",
"timestamp": 1638869995
}
设备报警复位命令
平台向设备发送复位命令,对设备报警状态进行复位,当设备上报了多个报警编码后,可以对其中单个报警进行复位,也可以一次对全部报警进行复位。
这属于operate的一个子命令,消息格式如下:
{
"msgid": "123",
"timestamp": 1638869890,
"method": "operate",
"sn": "12012081369914",
"payload": {
"method": "ALARM_RESET",
"addr": "3_1",
"code": "UaHIGH2",
"portid": "1",
"meteraddr": "1",
"loop": "1",
"groupid": "1"
}
}
{
"msgid": "123",
"timestamp": 1638869890,
"method": "operate",
"sn": "12012081369914",
"payload": {
"method": "ALARM_RESET_ALL",
"addr": "3_1",
"code": "",
"portid": "1",
"meteraddr": "1",
"loop": "1",
"groupid": "1"
}
}
一级属性 | 二级属性 | 说明 |
---|
payload | | 对象,参数 |
| method | 字符串,固定为ALARM_RESET / ALARM_RESET_ALL |
| addr | 字符串,子设备识别ID |
| code | 字符串,需要复位的单个报警编码,例如:UHIGH2,如果是ALARM_RESET_ALL,则code为空 |
| 其他 | portid、meteraddr、loop、groupid是设备在拓扑topology报文中上报的子设备属性,平台下发命令时会带上,方便设备定位子设备使用。 如果用不上,可以在topology中不上报。 |
多路DIDO控制
平台可以向设备发送命令,同时控制多个DI/DO,这属于operate的一个子命令,消息格式如下:
{
"msgid": "123",
"timestamp": 1638869890,
"method": "operate",
"sn": "12012081369914",
"payload": {
"method": "SET_DIDO",
"addr": "3_1",
"portid": "1",
"meteraddr": "1",
"loop": "1",
"groupid": "1",
"actions": {
"DO1": 1,
"DO2": 0
}
}
}
一级属性 | 二级属性 | 说明 |
---|
payload | | 对象,参数 |
| method | 字符串,固定为SET_DIDO |
| addr | 字符串,子设备识别ID |
| action | 对象,里面的key为字符串,表示DI/DO名,值为DI/DO的设置值,可以是字符串/数值/对象等 |
| 其他 | portid、meteraddr、loop、groupid是设备在拓扑topology报文中上报的子设备属性,平台下发命令时会带上,方便设备定位子设备使用。 如果用不上,可以在topology中不上报。 |
PT、CT设置
平台可以向设备发送命令,设置PT、CT,消息格式如下:
{
"msgid": "123",
"timestamp": 1638869890,
"method": "operate",
"sn": "12012081369914",
"payload": {
"method": "SET_PTCT",
"addr": "3_1",
"portid": "1",
"meteraddr": "1",
"loop": "1",
"groupid": "1",
"PT": 20,
"CT": 1
}
}
一级属性 | 二级属性 | 说明 |
---|
payload | | 对象,参数 |
| method | 字符串,固定为SET_DIDO |
| addr | 字符串,子设备识别ID |
| PT | 数值,PT |
| CT | 数值,CT |
| 其他 | portid、meteraddr、loop、groupid是设备在拓扑topology报文中上报的子设备属性,平台下发命令时会带上,方便设备定位子设备使用。 如果用不上,可以在topology中不上报。 |
简化透传指令operate_raw
应用向设备发送透传指令,并且需要得到设备实时响应。
1.中台使用Topic indicate/server/{productKey}/{sn}
, method
为operate_raw
,消息格式如下:
{
"msgid": 628131887239491584,
"method": "operate_raw",
"sn": "1234567890123",
"timestamp": 1638869990,
"payload ": {
"addr": "1_1",
"portid": 1,
"meteraddr": 1,
"groupid": 1,
"loop": 1,
"functionid": "Switch",
"value": 1
}
}
参数 | 说明 |
---|
payload
| 表示需要下发给设备的指令内容,portid、meteraddr、loop、groupid是设备在拓扑topology报文中上报的子设备属性,平台下发命令时会带上,方便设备定位子设备使用。如果用不上,可以在topology中不上报。 |
payload.addr
| 子设备的识别编号。 |
payload.portid
| 端口号。 |
payload.meteraddr
| 表地址。 |
payload.groupid
| 组(回路)号。 |
payload.loop
| 最大组(回路)数量。 |
payload.其他
| 其他都属于业务层的协议。 |
2.设备端收到消息后,对指令进行执行。
3.指令执行完成后,设备使用Topic indicate/dev/{productKey}/{sn}
反馈执行结果, method
为operate_raw
。
{
"msgid": 628131887239491584,
"method": "operate_raw",
"sn": "1234567890123",
"timestamp": 1638869995,
"res": 1,
"payload": {
"addr": "1_1",
"functionid": "Switch",
"value": 1
}
}
{
"msgid": 628131887239491584,
"method": "operate_raw",
"sn": "1234567890123",
"timestamp": 1638869995,
"res": 0,
"errcode": "",
"payload": {
"addr": "1_1",
"functionid": "Switch",
"value": 1
}
}
属性 | 说明 |
---|
payload
| 如果有数据需要返回,可以将其添加到payload属性中,例如刷新命令回复的设备实时状态 |
透传指令transport
应用向设备发送透传指令,并且需要得到设备实时响应。
1.中台使用Topic indicate/server/{productKey}/{sn}
, method
为transport
,消息格式如下:
{
"msgid": 628131887239491584,
"method": "transport",
"sn": "1234567890123",
"timestamp": 1638869990,
"payload ": {
"addr": "00000000000001_1",
"portid": 1,
"meteraddr": 1,
"groupid": 1,
"loop": 1,
"data": "01200300004c9801070100000b3901013a0b010000010000010000010000010000010000010000013a0b0100000100000100000100000100000100000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004F2B"
}
}
参数 | 说明 |
---|
payload
| 表示需要下发给设备的指令内容,portid、meteraddr、loop、groupid是设备在拓扑topology报文中上报的子设备属性,平台下发命令时会带上,方便设备定位子设备使用。如果用不上,可以在topology中不上报。 |
payload.addr
| 子设备的识别编号。 |
payload.portid
| 端口号。 |
payload.meteraddr
| 表地址。 |
payload.groupid
| 组(回路)号。 |
payload.loop
| 最大组(回路)数量。 |
payload.data
| 透传命令。 |
2.设备端收到消息后,对指令进行执行。
3.指令执行完成后,设备使用Topic indicate/dev/{productKey}/{sn}
反馈执行结果, method
为transport
。
{
"msgid": 628131887239491584,
"method": "transport",
"sn": "1234567890123",
"res": 1,
"timestamp": 1638869995,
"payload": {
"addr": "00000000000001_1",
"data": "012038FFFE2567000001CA001D1D08"
}
}
{
"msgid": 628131887239491584,
"method": "transport",
"sn": "1234567890123",
"res": 0,
"errcode": "5003",
"timestamp": 1638869995,
"payload": {
"addr": "00000000000001_1",
"data": "012038FFFE2567000001CA001D1D08"
}
}
主动抄表指令read
主动抄表指令通常用于需要平台主动获取实时数据的场景,例如:设备不会主动上报数据,或者需要触发设备上报一次数据的场景。
1.中台使用Topic indicate/server/{productKey}/{sn}
, method
为read
,消息格式如下:
{
"msgid": 628131887239491584,
"method": "read",
"sn": "1234567890123",
"timestamp": 1638869990,
"payload ": {
"addr": "1_1",
"portid": 1,
"meteraddr": 1,
"groupid": 1,
"loop": 1
}
}
2.设备端收到消息后,首先进行回复:
{
"msgid": 628131887239491584,
"method": "read",
"sn": "1234567890123",
"res": 1,
"timestamp": 1638869995
}
3.然后通过 设备投影 中的 report
或 update
正常上报数据。
批量操作指令multi
批量下发包括2种情况,一种是多网关的批量下发,这个由平台负责多线程并行发送,另一种是对单个网关下多个仪表的批量下发,这个由平台发送给网关,然后网关负责对下属各仪表进行依次下发,并将结果反馈给平台。此协议是针对单个网关下多个仪表的批量下发进行设计。

当前,中台协议中的指令下发包括3种,分别是operate操作指令,transport透传指令,read主动抄表,三种指令的报文非常相似,差别只在于method以及payload中的属性不同。
1.平台下发
应用平台下发的中台协议指令,从应用平台的接口设计来看,不会存在一次下发多个命令的情况,所以此处只支持单条命令,当然,在中台转为设备协议的报文时,有可能会对应多条报文,例如需要分包进行下发时。
{
"msgid": 628131887239491584,
"method": "operate_multi",
"sn": "1234567890123",
"timestamp": 1638869990,
"payload ": {
"request": [
{"addr": "1_1", "method": "FORCESWITCH", "ForceSwitch": 1},
{"addr": "1_2", "method": "FORCESWITCH", "ForceSwitch": 1},
{"addr": "2_1", "method": "FORCESWITCH", "ForceSwitch": 1}
]
}
}
下发透传时,单个仪表有可能存在多条透传报文,报文用半角逗号 “,” 隔开。
{
"msgid": 628131887239491584,
"method": "transport_multi",
"sn": "1234567890123",
"timestamp": 1638869990,
"payload ": {
"request": [
{"addr": "1_1", "data": "0C039D080008EB7F,0C039D080008EB7"},
{"addr": "1_2", "data": "0C039D080008EB7F,0C039D080008EB7"},
{"addr": "2_1", "data": "0C039D080008EB7F,0C039D080008EB7"}
]
}
}
批量抄表
{
"msgid": 628131887239491584,
"method": "read_multi",
"sn": "1234567890123",
"res": 0,
"errcode": "5003",
"timestamp": 1638869995,
"payload": {
"request": [
{"addr": "1_1"},
{"addr": "1_2"},
{"addr": "2_1"}
]
}
}
2.网关确认
{
// msgid和指令报文相同
"msgid": 628131887239491584,
// operate_multi / transport_multi / read_multi
"method": "operate_multi",
"sn": "1234567890123",
"res": 1,
"timestamp": 1638869995
}
3.网关上报结果
网关在命令执行完成后,上报执行结果。中台如果下发了多条透传报文,最终也会根据设备返回的多个透传报文,转换为一个最终成功或失败的结果。
{
// msgid和指令报文相同
"msgid": 628131887239491584,
// operate_multi / transport_multi / read_multi
"method": "operate_multi",
"sn": "1234567890123",
"timestamp": 1638869995,
"payload": {
"response": [
{
"addr": "1_1",
"res": 0,
"errcode": "503",
"payload": { ... }
},
{
"addr": "1_2",
"res": 1,
"payload": { ... }
}
]
}
}
4.中台确认结果
{
// msgid和指令报文相同
"msgid": 628131887239491584,
"method": "operate_multi",
"sn": "1234567890123",
"res": 1,
"timestamp": 1638869995
}
5.中台推送执行结果
在中台定义一个转发结果,将结果报文推送给应用平台。
Last modified: 18 四月 2025