CR02E及CR02EU设备与服务器通讯,采用的是Http协议通讯,由设备主动发起请求,POST提交,如果需要下载白名单到本地,设备为客户端,服务器端必须勾选一个接口“远程操作查询(可选)”(QueryCmd)。
注: 在CR02E的设置工具-高级配置-远程操作接口,勾上“启用远程操作接口”,输入轮询间隔:默认1000毫秒(不启用就不会主动跟服务器请求)
设备会不断请求QueryCmd(远程操作查询)接口,用于服务器远程发送命令操作设备,如下发白名单(命令代码CmdCode为6)。首先由设备以轮询方式主动向服务器发送请求,默认 1 秒发送一次轮询请求(间隔时间可设置)。
当服务器有需要下发的远程控制命令时,QueryCmd接口就会把控制命令携带下发;没有要下发的命令,接口也需按照参数返回数据(命令代码CmdCode为0)。设备在执行完服务器下发的命令之后,将调用 QueryCmdPostData 接口返回执行信息给服务器。
1.QueryCmd 接口
注:QueryCmd 接口名称不可变更
1.1设备主动请求服务器的json格式示例:
{“ViewId”:”D2″,”UID”:”1001″,”UKey”:”3F698DAC58″,”SN”:”1701000110″ }
要素名称 | 参数名 | 是否必须 | 数据类型 | 备注 |
区域 ID | ViewId | 是 | string | 设备上可设置 |
设备 ID | UID | 是 | string | 设备上可设置 |
授权 KEY | UKey | 是 | string | 设备上可设置 |
设备序列号 | SN | 是 | string | 唯一 |
1.2服务器响应设备请求的返回json格式示例:
1.2.1无命令返回:{ “CmdID”:”0″,”CmdCode”:0 }
1.2.2白名单一次最多只能下载10条数据:
{ “CmdID”:”100120180120162015″,”CmdCode”:6, “CmdParams”: [{“CodeVal “:999985,”CodeType”:”Q”,”ValidityStart”:”2018-01-01 10:00:00″,”ValidityEnd”:”2099-01-0110:00:00″,”DeleteFlag”:”0″},{“CodeVal “:123456789,” CodeType”:”C”,”ValidityStart”:”2018-01-01 10:00:00″,”ValidityEnd”:”2099-01-01 10:00:00″,”DeleteFlag”:”0″}] }
注:CmdID是服务器返回给设备的命令的唯一标识,没有特殊的要求,用随机数即可;在QueryCmdPostData接口中设备将会在把此 ID返回给服务器。
CmdCode是服务器下发到设备的命令代码。例: 0是无命令;6是下载白名单。
CmdParams是命令参数,可根据 CmdCode 实际情况处理。
字段名 | CodeVal | CodeType | ValidityStart | ValidityEnd | DeleteFlag |
长度(字节) | 8 | 1 | 8 | 8 | 1 |
数据类型 | string | string | string | string | string |
描述 | 数据值,且为数字,最大值不超过0xFFFFFFFFFFFFFFFF | 数据类型,可选值有:”Q”,”I”,”C” | 有效起始时间,格式:
yyyy-MM-ddHH:mm:ss |
有效结束时间,格式:
yyyy-MM-ddHH:mm:ss |
是否需要删除,1 为删除0 为新增或修改 |
2.QueryCmdPostData 接口
注:QueryCmdPostData 接口名称不可变更
在白名单下载本地成功之后,设备将调用接口“远程操作返回”(QueryCmdPostData)将执行信息返回给服务器。QueryCmdPostData接口是用于响应 QueryCmd 接口命令。
2.1设备向服务器请求json格式示例:
{“ViewId”:”123″,”UId”:”1234″,”UKey”:”1234″,”SN”:”170000110″,”CmdID”:”100120180120162015″,”CmdCode”:1,”CmdStatus”:”1″,”CmdParams”:”” }
要素名称 | 参数名 | 是否必须 | 数据类型 | 备注 |
区域 ID | ViewId | 是 | string | 设备上可设置 |
设备 ID | UID | 是 | string | 设备上可设置 |
授权 KEY | UKey | 是 | string | 设备上可设置 |
设备序列号 | SN | 是 | string | 唯一 |
命令 ID | CmdID | 是 | string | 与QueryCmd下发的命令 CmdID 相同 |
命令代码 | CmdCode | 是 | int | 与 QueryCmd 下发的命令 CmdCode 相同 |
命令状态 | CmdStatus | 是 | int | 1 执行成功;
2 执行失败; 255 写Flash 出错,需重新同步全部名单; |
命令上传参数 | CmdParams | 否 | string | 根据命令实际情况提交 |
2.2服务器向设备返回json格式示例:
{ “CmdStatus “:1,”CmdStatusDesc”:”执行成功”}
要素名称 | 参数名 | 是否必须 | 数据类型 | 备注 |
状态 | CmdStatus | 是 | int | 1 执行成功
0 执行失败 |
状态描述 | CmdStatusDesc | 否 | string |
3.补充说明:
3.1设备是通过轮询的方式主动不断的向服务器请求QueryCmd(远程操作查询)接口,看是否有命令操作需要执行;
3.2如果有需要执行的命令(例如6:下载白名单),服务器就会通过QueryCmd接口响应设备的请求,并发送命令ID和命令代码以及白名单包含的所有信息(一次最多下发十条白名单);
3.3设备在接收到服务器下发的执行信息并执行完毕之后,会通过QueryCmdPostData 接口向服务器请求发送对应的设备相关参数信息和命令ID以及命令代码是否执行成功,方便服务器对发送的命令进行管理,删除执行成功的命令ID,重新下发执行失败的命令ID;
3.4服务器接收到设备返回的信息之后,如果命令执行成功,服务器将会删除这条命令,并向设备返回执行成功的状态描述,结束;如果命令执行失败,服务器将在一个轮询间隔的时间内重新向设备发送执行信息,并重复3.2和3.3。