Commit 6f57315b0611ec3471cf8d2e6bb09ddcaaefb7e4

Authored by 孙向锦
1 parent faeb6ed9

添加B200w-MQTT协议

通讯协议-B200W-MQTT协议[外].md 0 → 100644
  1 +<style>
  2 + table {
  3 + width: 100%; /* 或者具体的像素值,例如:1200px */
  4 + table-layout: fixed; /* 保持列宽固定 */
  5 + }
  6 + th, td {
  7 + word-wrap: break-word; /* 允许文本换行 */
  8 + }
  9 + .delline{
  10 + text-decoration:line-through;
  11 + }
  12 + .yellowFill{
  13 + background-color: yellow;
  14 + }
  15 +</style>
  16 +# SunVote B200W MQTT通讯协议
  17 +
  18 +[TOC]
  19 +
  20 +
  21 +
  22 +# 开发流程
  23 +
  24 +C200K基站,采用MQTT协议进行开发,基站接入MQTT服务器,应用从MQTT服务器下发指令和接收数据
  25 +
  26 +整个交互图如下:
  27 +
  28 +![](img/mqtt_1.png)
  29 +
  30 +
  31 +## MQTT服务器准备
  32 +
  33 +MQTT服务器要求:
  34 +
  35 +厂家使用<a href="https://www.emqx.io/get-started" target="_blank" >EMQX </a>进行测试
  36 +
  37 +能够正常收发MQTT数据。
  38 +
  39 +服务器的性能参数由业务决定。
  40 +
  41 +域名:
  42 +
  43 +公网域名或ip或者基站所处局域网ip。
  44 +
  45 +MQTT服务器配置结果检查
  46 +
  47 +使用MQTT.FX客户端,配置域名,端口,用户名和密码信息,然后连接,如果提示连接成功,则表示MQTT服务器可用。基站clientid 是基站编号。
  48 +
  49 +![](img/mqtt_2.png)
  50 +
  51 +
  52 +## 2.2 基站配置
  53 +
  54 +通过USB连接基站,打开基站服务器配置软件。
  55 +
  56 +![](img/mqtt_3.png)
  57 +
  58 +如果基站没有连接电脑,工具显示检测基站中,这时候读写无效。
  59 +
  60 +连接正常后,按照各个信息进行写入。
  61 +
  62 +设置基站服务器域名(ip)、端口,用户信息、密码信息,写入基站。
  63 +
  64 +如果MQTT服务器没有启用用户密码验证,用户密码信息可以随机设置。
  65 +
  66 +拔掉USB,连接网线,接入网络,查看网络是否连接正常。(基站上面的灯是否蓝色闪烁)
  67 +
  68 +基站说明
  69 +
  70 +![](img/mqtt_4.png)
  71 +
  72 +# 功能说明
  73 +
  74 +## 主题说明
  75 +\${baseSN}为指定的基站的SN编码,不能为空,接收基站反馈数据需要订阅对应基站SN的接收主题。
  76 +### 发布的主题
  77 +应用程序发布的主题,基站订阅
  78 +/client/\${baseSN}/send
  79 +/client/multiBase/send
  80 +
  81 +### 订阅的主题
  82 +应用程序订阅的主题,基站发布
  83 +/basestation/\\${baseSN}/receive
  84 +/basestation/multiBase/receive
  85 +
  86 +## 指令说明
  87 +|指令功能标识 |说明 |约束|
  88 +|---|---|---|
  89 +|get| 待机状态下获取参数属性状态及数据 |待机状态|
  90 +|set| 待机状态下设置参数属性状态及数据 |待机状态|
  91 +|start| 运行一个单进程业务实例(函数) |待机状态|
  92 +|stop| 停止一个单进程业务实例(函数) |待机状态|
  93 +|rtXXX| 在线状态下可实时执行方法及函数 ||
  94 +
  95 +## 事件说明
  96 +|事件标识| 说明| 约束|
  97 +|---|---|---|
  98 +|sEvtXXX|系统事件 |自动返回|
  99 +|fEvtXXX|指令事件 |调用对应指令后返回|
  100 +
  101 +## 数据格式约定
  102 +- 数据格式统一为**Json**格式,MQTT发送接收消息编码统一为**UTF-8**
  103 +- Json通用格式如下:
  104 +```json
  105 + {
  106 + "fun":"xxx",
  107 + "dataTag":"xxx",
  108 + "data":{
  109 + //内容
  110 + }
  111 + }
  112 +```
  113 +|参数 |说明 |约束|
  114 +|---|---|---|
  115 +|fun| 指令或事件名称||
  116 +|dataTag| 数据标签,用于对应收发数据|长度不超过4,可为0-9a-zA-Z的组合|
  117 +|data| 数据内容|对象或者数组,可为空|
  118 +
  119 +
  120 +## 功能速查一览表
  121 +### 基站管理
  122 +|功能归类|功能|API指令|指令/系统事件|
  123 +|---|---|---|---|
  124 +|基站连接 - 获取在线基站|主动获取在线基站信息<br>不确定基站SN时|[getBsOnlineState](#getbsonlinestate)|[fEvtBsOnlineState](#fevtbsonlinestate)||
  125 +|基站连接 - 主动获取状态|主动获取基站连接状态|[getBsConnectState](#getbsconnectstate)|[sEvtBsConnectState](#sevtbsconnectstate)||
  126 +|基站连接 - 自动获取状态|基站连接变化系统通知|-|[sEvtBsConnectState](#sevtbsconnectstate)||
  127 +|基站授时|对基站授时用于校准时间|[timeSync](#timesync)|[sEvtStateCode](#sevtstatecode)||
  128 +|键盘上线通知|单个键盘上线系统通知|-|[sEvtBsKpOnlineMsg](#sevtbskponlinemsg)||
  129 +|识别设置 - 基站型号|读取基站型号|[getBsModel](#getbsmodel)|[fEvtBsModel](#fevtbsmodel)|
  130 +|识别设置 - 固件版本|获取基站固件版本|[getBsFWVersion](#getbsfwversion)|[fEvtBsFWVersion](#fevtbsfwversion)|
  131 +|组网设置 - 配对码|获取基站配对码|[getBsPairCode](#getbspaircode)|[fEvtBsPairCode](#fevtbspaircode)|
  132 +|组网设置 - 刷卡配对状态|获取刷卡配对状态|[getBsNfcLogin](#getbsnfclogin)|[fEvtBsNfcLogin](#fevtbsnfclogin)|
  133 +||设置刷卡配对状态|[setBsNfcLogin](#setbsnfclogin)|[fEvtBsNfcLogin](#fevtbsnfclogin)||
  134 +|组网设置 - 工作信道|获取基站工作信道|[getBsChannel](#getbschannel)|[fEvtBsChannel](#fevtbschannel)|
  135 +||设置基站工作信道|[setBsChannel](#setbschannel)|[fEvtBsChannel](#fevtbschannel)||
  136 +|登录设置 - 登录名称|获取基站登录名称|[getBsSSID](#getbsssid)|[fEvtBsSSID](#fevtbsssid)|
  137 +||设置基站登录名称|[setBsSSID](#setbsssid)|[fEvtBsSSID](#fevtbsssid)||
  138 +|键盘统一设置 - 键盘语言|获取键盘语言|[getBsKpLanguage](#getbskplanguage)|[fEvtBsKpLanguage](#fevtbskplanguage)|
  139 +||设置键盘语言|[setBsKpLanguage](#setbskplanguage)|[fEvtBsKpLanguage](#fevtbskplanguage)||
  140 +|网络设置 - TCP/IP参数|获取TCP/IP参数|[getBsTcpipParams](#getbstcpipparams)|[fEvtBsTcpipParams](#fevtbstcpipparams)|
  141 +||设置TCP/IP参数|[setBsTcpipParams](#setbstcpipparams)|[fEvtBsTcpipParams](#fevtbstcpipparams)||
  142 +|网络设置 - MQTT参数|获取MQTT参数|[getBsMqttParams](#getbsmqttparams)|[fEvtBsMqttParams](#fevtbsmqttparams)|
  143 +||设置MQTT参数|[setBsMqttParams](#setbsmqttparams)|[fEvtBsMqttParams](#fevtbsmqttparams)||
  144 +|基站维护|获取基站日志信息|[getBsLogInfo](#getbsloginfo)|[sEvtStateCode](#sevtstatecode)|
  145 +### 键盘管理
  146 +|功能归类|功能|API指令|指令事件|
  147 +|---|---|---|---|
  148 +|交互设置 - 用户实时提示信息|实时设置提示反馈信息|[rtSetKpUserPrompt](#rtsetkpuserprompt)|[sEvtStateCode](#sevtstatecode)<br>[fEvtSetKpUserPrompt](#fevtsetkpuserprompt)|
  149 +|在线状态获取|开启扫描在线键盘|[startGetKpOnline](#startgetkponline)|[sEvtStateCode](#sevtstatecode)<br>[sEvtBsKpOnlineMsg](#sevtbskponlinemsg)|
  150 +||停止扫描在线键盘|[stopGetKpOnline](#stopgetkponline)|[sEvtStateCode](#sevtstatecode)|
  151 +|维护功能 - 遥控功能|遥控键盘休眠|[remoteKpSleep](#remotekpsleep)|[sEvtStateCode](#sevtstatecode)|
  152 +### 绑定
  153 +|功能归类|功能|API指令|指令事件|
  154 +|---|---|---|---|
  155 +|无线绑定|设置绑定信息到键盘|[rtSetKpBindingInfo](#rtsetkpbindinginfo)|[sEvtStateCode](#sevtstatecode)<br>[fEvtKpBindingInfo](#fevtkpbindinginfo)|
  156 +||清除键盘绑定信息|[clearKpBindingInfo](#clearkpbindinginfo)|[sEvtStateCode](#sevtstatecode)<br>[fEvtClearKpBindingInfo](#fevtclearkpbindinginfo)|
  157 +### 签到
  158 +|功能归类|功能|API指令|指令事件|
  159 +|---|---|---|---|
  160 +|随时签到|启动随时签到|[rtStartKpSignIn](#rtstartkpsignin)|[sEvtStateCode](#sevtstatecode)<br>[fEvtKpSignIn](#fevtkpsignin)|
  161 +||停止随时签到|[rtStopKpSignIn](#rtstopkpsignin)|[sEvtStateCode](#sevtstatecode)|
  162 +||实时PIN签到授权|[rtSetKpLoginAllowed](#rtsetkploginallowed)|[sEvtStateCode](#sevtstatecode)<br>[fEvtKpLoginAllowed](#fevtkploginallowed)|
  163 +### 按键反馈
  164 +|功能归类|功能|API指令|指令事件|
  165 +|---|---|---|---|
  166 +|判断题|启动判断题答题|[startQATrueFalse](#startqatruefalse)|[sEvtStateCode](#sevtstatecode)<br>[fEvtQATrueFalse](#fevtqatruefalse)|
  167 +||停止判断题答题|[stopQATrueFalse](#stopqatruefalse)|[sEvtStateCode](#sevtstatecode)|
  168 +|选择题|启动选择题答题|[startQAChoice](#startqachoice)|[sEvtStateCode](#sevtstatecode)<br>[fEvtQAChoice](#fevtqachoice)|
  169 +||停止选择题答题|[stopQAChoice](#stopqachoice)|[sEvtStateCode](#sevtstatecode)|
  170 +|数字题|启动数字题答题|[startQANum](#startqanum)|[sEvtStateCode](#sevtstatecode)<br>[fEvtQANum](#fevtqanum)|
  171 +||停止数字题答题|[stopQANum](#stopqanum)|[sEvtStateCode](#sevtstatecode)|
  172 +|抢答题|启动抢答题答题|[startQAQuicker](#startqaquicker)|[sEvtStateCode](#sevtstatecode)<br>[fEvtQAQuicker](#fevtqaquicker)|
  173 +||停止抢答题答题|[stopQAQuicker](#stopqaquicker)|[sEvtStateCode](#sevtstatecode)|
  174 +### 在线测验
  175 +|功能归类|功能|API指令|指令事件|
  176 +|---|---|---|---|
  177 +|标准测验|启动标准测验|[startKpExam](#startkpexam)|[sEvtStateCode](#sevtstatecode)<br>[fEvtKpExam](#fevtkpexam)<br>[fEvtFinalSubmit](#fevtfinalsubmit)|
  178 +||停止标准测验|[stopKpExam](#stopkpexam)|[sEvtStateCode](#sevtstatecode)|
  179 +||允许键盘提交后退回修改|[rtAllowEdited](#rtkpallowedited)|[sEvtStateCode](#sevtstatecode)<br>[fEvtFinalSubmit](#fevtfinalsubmit)|
  180 +
  181 +## 公共事件
  182 +### sEvtBsConnectState
  183 +- **主题**: /basestation/\${baseSN}/receive
  184 +- **功能描述**:基站连接成功时返回基站型号和基站SN,基站从已连接状态断开返回连接断开
  185 +- **参数说明**
  186 +
  187 +|参数名|类型|限制|非空|说明|
  188 +|-----|-----|-----|-----|-----|
  189 +|fun|string|-|是|事件类型|
  190 +|dataTag|string|-|否|数据包标识,不需要时可传空字符串|
  191 +|data|object|-|是|传送参数的对象|
  192 +|+baseModel|int||否|基站的型号码|
  193 +|+modelName|string||否|基站的型号名称|
  194 +|+state|int||是|基站的连接状态<br>1-已连接<br>2-连接断开|
  195 +|+version|string||否|基站固件版本|
  196 +
  197 +- **示例代码**
  198 +```Json
  199 +//连接成功
  200 +{
  201 + "fun":"sEvtBsConnectState",
  202 + "dataTag":"1",
  203 + "data":{
  204 + "state":1,
  205 + "baseModel":218,
  206 + "modelName":"B200",
  207 + "version":"1.0.3"
  208 + }
  209 +}
  210 +//连接断开
  211 +{
  212 + "fun":"sEvtBsConnectState",
  213 + "dataTag":"1",
  214 + "data":{
  215 + "state":2
  216 + }
  217 +}
  218 +```
  219 +### sEvtBsChannelConflict
  220 +- **主题**: /basestation/\${baseSN}/receive
  221 +- **功能描述**:基站信道冲突时主动上报,应用程序可根据实际业务修改基站信道
  222 +- **参数说明**
  223 +
  224 +|参数名|类型|限制|非空|说明|
  225 +|---|---|---|---|---|
  226 +|fun|string|-|是|事件名称|
  227 +|dataTag|string|-|否|数据包标识,不需要时可传空字符串|
  228 +|data|object|-|是|传送参数的对象|
  229 +|+value|int||是|有冲突的信道|
  230 +
  231 +- **示例代码**
  232 +```Json
  233 +{
  234 + "fun":"sEvtBsChannelConflict",
  235 + "dataTag":"1",
  236 + "data":{
  237 + "value":5 //信道5有多个基站使用
  238 + }
  239 +}
  240 +```
  241 +### sEvtBsNfcResults
  242 +- **主题**: /basestation/\${baseSN}/receive
  243 +- **功能描述**:键盘刷卡时主动上报,如果超出基站容量会上报失败
  244 +- **参数说明**
  245 +
  246 +|参数名|类型|限制|非空|说明|
  247 +|---|---|---|---|---|
  248 +|fun|string|-|是|事件名称|
  249 +|dataTag|string|-|否|数据包标识,不需要时可传空字符串|
  250 +|data|object|-|是|传送参数的对象|
  251 +|+keySn|string||是|刷卡的键盘SN|
  252 +|+value|int||是|刷卡的状态<br>1-成功<br>2-失败|
  253 +
  254 +- **示例代码**
  255 +```Json
  256 +{
  257 + "fun":"sEvtBsNfcResults",
  258 + "dataTag":"1", //不需要时可传空字符串
  259 + "data":{
  260 + "keySn":"1234567890",
  261 + "value":1
  262 + }
  263 +}
  264 +```
  265 +
  266 +### sEvtBsKpOnlineMsg
  267 +- **主题**: /basestation/\${baseSN}/receive
  268 +- **功能描述**:键盘上线通知,主动上报,键盘升级成功后也会上报
  269 +- **参数说明**
  270 +
  271 +|参数名|类型|限制|非空|说明|
  272 +|---|---|---|---|---|
  273 +|fun|string|-|是|事件名称|
  274 +|dataTag|string|-|否|数据包标识|
  275 +|data|object|-|是|传送参数的对象|
  276 +|+keySn|string||是|键盘SN|
  277 +|+version|string||是|键盘固件版本|
  278 +|+model|int||是|键盘型号|
  279 +|+voltage|double||是|键盘电压|
  280 +
  281 +- **示例代码**
  282 +```Json
  283 +{
  284 + "fun":"sEvtBsKpOnlineMsg",
  285 + "dataTag":"1",
  286 + "data":{
  287 + "keySn":"1234567890",
  288 + "version":"1.0.0",
  289 + "model":67,
  290 + "voltage":2.8
  291 + }
  292 +}
  293 +```
  294 +### sEvtStateCode
  295 +- **主题**: /basestation/\${baseSN}/receive
  296 +- **功能描述**:返回基站接收指令状态信息
  297 +- **参数说明**
  298 +
  299 +|参数名|类型|限制|非空|说明|
  300 +|---|---|---|---|---|
  301 +|fun|string|-|是|事件名称|
  302 +|dataTag|string|-|否|数据包标识|
  303 +|data|object|-|是|传送参数的对象|
  304 +|+funName|string||是|指令名称|
  305 +|+code|string||是|状态码,含义见下表|
  306 +
  307 +|状态码|说明|
  308 +|---|---|
  309 +|0|指令收取成功|
  310 +|10001|不能正确解析的JSON数据|
  311 +|10002|解析JSON错误|
  312 +|20001|基站未连接|
  313 +|20002|功能不支持|
  314 +|20003|基站SN格式不正确|
  315 +|20004|参数错误|
  316 +|20005|基站在答题中|
  317 +|40001|升级功能只能支持一个基站|
  318 +|50001|此功能必须指定基站|
  319 +|60001|此功能必须指定键盘SN|
  320 +
  321 +- **示例代码**
  322 +```Json
  323 +{
  324 + "fun":"sEvtStateCode",
  325 + "dataTag":"1",
  326 + "data":{
  327 + "funName":"startKpRollCall",
  328 + "code":"20005"
  329 + }
  330 +}
  331 +```
  332 +## 基站管理
  333 +### 基站连接
  334 +#### 方法
  335 +##### getBsOnlineState
  336 +- **主题**:<span class="yellowFill">/client/multiBase/send</span>
  337 +- **功能描述**:主动获取所有在线基站信息,在线基站回复
  338 +- **参数说明**
  339 +
  340 +|参数名|类型|限制|是否必填|说明|
  341 +|---|---|---|---|---|
  342 +|fun|string|-|是|固定指令名称|
  343 +|dataTag|string|-|否|数据包标识|
  344 +- **示例代码**
  345 +```Json
  346 +{
  347 + "fun":"getBsOnlineState",
  348 + "dataTag":"1"
  349 +}
  350 +```
  351 +
  352 +##### getBsConnectState
  353 +- **主题**:/client/\${baseSN}/send
  354 +- **功能描述**:主动获取基站连接状态
  355 +- **参数说明**
  356 +
  357 +|参数名|类型|限制|是否必填|说明|
  358 +|---|---|---|---|---|
  359 +|fun|string|-|是|固定指令名称|
  360 +|dataTag|string|-|否|数据包标识|
  361 +- **示例代码**
  362 +```Json
  363 +{
  364 + "fun":"getBsConnectState",
  365 + "dataTag":"1"
  366 +}
  367 +```
  368 +#### 事件
  369 +##### [sEvtBsConnectState](#sevtbsconnectstate)
  370 +参见基站连接变化系统通知
  371 +
  372 +##### fEvtBsOnlineState
  373 +- **主题**: <span class="yellowFill">/basestation/mutilBase/receive</span>
  374 +- **功能描述**:基站在线返回基站型号和基站SN
  375 +- **参数说明**
  376 +
  377 +|参数名|类型|限制|非空|说明|
  378 +|-----|-----|-----|-----|-----|
  379 +|fun|string|-|是|事件类型|
  380 +|dataTag|string|-|否|数据包标识,不需要时可传空字符串|
  381 +|data|object|-|是|传送参数的对象|
  382 +|+baseModel|int||否|基站的型号码|
  383 +|+modelName|string||否|基站的型号名称|
  384 +|+version|string||否|基站固件版本|
  385 +|+baseSN|string||否|基站SN|
  386 +
  387 +- **示例代码**
  388 +```Json
  389 +//连接成功
  390 +{
  391 + "fun":"fEvtBsOnlineState",
  392 + "dataTag":"1",
  393 + "data":{
  394 + "baseModel":218,
  395 + "modelName":"B200",
  396 + "version":"1.0.3",
  397 + "baseSN":"2024041401"
  398 + }
  399 +}
  400 +```
  401 +
  402 +### 基站授时
  403 +#### 方法
  404 +##### timeSync
  405 +- **主题**:/client/\${baseSN}/send
  406 +- **功能描述**:发送当前时间戳给基站进行校时
  407 +- **参数说明**
  408 +
  409 +|参数名|类型|限制|是否必填|说明|
  410 +|---|---|---|---|---|
  411 +|fun|string|-|是|固定指令名称|
  412 +|dataTag|string|-|否|数据包标识|
  413 +|data|object|-|是|传送参数的对象|
  414 +|+timeStamp|long ||否|当前时间的时间戳|
  415 +
  416 +- **示例代码**
  417 +```Json
  418 +{
  419 + "fun":"timeSync",
  420 + "dataTag":"1",
  421 + "data":{
  422 + "timeStamp":1718247133290
  423 + }
  424 +}
  425 +```
  426 +#### 事件
  427 +##### [sEvtStateCode](#sevtstatecode)
  428 +返回指令的接收状态
  429 +
  430 +### 识别设置
  431 +#### 方法
  432 +##### getBsModel
  433 +- **主题**:/client/\${baseSN}/send
  434 +- **功能描述**:获取基站型号
  435 +- **参数说明**
  436 +
  437 +|参数名|类型|限制|是否必填|说明|
  438 +|---|---|---|---|---|
  439 +|fun|string|-|是|指令名称|
  440 +|dataTag|string|-|否|数据包标识,可为空字符串|
  441 +
  442 +- **示例代码**
  443 +```Json
  444 +{
  445 + "fun":"getBsModel",
  446 + "dataTag":"1"
  447 +}
  448 +```
  449 +##### getBsFWVersion
  450 +- **主题**:/client/\${baseSN}/send
  451 +- **功能描述**:获取基站固件版本
  452 +- **参数说明**
  453 +
  454 +|参数名|类型|限制|是否必填|说明|
  455 +|---|---|---|---|---|
  456 +|fun|string|-|是|指令名称|
  457 +|dataTag|string|-|否|数据包标识,可为空字符串|
  458 +
  459 +- **示例代码**
  460 +```Json
  461 +{
  462 + "fun":"getBsFWVersion",
  463 + "dataTag":"1"
  464 +}
  465 +```
  466 +#### 事件
  467 +##### fEvtBsSN
  468 +- **主题**: /basestation/\${baseSN}/receive
  469 +- **功能描述**:返回基站的出厂编码
  470 +- **参数说明**
  471 +
  472 +|参数名|类型|限制|非空|说明|
  473 +|---|---|---|---|---|
  474 +|fun|string|-|是|事件名称|
  475 +|dataTag|string|-|否|数据包标识|
  476 +|data|object|-|是|传送参数的对象|
  477 +|+value|string|-|是|基站的出厂编码|
  478 +
  479 +- **示例代码**
  480 +```Json
  481 +{
  482 + "fun":"fEvtBsSN",
  483 + "dataTag":"1",
  484 + "data":{
  485 + "value":"2024041201"
  486 + }
  487 +}
  488 +```
  489 +##### fEvtBsModel
  490 +- **主题**: /basestation/\${baseSN}/receive
  491 +- **功能描述**:返回基站的型号
  492 +- **参数说明**
  493 +
  494 +|参数名|类型|限制|是否必填|说明|
  495 +|---|---|---|---|---|
  496 +|fun|string|-|是|事件名称|
  497 +|dataTag|string|-|否|数据包标识|
  498 +|data|object|-|是|传送参数的对象|
  499 +|+value|string|-|是|基站的型号名称|
  500 +
  501 +- **示例代码**
  502 +```Json
  503 +{
  504 + "fun":"fEvtBsModel",
  505 + "dataTag":"1",
  506 + "data":{
  507 + "value":"B200"
  508 + }
  509 +}
  510 +```
  511 +##### fEvtBsFWVersion
  512 +- **主题**: /basestation/\${baseSN}/receive
  513 +- **功能描述**:返回基站的固件版本
  514 +- **参数说明**
  515 +
  516 +|参数名|类型|限制|是否必填|说明|
  517 +|---|---|---|---|---|
  518 +|fun|string|-|是|事件名称|
  519 +|dataTag|string|-|否|数据包标识|
  520 +|data|object|-|是|传送参数的对象|
  521 +|+value|string||是|基站的固件版本号|
  522 +
  523 +- **示例代码**
  524 +```Json
  525 +{
  526 + "fun":"fEvtBsFWVersion",
  527 + "dataTag":"1",
  528 + "data":{
  529 + "value":"1.0.3"
  530 + }
  531 +}
  532 +```
  533 +### 组网设置
  534 +#### 方法
  535 +##### getBsPairCode
  536 +- **主题**:/client/\${baseSN}/send
  537 +- **功能描述**:获取基站配对码
  538 +- **参数说明**
  539 +
  540 +|参数名|类型|限制|是否必填|说明|
  541 +|---|---|---|---|---|
  542 +|fun|string|-|是|指令名称|
  543 +|dataTag|string|-|否|数据包标识,可为空字符串|
  544 +
  545 +- **示例代码**
  546 +```Json
  547 +{
  548 + "fun":"getBsPairCode",
  549 + "dataTag":"1"
  550 +}
  551 +```
  552 +##### getBsNfcLogin
  553 +- **主题**:/client/\${baseSN}/send
  554 +- **功能描述**:获取刷卡配对状态
  555 +- **参数说明**
  556 +
  557 +|参数名|类型|限制|是否必填|说明|
  558 +|---|---|---|---|---|
  559 +|fun|string|-|是|指令名称|
  560 +|dataTag|string|-|否|数据包标识,可为空字符串|
  561 +
  562 +- **示例代码**
  563 +```Json
  564 +{
  565 + "fun":"getBsNfcLogin",
  566 + "dataTag":"1"
  567 +}
  568 +```
  569 +##### setBsNfcLogin
  570 +- **主题**:/client/\${baseSN}/send
  571 +- **功能描述**:设置基站刷卡配对状态
  572 +- **参数说明**
  573 +
  574 +|参数名|类型|限制|是否必填|说明|
  575 +|---|---|---|---|---|
  576 +|fun|string|-|是|指令名称|
  577 +|dataTag|string|-|否|数据包标识,可为空字符串|
  578 +|data|object|-|是|传送参数的对象|
  579 +|+value|string|-|是|设置的基站刷卡配对状态<br>0-关闭刷卡配对<br>1-开启刷卡配对|
  580 +
  581 +- **示例代码**
  582 +```Json
  583 +{
  584 + "fun":"setBsNfcLogin",
  585 + "dataTag":"1",
  586 + "data":{
  587 + "value":"1"
  588 + }
  589 +}
  590 +```
  591 +##### getBsChannel
  592 +- **主题**:/client/\${baseSN}/send
  593 +- **功能描述**:获取基站信道
  594 +- **参数说明**
  595 +
  596 +|参数名|类型|限制|是否必填|说明|
  597 +|---|---|---|---|---|
  598 +|fun|string|-|是|指令名称|
  599 +|dataTag|string|-|否|数据包标识,可为空字符串|
  600 +
  601 +- **示例代码**
  602 +```Json
  603 +{
  604 + "fun":"getBsChannel",
  605 + "dataTag":"1"
  606 +}
  607 +```
  608 +##### setBsChannel
  609 +- **主题**:/client/\${baseSN}/send
  610 +- **功能描述**:设置基站信道
  611 +- **参数说明**
  612 +
  613 +|参数名|类型|限制|是否必填|说明|
  614 +|---|---|---|---|---|
  615 +|fun|string|-|是|指令名称|
  616 +|dataTag|string|-|否|数据包标识,可为空字符串|
  617 +|data|object|-|是|传送参数的对象|
  618 +|+value|string|-|是|设置的基站信道,可设范围:1-80|
  619 +
  620 +- **示例代码**
  621 +```Json
  622 +{
  623 + "fun":"setBsChannel",
  624 + "dataTag":"1",
  625 + "data":{
  626 + "value":"23"
  627 + }
  628 +}
  629 +```
  630 +#### 事件
  631 +##### fEvtBsPairCode
  632 +- **主题**: /basestation/\${baseSN}/receive
  633 +- **功能描述**:返回基站配对码
  634 +- **参数说明**
  635 +
  636 +|参数名|类型|限制|非空|说明|
  637 +|---|---|---|---|---|
  638 +|fun|string|-|是|事件名称|
  639 +|dataTag|string|-|否|数据包标识,可传空字符串|
  640 +|data|object|-|是|传送参数的对象|
  641 +|+value|string||是|基站的配对码|
  642 +
  643 +- **示例代码**
  644 +```Json
  645 +{
  646 + "fun":"fEvtBsPairCode",
  647 + "dataTag":"1",
  648 + "data":{
  649 + "value":"123456"
  650 + }
  651 +}
  652 +```
  653 +
  654 +##### fEvtBsChannel
  655 +- **主题**: /basestation/\${baseSN}/receive
  656 +- **功能描述**:返回基站信道
  657 +- **参数说明**
  658 +
  659 +|参数名|类型|限制|非空|说明|
  660 +|---|---|---|---|---|
  661 +|fun|string|-|是|事件名称|
  662 +|dataTag|string|-|否|数据包标识,可传空字符串|
  663 +|data|object|-|是|传送参数的对象|
  664 +|+value|string||是|基站信道|
  665 +
  666 +- **示例代码**
  667 +```Json
  668 +{
  669 + "fun":"fEvtBsChannel",
  670 + "dataTag":"1",
  671 + "data":{
  672 + "value":"5"
  673 + }
  674 +}
  675 +```
  676 +##### fEvtBsNfcLogin
  677 +- **主题**: /basestation/\${baseSN}/receive
  678 +- **功能描述**:返回基站是否允许NFC刷卡
  679 +- **参数说明**
  680 +
  681 +|参数名|类型|限制|非空|说明|
  682 +|---|---|---|---|---|
  683 +|fun|string|-|是|事件名称|
  684 +|dataTag|string|-|否|数据包标识,可传空字符串|
  685 +|data|object|-|是|传送参数的对象|
  686 +|+value|string||是|0-关闭 1-开启|
  687 +
  688 +- **示例代码**
  689 +```Json
  690 +{
  691 + "fun":"fEvtBsNfcLogin",
  692 + "dataTag":"1",
  693 + "data":{
  694 + "value":"1"
  695 + }
  696 +}
  697 +```
  698 +### 登录设置
  699 +#### 方法
  700 +##### getBsSSID
  701 +获取基站登录名称
  702 +- **主题**:/client/\${baseSN}/send
  703 +- **功能描述**:获取基站登录名称
  704 +- **参数说明**
  705 +
  706 +|参数名|类型|限制|是否必填|说明|
  707 +|---|---|---|---|---|
  708 +|fun|string|-|是|固定指令名称|
  709 +|dataTag|string|-|否|数据包标识|
  710 +
  711 +- **示例代码**
  712 +```Json
  713 +{
  714 + "fun":"getBsSSID",
  715 + "dataTag":"1"
  716 +}
  717 +```
  718 +##### setBsSSID
  719 +- **主题**:/client/\${baseSN}/send
  720 +- **功能描述**:设置基站登录名称
  721 +- **参数说明**
  722 +
  723 +|参数名|类型|限制|是否必填|说明|
  724 +|---|---|---|---|---|
  725 +|fun|string|-|是|指令名称|
  726 +|dataTag|string|-|否|数据包标识,可为空字符串|
  727 +|data|object|-|是|传送参数的对象|
  728 +|+value|string||是|设置的基站SSID,最长12字符|
  729 +
  730 +- **示例代码**
  731 +```Json
  732 +{
  733 + "fun":"setBsSSID",
  734 + "dataTag":"1",
  735 + "data":{
  736 + "value":"1901班"
  737 + }
  738 +}
  739 +```
  740 +#### 事件
  741 +##### fEvtBsSSID
  742 +- **主题**: /basestation/\${baseSN}/receive
  743 +- **功能描述**:返回基站名称
  744 +- **参数说明**
  745 +
  746 +|参数名|类型|限制|非空|说明|
  747 +|---|---|---|---|---|
  748 +|fun|string|-|是|事件名称|
  749 +|dataTag|string|-|否|数据包标识,可传空字符串|
  750 +|data|object|-|是|传送参数的对象|
  751 +|+value|string||是|基站名称|
  752 +
  753 +- **示例代码**
  754 +```Json
  755 +{
  756 + "fun":"fEvtBsSSID",
  757 + "dataTag":"1",
  758 + "data":{
  759 + "value":"1901班"
  760 + }
  761 +}
  762 +```
  763 +### 键盘统一设置
  764 +#### 方法
  765 +##### getBsKpLanguage
  766 +- **主题**:/client/\${baseSN}/send
  767 +- **功能描述**:获取键盘语言
  768 +- **参数说明**
  769 +
  770 +|参数名|类型|限制|是否必填|说明|
  771 +|---|---|---|---|---|
  772 +|fun|string|-|是|指令名称|
  773 +|dataTag|string|-|否|数据包标识,可为空字符串|
  774 +
  775 +- **示例代码**
  776 +```Json
  777 +{
  778 + "fun":"getBsKpLanguage",
  779 + "dataTag":"1"
  780 +}
  781 +```
  782 +##### setBsKpLanguage
  783 +- **主题**:/client/\${baseSN}/send
  784 +- **功能描述**:设置键盘语言
  785 +- **参数说明**
  786 +
  787 +|参数名|类型|限制|是否必填|说明|
  788 +|---|---|---|---|---|
  789 +|fun|string|-|是|指令名称|
  790 +|dataTag|string|-|否|数据包标识,可为空字符串|
  791 +|data|object|-|是|传送参数的对象|
  792 +|+value|string||是|设置键盘显示的语言<br>1-简体中文<br>2-英文|
  793 +
  794 +- **示例代码**
  795 +```Json
  796 +{
  797 + "fun":"setBsKpLanguage",
  798 + "dataTag":"1",
  799 + "data":{
  800 + "value":"1"
  801 + }
  802 +}
  803 +```
  804 +#### 事件
  805 +##### fEvtBsKpLanguage
  806 +- **主题**: /basestation/\${baseSN}/receive
  807 +- **功能描述**:返回键盘语言
  808 +- **参数说明**
  809 +
  810 +|参数名|类型|限制|非空|说明|
  811 +|---|---|---|---|---|
  812 +|fun|string|-|是|指令名称|
  813 +|dataTag|string|-|否|数据包标识,可为空字符串|
  814 +|data|object|-|是|传送参数的对象|
  815 +|+value|string||是|设置键盘显示的语言<br>1-简体中文<br>2-英文|
  816 +
  817 +- **示例代码**
  818 +```Json
  819 +{
  820 + "fun":"fEvtBsKpLanguage",
  821 + "dataTag":"1",
  822 + "data":{
  823 + "value":"1"
  824 + }
  825 +}
  826 +```
  827 +### 网络参数设置
  828 +#### 方法
  829 +##### getBsTcpipParams
  830 +- **主题**:/client/\${baseSN}/send
  831 +- **功能描述**:获取基站TCP/IP参数
  832 +- **参数说明**
  833 +
  834 +|参数名|类型|限制|是否必填|说明|
  835 +|---|---|---|---|---|
  836 +|fun|string|-|是|指令名称|
  837 +|dataTag|string|-|否|数据包标识,可为空字符串|
  838 +
  839 +- **示例代码**
  840 +```Json
  841 +{
  842 + "fun":"getBsTcpipParams",
  843 + "dataTag":"1"
  844 +}
  845 +```
  846 +##### setBsTcpipParams
  847 +- **主题**:/client/\${baseSN}/send
  848 +- **功能描述**:设置基站TCP/IP参数
  849 +- **参数说明**
  850 +
  851 +|参数名|类型|限制|是否必填|说明|
  852 +|---|---|---|---|---|
  853 +|fun|string|-|是|指令名称|
  854 +|dataTag|string|-|否|数据包标识,可为空字符串|
  855 +|data|object|-|是|传送参数的对象|
  856 +|+ip|string||否|IP地址|
  857 +|+mask|string||否|子网掩码|
  858 +|+gateway|string||否|网关地址|
  859 +|+ipAllocation|int||否|基站IP获取方式<br>0 - 手动指定<br>1 - DHCP获取|
  860 +
  861 +- **示例代码**
  862 +```Json
  863 +{
  864 + "fun":"setBsTcpipParams",
  865 + "dataTag":"1",
  866 + "data":{
  867 + "ip":"192.168.0.10",
  868 + "mask":"255.255.255.0",
  869 + "gateway":"192.168.0.1",
  870 + "ipAllocation":1
  871 + }
  872 +}
  873 +```
  874 +##### getBsMqttParams
  875 +- **主题**:/client/\${baseSN}/send
  876 +- **功能描述**:获取基站MQTT参数
  877 +- **参数说明**
  878 +
  879 +|参数名|类型|限制|是否必填|说明|
  880 +|---|---|---|---|---|
  881 +|fun|string|-|是|指令名称|
  882 +|dataTag|string|-|否|数据包标识,可为空字符串|
  883 +
  884 +- **示例代码**
  885 +```Json
  886 +{
  887 + "fun":"getBsMqttParams",
  888 + "dataTag":"1"
  889 +}
  890 +```
  891 +##### setBsMqttParams
  892 +- **主题**:/client/\${baseSN}/send
  893 +- **功能描述**:设置基站MQTT参数
  894 +- **参数说明**
  895 +
  896 +|参数名|类型|限制|是否必填|说明|
  897 +|---|---|---|---|---|
  898 +|fun|string|-|是|指令名称|
  899 +|dataTag|string|-|否|数据包标识,可为空字符串|
  900 +|data|object|-|是|传送参数的对象|
  901 +|+server|string||是|服务器IP地址|
  902 +|+port|int||是|端口,默认1883|
  903 +|+userName|string||否|连接服务器的用户名,可不设置|
  904 +|+password|string||否|连接服务器的密码,可不设置|
  905 +|+interval|int|>=10|否|基站连接服务器失败后重连的间隔时长,单位秒|
  906 +
  907 +- **示例代码**
  908 +```Json
  909 +{
  910 + "fun":"setBsMqttParams",
  911 + "dataTag":"1",
  912 + "data":{
  913 + "server":"192.168.10.10",
  914 + "port":1883,
  915 + "userName":"",
  916 + "password":"",
  917 + "interval":30
  918 + }
  919 +}
  920 +```
  921 +#### 事件
  922 +##### fEvtBsTcpipParams
  923 +- **主题**: /basestation/\${baseSN}/receive
  924 +- **功能描述**:返回基站TCP/IP参数
  925 +- **参数说明**
  926 +
  927 +|参数名|类型|限制|非空|说明|
  928 +|---|---|---|---|---|
  929 +|fun|string|-|是|指令名称|
  930 +|dataTag|string|-|否|数据包标识,可为空字符串|
  931 +|data|object|-|是|传送参数的对象|
  932 +|+mac|string||是|MAC地址|
  933 +|+ip|string||是|IP地址|
  934 +|+mask|string||是|子网掩码|
  935 +|+gateway|string||是|网关地址|
  936 +|+ipAllocation|int||否|基站IP获取方式<br>0 - 手动指定<br>1 - DHCP获取|
  937 +
  938 +- **示例代码**
  939 +```Json
  940 +{
  941 + "fun":"fEvtBsTcpipParams",
  942 + "dataTag":"1",
  943 + "data":{
  944 + "mac":"FF:FF:FF:FF:FF:FF",
  945 + "ip":"192.168.0.10",
  946 + "mask":"255.255.255.0",
  947 + "gateway":"192.168.0.1",
  948 + "ipAllocation":1
  949 + }
  950 +}
  951 +```
  952 +##### fEvtBsMqttParams
  953 +- **主题**: /basestation/\${baseSN}/receive
  954 +- **功能描述**:返回基站MQTT参数
  955 +- **参数说明**
  956 +
  957 +|参数名|类型|限制|非空|说明|
  958 +|---|---|---|---|---|
  959 +|fun|string|-|是|指令名称|
  960 +|dataTag|string|-|否|数据包标识,可为空字符串|
  961 +|data|object|-|是|传送参数的对象|
  962 +|+server|string||是|服务器地址,IP|
  963 +|+port|int||是|端口,默认1883|
  964 +|+userName|string||否|连接服务器的用户名,可不设置|
  965 +|+password|string||否|连接服务器的密码,可不设置|
  966 +|+interval|int|>=10|否|基站连接服务器失败后重连的间隔时长,单位秒|
  967 +
  968 +- **示例代码**
  969 +```Json
  970 +{
  971 + "fun":"fEvtBsMqttParams",
  972 + "dataTag":"1",
  973 + "data":{
  974 + "server":"192.168.10.10",
  975 + "port":1883,
  976 + "userName":"",
  977 + "password":"",
  978 + "interval":30
  979 + }
  980 +}
  981 +```
  982 +### 基站维护
  983 +#### 方法
  984 +##### getBsLogInfo
  985 +- **主题**:/client/\${baseSN}/send
  986 +- **功能描述**:获取基站日志,用于出现故障需要排查问题时获取基站内部日志记录
  987 +- **参数说明**
  988 +
  989 +|参数名|类型|限制|是否必填|说明|
  990 +|---|---|---|---|---|
  991 +|fun|string|-|是|指令名称|
  992 +|dataTag|string|-|否|数据包标识,可为空字符串|
  993 +
  994 +- **示例代码**
  995 +```Json
  996 +{
  997 + "fun":"getBsLogInfo",
  998 + "dataTag":"1"
  999 +}
  1000 +```
  1001 +
  1002 +#### 事件
  1003 +##### [sEvtStateCode](#sevtstatecode)
  1004 +返回指令的接收状态
  1005 +
  1006 +## 键盘管理
  1007 +### 交互设置
  1008 +#### 方法
  1009 +##### rtSetKpUserPrompt
  1010 +- **主题**:/client/\${baseSN}/send
  1011 +- **功能描述**:实时设置提示反馈信息
  1012 +- **参数说明**
  1013 +
  1014 +|参数名|类型|限制|是否必填|说明|
  1015 +|---|---|---|---|---|
  1016 +|fun|string|-|是|指令名称|
  1017 +|dataTag|string|-|否|数据包标识,可为空字符串|
  1018 +|data|array|-|否|传送参数的对象数组|
  1019 +|++keySns|array||是|指定的键盘SN数组,空数组表示全部在线键盘<br><font color="red">注意:不允许空数组和指定SN数组混合使用<br>包含空数组默认为全部在线键盘,其他指定键盘无效</font>|
  1020 +|++info|string||否|设置的反馈信息<br>不同键盘可设置不同反馈信息|
  1021 +```json
  1022 +//分别提示
  1023 +{
  1024 + "fun": "rtSetKpUserPrompt",
  1025 + "dataTag":"1",
  1026 + "data": [
  1027 + {
  1028 + "keySns": ["1479824643","1479824645"],
  1029 + "info": "答对了"
  1030 + },
  1031 + {
  1032 + "keySns": ["1479824644"],
  1033 + "info": "答错了"
  1034 + }
  1035 + ]
  1036 +}
  1037 +//统一提示
  1038 +{
  1039 + "fun": "rtSetKpUserPrompt",
  1040 + "dataTag":"1",
  1041 + "data": [
  1042 + {
  1043 + "keySns": [],
  1044 + "info": "答题结束"
  1045 + }
  1046 + ]
  1047 +}
  1048 +```
  1049 +#### 事件
  1050 +##### [sEvtStateCode](#sevtstatecode)
  1051 +发送指令后返回接收状态
  1052 +
  1053 +##### fEvtSetKpUserPrompt
  1054 +- **主题**:/basestation/\${baseSN}/receive
  1055 +- **功能描述**:返回实时设置提示语是否成功
  1056 +- **参数说明**
  1057 +
  1058 +|参数名|类型|限制|非空|说明|
  1059 +|---|---|---|---|---|
  1060 +|fun|string|-|是|指令名称|
  1061 +|dataTag|string|-|否|数据包标识,可为空字符串|
  1062 +|data|array|-|是|传送参数的对象数组|
  1063 +|++keySn|string||是|设置提示语信息的键盘SN|
  1064 +|++state|string||是|设置的提示语是否成功<br>0 - 成功<br>1 - 失败|
  1065 +```json
  1066 +{
  1067 + "fun": "fEvtSetKpUserPrompt",
  1068 + "dataTag":"1",
  1069 + "data": [
  1070 + {
  1071 + "keySn": "1479824643",
  1072 + "state": "0"
  1073 + },
  1074 + {
  1075 + "keySn": "1479824645",
  1076 + "state": "0"
  1077 + },
  1078 + {
  1079 + "keySn": "1479824644",
  1080 + "state": "1"
  1081 + }
  1082 + ]
  1083 +}
  1084 +```
  1085 +### 在线状态
  1086 +#### 方法
  1087 +##### startGetKpOnline
  1088 +- **主题**:/client/\${baseSN}/send
  1089 +- **功能描述**:开始获取键盘在线信息,键盘在线返回键盘信息 [sEvtBsKpOnlineMsg](#sevtbskponlinemsg)
  1090 +- **参数说明**
  1091 +
  1092 +|参数名|类型|限制|是否必填|说明|
  1093 +|---|---|---|---|---|
  1094 +|fun|string|-|是|指令名称|
  1095 +|dataTag|string|-|否|数据包标识,可为空字符串|
  1096 +```json
  1097 +{
  1098 + "fun": "startGetKpOnline",
  1099 + "dataTag":"1"
  1100 +}
  1101 +```
  1102 +
  1103 +##### stopGetKpOnline
  1104 +- **主题**:/client/\${baseSN}/send
  1105 +- **功能描述**:停止获取键盘在线信息
  1106 +- **参数说明**
  1107 +
  1108 +|参数名|类型|限制|是否必填|说明|
  1109 +|---|---|---|---|---|
  1110 +|fun|string|-|是|指令名称|
  1111 +|dataTag|string|-|否|数据包标识,可为空字符串|
  1112 +```json
  1113 +{
  1114 + "fun": "stopGetKpOnline",
  1115 + "dataTag":"1"
  1116 +}
  1117 +```
  1118 +#### 事件
  1119 +##### [sEvtStateCode](#sevtstatecode)
  1120 +发送指令后返回此事件
  1121 +
  1122 +##### [sEvtBsKpOnlineMsg](#sevtbskponlinemsg)
  1123 +键盘在线返回此事件
  1124 +
  1125 +### 维护功能
  1126 +#### 方法
  1127 +##### remoteKpSleep
  1128 +- **主题**:/client/\${baseSN}/send
  1129 +- **功能描述**:遥控键盘休眠
  1130 +- **参数说明**
  1131 +
  1132 +|参数名|类型|限制|是否必填|说明|
  1133 +|---|---|---|---|---|
  1134 +|fun|string|-|是|指令名称|
  1135 +|dataTag|string|-|否|数据包标识,可为空字符串|
  1136 +|data|object|-|是|传送参数的对象数组|
  1137 +|+keySns|array||否|需要执行指令的键盘SN数组,空数组表示所有键盘|
  1138 +
  1139 +- **示例代码**
  1140 +```Json
  1141 +{
  1142 + "fun":"remoteKpSleep",
  1143 + "dataTag":"1",
  1144 + "data":{
  1145 + "keySns":["1479824644"]
  1146 + }
  1147 +}
  1148 +```
  1149 +#### 事件
  1150 +##### [sEvtStateCode](#sevtstatecode)
  1151 +返回指令的接收状态
  1152 +
  1153 +## 绑定
  1154 +### 无线绑定
  1155 +#### 方法
  1156 +##### rtSetKpBindingInfo
  1157 +- **主题**:/client/\${baseSN}/send
  1158 +- **功能描述**:实时设置绑定信息到键盘
  1159 +- **参数说明**
  1160 +
  1161 +|参数名|类型|限制|是否必填|说明|
  1162 +|---|---|---|---|---|
  1163 +|fun|string|-|是|指令名称|
  1164 +|dataTag|string|-|否|数据包标识,可为空字符串|
  1165 +|data|array|-|是|传送参数的对象数组,不可为空|
  1166 +|++keySn|string||是|需要设置绑定信息的键盘SN|
  1167 +|++info|string||是|设置的绑定信息,一般为学生姓名<br>最长48个字符,显示在键盘左上角|
  1168 +```json
  1169 +{
  1170 + "fun": "rtSetKpBindingInfo",
  1171 + "dataTag":"1",
  1172 + "data": [
  1173 + {
  1174 + "keySn": "1479824643",
  1175 + "info": "张三"
  1176 + },
  1177 + {
  1178 + "keySn": "1479824644",
  1179 + "info": "李四"
  1180 + }
  1181 + ]
  1182 +}
  1183 +```
  1184 +
  1185 +##### clearKpBindingInfo
  1186 +- **主题**:/client/\${baseSN}/send
  1187 +- **功能描述**:清除键盘绑定信息
  1188 +- **参数说明**
  1189 +
  1190 +|参数名|类型|限制|是否必填|说明|
  1191 +|---|---|---|---|---|
  1192 +|fun|string|-|是|指令名称|
  1193 +|dataTag|string|-|否|数据包标识,可为空字符串|
  1194 +|data|object|-|是|传送参数的对象数组|
  1195 +|+keySns|array||否|需要清除绑定信息键盘SN数组,<br>空数组表示清空所有键盘|
  1196 +```json
  1197 +{
  1198 + "fun": "clearKpBindingInfo",
  1199 + "dataTag":"1",
  1200 + "data": {
  1201 + "keySns":["1479824643","1479824644","1479824645"]
  1202 + }
  1203 +}
  1204 +```
  1205 +#### 事件
  1206 +##### [sEvtStateCode](#sevtstatecode)
  1207 +发送指令后返回接收状态
  1208 +
  1209 +##### fEvtKpBindingInfo
  1210 +- **主题**:/basestation/\${baseSN}/receive
  1211 +- **功能描述**:返回键盘实时设置绑定信息的状态是否成功
  1212 +- **参数说明**
  1213 +
  1214 +|参数名|类型|限制|非空|说明|
  1215 +|---|---|---|---|---|
  1216 +|fun|string|-|是|指令名称|
  1217 +|dataTag|string|-|否|数据包标识,可为空字符串|
  1218 +|data|array|-|否|传送参数的对象数组|
  1219 +|++keySn|string||是|需要设置绑定信息的键盘SN|
  1220 +|++state|string||是|设置的绑定信息是否成功<br>0 - 成功<br>1 - 失败|
  1221 +```json
  1222 +{
  1223 + "fun": "fEvtKpBindingInfo",
  1224 + "dataTag":"1",
  1225 + "data": [
  1226 + {
  1227 + "keySn": "1479824643",
  1228 + "state": "0"
  1229 + },
  1230 + {
  1231 + "keySn": "1479824644",
  1232 + "state": "1"
  1233 + }
  1234 + ]
  1235 +}
  1236 +```
  1237 +##### fEvtClearKpBindingInfo
  1238 +- **主题**:/basestation/\${baseSN}/receive
  1239 +- **功能描述**:返回清空绑定信息的指令状态是否成功
  1240 +- **参数说明**
  1241 +
  1242 +|参数名|类型|限制|非空|说明|
  1243 +|---|---|---|---|---|
  1244 +|fun|string|-|是|指令名称|
  1245 +|dataTag|string|-|否|数据包标识,可为空字符串|
  1246 +|data|object|-|否|传送参数的对象|
  1247 +|+state|string||是|设置的绑定信息是否成功<br>0 - 成功<br>1 - 失败|
  1248 +```json
  1249 +{
  1250 + "fun": "fEvtClearKpBindingInfo",
  1251 + "dataTag":"1",
  1252 + "data": {
  1253 + "state": "0"
  1254 + }
  1255 +}
  1256 +```
  1257 +## 签到
  1258 +### 随时签到
  1259 +#### 方法
  1260 +##### rtStartKpSignIn
  1261 +- **主题**:/client/\${baseSN}/send
  1262 +- **功能描述**:启动随时签到绑定
  1263 +- **参数说明**
  1264 +
  1265 +|参数名|类型|限制|是否必填|说明|
  1266 +|---|---|---|---|---|
  1267 +|fun|string|-|是|指令名称|
  1268 +|dataTag|string|-|否|数据包标识,可为空字符串|
  1269 +|data|object|-|是|传递参数的对象|
  1270 +|+mode|int|-|是|签到模式<br>2-PIN码签到,输入pin码后由应用程序决定是否授权|
  1271 +```json
  1272 +{
  1273 + "fun": "rtStartKpSignIn",
  1274 + "dataTag":"1",
  1275 + "data":{
  1276 + "mode":2
  1277 + }
  1278 +}
  1279 +```
  1280 +##### rtStopKpSignIn
  1281 +- **主题**:/client/\${baseSN}/send
  1282 +- **功能描述**:停止签到绑定
  1283 +- **参数说明**
  1284 +
  1285 +|参数名|类型|限制|是否必填|说明|
  1286 +|---|---|---|---|---|
  1287 +|fun|string|-|是|指令名称|
  1288 +|dataTag|string|-|否|数据包标识,可为空字符串|
  1289 +```json
  1290 +{
  1291 + "fun": "rtStopKpSignIn",
  1292 + "dataTag":"1"
  1293 +}
  1294 +```
  1295 +##### rtSetKpLoginAllowed
  1296 +- **主题**:/client/\${baseSN}/send
  1297 +- **功能描述**:实时PIN绑定授权,可取消授权
  1298 +- **参数说明**
  1299 +
  1300 +|参数名|类型|限制|是否必填|说明|
  1301 +|---|---|---|---|---|
  1302 +|fun|string|-|是|指令名称|
  1303 +|dataTag|string|-|否|数据包标识,可为空字符串|
  1304 +|data|object|-|是|传递参数的对象|
  1305 +|+keySn|string|-|是|键盘SN|
  1306 +|+state|int|-|是|1-授权成功<br>2-授权失败<br>3-解除已授权|
  1307 +```json
  1308 +{
  1309 + "fun": "rtSetKpLoginAllowed",
  1310 + "dataTag":"1",
  1311 + "data":{
  1312 + "keySn":"1479824643",
  1313 + "state":1
  1314 + }
  1315 +}
  1316 +```
  1317 +#### 事件
  1318 +##### [sEvtStateCode](#sevtstatecode)
  1319 +发送指令后返回接收状态
  1320 +
  1321 +##### fEvtKpSignIn
  1322 +- **主题**:/basestation/\${baseSN}/receive
  1323 +- **功能描述**:返回键盘提交签到信息
  1324 +- **参数说明**
  1325 +
  1326 +|参数名|类型|限制|非空|说明|
  1327 +|---|---|---|---|---|
  1328 +|fun|string|-|是|指令名称|
  1329 +|dataTag|string|-|否|数据包标识,可为空字符串|
  1330 +|data|array|-|是|传送参数的对象数组|
  1331 +|++keySn|string||是|键盘SN|
  1332 +|++keyValue|string||是|键盘提交的按键值|
  1333 +|++keyTime|double||是|答题时间,从启动开始计算,单位秒|
  1334 +```json
  1335 +{
  1336 + "fun": "fEvtKpSignIn",
  1337 + "dataTag":"1",
  1338 + "data": [{
  1339 + "keySn": "1234567890",
  1340 + "keyValue":"1004",
  1341 + "keyTime":30.2
  1342 + },
  1343 + {
  1344 + "keySn": "1234567891",
  1345 + "keyValue":"1003",
  1346 + "keyTime":32.5
  1347 + }
  1348 + ]
  1349 +}
  1350 +```
  1351 +##### fEvtKpLoginAllowed
  1352 +- **主题**:/basestation/\${baseSN}/receive
  1353 +- **功能描述**:返回键盘授权状态
  1354 +- **参数说明**
  1355 +
  1356 +|参数名|类型|限制|非空|说明|
  1357 +|---|---|---|---|---|
  1358 +|fun|string|-|是|指令名称|
  1359 +|dataTag|string|-|否|数据包标识,可为空字符串|
  1360 +|data|object|-|是|传送参数的对象|
  1361 +|+keySn|string||是|键盘SN|
  1362 +|+state|string||是|0-执行成功<br> 1-执行失败|
  1363 +```json
  1364 +{
  1365 + "fun": "fEvtKpLoginAllowed",
  1366 + "dataTag":"1",
  1367 + "data": {
  1368 + "keySn":"1479824643",
  1369 + "state":"0"
  1370 + }
  1371 +}
  1372 +```
  1373 +## 按键反馈
  1374 +### 判断题
  1375 +#### 方法
  1376 +##### startQATrueFalse
  1377 +- **主题**:/client/\${baseSN}/send
  1378 +- **功能描述**:启动判断题答题
  1379 +- **参数说明**
  1380 +
  1381 +|参数名|类型|限制|是否必填|说明|
  1382 +|---|---|---|---|---|
  1383 +|fun|string|-|是|指令名称|
  1384 +|dataTag|string|-|否|数据包标识,可为空字符串|
  1385 +|data|object|-|是|传送参数的对象|
  1386 +|+keySns|array||是|指定的键盘SN数组,空数组表示全部在线键盘|
  1387 +|+mode|int||是|1 - True/False 对/错 <br>2 - Yes/No 是/否<br> 3 - √/×|
  1388 +|+allowModify|int||是|0 - 不允许修改<br>1 - 允许修改|
  1389 +|+tip|string||否|提示的标题,长度不超过16字符|
  1390 +```json
  1391 +{
  1392 + "fun": "startQATrueFalse",
  1393 + "dataTag":"1",
  1394 + "data":{
  1395 + "keySns":[],
  1396 + "mode":1,
  1397 + "allowModify":1,
  1398 + "tip":"请判断对错"
  1399 + }
  1400 +}
  1401 +```
  1402 +##### stopQATrueFalse
  1403 +- **主题**:/client/\${baseSN}/send
  1404 +- **功能描述**:停止判断题答题
  1405 +- **参数说明**
  1406 +
  1407 +|参数名|类型|限制|是否必填|说明|
  1408 +|---|---|---|---|---|
  1409 +|fun|string|-|是|指令名称|
  1410 +|dataTag|string|-|否|数据包标识,可为空字符串|
  1411 +```json
  1412 +{
  1413 + "fun": "stopQATrueFalse",
  1414 + "dataTag":"1"
  1415 +}
  1416 +```
  1417 +#### 事件
  1418 +##### [sEvtStateCode](#sevtstatecode)
  1419 +发送指令后返回接收状态
  1420 +
  1421 +##### fEvtQATrueFalse
  1422 +- **主题**:/basestation/\${baseSN}/receive
  1423 +- **功能描述**:返回键盘提交答题信息
  1424 +- **参数说明**
  1425 +
  1426 +|参数名|类型|限制|非空|说明|
  1427 +|---|---|---|---|---|
  1428 +|fun|string|-|是|指令名称|
  1429 +|dataTag|string|-|否|数据包标识,可为空字符串|
  1430 +|data|array|-|是|传送参数的对象数组|
  1431 +|++keySn|string||是|键盘SN|
  1432 +|++keyValue|string||是|键盘提交的按键值<br>1-对<br>2-错|
  1433 +|++keyTime|double||是|答题时间,从启动开始计算,单位秒|
  1434 +```json
  1435 +{
  1436 + "fun": "fEvtQATrueFalse",
  1437 + "dataTag":"1",
  1438 + "data": [{
  1439 + "keySn": "1234567890",
  1440 + "keyValue":"1",
  1441 + "keyTime":30.2
  1442 + }
  1443 + ]
  1444 +}
  1445 +```
  1446 +### 选择题
  1447 +#### 方法
  1448 +##### startQAChoice
  1449 +- **主题**:/client/\${baseSN}/send
  1450 +- **功能描述**:启动选择题答题
  1451 +- **参数说明**
  1452 +
  1453 +|参数名|类型|限制|是否必填|说明|
  1454 +|---|---|---|---|---|
  1455 +|fun|string|-|是|指令名称|
  1456 +|dataTag|string|-|否|数据包标识,可为空字符串|
  1457 +|data|object|-|是|传送参数的对象|
  1458 +|+keySns|array||是|指定的键盘SN数组,空数组表示全部在线键盘|
  1459 +|+mode|int||是|显示模式<br>1:显示字母(默认值) </br>2:显示数字 |
  1460 +|+lessMode|int||是|迫选模式<br>0:可缺选(默认值) </br>1:不可缺选</br>2:允许重复输入</br>3:允许重复输入且不可缺选 |
  1461 +|+options|int||是|选项数量,1≤M≤10(默认值4)|
  1462 +|+optionalN|int||是|可选项个数,1≤N≤M(默认值1)|
  1463 +|+allowModify|int||是|修改模式<br>0 - 不允许修改<br>1 - 允许修改|
  1464 +|+tip|string||否|提示的标题,长度不超过16字符|
  1465 +```json
  1466 +{
  1467 + "fun": "startQAChoice",
  1468 + "dataTag":"1",
  1469 + "data":{
  1470 + "keySns":[],
  1471 + "mode": 1,
  1472 + "lessMode": 0,
  1473 + "options": 4,
  1474 + "optionalN": 1,
  1475 + "allowModify":1,
  1476 + "tip":"请选择"
  1477 + }
  1478 +}
  1479 +```
  1480 +##### stopQAChoice
  1481 +- **主题**:/client/\${baseSN}/send
  1482 +- **功能描述**:停止选择题答题
  1483 +- **参数说明**
  1484 +
  1485 +|参数名|类型|限制|是否必填|说明|
  1486 +|---|---|---|---|---|
  1487 +|fun|string|-|是|指令名称|
  1488 +|dataTag|string|-|否|数据包标识,可为空字符串|
  1489 +```json
  1490 +{
  1491 + "fun": "stopQAChoice",
  1492 + "dataTag":"1"
  1493 +}
  1494 +```
  1495 +#### 事件
  1496 +##### [sEvtStateCode](#sevtstatecode)
  1497 +发送指令后返回接收状态
  1498 +
  1499 +##### fEvtQAChoice
  1500 +- **主题**:/basestation/\${baseSN}/receive
  1501 +- **功能描述**:返回键盘提交答题信息
  1502 +- **参数说明**
  1503 +
  1504 +|参数名|类型|限制|非空|说明|
  1505 +|---|---|---|---|---|
  1506 +|fun|string|-|是|指令名称|
  1507 +|dataTag|string|-|否|数据包标识,可为空字符串|
  1508 +|data|array|-|是|传送参数的对象数组|
  1509 +|++keySn|string||是|键盘SN|
  1510 +|++keyValue|string||是|键盘提交的按键值|
  1511 +|++keyTime|double||是|答题时间,从启动开始计算,单位秒|
  1512 +```json
  1513 +{
  1514 + "fun": "fEvtQAChoice",
  1515 + "dataTag":"1",
  1516 + "data": [{
  1517 + "keySn": "1234567890",
  1518 + "keyValue":"A",
  1519 + "keyTime":3.2
  1520 + }]
  1521 +}
  1522 +```
  1523 +### 数字题
  1524 +#### 方法
  1525 +##### startQANum
  1526 +- **主题**:/client/\${baseSN}/send
  1527 +- **功能描述**:启动数字题答题
  1528 +- **参数说明**
  1529 +
  1530 +|参数名|类型|限制|是否必填|说明|
  1531 +|---|---|---|---|---|
  1532 +|fun|string|-|是|指令名称|
  1533 +|dataTag|string|-|否|数据包标识,可为空字符串|
  1534 +|data|object|-|是|传送参数的对象|
  1535 +|+keySns|array||是|指定的键盘SN数组,空数组表示全部在线键盘|
  1536 +|+mode|int||是|模式<br>0:无规则 (S6最多16位,T2最多14位)<br>1:带小数位上下限(T2不支持)|
  1537 +|+digits|int||是|小数位数,范围0-2,mode=1时有效
  1538 +|+numMin|int||是|可输入下限,mode=1有效,范围0-100|
  1539 +|+numMax|int||是|可输入上限,mode=1有效,范围0-100|
  1540 +|+allowModify|int||是|修改模式<br>0 - 不允许修改<br>1 - 允许修改|
  1541 +|+tip|string||否|提示的标题,长度不超过16字符|
  1542 +```json
  1543 +{
  1544 + "fun": "startQANum",
  1545 + "dataTag":"1",
  1546 + "data":{
  1547 + "keySns":[],
  1548 + "mode": 1,
  1549 + "digits": 1,
  1550 + "numMin": 0,
  1551 + "numMax": 100,
  1552 + "allowModify":1,
  1553 + "tip":"请输入数字"
  1554 + }
  1555 +}
  1556 +```
  1557 +##### stopQANum
  1558 +- **主题**:/client/\${baseSN}/send
  1559 +- **功能描述**:停止数字题答题
  1560 +- **参数说明**
  1561 +
  1562 +|参数名|类型|限制|是否必填|说明|
  1563 +|---|---|---|---|---|
  1564 +|fun|string|-|是|指令名称|
  1565 +|dataTag|string|-|否|数据包标识,可为空字符串|
  1566 +```json
  1567 +{
  1568 + "fun": "stopQANum",
  1569 + "dataTag":"1"
  1570 +}
  1571 +```
  1572 +#### 事件
  1573 +##### [sEvtStateCode](#sevtstatecode)
  1574 +发送指令后返回接收状态
  1575 +
  1576 +##### fEvtQANum
  1577 +- **主题**:/basestation/\${baseSN}/receive
  1578 +- **功能描述**:返回键盘提交答题信息
  1579 +- **参数说明**
  1580 +
  1581 +|参数名|类型|限制|非空|说明|
  1582 +|---|---|---|---|---|
  1583 +|fun|string|-|是|指令名称|
  1584 +|dataTag|string|-|否|数据包标识,可为空字符串|
  1585 +|data|array|-|是|传送参数的对象数组|
  1586 +|++keySn|string||是|键盘SN|
  1587 +|++keyValue|string||是|键盘提交的按键值|
  1588 +|++keyTime|double||是|答题时间,从启动开始计算,单位秒|
  1589 +```json
  1590 +{
  1591 + "fun": "fEvtQANum",
  1592 + "dataTag":"1",
  1593 + "data": {
  1594 + "keySn": "1234567890",
  1595 + "keyValue":"10",
  1596 + "keyTime":3.2
  1597 + }
  1598 +}
  1599 +```
  1600 +### 抢答题
  1601 +#### 方法
  1602 +##### startQAQuicker
  1603 +- **主题**:/client/\${baseSN}/send
  1604 +- **功能描述**:启动抢答题答题
  1605 +- **参数说明**
  1606 +
  1607 +|参数名|类型|限制|是否必填|说明|
  1608 +|---|---|---|---|---|
  1609 +|fun|string|-|是|指令名称|
  1610 +|dataTag|string|-|否|数据包标识,可为空字符串|
  1611 +|data|object|-|是|传送参数的对象|
  1612 +|+keySns|array||是|指定的键盘SN数组,空数组表示全部在线键盘|
  1613 +|+mode|int||是|模式<br>0:普通抢答|
  1614 +|+allowModify|int||是|修改模式<br>0 - 不允许修改<br>1 - 允许修改|
  1615 +|+tip|string||否|提示的标题,长度不超过16字符|
  1616 +```json
  1617 +{
  1618 + "fun": "startQAQuicker",
  1619 + "dataTag":"1",
  1620 + "data":{
  1621 + "keySns":[],
  1622 + "mode": 0,
  1623 + "allowModify":1,
  1624 + "tip":"请按键抢答"
  1625 + }
  1626 +}
  1627 +```
  1628 +##### stopQAQuicker
  1629 +- **主题**:/client/\${baseSN}/send
  1630 +- **功能描述**:停止抢答答题
  1631 +- **参数说明**
  1632 +
  1633 +|参数名|类型|限制|是否必填|说明|
  1634 +|---|---|---|---|---|
  1635 +|fun|string|-|是|指令名称|
  1636 +|dataTag|string|-|否|数据包标识,可为空字符串|
  1637 +```json
  1638 +{
  1639 + "fun": "stopQAQuicker",
  1640 + "dataTag":"1"
  1641 +}
  1642 +```
  1643 +#### 事件
  1644 +##### [sEvtStateCode](#sevtstatecode)
  1645 +发送指令后返回接收状态
  1646 +
  1647 +##### fEvtQAQuicker
  1648 +- **主题**:/basestation/\${baseSN}/receive
  1649 +- **功能描述**:返回键盘提交答题信息
  1650 +- **参数说明**
  1651 +
  1652 +|参数名|类型|限制|非空|说明|
  1653 +|---|---|---|---|---|
  1654 +|fun|string|-|是|指令名称|
  1655 +|dataTag|string|-|否|数据包标识,可为空字符串|
  1656 +|data|array|-|是|传送参数的对象数组|
  1657 +|++keySn|string||是|键盘SN|
  1658 +|++keyValue|string||是|键盘提交的按键值|
  1659 +|++keyTime|double||是|答题时间,从启动开始计算,单位秒|
  1660 +```json
  1661 +{
  1662 + "fun": "fEvtQAQuicker",
  1663 + "dataTag":"1",
  1664 + "data": [{
  1665 + "keySn": "1234567890",
  1666 + "keyValue":"1",
  1667 + "keyTime":3.2
  1668 + }]
  1669 +}
  1670 +```
  1671 +## 在线测验
  1672 +### 标准测验
  1673 +#### 方法
  1674 +##### startKpExam
  1675 +- **主题**:/client/\${baseSN}/send
  1676 +- **功能描述**:启动标准测验
  1677 +- **参数说明**
  1678 +
  1679 +|参数名|类型|限制|是否必填|说明|
  1680 +|---|---|---|---|---|
  1681 +|fun|string|-|是|指令名称|
  1682 +|dataTag|string|-|否|数据包标识,可为空字符串|
  1683 +|data|object|-|是|传送参数的对象|
  1684 +|+examNo|int||是|0-9999<br>=0,新的测验<br>>0时,与上次启动卷号一致继续测验,不一致进入新的测验|
  1685 +|+mode|int||是|显示模式<br>0-不显示开头<br>1-显示“Q”开头<br>2-显示“题”开头|
  1686 +|+questions|array||是|题目详情|
  1687 +|++symbol | string||是 | 题号前缀,可为空 |
  1688 +|++quesType | int||是| 题目类型<br>1:单选<br>2:多选(排序)<br>3:数字<br>4:判断 |
  1689 +|++option |int||是 |选项数目<br> quesType = 1 有效。<br>quesType = 2 有效。<br>此项缺省时 默认4;<br>范围:1-10。|
  1690 +|++startNo | int||是| 起始题号 |
  1691 +|++count | int||是| 题目数量 |
  1692 +```json
  1693 +//自定义题号
  1694 +{
  1695 + "fun": "startKpExam",
  1696 + "dataTag":"1",
  1697 + "data":{
  1698 + "mode": 0,
  1699 + "examNo": 1,
  1700 + "questions": [{
  1701 + //题号1-1-1 到1-1-10 共10题单选
  1702 + "symbol": "1-1-",
  1703 + "quesType": 1,
  1704 + "startNo": 1,
  1705 + "count":10
  1706 + }, {
  1707 + //题号2-2和2-3共两题 多选题,5个选项
  1708 + "symbol": "2-",
  1709 + "quesType": 2,
  1710 + "option": 5,
  1711 + "startNo": 2,
  1712 + "count":2
  1713 + }, {
  1714 + //题号3-1和3-2共两道数字题
  1715 + "symbol": "3-",
  1716 + "quesType": 3,
  1717 + "startNo": 1,
  1718 + "count":2
  1719 + }, {
  1720 + //题号4和5 ,判断题
  1721 + "symbol": "",
  1722 + "quesType": 4,
  1723 + "startNo": 4,
  1724 + "count":2
  1725 + }]
  1726 + }
  1727 +}
  1728 +
  1729 +//显示Q开头
  1730 +{
  1731 + "fun": "startKpExam",
  1732 + "dataTag":"1",
  1733 + "data":{
  1734 + "mode": 1,
  1735 + "examNo": 1,
  1736 + "questions": [{
  1737 + //Q1-Q20,单选题
  1738 + "symbol": "",
  1739 + "quesType": 1,
  1740 + "startNo": 1,
  1741 + "count":20
  1742 + }]
  1743 + }
  1744 +}
  1745 +
  1746 +//显示题开头
  1747 +{
  1748 + "fun": "startKpExam",
  1749 + "dataTag":"1",
  1750 + "data":{
  1751 + "mode": 2,
  1752 + "examNo": 1,
  1753 + "questions": [{
  1754 + //题1-题20,单选题
  1755 + "symbol": "",
  1756 + "quesType": 1,
  1757 + "startNo": 1,
  1758 + "count":20
  1759 + }]
  1760 + }
  1761 +}
  1762 +```
  1763 +##### stopKpExam
  1764 +- **主题**:/client/\${baseSN}/send
  1765 +- **功能描述**:停止标准测验
  1766 +- **参数说明**
  1767 +
  1768 +|参数名|类型|限制|是否必填|说明|
  1769 +|---|---|---|---|---|
  1770 +|fun|string|-|是|指令名称|
  1771 +|dataTag|string|-|否|数据包标识,可为空字符串|
  1772 +```json
  1773 +{
  1774 + "fun": "stopKpExam",
  1775 + "dataTag":"1"
  1776 +}
  1777 +```
  1778 +##### rtKpAllowEdited
  1779 +- **主题**:/client/\${baseSN}/send
  1780 +- **功能描述**:键盘键盘后,允许键盘修改答案
  1781 +- **参数说明**
  1782 +
  1783 +|参数名|类型|限制|是否必填|说明|
  1784 +|---|---|---|---|---|
  1785 +|fun|string|-|是|指令名称|
  1786 +|dataTag|string|-|否|数据包标识,可为空字符串|
  1787 +|data|object|-|是|传送参数的对象|
  1788 +|+keySns|array||是|指定的键盘SN数组,空数组表示全部在线键盘|
  1789 +```json
  1790 +{
  1791 + "fun": "rtKpAllowEdited",
  1792 + "dataTag":"1",
  1793 + "data":{
  1794 + "keySns":["1234567890","1234567891"]
  1795 + }
  1796 +}
  1797 +```
  1798 +#### 事件
  1799 +##### [sEvtStateCode](#sevtstatecode)
  1800 +发送指令后返回接收状态
  1801 +
  1802 +##### fEvtKpExam
  1803 +- **主题**:/basestation/\${baseSN}/receive
  1804 +- **功能描述**:返回键盘提交答题信息
  1805 +- **参数说明**
  1806 +
  1807 +|参数名|类型|限制|非空|说明|
  1808 +|---|---|---|---|---|
  1809 +|fun|string|-|是|指令名称|
  1810 +|dataTag|string|-|否|数据包标识,可为空字符串|
  1811 +|data|array|-|是|传送参数的对象数组|
  1812 +|++keySn|string||是|键盘SN|
  1813 +|++keyValue|string||是|键盘提交的按键值,1:A;2:B表示第1题提交A,第二题提交B|
  1814 +|++keyTime|double||是|答题时间,从启动开始计算,单位秒|
  1815 +```json
  1816 +{
  1817 + "fun": "fEvtKpExam",
  1818 + "dataTag":"1",
  1819 + "data": [{
  1820 + "keySn": "1234567890",
  1821 + "keyValue":"1:A;2:B",
  1822 + "keyTime":3.2
  1823 + },
  1824 + {
  1825 + "keySn": "1234567891",
  1826 + "keyValue":"1:B;2:B",
  1827 + "keyTime":3.5
  1828 + }
  1829 + ]
  1830 +}
  1831 +```
  1832 +##### fEvtFinalSubmit
  1833 +- **主题**:/basestation/\${baseSN}/receive
  1834 +- **功能描述**:返回键盘手动交卷标识
  1835 +- **参数说明**
  1836 +
  1837 +|参数名|类型|限制|非空|说明|
  1838 +|---|---|---|---|---|
  1839 +|fun|string|-|是|指令名称|
  1840 +|dataTag|string|-|否|数据包标识,可为空字符串|
  1841 +|data|object|-|是|传送参数的对象数组|
  1842 +|++keySn|string||是|键盘SN|
  1843 +|++keyValue|string||是|0 - 未提交(修改键盘运行提交时上报)<br>1 - 已交卷|
  1844 +|++keyTime|double||是|提交时间,从启动开始计算,单位秒|
  1845 +```json
  1846 +{
  1847 + "fun": "fEvtFinalSubmit",
  1848 + "dataTag":"1",
  1849 + "data": [{
  1850 + "keySn": "1234567890",
  1851 + "keyValue":"1",
  1852 + "keyTime":3.2
  1853 + }]
  1854 +}
  1855 +```
0 \ No newline at end of file 1856 \ No newline at end of file