一、概述
本文档描述了客户服务器(CS)如何与应用服务器(AS)通信,CS和AS 都是基于UDP/IP协议,消息通过JSON格式包装,有效负载部分采用Base64编码(不启用对齐),请参考IETF RFC 4648 [2]。
当前AS的UDP端口定为8000。
二、关系图
*一个应用服务器可能会与多个客户服务器相连接。
三、登录与保持连接
CS需要每隔60秒向AS发送登录信息,格式定义在消息表描述。
四、JSON 消息表
名称
|
类型
|
描述
|
app
|
object
|
顶层对象,描述与指定的节点之间相关的应用程序消息
|
mote
|
object
|
顶层对象,用于表示节点的反馈
|
as
|
object
|
顶层对象,用于表示与AS交互的相关信息
|
app.moteeui
|
string
|
节点ID,为十六进制数。
|
app.dir
|
string
|
“up”用于上行数据
“dn”用于下行数据
|
app.seqno
|
number
|
消息序号
|
app.userdata
|
object
|
包含有效载荷细节
|
app.userdata.payload
|
string
|
编码成Base64的消息(不启用对齐功能)
|
app.userdata.port
|
number
|
消息所对应的端口号
|
app.motetx
|
object
|
节点传输的广播特性
|
app.motetx.freq
|
number
|
传输频率。
包含至少一个最大不超过三个数字的整数部分和小数点(可以最多包含六个小数位数字。)“800”、“800”和“800.000000”都是有效值
|
app.motetx.datr
|
string
|
如果调制方式为LoRa,那么字符串形式可能是"SFnBWm", ‘SF’
和‘BW’是字符 ‘n’ 和‘m’ 是无符号整数, ‘n’ 代表扩频因子 7≤n≤12 ,‘m’表示调制带宽(kHz表示)。
m 的值小于1000
如果调制方式为FSK,那么字符有整数组成表示数据速率(bps)
|
app.motetx.codr
|
string
|
ECC 码率
|
app.motetx.adr
|
boolean
|
当ADR启用时,值为‘true’
|
app.gwrx
|
object
|
网关的接收过程中帧的特性
|
app.gwrx.eui
|
string
|
网关ID,十六进制表示的数字
|
app.gwrx.time
|
string
|
帧接收时间的GMT/UTC时间表示形式,格式是 YYYY-MM-
DDTHH:MM:SS.sssssssss
例如“2015-11-10T17:26:56.123456789”
|
app.gwrx.timefromgateway
|
boolean
|
表示时间是否是由网关提供的
|
app.gwrx.rssi
|
number
|
接收到的信号强度,单位为dBm。
|
app.gwrx.lsnr
|
number
|
信噪比,单位 dB.
|
app.token
|
number
|
CS生成的任意数字,用作消息标识
|
mote.msgsent
|
number
|
指示包含对应token的应用程序消息或MAC命令已经发送到节点
|
mote.ackrx
|
string
|
指示节点已经接收到了确认消息
|
as.appid
|
string
|
表示用于登录的应用ID
|
as.login_type
|
number
|
表示登录类型
|
as.login_name
|
string
|
表示登录名
|
as.login_pwd
|
string
|
表示登录的密码
|
as.token
|
number
|
一串由CS生成的随机码,AS认证后,此token会原样返回
|
as.login_success
|
boolean
|
表示登录请求成功或者失败,true表示登录成功,false表示失败
|
五、登录示例
{
"as": {
"appid": "5d41402abc4b2a76b9719d911017c592",
"login_name": "76b9719d91101VkX19icd",
"login_type": 1,
"login_pwd": "U2FsdGVkX19icdokoDj44q7u2voUdGV6",
"token": 36544533256153
}
}
六、登录返回示例
{
"as": {
"appid": "5d41402abc4b2a76b9719d911017c592",
"login_name": "76b9719d91101VkX19icd",
"login_success":true,
"token": 36544533256153
}
}
七、下行数据示例
CS发送“app”消息到AS
{
"app": {
"moteeui": "4d89f71d",
"dir": "dn",
"token": 56,
"userdata": {
"port": 2,
"payload": "ESIz"
}
}
}
成功后,AS回复CS
{
"mote": {
"eui": "4789f71d",
"app": true,
"msgsent": 56
}
}
表示token为56的应用消息已经成功送达节点(地址4789f71d)
八、上行数据示例
{
"app": {
"moteeui": "4789f71d",
"dir": "up",
"userdata": {
"seqno": 0,
"port": 2,
"payload": "k5WH1t/8cqlur3JaWCoU7A9aUFI"
},
"motetx": {
"freq": 866.34,
"modu": "LORA",
"datr": "SF7BW125",
"codr": "4/6",
"adr": false
},
"gwrx": [
{
"eui": "ed240b0000000000",
"time": "2014-10-20T13:18:48Z",
"timefromgateway": false,
"chan": 2,
"rfch": 0,
"rssi": -35,
"lsnr": 5
},
{
"eui": "7f9eca0000000000",
"time": "2014-10-20T13:18:48Z",
"timefromgateway": false,
"chan": 2,
"rfch": 0,
"rssi": -35,
"lsnr": 5
}
]
}
}