设备必须和设备中心进行实时连接,连接之后才可以进行注册和心跳等操作,设备连接使用Tcp连接
连接流程:a.获取参数 -> b.TCP连接登录 -> c.登录成功继续发心跳 -> d.登录要求注册显示注册二维码 -> e.扫码注册成功收到登录命令
消息格式为json字符串,在发送时需要进行封包,接收时需要解包,具体的包协议格式请参考封包协议
a.通过设置中心域名获取连接参数:
地址:http://device.it0791.com/api/client/linkinfo // 设备中心url默认:http://device.it0791.com 也可以在程序中指定默认值
方法:HttpGet
返回:{
"Success":true,
"Data":{
"Ip":"device.it091.com", // 连接服务器的IP地址或域名
"Port":9011, // 连接服务器的端口
"Url":"http://device.it0791.com" // 设备中心的Url地址,如果设备中心指定了其它url那么以后就要通过新的url获取连接参数了
}
Message:"返回失败时的错误信息"
}
b.进行TCP连接,发送登录消息:
地址:device.it0791.com:9011 // 该TCP连接地址通过请求服务器获取
方法:TCP
登录消息:{
"Type":"Login", // 消息类型,参见消息类型枚举
"Time":"2018-08-30T17:28:53", // 指令创建时间
"Sn":"1", // 指令流水号,由发送者自定义,可以是顺序数字或随机字符串,对方接到指令会返回此序列号
"DeviceLoginRequest":{ // 设备登录请求类
"Hid":"9118612364ba90c168fa05e60ce1134d", // 硬件id,读取硬件唯一标识,统一转换成md5码
"Version":"A_1.0.6_Lamp", // 版本,格式为:系统标识安卓A或P下划线主版本号.次版本号.修正号下划线设备类型
"TypeCode":"StationPc", // 设备类型编码,由设备定义,正则:^[AP]_[0-9]{1,2}.[0-9]{1,2}.[0-9]{1,2}_[a-zA-Z]{2}[a-zA-Z0-9]{0,10}$
}
}
c.根据登录返回的结果登录成功返回设备参数
登录成功返回:{
"Type":"Param",
"Time":"2018-08-30T17:28:53", // 指令创建时间
"Sn":"2", // 指令流水号,由发送者自定义,可以是顺序数字或随机字符串,对方接到指令会返回此序列号
"DeviceLoginResult":{ // 设备登录结果
"Id":2, // 设备标识,数据库中的主键,请保存到参数,后期请求命令的时候需要带此参数
"Pid":"000021", // 产品标识,每台设备在出厂时外壳上就有该标识,注册时用于绑定设备的硬件标识hid
"Name":"赣AA9170", // 设备名称,站牌站点,车载屏为车牌号等等
"ProgUrl": "http://ad-sit.buscoming.cn/programcenter", // 节目中心地网址
"Token":"y6E5z3W7c" // 令牌,在设备请求资源时提供,用于身份验证
…… // 更多的值由设备类型自定义
"Timings":[{ // 定时方案明细
"Time":"08:00", // 定时时间
"CmdCode":"Volume", // 定时执行命令,调节音量
"Param":"50" // 定时执行命令参数:调节音量为50%
}]
}
}
d.要求注册,显示注册二维码
登录要求新设备返回:{
"Type":"Regist",
"Time":"2018-08-30T17:28:53", // 指令创建时间
"Sn":"3", // 指令流水号,由发送者自定义,可以是顺序数字或随机字符串,对方接到指令会返回此序列号
"QrCode":"http://device.it0791.com/api/client/qrcodereg?code=56789"
}
前端显示示例:
e.登录成功,每隔1分钟发送一次心跳命令
心跳命令:{
"Type":"Heart",
"Time":"2019-03-11T13:34:59",
"Sn":"4",
"DeviceHeartRequest":{
"Coordinate":"37.892112,99.931538", // 经纬度坐标
"Current":"0.21", // 电流
"Voltage":"24.18", // 电压
…… // 心跳请求的参数,由客户自行定义
}
}
f.命令状态上报:
{
"Type":"Command", // 收到命令后要即时上报命令状态为执行中,执行完成后要上报命令状态为执行完成
"Time":"2019-04-19T16:31:32", // 指令创建时间
"Sn":"5", // 指令流水号,由发送者自定义,可以是顺序数字或随机字符串,对方接到指令会返回此序列号
"Commands":[{ // 命令列表
"Command":"Update",
"Status":"Executing", // 告诉服务器命令正在执行,如果执行完成了,再发一次告诉服务器命令执行完成,
"Result":"60%" // 命令执行结果,或者执行进度
}] // 命令状态参考命令状态枚举
}
g.报警消息发送:
{
"Type":"Alert", // 收到命令后要即时上报命令状态为执行中,执行完成后要上报命令状态为执行完成
"Time":"2019-07-12T08:41:52", // 指令创建时间
"Sn":"6", // 指令流水号,由发送者自定义,可以是顺序数字或随机字符串,对方接到指令会返回此序列号
"Alert":"磁盘空间不足10%;大屏温度超过55℃;流量超标2Gb" // 报警内容
}
.消息类型枚举:
Error, // 错误消息(上/下行),在接到消息后的执行过程中遇到错误,返回错误消息,错误消息具有错误代码Code以及错误消息Message
Login, // 登录(上行),设备连接服务器后向服务器发起登录请求,服务器收到登录请求后,如果登录正常,就返回登录结果,否则返回注册消息
Param, // 参数(下行),设备登录成功后,服务器下发设备参数,服务器如果改了参数,也会随时下发参数命令
Rigist, // 注册(下行),设备登录时如果为新设备,服务器下发要求注册的消息,设备根据消息中的url显示二维码,让工程员扫码注册
Heart, // 心跳(上/下行),设备每隔30秒,向服务器发起心跳请求,服务器返回心跳结果
Command, // 命令(上/下行),服务器有设备指令时,下发命令消息,要求设备立即执行命令,具体的命令和参数,在消息体中说明
具体命参见命令枚举,如:上传日志/截屏/播放记录…… 系统开关/重启/音量/亮度调节…… 设备灯箱/风扇……
Alert, // 设备报警(上行),向服务器发送报警消息
Text, // 文本(上/下行),设备与服务器之间的文本通信
Remote, // 远程桌面(上/下行),服务器下发远程桌面请求,设备返回远程桌面信息提供设备的名称、宽、高
Mouse, // 鼠标操作(下行),服务器下发鼠标信息,包含鼠标所在的X和Y坐标,以及鼠标左右键的按下和弹起操作
Key // 键盘操作(下行),服务器下发键盘的按下和弹起操作
.命令状态枚举:
New, // 新命令,设备接到命令后要告诉服务命令状态:执行中
Executing, // 命令执行中
Failed, // 命令执行失败
Success, // 命令执行成功
.常用命令:
Restart, // 命令设备重启
Update, // 命令设备更新版本
Login, // 命令设备登录
Heart, // 命令设备发送心跳
Brightness, // 临时调节设备亮度,设备最终会根据参数以及定时方案设置亮度
Volume, // 临时调节设备音量,设备最终会根据参数以及定时方案设置音量
Program, // 命令设备更新节目
Play, // 命令设备播放节目
Stop, // 命令设备停止播放节目
Pause, // 命令设备暂停播放节目
UploadLogs, // 上传日志
UploadSnap, // 上传截屏
UploadPlayLogs // 上传播放日志
更多专用命令由管理员在设备类型中定义。