设备连接

设备必须和设备中心进行实时连接,连接之后才可以进行注册和心跳等操作,设备连接使用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          // 上传播放日志
        更多专用命令由管理员在设备类型中定义。