通用功能
设备登录login
设备连接中台时,发出登录消息,中台将设备的基本信息持久化,并主动下发投影状态给设备。

1.设备使用Topic sys/dev/{productKey}/{sn}
发出登录消息, method
为login
,消息格式如下:
{
"msgid": 567,
"method": "login",
"sn": "1234567890123",
"timestamp": 1638869890,
"payload": {
// 启用报文压缩
"compress": "1",
// 启用报文压缩算法
"compressAlgo": "LZO",
// 启用报文加密
"encrypt": "1",
"upInterval": 300,
"devname": "awt100_4g",
"softcode": "1111",
"softversion": "1001",
"network": 0,
"imei": "001122334455667",
"ccid": "00112233445566778899",
"mac": "ABC",
"description": "..."
}
}
参数 | 说明 |
---|
payload
| 设备上报自身属性,对中台保存的设备属性进行补充。 子属性: compress - 非必填,是否启用压缩,默认为"0" compressAlgo - 当compress: "1" 时必填,表示采用的压缩算法,值为"ZLIB"或"LZO",默认为"LZO" encrypt - 非必填,是否启用加密,默认为"0" 。加密采用AES算法,CTS模式(Cipher Text Stealing),补码方式为PKCS5Padding,密钥key和向量iv均使用产品的SecretKey的UTF-8编码 upInterval - 上报间隔,单位:秒 devname - 设备名称 softcode - 固件编码 softversion - 固件版本 network - 联网方式,0表示4G,1表示wifi,2表示以太网,3表示其他 imei - IMEI码 ccid - CCID码 mac - MAC地址 description - 设备上报的自定义信息,会被存储在中台的描述信息中 |
2.中台使用Topic sys/server/{productKey}/{sn}
进行响应, method
为login
。
{
"msgid": 567,
"method": "login",
"sn": "1234567890123",
"res": 1,
"timestamp": 1638869990
}
{
"msgid": 567,
"method": "login",
"sn": "1234567890123",
"res": 0,
"errcode": "2102",
"timestamp": 1638869990
}
对时time
中台提供NTP(Network Time Protocol)服务,为资源受限的嵌入式设备,解决无法实时地获取服务端时间的问题。

中台的NTP服务,借鉴NTP协议原理,将中台作为NTP服务器。
对时的标准方案:设备启动/重连时,在login之后对时一次,之后周期性执行对时,通常周期不超过24小时,可根据具体情况调整。
高精准度的时间校正流程如下:
1.设备端通过Topic sys/dev/{productKey}/{sn}
向中台发送消息,会携带发送时间devicesend,
{
"msgid": 568,
"method": "time",
"sn": "1234567890123",
"timezone": "8",
"timezoneMin": "30",
"devicesend": 1638869990
}
{
"msgid": 568,
"method": "time.ms",
"sn": "1234567890123",
"timezone": "8",
"timezoneMin": "30",
"devicesend": 1638869990123
}
2.中台接收设备端消息后,通过Topic sys/server/{productKey}/{sn}
回复消息,报文中会增加接收消息的时间serverreceive 和回复消息的时间serversend ,消息如下:
{
"msgid": 568,
"method": "time",
"sn": "1234567890123",
"timezone": "8",
"timezoneMin": "30",
"devicesend": 1638869990,
"serverreceive": 1638870000,
"serversend": 1638870001,
/* 以下是夏令时信息 */
// 是否启用夏令时,1-启用,0-禁用
"dstEnable": 1,
// 夏令时开始、结束时间
"dstStart": 1710957600,
"dstEnd": 1729447200,
// 夏令时的偏移,通常为30或60,单位:分钟
"dstOffset": 30
}
{
"msgid": 568,
"method": "time.ms",
"sn": "1234567890123",
"timezone": "8",
"timezoneMin": "30",
"devicesend": 1638869990123,
"serverreceive": 1638869990223,
"serversend": 1638869990323,
/* 以下是夏令时信息 */
// 是否启用夏令时,1-启用,0-禁用
"dstEnable": 1,
// 夏令时开始、结束时间
"dstStart": 1710957600,
"dstEnd": 1729447200,
// 夏令时的偏移,通常为30或60,单位:分钟
"dstOffset": 30
}
{
"msgid": 568,
"method": "time",
"sn": "1234567890123",
"res": 0,
"errcode": "2114",
"timestamp": 1638869890
}
3.设备端接收到中台回复,会根据本地时间,给出接收回复的时间devicereceive。
4.根据以上出现的4个时间,计算设备端与中台的时间差,得出设备端获取到的,服务端当前的精确时间为:
(serverRecvTime + serverSendTime + deviceRecvTime - deviceSendTime) / 2
参数 | 说明 |
---|
timezone
| 设备所在时区的小时偏移量,字符串,范围"-12" ~"14" |
timezoneMin
| 设备所在时区的分钟偏移量,字符串,范围"00" 、 30 、 "45" 。 小时和分钟偏移量分为2个属性,主要是为了兼顾不支持分钟偏移量的设备,这类设备只需要解析timezone 即可,不会因为解析timezone 得到一个浮点数而出错 |
devicesend
| 设备发送时间,unix时间戳 |
serverreceive
| 平台接受时间,unix时间戳 |
serversend
| 平台发送时间,unix时间戳 |
dstEnable
| 是否启用夏令时,1-启用,0-禁用 |
dstStart
| 夏令时开始时间,unix时间戳 |
dstEnd
| 夏令时结束时间,unix时间戳 |
dstOffset
| 夏令时的偏移,通常为30或60,单位:分钟 |
发送指令要求设备对时time_sync
中台可以主动发起对时请求,要求具有时钟芯片的设备进行对时。
1.中台通过Topic sys/server/{productKey}/{sn}
向设备发送消息:
{
"msgid": 628131887239491584,
"method": "time_sync",
"sn": "1234567890123",
"timestamp": 1638869890
}
2.设备端收到消息后,通过Topic sys/dev/{productKey}/{sn}
向中台回复确认收到:
{
"msgid": 628131887239491584,
"method": "time_sync",
"sn": "1234567890123",
"res": 1,
"timestamp": 1638869990
}
3.设备端通过 time / time.ms 向平台发起对时。
设备上报拓扑结构topology
网关可以发送消息来上报自身的拓扑结构,中台收到后,将子设备信息保存到数据库。

1.设备端使用Topic sys/dev/{productKey}/{sn}
反馈信息给中台, method
为topology
。
// 仪表拓扑
{
"msgid": 126,
"method": "topology",
"sn": "1234567890123",
"timestamp": 1638870090,
"payload": {
"meter": [
{
"addr": "4_1",
"devsn": "ascb1-123456",
"devname": "ASCB-1",
"productkey": "NjI4NDc1NTg5OTE2OTcxMDA4",
"name": "DDSY",
"softcode": "1111",
"softversion": "1001",
"network": 0,
"imei": "001122334455667",
"ccid": "00112233445566778899",
"portid": "1",
"meteraddr": "1"
}
]
}
}
参数 | 说明 |
---|
payload.meter
| 设备/网关上报子设备列表。 子属性: addr - 必填,格式为通道_子设备地址 或子设备SN ,addr用来定位网关下的设备,下发命令时需要用到 productkey - 子设备ProductKey,平台会优先匹配该字段来生成子设备型号信息 name - 产品名称,如果不填写productkey,中台会根据name字段来匹配产品名称,如果存在产品信息,则创建该型号的子设备,如果不存在产品信息,会自动创建一个新的产品型号,然后基于新的型号创建子设备。 这主要用于灵活接入中台未登记过产品信息的第三方子设备。 devsn - 子设备序列号,说明性字段 devname - 子设备名称,说明性字段 softcode - 固件编码 softversion - 固件版本 file - 设备升级使用的固件包信息数组,包含下载地址url,大小size,md5码。 network - 联网方式,0表示4G,1表示wifi,2表示以太网,3表示其他 imei - IMEI码 ccid - CCID码 portid - 仪表连接的网关端口编号,当使用网关连接中台时上报,中台下发透传命令时,会将此属性发给网关 meteraddr - 仪表连接网关时的表地址,当使用网关连接中台时上报,中台下发透传命令时,会将此属性发给网关 |
如果需要上传分组拓扑信息,可以通过 "cmd": "topo_group"
上报, 上报组拓扑之前,需要先上报上面的仪表拓扑报文。
{
"msgid": 126,
"method": "topology",
"sn": "1234567890123",
"timestamp": 1638870090,
"payload": {
// 组拓扑信息
"cmd": "topo_group",
"meter": [
{
"addr": "asl_1_2",
"name": "ASL200",
"group": [
// type:组类型,single-单控组,multi-群控组,
// ignore-忽略,默认为multi
// category:组类型,说明性字段。
// ignore-忽略,single-单控,box-电箱总控,
// floor-楼层总控,building-楼宇总控,area-区域总控,
// gateway-网关总控,device-设备总控,custom-用户自定义
// name:组名,说明字段
// num:组号
{ "type": "ignore", "category": "ignore", "name": "1", "num": "1" },
{ "type": "single", "category": "single", "name": "1", "num": "1" },
{ "type": "multi", "category": "building", "name": "A楼", "num": "2" },
{ "type": "multi", "category": "floor", "name": "A楼1层", "num": "3" }
],
// 以下非必填
"softcode": "1111",
"softversion": "1001"
}
]
}
}
2.中台收到消息后,会根据payload中填写的子设备addr,查询中台数据库,如果子设备已存在,则将其他信息更新到数据库,如果子设备不存在,则在数据库创建子设备。
3.中台使用Topic sys/server/{productKey}/{sn}
对设备进行响应, method
为topology
。
{
"msgid": 126,
"method": "topology",
"sn": "1234567890123",
"res": 1,
"timestamp": 1638870100
}
{
"msgid": 126,
"method": "topology",
"sn": "1234567890123",
"res": 0,
"timestamp": 1638870100
}
删除设备拓扑topo_clear
当平台上删除某个子设备时,需要将其同步到网关,避免网关下次上报拓扑时,仍旧将该子设备报上来。支持删除部分或全部子设备拓扑。
1.平台使用Topic sys/server/{productKey}/{sn}
发出消息, method
为topo_clear
。
// 全量删除 sys/server/pk/sn
{
"msgid": 628131887239491584,
"method": "topo_clear",
"sn": "1234567890123",
"timestamp": 1638869990,
"payload ": {
"addr": [ "ALL" ]
}
}
// 部分删除 sys/server/pk/sn
{
"msgid": 628131887239491584,
"method": "topo_clear",
"sn": "1234567890123",
"timestamp": 1638869990,
"payload ": {
"addr": [ "1_1", "1_2" ]
}
}
参数 | 说明 |
---|
payload.addr
| 需要删除的子设备数组,数组,必填,全部删除写作["ALL"] 。 |
2.设备通过Topic sys/dev/{productKey}/{sn}
返回结果,如果网关拓扑中不存在下发的addr,也要返回成功。
设备重启restart

1.中台使用Topic sys/server/{productKey}/{sn}
推送信息, method
为restart
,消息格式如下:
{
"msgid": 628131887239491584,
"method": "restart",
"sn": "1234567890123",
"timestamp": 1638869890
}
2.设备端接收到消息后,应当立即使用Topic sys/dev/{productKey}/{sn}
反馈信息给中台, method
为restart
,然后再重启设备。
{
"msgid": 628131887239491584,
"method": "restart",
"sn": "1234567890123",
"res": 1,
"timestamp": 1638870090
}
推送设备升级ota

1.中台使用Topic sys/server/{productKey}/{sn}
推送OTA信息,
{
"msgid": 628131887239491584,
"method": "ota",
"sn": "1234567890123",
"timestamp": 1638869890,
"payload": {
"sn": [ "ALL" ],
"softcode": "1111",
"softversion": "1001",
"file": [
{
"url": "http://iot.acrel-eem.com/download/902418652506419200",
"size": 335571,
"md5": "35149b871cf1db1b0fc8efbfdc99c37f"
}
]
}
}
{
"msgid": 628131887239491584,
"method": "ota_sub",
"sn": "1234567890123",
"timestamp": 1638869890,
"payload": {
"sn": [ "1_1", "1_2" ],
"softcode": "1111",
"softversion": "1001",
"file": [
{
"url": "http://iot.acrel-eem.com/download/902418652506419200",
"size": 335571,
"md5": "35149b871cf1db1b0fc8efbfdc99c37f"
}
]
}
}
参数 | 二级属性 | 说明 |
---|
softcode
| | 固件编号 |
softversion
| | 固件版本 |
sn
| | 需要升级的子设备序列号/地址的数组,与拓扑中上报的addr保持一致。 当升级子设备时,如果sn为["ALL"] 表示升级全部子设备,此时网关需要匹配子设备的软件编号 |
file
| | 设备升级使用的固件包信息,支持一个固件中包含多个文件的情况。 |
| url
| 固件下载URL |
| size
| 固件大小,单位:Byte |
| md5
| MD5校验码 |
2.设备收到消息后,要先使用Topic sys/dev/{productKey}/{sn}
回复消息确认收到,然后下载固件进行升级。
{
"msgid": 628131887239491584,
"method": "ota", // 子设备升级时为ota_sub
"sn": "1234567890123",
"res": 1,
"timestamp": 1638869990
}
设备主动请求升级ota_apply

1.设备主动请求升级时,使用Topic sys/dev/{productKey}/{sn}
发送消息, method
为ota_apply
。
{
"msgid": 125,
"method": "ota_apply",
"sn": "1234567890123",
"timestamp": 1638869990,
"payload": {
"softcode": "1111",
"softversion": "1001"
}
}
2.中台接收到消息后,根据softcode和softversion查询到相应的固件信息,然后使用Topic sys/server/{productKey}/{sn}
反馈信息给设备, method
为ota_apply
。
{
"msgid": 125,
"method": "ota_apply",
"sn": "1234567890123",
"timestamp": 1638870090,
"payload": {
"softcode": "1111",
"softversion": "1001",
"file": [
{
"url": "http://iot.acrel-eem.com/download/1",
"size": 123456,
"md5": "abc"
},
{
"url": "http://iot.acrel-eem.com/download/2",
"size": 123567,
"md5": "def"
}
]
}
}
或反馈失败信息,例如:未找到相应的OTA信息。
{
"msgid": 125,
"method": "ota_apply",
"sn": "1234567890123",
"res": 0,
"errcode": "3101",
"timestamp": 1638870090
}
中台获取设备信息ota_info

中台通过向设备发送消息,查询设备端当前的OTA信息。
1.中台使用Topic sys/server/{productKey}/{sn}
推送信息, method
为ota_info
,消息格式如下:
{
"msgid": 628131887239491584,
"method": "ota_info",
"sn": "1234567890123",
"timestamp": 1638869890,
"payload": {
"sn": [
"12345"
]
}
}
参数 | 说明 |
---|
payload
| 当需要查询子设备属性时,填写的信息,如果只需要查询设备/网关的信息,无需payload属性: sn - 子设备SN,数组,但当前每次只允许下发1个子设备SN |
2.设备端接收到消息后,使用Topic sys/dev/{productKey}/{sn}
反馈信息给中台, method
为ota_info
。
{
"msgid": 628131887239491584,
"method": "ota_info",
"sn": "1234567890123",
"timestamp": 1638870090,
"payload": {
"softcode": "1111",
"softversion": "1001",
"sn": [
"12345"
],
"info": [
{
"softcode": "101",
"softversion": "101"
}
]
}
}
参数 | 说明 |
---|
payload
| 设备上报自身属性,对中台保存的设备属性进行补充。 子属性: softcode - 设备/网关固件编码 softversion - 设备/网关固件版本 sn - 当下发指令时存在payload.sn ,即查询子设备信息时,返回值中可以此属性,用来反馈查询到ota信息的子设备SN,未查询到OTA信息的子设备SN必须从中删除,以保证和info 属性中的信息一一对应。 info - 数组,当下发指令时存在payload.sn ,即查询子设备信息时,返回值中存在此属性,返回子设备的ota信息。 |
这么做主要是为了协议的扩展性考虑,现在考虑到一个设备/网关下面可能挂几百个设备,如果一次下发大量子设备SN,可能造成设备负载过高,所以在调用中台接口时,每次只允许查询1个子设备,即payload.sn
数组的最大容量为1,但是在中台的协议设计上,保留了一次查询多个子设备信息的扩展性,那么,当一次下发多个子设备SN时,网关可能需要分包响应,那么如果不能建立起sn和info的对应关系,中台就无法知道当前返回的是哪些子设备的OTA信息,所以要求响应中的payload.sn
必须与payload.info
一一对应,以保证协议的可扩展性。
读取和设置设备参数info
平台网站通过此method读取和设置参数。由于参数较多,因此需要通过type属性来区分是哪类参数。平台网站根据当前的界面或用户的操作可以单独读取或者设置单个或几个参数。
平台发出
// 平台发出读命令
{
"msgid": "948061032286580737",
"method": "info",
"sn": "1234567890123",
"timestamp": 1638869990,
"payload ": {
"cmd": "READ",
"type": "BASIC"
}
}
设备回复
{
"msgid": "948061032286580737",
"method": "info",
"sn": "1234567890123",
"res": 1,
"timestamp": 1638870100,
"payload": {
"sn": "1234567",
"platform": [
{
"remoteConfig": 1,
"registerProtocol": "https",
"registerHost": "register.acrel.com",
"registerPort": 20001
// 其他参数...
}
]
}
}
平台发出
{
"msgid": "948061032286580737",
"timestamp": 1715146974,
"method": "info",
"sn": "24041506850011",
"payload": {
"cmd": "WRITE",
"type": "BASIC",
"platform": [{
// 远程配置,1-应用平台
"remoteConfig": 1,
// 注册服务,http/https
"registerProtocol": "https",
"registerHost": "register.acrel.com",
"registerPort": 20001,
// mqtt设置
// 协议,mqtt/mqtts
"mqttProtocol": "mqtts",
"mqttHost": "access.acrel.com",
"mqttPort": 20071,
"mqttUsername": "acrel",
"mqttPassword": "Acrel123",
"mqttClientId": "NUOCMQPQWSN123456",
},{
// 远程配置,2-买断客户保留mqtt到托管调试平台
"remoteConfig": 2,
// 注册服务,http/https
"registerProtocol": "https",
"registerHost": "register.acrel.com",
"registerPort": 20001,
// mqtt设置
// 协议,mqtt/mqtts
"mqttProtocol": "mqtts",
"mqttHost": "debug.acrel.com",
"mqttPort": 20071,
"mqttUsername": "acrel",
"mqttPassword": "Acrel123",
"mqttClientId": "NUOCMQPQWSN123456",
}]
}
}
设备回复
{
"msgid": 628131887239491584,
"method": "info",
"sn": "1234567890123",
"res": 1,
"timestamp": 1638870090
}
参数 | 类型 | 说明 |
---|
cmd | string | READ:读取参数; WRITE:设置参数; |
type | string | STATIC:固定值参数,只需读取一次 BASIC:基础参数 UART:串口参数 ETH:网口参数 GSM:4G参数 LORA:lora参数 WIFI:wifi参数 DIDO:开关量、模拟量参数 INVERTER:光伏逆变器数据, 详见文档AWT200 防逆流专用方案设计 INVERTER_LIST:读取逆变器地址列表,详见文档AWT200 防逆流专用方案设计 |
下面按照type分别列出不同类型的参数
参数 | 类型 | 读/写 | 说明 |
---|
product | string | r | 设备型号 |
productKey | string | r | 中台productkey |
softcode | string | r | 程序编号 |
softversion | string | r | 程序版本 |
softbootload | string | r | bootload固件版本 |
softdevelopment | string | r | 内部开发版本 |
produceTime | string | r | 设备生产时间 |
imei | string | r | 通讯模组序列号 |
ccid | string | r | SIM卡号 |
参数 | 类型 | 读/写 | 说明 |
---|
sn | string | r/w | 设备序列号 |
timezone | string | r/w | 时区 标准格式 "+08:00" "-01:30" |
platform | array[] | r/w | 应用平台的连接信息,数组,具体见表格下方说明 |
runTime | string | r | 设备运行时间 以秒为单位计时 |
runState | string | r | 设备当前运行状态 "run" - 运行中 "alarm" - 报警中 |
ethState | string | r | 设备当前网口状态 "no line" - 未插入网线 "run" - 正常通讯中(只有一个端口连接成功即可) "error" - 网口通讯异常(网线已插入,由于某些原因没有收发包数) |
gsmState | string | r | 设备当前4G状态 "off" - 无线模块未启用 "init" - 初始化中 "check sim" - 检查sim卡 "no net" - 入网失败 "run" - 正常通讯中(只有一个端口连接成功即可) "ppp error" - 拨号失败 |
gsmRssi | int | r | 信号强度 百分值% |
wifiRssi | int | r | 信号强度 百分值% |
loraRssi | int | r | 信号强度 百分值% |
sendPkt | int | r | 总发送包数 |
recvPkt | int | r | 总接收包数 |
devCnt | int | r | 下行设备总数(网关有此参数) |
devOnlineCnt | int | r | 下行设备在线数(网关有此参数) |
uartCnt | int | r | 串口个数 |
ethCnt | int | r | 网口个数 |
loraCnt | int | r | lora端口个数(没有填0) |
wifiCnt | int | r | wifi端口个数 |
gsmCnt | int | r | gsm端口个数 |
diCnt | int | r | 输入开关量个数 |
doCnt | int | r | 输出开关量个数 |
aiCnt | int | r | 输入模拟量个数 |
memUsed | int | r | 内存已使用大小 单位:KB |
memUsedPct | string | r | 内存使用率 单位:% |
memUsedMax | int | r | 内存已使用最大值 单位:KB |
参数 | 类型 | 读/写 | 说明 |
---|
num | int | c | 指定第几个串口,从1开始 |
baud | int | r/w | 波特率 1200/2400/4800/9600/19200/38400/115200 |
databits | int | r/w | 数据位 6/7/8 |
parity | string | r/w | 奇偶校验位 NONE/ODD/EVEN |
stop | int | r/w | 停止位 1\1.5\2 |
参数 | 类型 | 读/写 | 说明 |
---|
num | int | c | 指定第几个网口,从1开始 |
ip | string | r/w | 本地ip地址 |
gateway | string | r/w | 默认网关地址 |
mask | string | r/w | 子网掩码 |
mac | string | r/w | MAC地址 |
dhcp | string | r/w | dhcp开关 ON/OFF |
sendbytes | string | r | 发送字节数 |
recvbytes | string | r | 接收字节数 |
| | | |
参数 | 类型 | 读/写 | 说明 |
---|
switch | string | r/w | 开关 ON/OFF |
ip | string | r/w | 本地ip地址 |
gateway | string | r/w | 默认网关地址 |
mask | string | r/w | 子网掩码 |
apnName | string | r/w | apn节点名称 |
apnUser | string | r/w | apn账号 |
apnPass | string | r/w | apn密码 |
sendbytes | string | r | 发送字节数 |
recvbytes | string | r | 接收字节数 |
| | | |
参数 | 类型 | 读/写 | 说明 |
---|
num | int | c | 指定第几个lora,从1开始 |
freq | int | r/w | lora频段,单位HZ |
factor | int | r/w | 扩频因数 |
bandwidth | int | r/w | 带宽 单位HZ |
参数 | 类型 | 读/写 | 说明 |
---|
wlanAP | string | r/w | AP热点名称 |
password | string | r/w | AP热点密码 |
监听设备端口实时报文comtext
平台网站监测端口收发的实时报文。平台网站可以打开或者关闭监测报文功能一段时间 ,打开后,设备同时向调试MQTT发送报文,或者接收调试平台发出的命令, 到时间后该功能自动关闭 ,避免无限发送消息损耗流量。
// 平台下发
{
"msgid": 123,
"method":"comtext",
"timestamp": 1638869990,
"sn": "1234567890123",
"payload":{
"cmd":"SWITCH",
"com":"uart",
"comNo":1,
"switch":"ON",
"openTime":10
}
}
// 设备回复
{
"msgid": 123,
"sn": "1234567890123",
"timestamp": 1638870100,
"method":" comtext",
"res":1
}
{
"msgid": 123,
"sn": "1234567890123",
"timestamp": 1638870100,
"method":" comtext",
// 1:成功,0:失败,失败没有payload
"res":1,
"payload":{
"cmd":"TEXT_UP",
"com":"uart1",
"text":"01030001840A"
}
}
// 平台下发
{
"msgid": 123,
"method":"comtext",
"timestamp": 1638869990,
"sn": "1234567890123",
"payload":{
"cmd":"RW_MODBUS",
"text":"01100000000102010000"
}
}
// 设备回复
{
"msgid": 123,
"sn": "1234567890123",
"timestamp": 1638870100,
"method":" comtext",
"res":1,
"payload":{
"cmd":"RW_MODBUS",
"text":"01100000000102010000"
}
}
参数 | 类型 | 说明 |
---|
cmd | string | SWITCH:开关 TEXT_DOWN:下发报文内容 TEXT_UP:回复报文内容 RW_MODBUS:仪表modbus透传通道 |
com | string | 端口类型名称 |
comNo | int | 此类型下的端口序号 |
switch | string | ON/OFF |
openTime | int | 打开时间,到时间关闭,单位分,范围1-60,默认15分钟 |
res | int | 1:操作成功 0:操作失败 |
text | string | 报文内容 |
获取设备拓扑信息call_topo
平台网站通过此命令获取设备的拓扑信息。目的是为了方便method:call_data
的数据召回逻辑。
// 平台下发
{
"msgid": 123,
"timestamp": 1638869990,
"sn": "1234567890123",
"method":"call_topo",
"payload": {
"cmd": "GET"
}
}
// 设备回复
{
"msgid": 123,
"sn": "1234567890123",
"timestamp": 1638870100,
"res":1,
"method": "call_topo",
"payload": {
"cmd": "GET",
"portCnt": 2,
"topoInfo": [
{
"com": "uart1",
//地址抄表
"style":"addr/sn",
"devList": ["1","2","3"],
"staList": [1, 0, 1]
},
{
"com": "uart2",
//序列号抄表
"devList": ["1111111111111_1", "22222222222222", "33333333333333"]
}
]
}
}
// 平台下发
{
"msgid": 123,
"timestamp": 1638869990,
"sn": "1234567890123",
"method":"call_topo",
"payload":{
"cmd":"MODIFY",
"topoInfo":{
"com":"uart1",
"style":"addr/sn",
"dev":""
}
}
}
// 设备回复
{
"msgid": 123,
"sn": "1234567890123",
"timestamp": 1638870100,
"method": "call_topo",
"res":1,
"payload": {
"cmd": "MODIFY"
}
}
payload | json类型 | 说明 |
---|
cmd | string | GET: 主动获取拓扑信息 MODIFY: 修改拓扑信息(预留) |
com | string | 端口类型名称 |
portCnt | int | 拓扑结构中使用到的端口总数 |
topoInfo | array/obj | 拓扑信息,元素为端口和此端口下的设备列表 |
devList | array/string | 此端口下每个设备的地址或序列号,按顺序排列 |
读取设备内数据call_data
平台网站通过此命令读取设备内采集的实时数据或历史数据,回复数据时的JSON字段参考中台。如果是多回路的,则读取所有回路的数据。
此命令还可以使设备向调试平台转发实时数据, 持续一段时间后关闭,以避免流量消耗。
// 平台下发
{
"msgid": 123,
"timestamp": 1638869990,
"sn": "1234567890123",
"method": "call_data",
"payload": {
"cmd": "REAL_TIME",
"com": "uart1",
"style": "addr/sn",
"dev": "01234567890123"
}
}
// 设备回复
{
"msgid": 123,
"sn": "1234567890123",
"timestamp": 1638870100,
"method": "call_data",
"res": 1,
"payload": {
"cmd": "REAL_TIME",
"com": "uart1",
"style": "addr/sn",
"dev": "01234567890123",
"realData": {
"ua":" ",
"ub":" ",
...
}
}
}
// 平台下发
{
"msgid": 123,
"sn": "1234567890123",
"timestamp": 1638870100,
"method": "call_data",
"payload": {
"cmd": "HIS_TIME",
"com": "uart1",
"style": "addr/sn",
"dev": "01234567890123",
"hisTimeStart": "2020-10-01 20:00",
"hisTimeEnd": "2020-10-01 21:00"
}
}
// 设备回复
{
"msgid": 123,
"sn": "1234567890123",
"timestamp": 1638870100,
"method": "call_data",
"res": 1,
"payload": {
"cmd": "HIS_TIME",
"com": "uart1",
"style": "addr/sn",
"dev": "01234567890123",
"hisData": [
{
"hisTime": "2020-10-01 20:00",
"ua": " ",
"ub": " ",
//……
},
{
"hisTime": "2020-10-01 20:00",
"ua": " ",
"ub": " ",
//……
}
]
}
}
// 平台下发
{
"msgid": 123,
"sn": "1234567890123",
"timestamp": 1638870100,
"method":"call_data",
"payload":{
"cmd":" AUTO_PUSH",
"switch":"ON",
"openTime":10,
"com": "uart1",
"style": "addr/sn",
"dev": "01234567890123",
}
}
// 设备回复
{
"msgid": 123,
"sn": "1234567890123",
"timestamp": 1638870100,
"method": "call_data",
"res":1
}
// 平台下发
{
"msgid": 123,
"sn": "1234567890123",
"timestamp": 1638870100,
"method": "call_data",
"payload":{
"cmd":"DIDOAI"
}
}
// 设备回复
{
"msgid": 123,
"sn": "1234567890123",
"timestamp": 1638870100,
"method": "call_data",
"res": 1,
"payload": {
"cmd": "DIDOAI",
"di": [1,0,0,0,0,0],
"do": [1,1,1,1],
"ai": [12,4905]
}
}
// 平台下发
{
"msgid": 123,
"sn": "1234567890123",
"timestamp": 1638870100,
"method":"call_data",
"payload":{
"cmd":" AUTO_PUSH",
"switch":"ON",
"openTime":10,
"com": "uart1",
"style": "addr/sn",
"dev": "01234567890123",
}
}
// 设备回复
{
"msgid": 123,
"sn": "1234567890123",
"timestamp": 1638870100,
"method": "call_data",
"res":1
}
属性 | 类型 | 说明 |
---|
cmd | string | AUTO_PUSH:实时数据自动推送 REAL_TIME:实时数据 HIS_TIME:历史数据 索引 DIDOAI:开关量数据 |
switch | string | ON/OFF AUTO_PUSH的使能开关 |
openTime | int | 打开时间,到时间关闭 单位分 范围1-60 默认15分钟 |
com | string | 端口名称 |
num | int | 对应端口下某个设备的地址 |
devSN | string | 设备序列号 |
hisTimeStart | string | 历史数据开始时间 |
hisTimeEnd | string | 历史数据结束时间 |
realData | object | 实时数据内容 |
hisData | array | 历史数据内容,一个时刻一个数组元素 |
hisTime | string | 回复的历史数据时间 |
平台与设备同步配置文件sync
平台与设备同步配置文件,设备对比版本后,如果设备上的配置文件较新,则上传配置文件到平台;如果平台上的配置文件较新,则下载配置文件到设备。
// 平台下发
{
"msgid": 123,
"sn": "1234567890123",
"timestamp": 1638870100,
"method":"sync",
"payload":{
"cmd":"STATUS",
"status": [
{"file":"sys.json", "sta":"trans"} ,
{"file":"clt.json", "sta":"totrans"}
]
}
}
// 设备回复
{
"msgid": 123,
"sn": "1234567890123",
"timestamp": 1638870100,
"method": "sync",
"res":1
}
// 平台下发
{
"msgid": 123,
"sn": "1234567890123",
"timestamp": 1638870100,
"method":"sync",
"payload":{
"cmd":"CHECK",
"status": [
{"file":"sys.json", "url":"http", "ver":"2022-03-20 20:00"} ,
{"file":"clt.json", "url":"http", "ver":"2022-03-20 21:00"}
]
}
}
// 设备回复
{
"msgid": 123,
"sn": "1234567890123",
"timestamp": 1638870100,
"method": "sync",
"res":1
}
属性 | 类型 | 说明 |
---|
cmd | string | CHECK:控制设备检查配置文件版本号 STATUS:同步状态上报 |
属性 | 类型 | 说明 |
---|
fileVer | array | json数组的形式传输文件名称和此文件的版本号。 注:以最后一次修改配置文件的时间为版本号,到分钟。 格式:yyyy-mm-dd hh:mm { "fileVer":[ { "file":"sys.json", "url":"http://", "ver":"2022-03-20 20:00" } , { "file":"clt.json" , "url":"http", "ver":"2022-03-20 21:00" } ] } |
属性 | 类型 | 说明 |
---|
status | array | json数组的形式显示文件名称和此文件当前的传输状态,一旦任何一个文件传输状态有变化,会上传此cmd。 totrans:准备传输 trans:传输中 trans_done:传输完成 trans_fail:传输失败 例: "status":[ {"file":"sys.json","sta":"trans"} , {"file":"clt.json", "sta":"totrans"} ] |
平台与设备传输配置文件config_file
平台网站可以主动获取设备内的配置文件,或者控制设备下载配置文件。平台网站下发method: sync
后,通常会使用到此method。
// 平台下发
{
"msgid": 123,
"sn": "1234567890123",
"timestamp": 1638870100,
"method":"config_file",
"payload":{
"cmd":"UP",
"fileList":[
{
"fileName":"sys.json",
"url":"http://IP:PORT/exchange/debug/config_file/upload/AWT200TEST0010/1000"
},
{
"fileName":"clt.json",
"url":"http://IP:PORT/exchange/debug/config_file/upload/AWT200TEST0010/1000"
}
]
}
}
// 设备回复
{
"msgid": 123,
"sn": "1234567890123",
"timestamp": 1638870100,
"method": "config_file",
"res": 1
}
// 平台下发
{
"msgid": 123,
"sn": "1234567890123",
"timestamp": 1638870100,
"method":"config_file",
"payload":{
"cmd":"DOWN",
"fileList":[
{
"fileName":"sys.json",
"fileSzie":6550,
"url":"http://1.2.3.4:80/file/sys.json",
"md5":""
},
{
"fileName":"clt.json",
"fileSzie":6550,
"url":"http://1.2.3.4:80/file/clt.json",
"md5":""
}
]
}
}
// 设备回复
{
"msgid": 123,
"sn": "1234567890123",
"timestamp": 1638870100,
"method": "config_file",
"res": 1
}
// 平台下发
{
"msgid": 123,
"sn": "1234567890123",
"timestamp": 1638870100,
"method":"config_file",
"payload":{
"cmd":"GETLIST"
}
}
// 设备回复
{
"msgid": 123,
"sn": "1234567890123",
"timestamp": 1638870100,
"method": "config_file",
"res": 1
}
// 平台下发
{
"msgid": 123,
"sn": "1234567890123",
"timestamp": 1638870100,
"method":"config_file",
"payload":{
"cmd":"DELETE",
"fileList": [ "sys.json" ]
}
}
// 设备回复
{
"msgid": 123,
"sn": "1234567890123",
"timestamp": 1638870100,
"method": "config_file",
"res": 1
}
payload | 类型 | 说明 |
---|
cmd | string | UP:设备上传文件 DOWN:设备下载文件 GETLIST:平台获取设备内的文件列表 DELETE:平台删除网关内指定名称文件 |
fileList | array | 目标文件列表 |
fileName | string | 文件名称 |
fileSize | int | 文件字节大小 |
fileVer | string | 文件版本 |
url | string | 文件网络地址 |
md5 | string | MD5校验值 |
设置报警策略alert_set
1.中台使用Topic sys/server/{productKey}/{sn}
推送信息, method
为alert_set
,包含如下策略类型
遥测报警策略
下发时需要将该电参量相关的策略全部下发,如下示例中为Ua的4条越限报警策略。
协议支持同时下发多个遥测量的策略,例如三相电压的12条越限报警策略可以通过一条报文下发。
遥信报警策略
遥信报警分为变化报警和变位报警2种方式,变化报警指的是该点位的值一旦发生变化,触发报警;变位报警指的是该点位的值变成指定值时,触发报警。
消息格式如下:
{
"msgid": 628131887239491584,
"method": "alert_set",
"sn": "1234567890123",
"timestamp": 1638869990,
"payload ": {
"cmd": "WRITE",
"strategy": [
{
"addr": "1_1",
"rules": [
// 遥测越限报警-start
{
"alertType": "OVER",
"alertCode": "UaHigh1",
"param": "Ua",
"enable": 1,
"threshold": "High1",
"pickupType": "ABSOLUTE",
"pickupValue": "230.0",
"pickupDelay": 10,
"dropoutValue": "225.0",
"dropoutDelay": 10,
"association": 1
},
{
"alertType": "OVER",
"alertCode": "UaHigh2",
"param": "Ua",
"enable": 1,
"threshold": "High2",
"pickupType": "ABSOLUTE",
"pickupValue": "240.0",
"pickupDelay": 10,
"dropoutValue": "235.0",
"dropoutDelay": 10,
"association": 1
},
{
"alertType": "OVER",
"alertCode": "UaLow1",
"param": "Ua",
"enable": 1,
"threshold": "Low1",
"pickupType": "ABSOLUTE",
"pickupValue": "210.0",
"pickupDelay": 10,
"dropoutValue": "215.0",
"dropoutDelay": 10,
"association": 1
},
{
"alertType": "OVER",
"alertCode": "UaLow2",
"param": "Ua",
"enable": 1,
"threshold": "Low2",
"pickupType": "ABSOLUTE",
"pickupValue": "200.0",
"pickupDelay": 10,
"dropoutValue": "205.0",
"dropoutDelay": 10,
"association": 1
},
// 遥测越限报警-end
// 变位报警-start
{
"alertType": "SWITCH",
"alertCode": "SwitchOn",
"param": "SwitchOn",
"enable": 1,
"threshold": "On",
"value": "1",
"delay": 10,
"association": 1
},
{
"alertType": "SWITCH",
"alertCode": "SwitchOff",
"param": "SwitchOff",
"enable": 1,
"threshold": "Off",
"value": "0",
"delay": 10,
"association": 1
},
// 变位报警-end
// 变化报警-start
{
"alertType": "CHANGE",
"alertCode": "DoorOpen",
"param": "Door",
"enable": 1,
"threshold": "Open",
"value": "1",
"delay": 10,
"association": 1
},
{
"alertType": "CHANGE",
"alertCode": "DoorClose",
"param": "Door",
"enable": 1,
"threshold": "Close",
"value": "0",
"delay": 10,
"association": 1
}
// 变化报警-end
]
},
{
"addr": "1_2",
"rules": [ ... ]
}
]
}
}
2.设备端接收到消息后,修改本地配置后,通过Topic sys/dev/{productKey}/{sn}
反馈成功或失败的结果。
{
"msgid": 628131887239491584,
"method": "alert_set",
"sn": "1234567890123",
"res": 1,
"timestamp": 1638870092
}
参数 | 二级属性 | 三级属性 | 说明 |
---|
cmd
| | | |
strategy
| | | 报警策略,以数组格式同时设置多个子设备的策略。 |
| addr
| | 子设备地址/序列号,与拓扑中保持一致 |
| rules
| | 触发规则,必须包含该子设备的某个电参量的完整策略,例如:不允许将同一个子设备的Ua的High1、High2和Low1、Low2拆分为多条报文下发。 一条报文中可以包含多个电参量的策略,每个电参量的策略都必须保证完整性。 |
| | alertType
| 报警类型,OVER-越限,SWITCH-变位,CHANGE-变化 |
| | alertCode
| 报警编码,当策略被触发时,通过method: alert 发出报警报文中的编码code |
| | param
| 电参量 |
| | enable
| 使能,1-启用,0-禁用 |
| | threshold
| 门限,例如:High1,High2,Low1,Low2,On,Off |
| | pickupType
| 越限类型,ABSOLUTE-绝对值,PERCENT-百分比 |
| | pickupValue
| 越限报警的值或范围 |
| | pickupDelay
| 越限报警的延时,数值类型 |
| | baseValue
| 越限报警的类型为PERCENT时,设置的基准值 |
| | dropoutValue
| 越限报警的回滞值或范围 |
| | dropoutDelay
| 越限报警的回滞延时,数值类型 |
| | value
| 变位/变化报警的值 |
| | delay
| 变位/变化报警的延时 |
| | association
| 联动,数值类型,1-是,0-否 |
Last modified: 18 四月 2025