数据采集器协议定义

1. 设置网关

1.1. 网关接入

1.2. 发送注册请求(检查注册标识,如果注册了就没有这个步骤)

数据项 获取方式
网关ID 读配置

注册rpc协议:

{  
    “id”:123,  
    “jsonrpc”:2.0,  
    “method”:”registerAcquisitor”,  
    “params”:{“gateway_id”: gateway_id}  
}  

平台响应注册请求:

{  
    "id":123,  
    "jsonrpc":2.0,  
    "result": true,  
    "error":null  
}  

错误响应:

{  
    "id":123,       
    "jsonrpc":2.0,  
    "result":false,
    "error":"reason"    
}  

1.3. 基础信息

设置基础信息rpc协议:

{ 
    "id":123, 
    "method":"setDataCenter", 
    "params":{
        "gateway_id":gateway_id,
        "dataCenter":"dc.energyiot.cn",
        "dataPort":9998
    } 
}

获取基础信息rpc协议:

{
“id”:123,
“jsonrpc”:2.0,
“method”:”getDataCenter” 
}

响应rpc:

{
“id”:123,
“jsonrpc”:2.0,
“result”:{“gateway_id”: gateway_id,”dataCenter”:”dc.energyiot.cn”,”dataPort”:9998}   
}

1.4. 采集器信息

设置采集信息rpc协议:

{
    "id":123,
    "jsonrpc":2.0,
    "method":"setAcquisitorInfo",
    "params":{"gateway_id": gateway_id,"property":"楼道信息"}   
}

获取采集信息rpc协议:

{
    “id”:123,
    “jsonrpc”:2.0,
    “method”:”getAcquisitorInfo”,
    “params”:{“gateway_id”: gateway_id,”property”:”楼道信息”}   
}

响应rpc:
设置采集信息rpc协议:

{
    “id”:123,
    “jsonrpc”:2.0,
    “result”:{“gateway_id”: gateway_id,”property”:”楼道信息”}   
}

1.5. 采集器通讯网关

设置采集器网关rpc协议:

{
    “id”:123,
    “jsonrpc”:2.0,
    “method”:”setGateway”,
    “params”:{“gateway_id”: gateway_id,
    “gateway”:{“lan”:”lan1”,
    “mode”:”static”/”dynamic”,
    ”ipaddr”:”192.168.1.230”,”netmask”:”255.255.255.0”,”defaultgateway”:”192.168.1.1”}
}
}

获取采集器网关rpc协议:

{
    “id”:123,
    “jsonrpc”:2.0,
    “method”:”getGateway”
} 

响应rpc协议:

{
    “id”:123,
    “jsonrpc”:2.0,
    “result”:{“gateway_id”: gateway_id,
    “gateway”:{“lan”:”lan1”,
    “mode”:”static”/”dynamic”,
    ”ipaddr”:”192.168.1.230”,”netmask”:”255.255.255.0”,”defaultgateway”:”192.168.1.1”}
    }
}

2. 仪表处理

2.1. 平台端获取设备列表

获取设备列表

{
    “id”:123,
    “jsonrpc”:2.0,
    “method”:"getDeviceList",
    “params”:{“status”:“all”}
}

params 的值可以是以下情况:

设备状态 意义 响应
all 所有设备 返回所有设备列表
added 已经添加的设备 返回状态为已添加设备列表
unadd 未添加设备 返回状态为未添加设备列表
unknown 未知设备,可能是之前已经添加了,但是又拔出去的设备 返回状态为未知设备列表

2.2. 网关端发送设备列表

网关响应设备列表rpc:

{
    “id”:123
    “jsonrpc”:2.0result”:
    [
        {
            “name”:”device1”,
            “id”:12345678,
            “status”:”added”,
            “chn”:”COM1”
        },
        {/* 此时不知道名称和id */
            “status”:”unadd”,
            “chn”:”COM2”
        },
        {
            “name”:”device3”,
            “id”:12345678,
            “status”:”unknown”,
            “chn”:”COM3”
        },
        …
    ]
}

也有可能一个设备都没有

2.3. 平台端选择其中一个设备,不同状态,处理不同

2.3.1 added:

发送的rpc:

{
    "id":123,
    "jsonrpc":"2.0",
    "method":"getDeviceInfo",
    "params":{"chn":"COM1","id":"12345678"}
}

返回设备的基本信息:

{
    “id”:123
    “jsonrpc”:2.0result”:{
        “name”:”device1”,
        “id”:12345678,
        “status”:”added”,
        "sample":30,/*单位:分钟*/
        “lifeuse”:”生活用水”,
        “model”: “设备型号”,
        “type”:”WaterMeter”,
        “communication”:{
            “mode”:”socket”,
            "addr":{
                “ipaddr”:”192.168.1.22”,
                ”port”:3737,
                ”delay”:1500
            }
            或
            “mode”: ”serial”,
            "addr":{
                “chn”:”COM1”,
                ”baudRate”:19200,
                ”dataBits”:8,
                ”stopBits”:1,
                delay”:1500
            }
        }
    }
}

2.3.2 unadded

应该进入添加设备界面,点击添加:
params部分都是需要用户设置的内容
“chn”:”COM2”可以使用网关提供的,也可以改

用户设置厂商,型号,仪表类型,得到配置文件;
用户设置通讯地址(串口通道、波特率、校验码、停止位);
根据以上信息网关可以返回设备ID的一个列表,具体rpc如下:

获取设备ID rpc:

{
   "id":123,
   "method":"getDeviceIds",
   "params":{
       "model": "1235",
        "communication":{
            "mode":"socket",
            "delay":1500,
            "addr":{
                "ipaddr":"192.168.1.22",
                "port":3737
            }
            或
            "mode": "serial",
            "delay":1500,
            "addr": {
                "chn":"COM1",
                "baudRate":19200,
                "dataBits":8,
                "stopBits":1,
                "addr":"12345678"
            }
        }
   }
}

返回ID列表:

{
   "id":123,
   "jsonrpc":"2.0",
   "result":
   [
      {
         "id":"12345678",
         "model":"1234"
      },
      {
         "id":"92345678",
         "model":"1235"
      }
   ]
}

表达式格式

序号 表达式
01 bcd/100.0
02 int*0.1

获取设备列表

{
       "id":1234,
       "jsonrpc":"2.0",
       "method":"getDevicesList"
 }

返回设备列表:

{
       "id":1234,
       "jsonrpc":"2.0",
       "result":
       [
       {
          "name":"device1",
          "id":"12345678",
          "sample":30/*单位:分钟*/
          "model":"lianli_dns20", /* 设备型号 */
          "type":1,  /* 1 表示水表,2表示电表,3其他表等等*/
          "protocol":"modbus_rtu", /*协议模板*/
          "communication":{
              "mode": "serial",
              "delay":1500"addr":{
                  "chn":"COM1",
                  "baudRate":2400,
                  "dataBits":8,
                  "stopBits":1"parity":2  /* 0 无,1 奇,2 偶*/
            },
            {/*其他设备*/}
       ]
}

获取表达式列表

{
    "id":1234,
    "jsonrpc":"2.0",
    "method":"getExprsList"
}

返回表达式列表

{
    "id":1234,
    "jsonrpc":"2.0",
    "result":[
           {"id":0,"expr":"$data","comment":"指令格式"},
           {"id":1,"expr":"$bcd($data)","comment":"BCD编码"},
           {"id":2,"expr":"$int($data)","comment":"整数"},
           {"id":3,"expr":"$float($data)","comment":"IEEE 754 标准浮点数"}
       ]
}

获取采样参数列表

{
    "id":1234,
    "jsonrpc":"2.0",
    "method":"getAquireList"
}

返回采样参数列表

{
    "id":1234,
    "jsonrpc":"2.0",
    "result":[
        {"model":"lianli_dns20","acqId":0x0000,"params":["11H","33H 78H","0aH 81H 01H"],"reglen":5,"expr":0,"rate":0},
           {"model":"lianli_dns20","acqId":0x0101,"params":["11H","33H 78H","1fH 90H 01H"],"reglen":4,"expr":1,"rate":100.0},
           {"model":"lianli_dns20","acqId":0x0000,"params":["10H","33H 78H","0aH 81H 01H"],"reglen":5,"expr":0,"rate":0},
           {"model":"lianli_dns20_bigcore","acqId":0x0101,"params":["10H","33H 78H","1fH 90H 01H"],"reglen":4,"expr":1,"rate":100.0},
           {"model":"hed09e3y","acqId":0x0000,"params":["00H 45H"],"reglen":1,"expr":0,"rate":0},
           {"model":"hed09e3y","acqId":0x0201,"params":["00H 36H"],"reglen":2,"expr":3,"rate":10.0},
           {"model":"hed09e3y","acqId":0x0202,"params":["00H 38H"],"reglen":2,"expr":3,"rate":10.0},
           {"model":"hed09e3y","acqId":0x0203,"params":["00H 3CH"],"reglen":2,"expr":3,"rate":10.0},
           {"model":"hed09e3y","acqId":0x0204,"params":["00H 3EH"],"reglen":2,"expr":3,"rate":10.0},
           {"model":"dds228_l","acqId":0x0000,"params":["00H 45H"],"reglen":1,"expr":0,"rate":0},
           {"model":"dds228_l","acqId":0x0210,"params":["00H 36H"],"reglen":2,"expr":3,"rate":10.0},
           {"model":"dds228_l","acqId":0x0211,"params":["00H 3AH"],"reglen":2,"expr":3,"rate":10.0}
       ]
}

获取配置:

{
       "id":1234,
       "jsonrpc":"2.0",
       "method":"getConfigures"/"updateConfigures",
       "params":
       {
           "exprs":
           [
           {"id":1,"expr":"$data","comment":"指令格式"},
           {"id":1,"expr":"$bcd($data)","comment":"BCD编码"},
           {"id":2,"expr":"$int($data)","comment":"整数"},
           {"id":3,"expr":"$float($data)","comment":"IEEE 754 标准浮点数"}
           ],
           "acqtypes":
           [
           {"acqId":0x0000,"name":"设备地址","unit":"none"},
           {"acqId":0x0101,"name":"计量数据","unit":"m3"},
           {"acqId":0x0201,"name":"正向有功电度","unit":"kwh"},
           {"acqId":0x0202,"name":"负向有功电度","unit":"kwh"},
           {"acqId":0x0203,"name":"正向无功电度","unit":"kvarh"},
           {"acqId":0x0204,"name":"负向无功电度","unit":"kvarh"},
           {"acqId":0x0210,"name":"有功总电度","unit":"kwh"},
           {"acqId":0x0211,"name":"无功总电度","unit":"kvarh"}
           ],
           "acquire":
           [
           {"model":"lianli_dns20","acqId":0x0000,"params":"11H;[33H 78H];[0aH 81H 01H]","reglen":5,"expr":0,"rate":0},
           {"model":"lianli_dns20","acqId":0x0101,"params":"11H;[33H 78H];[1fH 90H 01H]","reglen":4,"expr":1,"rate":100.0},
           {"model":"lianli_dns20","acqId":0x0000,"params":"10H;[33H 78H];[0aH 81H 01H]","reglen":5,"expr":0,"rate":0},
           {"model":"lianli_dns20_bigcore","acqId":0x0101,"params":"10H;[33H 78H];[1fH 90H 01H]","reglen":4,"expr":1,"rate":100.0},
           {"model":"hed09e3y","acqId":0x0000,"params":"[00H 45H]","reglen":1,"expr":0,"rate":0},
           {"model":"hed09e3y","acqId":0x0201,"params":"[00H 36H]","reglen":2,"expr":3,"rate":10.0},
           {"model":"hed09e3y","acqId":0x0202,"params":"[00H 38H]","reglen":2,"expr":3,"rate":10.0},
           {"model":"hed09e3y","acqId":0x0203,"params":"[00H 3CH]","reglen":2,"expr":3,"rate":10.0},
           {"model":"hed09e3y","acqId":0x0204,"params":"[00H 3EH]","reglen":2,"expr":3,"rate":10.0},
           {"model":"dds228_l","acqId":0x0000,"params":"[00H 45H]","reglen":1,"expr":0,"rate":0},
           {"model":"dds228_l","acqId":0x0210,"params":"[00H 36H]","reglen":2,"expr":3,"rate":10.0},
           {"model":"dds228_l","acqId":0x0211,"params":"[00H 3AH]","reglen":2,"expr":3,"rate":10.0}
           ]
       }   
    }
}

发送的rpc:

{
    "id":123,
    "jsonrpc":"2.0""method":"addDevice"
    "params":{
        "name":"device1",
        "id":"12345678",
        "sample":30/*单位:分钟*/
        "lifeuse":"生活用水",
        "model":"lianli_dns20", /* 设备型号 */
        "type":1,  /* 1 表示水表,2表示电表*/
        "protocol":"modbus_rtu",
        "communication":{
            "mode": "serial",
            "delay":1500"addr":{
                "chn":"/dev/ttySAC0",
                "baudRate":2400,
                "dataBits":8,
                "stopBits":1"parity":2  /* 0 无,1 奇,2 偶*/
            }
        }
    }
}

返回的结果:

{
    “id”:123,
    “jsonrpc”:2.0,
    “result”:true/false,
    “error”:”reason”
}

2.3.3 unknown

首先发送: “getDeviceInfo”获取该仪表所有信息,然后可以进行以下两种操作:
一是删除:

{
    “id”:123,
    “jsonrpc”:2.0,
    “method”:”deleteDevice”,
    “params”:{“id”:12345678}
}

返回的rpc:

{
    “id”:123,
    “jsonrpc”:2.0,
    “result”:true/false,
    “error”:”reason”
}

二是修改:有可能只是这个设备地址不一致,可以改下地址,或通道,或其他参数,然后发送:(params部分都是可以修改的内容)

{
    “id”:123
    “jsonrpc”:2.0"method":"modifyDevice"
    “params”:{
        "name":"device1",
        "id":"12345678",
        "sample":30,/*单位:分钟*/
        "lifeuse":"生活用水",
        "model":"lianli_dns20", /* 设备型号 */
        "type":1,  /* 1 表示水表,2表示电表*/
        "protocol":"modbus_rtu",
        "acquire": /* 采集列表 */
        [
            {
                "id": 0x0101,
                "name": "计量数据""cmdword":0x36,
                "reglen": 2,
                "expr": "$bcd($data)/100.00",
                "unit": "m3"
            },
            .../*其他仪表可能有多个数据需要采集*/
        ]
        "communication":{
            "mode": "serial",
            "delay":1500"addr":{
                "chn":"/dev/ttySAC0",
                "baudRate":2400,
                "dataBits":8,
                "stopBits":1"parity":2  /* 0 无,1 奇,2 偶*/
            }
        }
    }
}

返回的结果:

{
    “id”:123,
    “jsonrpc”:2.0,
    “result”:true/false,
    “error”:”reason”
}
{
    “id”:123,
    “jsonrpc”:2.0,
    “method”:"getDeviceStatus",
    “params”:{"id":"12345678"}
}
{
    “id”:123,
    “jsonrpc”:2.0,
    “method”:"getDeviceStatus",
    “result":"added"
}

2.4. 获取设备配置文件

仪器设备的解析配置文件和解析插件存放在服务器上,在第一次添加设备之后需要立即获取采样配置文件。
在网关上发送请求rpc:

{
    "id":123,
    "jsonrpc":2.0,
    "method":"getConfigFiles",
    "params":{
        "id":"12345678""model":设备型号,
        "type":"WaterMeter"
    }
}

平台端响应:

{
    "id":123,
    "jsonrpc":2.0,
    "result":{
        "id":"12345678",
        "manu":"厂商",
        "model":设备型号,
        "type":"WaterMeter",
        "configfile":{"filename":文件名,"content":文件内容},/*解析配置文件*/
        "parseplugin":{"filename":文件名,"content":文件内容}/*把解析插件的二进制文件转换成base64编码发送*/
    }
}

解析配置文件:配置每个数据的指令格式

数据 发送指令 响应指令 类型
数据1 发送指令1 响应指令1 S32
数据2 发送指令2 响应指令2 U8
数据3 发送指令3 响应指令3 F32

S32:有符号整型,32位
U:无符号整型,8位
F:浮点数,32位
自定义类型,在解析插件里面定义,然后定义一个名称即可。

解析插件:负责指令的组合和解析
仪表相同厂家同型号的指令格式一样,这时候解析插件可能

3. 采样

3.1. 在网关上采集数据

3.2. 发送采集数据到服务器

{
    "id":123,
    "jsonrpc":2.0,
    "method":"acquireData",
    "params":{
        "id":12345678,
        "chn":"COM1",
        或
        "ip":"192.168.0.1",
        "port":2211,
        "data":[
            {
            "itemid":201,
            "time":1435987632,
            "value":1.00
            },
            ...
        ]
    }
}

data1,data2,data3,…,datan,按配置文件定义的先后顺序存放
平台端不需要无响应,如果网络无法连接会暂存在本地。

4. 远程调试

在平台端用户需要设置好设备id,设备通讯地址和调试命令,然后发送给网关:
发送的rpc:

{
    “id”:123
    “jsonrpc”:2.0"method":"debugDevice"params”:{
        “id”:12345678,
        "command":"16进制指令" //(在平台端给用户提供两种模式,一种是直接输命令,另一种是输入数据,由平台端把它转变成命令)
        “communication”:{
            “mode”:”socket”,
            "addr":{
                “ipaddr”:”192.168.1.22”,
                ”port”:3737,
                ”delay”:1500
            }
            或
            “mode”: ”serial”,
            "addr":{
                “chn”:”COM1”,
                ”baudRate”:19200,
                ”dataBits”:8,
                ”stopBits”:1,
                ”delay”:1500,
                “parity”:2
            }
        }
    }
}

4.2 心跳检测

发送:
{
“id”:123,
“jsonrpc”:”2.0”,
“method”:”checkHeartbeat”,
}

返回:
{
“id”:123,
“jsonrpc”:”2.0”,
“result”:true/false
}

5 远程升级

{
“id”:123,
“jsonrpc”:”2.0”,
“method”:”updatePacket”,
“params”:
{
“shell”: 一个脚本的内容
“packet” 升级包,编码成base64编码再传
}
}

猜你喜欢

转载自blog.csdn.net/myxuan475/article/details/79609568