# SunVote B200W MQTT通讯协议
## MQTT服务器准备
MQTT服务器要求:
厂家使用EMQX 进行测试
能够正常收发MQTT数据。
服务器的性能参数由业务决定。
域名:
公网域名或ip或者基站所处局域网ip。
MQTT服务器配置结果检查
使用MQTT.FX客户端,配置域名,端口,用户名和密码信息,然后连接,如果提示连接成功,则表示MQTT服务器可用。基站clientid 是基站编号。

# 功能说明
## 主题说明
\${baseSN}为指定的基站的SN编码,不能为空,接收基站反馈数据需要订阅对应基站SN的接收主题。
### 发布的主题
应用程序发布的主题,基站订阅
/client/\${baseSN}/send
/client/multiBase/send
### 订阅的主题
应用程序订阅的主题,基站发布
/basestation/\\${baseSN}/receive
/basestation/multiBase/receive
## 指令说明
|指令功能标识 |说明 |约束|
|---|---|---|
|get| 待机状态下获取参数属性状态及数据 |待机状态|
|set| 待机状态下设置参数属性状态及数据 |待机状态|
|start| 运行一个单进程业务实例(函数) |待机状态|
|stop| 停止一个单进程业务实例(函数) |待机状态|
|rtXXX| 在线状态下可实时执行方法及函数 ||
## 事件说明
|事件标识| 说明| 约束|
|---|---|---|
|sEvtXXX|系统事件 |自动返回|
|fEvtXXX|指令事件 |调用对应指令后返回|
## 数据格式约定
- 数据格式统一为**Json**格式,MQTT发送接收消息编码统一为**UTF-8**
- Json通用格式如下:
```json
{
"fun":"xxx",
"dataTag":"xxx",
"data":{
//内容
}
}
```
|参数 |说明 |约束|
|---|---|---|
|fun| 指令或事件名称||
|dataTag| 数据标签,用于对应收发数据|长度不超过4,可为0-9a-zA-Z的组合|
|data| 数据内容|对象或者数组,可为空|
## 功能速查一览表
### 基站管理
|功能归类|功能|API指令|指令/系统事件|
|---|---|---|---|
|基站连接 - 获取在线基站|主动获取在线基站信息
不确定基站SN时|[getBsOnlineState](#getbsonlinestate)|[fEvtBsOnlineState](#fevtbsonlinestate)||
|基站连接 - 主动获取状态|主动获取基站连接状态|[getBsConnectState](#getbsconnectstate)|[sEvtBsConnectState](#sevtbsconnectstate)||
|基站连接 - 自动获取状态|基站连接变化系统通知|-|[sEvtBsConnectState](#sevtbsconnectstate)||
|基站授时|对基站授时用于校准时间|[timeSync](#timesync)|[sEvtStateCode](#sevtstatecode)||
|键盘上线通知|单个键盘上线系统通知|-|[sEvtBsKpOnlineMsg](#sevtbskponlinemsg)||
|识别设置 - 基站型号|读取基站型号|[getBsModel](#getbsmodel)|[fEvtBsModel](#fevtbsmodel)|
|识别设置 - 固件版本|获取基站固件版本|[getBsFWVersion](#getbsfwversion)|[fEvtBsFWVersion](#fevtbsfwversion)|
|组网设置 - 配对码|获取基站配对码|[getBsPairCode](#getbspaircode)|[fEvtBsPairCode](#fevtbspaircode)|
|组网设置 - 刷卡配对状态|获取刷卡配对状态|[getBsNfcLogin](#getbsnfclogin)|[fEvtBsNfcLogin](#fevtbsnfclogin)|
||设置刷卡配对状态|[setBsNfcLogin](#setbsnfclogin)|[fEvtBsNfcLogin](#fevtbsnfclogin)||
|组网设置 - 工作信道|获取基站工作信道|[getBsChannel](#getbschannel)|[fEvtBsChannel](#fevtbschannel)|
||设置基站工作信道|[setBsChannel](#setbschannel)|[fEvtBsChannel](#fevtbschannel)||
|登录设置 - 登录名称|获取基站登录名称|[getBsSSID](#getbsssid)|[fEvtBsSSID](#fevtbsssid)|
||设置基站登录名称|[setBsSSID](#setbsssid)|[fEvtBsSSID](#fevtbsssid)||
|键盘统一设置 - 键盘语言|获取键盘语言|[getBsKpLanguage](#getbskplanguage)|[fEvtBsKpLanguage](#fevtbskplanguage)|
||设置键盘语言|[setBsKpLanguage](#setbskplanguage)|[fEvtBsKpLanguage](#fevtbskplanguage)||
|网络设置 - TCP/IP参数|获取TCP/IP参数|[getBsTcpipParams](#getbstcpipparams)|[fEvtBsTcpipParams](#fevtbstcpipparams)|
||设置TCP/IP参数|[setBsTcpipParams](#setbstcpipparams)|[fEvtBsTcpipParams](#fevtbstcpipparams)||
|网络设置 - MQTT参数|获取MQTT参数|[getBsMqttParams](#getbsmqttparams)|[fEvtBsMqttParams](#fevtbsmqttparams)|
||设置MQTT参数|[setBsMqttParams](#setbsmqttparams)|[fEvtBsMqttParams](#fevtbsmqttparams)||
|基站维护|获取基站日志信息|[getBsLogInfo](#getbsloginfo)|[sEvtStateCode](#sevtstatecode)|
### 键盘管理
|功能归类|功能|API指令|指令事件|
|---|---|---|---|
|交互设置 - 用户实时提示信息|实时设置提示反馈信息|[rtSetKpUserPrompt](#rtsetkpuserprompt)|[sEvtStateCode](#sevtstatecode)
[fEvtSetKpUserPrompt](#fevtsetkpuserprompt)|
|在线状态获取|开启扫描在线键盘|[startGetKpOnline](#startgetkponline)|[sEvtStateCode](#sevtstatecode)
[sEvtBsKpOnlineMsg](#sevtbskponlinemsg)|
||停止扫描在线键盘|[stopGetKpOnline](#stopgetkponline)|[sEvtStateCode](#sevtstatecode)|
|维护功能 - 遥控功能|遥控键盘休眠|[remoteKpSleep](#remotekpsleep)|[sEvtStateCode](#sevtstatecode)|
### 绑定
|功能归类|功能|API指令|指令事件|
|---|---|---|---|
|无线绑定|设置绑定信息到键盘|[rtSetKpBindingInfo](#rtsetkpbindinginfo)|[sEvtStateCode](#sevtstatecode)
[fEvtKpBindingInfo](#fevtkpbindinginfo)|
||清除键盘绑定信息|[clearKpBindingInfo](#clearkpbindinginfo)|[sEvtStateCode](#sevtstatecode)
[fEvtClearKpBindingInfo](#fevtclearkpbindinginfo)|
### 签到
|功能归类|功能|API指令|指令事件|
|---|---|---|---|
|随时签到|启动随时签到|[rtStartKpSignIn](#rtstartkpsignin)|[sEvtStateCode](#sevtstatecode)
[fEvtKpSignIn](#fevtkpsignin)|
||停止随时签到|[rtStopKpSignIn](#rtstopkpsignin)|[sEvtStateCode](#sevtstatecode)|
||实时PIN签到授权|[rtSetKpLoginAllowed](#rtsetkploginallowed)|[sEvtStateCode](#sevtstatecode)
[fEvtKpLoginAllowed](#fevtkploginallowed)|
### 按键反馈
|功能归类|功能|API指令|指令事件|
|---|---|---|---|
|判断题|启动判断题答题|[startQATrueFalse](#startqatruefalse)|[sEvtStateCode](#sevtstatecode)
[fEvtQATrueFalse](#fevtqatruefalse)|
||停止判断题答题|[stopQATrueFalse](#stopqatruefalse)|[sEvtStateCode](#sevtstatecode)|
|选择题|启动选择题答题|[startQAChoice](#startqachoice)|[sEvtStateCode](#sevtstatecode)
[fEvtQAChoice](#fevtqachoice)|
||停止选择题答题|[stopQAChoice](#stopqachoice)|[sEvtStateCode](#sevtstatecode)|
|数字题|启动数字题答题|[startQANum](#startqanum)|[sEvtStateCode](#sevtstatecode)
[fEvtQANum](#fevtqanum)|
||停止数字题答题|[stopQANum](#stopqanum)|[sEvtStateCode](#sevtstatecode)|
|抢答题|启动抢答题答题|[startQAQuicker](#startqaquicker)|[sEvtStateCode](#sevtstatecode)
[fEvtQAQuicker](#fevtqaquicker)|
||停止抢答题答题|[stopQAQuicker](#stopqaquicker)|[sEvtStateCode](#sevtstatecode)|
### 在线测验
|功能归类|功能|API指令|指令事件|
|---|---|---|---|
|标准测验|启动标准测验|[startKpExam](#startkpexam)|[sEvtStateCode](#sevtstatecode)
[fEvtKpExam](#fevtkpexam)
[fEvtFinalSubmit](#fevtfinalsubmit)|
||停止标准测验|[stopKpExam](#stopkpexam)|[sEvtStateCode](#sevtstatecode)|
||允许键盘提交后退回修改|[rtAllowEdited](#rtkpallowedited)|[sEvtStateCode](#sevtstatecode)
[fEvtFinalSubmit](#fevtfinalsubmit)|
## 公共事件
### sEvtBsConnectState
- **主题**: /basestation/\${baseSN}/receive
- **功能描述**:基站连接成功时返回基站型号和基站SN,基站从已连接状态断开返回连接断开
- **参数说明**
|参数名|类型|限制|非空|说明|
|-----|-----|-----|-----|-----|
|fun|string|-|是|事件类型|
|dataTag|string|-|否|数据包标识,不需要时可传空字符串|
|data|object|-|是|传送参数的对象|
|+baseModel|int||否|基站的型号码|
|+modelName|string||否|基站的型号名称|
|+state|int||是|基站的连接状态
1-已连接
2-连接断开|
|+version|string||否|基站固件版本|
- **示例代码**
```Json
//连接成功
{
"fun":"sEvtBsConnectState",
"dataTag":"1",
"data":{
"state":1,
"baseModel":218,
"modelName":"B200",
"version":"1.0.3"
}
}
//连接断开
{
"fun":"sEvtBsConnectState",
"dataTag":"1",
"data":{
"state":2
}
}
```
### sEvtBsChannelConflict
- **主题**: /basestation/\${baseSN}/receive
- **功能描述**:基站信道冲突时主动上报,应用程序可根据实际业务修改基站信道
- **参数说明**
|参数名|类型|限制|非空|说明|
|---|---|---|---|---|
|fun|string|-|是|事件名称|
|dataTag|string|-|否|数据包标识,不需要时可传空字符串|
|data|object|-|是|传送参数的对象|
|+value|int||是|有冲突的信道|
- **示例代码**
```Json
{
"fun":"sEvtBsChannelConflict",
"dataTag":"1",
"data":{
"value":5 //信道5有多个基站使用
}
}
```
### sEvtBsNfcResults
- **主题**: /basestation/\${baseSN}/receive
- **功能描述**:键盘刷卡时主动上报,如果超出基站容量会上报失败
- **参数说明**
|参数名|类型|限制|非空|说明|
|---|---|---|---|---|
|fun|string|-|是|事件名称|
|dataTag|string|-|否|数据包标识,不需要时可传空字符串|
|data|object|-|是|传送参数的对象|
|+keySn|string||是|刷卡的键盘SN|
|+value|int||是|刷卡的状态
1-成功
2-失败|
- **示例代码**
```Json
{
"fun":"sEvtBsNfcResults",
"dataTag":"1", //不需要时可传空字符串
"data":{
"keySn":"1234567890",
"value":1
}
}
```
### sEvtBsKpOnlineMsg
- **主题**: /basestation/\${baseSN}/receive
- **功能描述**:键盘上线通知,主动上报,键盘升级成功后也会上报
- **参数说明**
|参数名|类型|限制|非空|说明|
|---|---|---|---|---|
|fun|string|-|是|事件名称|
|dataTag|string|-|否|数据包标识|
|data|object|-|是|传送参数的对象|
|+keySn|string||是|键盘SN|
|+version|string||是|键盘固件版本|
|+model|int||是|键盘型号|
|+voltage|double||是|键盘电压|
- **示例代码**
```Json
{
"fun":"sEvtBsKpOnlineMsg",
"dataTag":"1",
"data":{
"keySn":"1234567890",
"version":"1.0.0",
"model":67,
"voltage":2.8
}
}
```
### sEvtStateCode
- **主题**: /basestation/\${baseSN}/receive
- **功能描述**:返回基站接收指令状态信息
- **参数说明**
|参数名|类型|限制|非空|说明|
|---|---|---|---|---|
|fun|string|-|是|事件名称|
|dataTag|string|-|否|数据包标识|
|data|object|-|是|传送参数的对象|
|+funName|string||是|指令名称|
|+code|string||是|状态码,含义见下表|
|状态码|说明|
|---|---|
|0|指令收取成功|
|10001|不能正确解析的JSON数据|
|10002|解析JSON错误|
|20001|基站未连接|
|20002|功能不支持|
|20003|基站SN格式不正确|
|20004|参数错误|
|20005|基站在答题中|
|40001|升级功能只能支持一个基站|
|50001|此功能必须指定基站|
|60001|此功能必须指定键盘SN|
- **示例代码**
```Json
{
"fun":"sEvtStateCode",
"dataTag":"1",
"data":{
"funName":"startKpRollCall",
"code":"20005"
}
}
```
## 基站管理
### 基站连接
#### 方法
##### getBsOnlineState
- **主题**:/client/multiBase/send
- **功能描述**:主动获取所有在线基站信息,在线基站回复
- **参数说明**
|参数名|类型|限制|是否必填|说明|
|---|---|---|---|---|
|fun|string|-|是|固定指令名称|
|dataTag|string|-|否|数据包标识|
- **示例代码**
```Json
{
"fun":"getBsOnlineState",
"dataTag":"1"
}
```
##### getBsConnectState
- **主题**:/client/\${baseSN}/send
- **功能描述**:主动获取基站连接状态
- **参数说明**
|参数名|类型|限制|是否必填|说明|
|---|---|---|---|---|
|fun|string|-|是|固定指令名称|
|dataTag|string|-|否|数据包标识|
- **示例代码**
```Json
{
"fun":"getBsConnectState",
"dataTag":"1"
}
```
#### 事件
##### [sEvtBsConnectState](#sevtbsconnectstate)
参见基站连接变化系统通知
##### fEvtBsOnlineState
- **主题**: /basestation/mutilBase/receive
- **功能描述**:基站在线返回基站型号和基站SN
- **参数说明**
|参数名|类型|限制|非空|说明|
|-----|-----|-----|-----|-----|
|fun|string|-|是|事件类型|
|dataTag|string|-|否|数据包标识,不需要时可传空字符串|
|data|object|-|是|传送参数的对象|
|+baseModel|int||否|基站的型号码|
|+modelName|string||否|基站的型号名称|
|+version|string||否|基站固件版本|
|+baseSN|string||否|基站SN|
- **示例代码**
```Json
//连接成功
{
"fun":"fEvtBsOnlineState",
"dataTag":"1",
"data":{
"baseModel":218,
"modelName":"B200",
"version":"1.0.3",
"baseSN":"2024041401"
}
}
```
### 基站授时
#### 方法
##### timeSync
- **主题**:/client/\${baseSN}/send
- **功能描述**:发送当前时间戳给基站进行校时
- **参数说明**
|参数名|类型|限制|是否必填|说明|
|---|---|---|---|---|
|fun|string|-|是|固定指令名称|
|dataTag|string|-|否|数据包标识|
|data|object|-|是|传送参数的对象|
|+timeStamp|long ||否|当前时间的时间戳|
- **示例代码**
```Json
{
"fun":"timeSync",
"dataTag":"1",
"data":{
"timeStamp":1718247133290
}
}
```
#### 事件
##### [sEvtStateCode](#sevtstatecode)
返回指令的接收状态
### 识别设置
#### 方法
##### getBsModel
- **主题**:/client/\${baseSN}/send
- **功能描述**:获取基站型号
- **参数说明**
|参数名|类型|限制|是否必填|说明|
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
- **示例代码**
```Json
{
"fun":"getBsModel",
"dataTag":"1"
}
```
##### getBsFWVersion
- **主题**:/client/\${baseSN}/send
- **功能描述**:获取基站固件版本
- **参数说明**
|参数名|类型|限制|是否必填|说明|
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
- **示例代码**
```Json
{
"fun":"getBsFWVersion",
"dataTag":"1"
}
```
#### 事件
##### fEvtBsSN
- **主题**: /basestation/\${baseSN}/receive
- **功能描述**:返回基站的出厂编码
- **参数说明**
|参数名|类型|限制|非空|说明|
|---|---|---|---|---|
|fun|string|-|是|事件名称|
|dataTag|string|-|否|数据包标识|
|data|object|-|是|传送参数的对象|
|+value|string|-|是|基站的出厂编码|
- **示例代码**
```Json
{
"fun":"fEvtBsSN",
"dataTag":"1",
"data":{
"value":"2024041201"
}
}
```
##### fEvtBsModel
- **主题**: /basestation/\${baseSN}/receive
- **功能描述**:返回基站的型号
- **参数说明**
|参数名|类型|限制|是否必填|说明|
|---|---|---|---|---|
|fun|string|-|是|事件名称|
|dataTag|string|-|否|数据包标识|
|data|object|-|是|传送参数的对象|
|+value|string|-|是|基站的型号名称|
- **示例代码**
```Json
{
"fun":"fEvtBsModel",
"dataTag":"1",
"data":{
"value":"B200"
}
}
```
##### fEvtBsFWVersion
- **主题**: /basestation/\${baseSN}/receive
- **功能描述**:返回基站的固件版本
- **参数说明**
|参数名|类型|限制|是否必填|说明|
|---|---|---|---|---|
|fun|string|-|是|事件名称|
|dataTag|string|-|否|数据包标识|
|data|object|-|是|传送参数的对象|
|+value|string||是|基站的固件版本号|
- **示例代码**
```Json
{
"fun":"fEvtBsFWVersion",
"dataTag":"1",
"data":{
"value":"1.0.3"
}
}
```
### 组网设置
#### 方法
##### getBsPairCode
- **主题**:/client/\${baseSN}/send
- **功能描述**:获取基站配对码
- **参数说明**
|参数名|类型|限制|是否必填|说明|
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
- **示例代码**
```Json
{
"fun":"getBsPairCode",
"dataTag":"1"
}
```
##### getBsNfcLogin
- **主题**:/client/\${baseSN}/send
- **功能描述**:获取刷卡配对状态
- **参数说明**
|参数名|类型|限制|是否必填|说明|
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
- **示例代码**
```Json
{
"fun":"getBsNfcLogin",
"dataTag":"1"
}
```
##### setBsNfcLogin
- **主题**:/client/\${baseSN}/send
- **功能描述**:设置基站刷卡配对状态
- **参数说明**
|参数名|类型|限制|是否必填|说明|
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
|data|object|-|是|传送参数的对象|
|+value|string|-|是|设置的基站刷卡配对状态
0-关闭刷卡配对
1-开启刷卡配对|
- **示例代码**
```Json
{
"fun":"setBsNfcLogin",
"dataTag":"1",
"data":{
"value":"1"
}
}
```
##### getBsChannel
- **主题**:/client/\${baseSN}/send
- **功能描述**:获取基站信道
- **参数说明**
|参数名|类型|限制|是否必填|说明|
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
- **示例代码**
```Json
{
"fun":"getBsChannel",
"dataTag":"1"
}
```
##### setBsChannel
- **主题**:/client/\${baseSN}/send
- **功能描述**:设置基站信道
- **参数说明**
|参数名|类型|限制|是否必填|说明|
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
|data|object|-|是|传送参数的对象|
|+value|string|-|是|设置的基站信道,可设范围:1-80|
- **示例代码**
```Json
{
"fun":"setBsChannel",
"dataTag":"1",
"data":{
"value":"23"
}
}
```
#### 事件
##### fEvtBsPairCode
- **主题**: /basestation/\${baseSN}/receive
- **功能描述**:返回基站配对码
- **参数说明**
|参数名|类型|限制|非空|说明|
|---|---|---|---|---|
|fun|string|-|是|事件名称|
|dataTag|string|-|否|数据包标识,可传空字符串|
|data|object|-|是|传送参数的对象|
|+value|string||是|基站的配对码|
- **示例代码**
```Json
{
"fun":"fEvtBsPairCode",
"dataTag":"1",
"data":{
"value":"123456"
}
}
```
##### fEvtBsChannel
- **主题**: /basestation/\${baseSN}/receive
- **功能描述**:返回基站信道
- **参数说明**
|参数名|类型|限制|非空|说明|
|---|---|---|---|---|
|fun|string|-|是|事件名称|
|dataTag|string|-|否|数据包标识,可传空字符串|
|data|object|-|是|传送参数的对象|
|+value|string||是|基站信道|
- **示例代码**
```Json
{
"fun":"fEvtBsChannel",
"dataTag":"1",
"data":{
"value":"5"
}
}
```
##### fEvtBsNfcLogin
- **主题**: /basestation/\${baseSN}/receive
- **功能描述**:返回基站是否允许NFC刷卡
- **参数说明**
|参数名|类型|限制|非空|说明|
|---|---|---|---|---|
|fun|string|-|是|事件名称|
|dataTag|string|-|否|数据包标识,可传空字符串|
|data|object|-|是|传送参数的对象|
|+value|string||是|0-关闭 1-开启|
- **示例代码**
```Json
{
"fun":"fEvtBsNfcLogin",
"dataTag":"1",
"data":{
"value":"1"
}
}
```
### 登录设置
#### 方法
##### getBsSSID
获取基站登录名称
- **主题**:/client/\${baseSN}/send
- **功能描述**:获取基站登录名称
- **参数说明**
|参数名|类型|限制|是否必填|说明|
|---|---|---|---|---|
|fun|string|-|是|固定指令名称|
|dataTag|string|-|否|数据包标识|
- **示例代码**
```Json
{
"fun":"getBsSSID",
"dataTag":"1"
}
```
##### setBsSSID
- **主题**:/client/\${baseSN}/send
- **功能描述**:设置基站登录名称
- **参数说明**
|参数名|类型|限制|是否必填|说明|
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
|data|object|-|是|传送参数的对象|
|+value|string||是|设置的基站SSID,最长12字符|
- **示例代码**
```Json
{
"fun":"setBsSSID",
"dataTag":"1",
"data":{
"value":"1901班"
}
}
```
#### 事件
##### fEvtBsSSID
- **主题**: /basestation/\${baseSN}/receive
- **功能描述**:返回基站名称
- **参数说明**
|参数名|类型|限制|非空|说明|
|---|---|---|---|---|
|fun|string|-|是|事件名称|
|dataTag|string|-|否|数据包标识,可传空字符串|
|data|object|-|是|传送参数的对象|
|+value|string||是|基站名称|
- **示例代码**
```Json
{
"fun":"fEvtBsSSID",
"dataTag":"1",
"data":{
"value":"1901班"
}
}
```
### 键盘统一设置
#### 方法
##### getBsKpLanguage
- **主题**:/client/\${baseSN}/send
- **功能描述**:获取键盘语言
- **参数说明**
|参数名|类型|限制|是否必填|说明|
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
- **示例代码**
```Json
{
"fun":"getBsKpLanguage",
"dataTag":"1"
}
```
##### setBsKpLanguage
- **主题**:/client/\${baseSN}/send
- **功能描述**:设置键盘语言
- **参数说明**
|参数名|类型|限制|是否必填|说明|
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
|data|object|-|是|传送参数的对象|
|+value|string||是|设置键盘显示的语言
1-简体中文
2-英文|
- **示例代码**
```Json
{
"fun":"setBsKpLanguage",
"dataTag":"1",
"data":{
"value":"1"
}
}
```
#### 事件
##### fEvtBsKpLanguage
- **主题**: /basestation/\${baseSN}/receive
- **功能描述**:返回键盘语言
- **参数说明**
|参数名|类型|限制|非空|说明|
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
|data|object|-|是|传送参数的对象|
|+value|string||是|设置键盘显示的语言
1-简体中文
2-英文|
- **示例代码**
```Json
{
"fun":"fEvtBsKpLanguage",
"dataTag":"1",
"data":{
"value":"1"
}
}
```
### 网络参数设置
#### 方法
##### getBsTcpipParams
- **主题**:/client/\${baseSN}/send
- **功能描述**:获取基站TCP/IP参数
- **参数说明**
|参数名|类型|限制|是否必填|说明|
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
- **示例代码**
```Json
{
"fun":"getBsTcpipParams",
"dataTag":"1"
}
```
##### setBsTcpipParams
- **主题**:/client/\${baseSN}/send
- **功能描述**:设置基站TCP/IP参数
- **参数说明**
|参数名|类型|限制|是否必填|说明|
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
|data|object|-|是|传送参数的对象|
|+ip|string||否|IP地址|
|+mask|string||否|子网掩码|
|+gateway|string||否|网关地址|
|+ipAllocation|int||否|基站IP获取方式
0 - 手动指定
1 - DHCP获取|
- **示例代码**
```Json
{
"fun":"setBsTcpipParams",
"dataTag":"1",
"data":{
"ip":"192.168.0.10",
"mask":"255.255.255.0",
"gateway":"192.168.0.1",
"ipAllocation":1
}
}
```
##### getBsMqttParams
- **主题**:/client/\${baseSN}/send
- **功能描述**:获取基站MQTT参数
- **参数说明**
|参数名|类型|限制|是否必填|说明|
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
- **示例代码**
```Json
{
"fun":"getBsMqttParams",
"dataTag":"1"
}
```
##### setBsMqttParams
- **主题**:/client/\${baseSN}/send
- **功能描述**:设置基站MQTT参数
- **参数说明**
|参数名|类型|限制|是否必填|说明|
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
|data|object|-|是|传送参数的对象|
|+server|string||是|服务器IP地址|
|+port|int||是|端口,默认1883|
|+userName|string||否|连接服务器的用户名,可不设置|
|+password|string||否|连接服务器的密码,可不设置|
|+interval|int|>=10|否|基站连接服务器失败后重连的间隔时长,单位秒|
- **示例代码**
```Json
{
"fun":"setBsMqttParams",
"dataTag":"1",
"data":{
"server":"192.168.10.10",
"port":1883,
"userName":"",
"password":"",
"interval":30
}
}
```
#### 事件
##### fEvtBsTcpipParams
- **主题**: /basestation/\${baseSN}/receive
- **功能描述**:返回基站TCP/IP参数
- **参数说明**
|参数名|类型|限制|非空|说明|
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
|data|object|-|是|传送参数的对象|
|+mac|string||是|MAC地址|
|+ip|string||是|IP地址|
|+mask|string||是|子网掩码|
|+gateway|string||是|网关地址|
|+ipAllocation|int||否|基站IP获取方式
0 - 手动指定
1 - DHCP获取|
- **示例代码**
```Json
{
"fun":"fEvtBsTcpipParams",
"dataTag":"1",
"data":{
"mac":"FF:FF:FF:FF:FF:FF",
"ip":"192.168.0.10",
"mask":"255.255.255.0",
"gateway":"192.168.0.1",
"ipAllocation":1
}
}
```
##### fEvtBsMqttParams
- **主题**: /basestation/\${baseSN}/receive
- **功能描述**:返回基站MQTT参数
- **参数说明**
|参数名|类型|限制|非空|说明|
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
|data|object|-|是|传送参数的对象|
|+server|string||是|服务器地址,IP|
|+port|int||是|端口,默认1883|
|+userName|string||否|连接服务器的用户名,可不设置|
|+password|string||否|连接服务器的密码,可不设置|
|+interval|int|>=10|否|基站连接服务器失败后重连的间隔时长,单位秒|
- **示例代码**
```Json
{
"fun":"fEvtBsMqttParams",
"dataTag":"1",
"data":{
"server":"192.168.10.10",
"port":1883,
"userName":"",
"password":"",
"interval":30
}
}
```
### 基站维护
#### 方法
##### getBsLogInfo
- **主题**:/client/\${baseSN}/send
- **功能描述**:获取基站日志,用于出现故障需要排查问题时获取基站内部日志记录
- **参数说明**
|参数名|类型|限制|是否必填|说明|
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
- **示例代码**
```Json
{
"fun":"getBsLogInfo",
"dataTag":"1"
}
```
#### 事件
##### [sEvtStateCode](#sevtstatecode)
返回指令的接收状态
## 键盘管理
### 交互设置
#### 方法
##### rtSetKpUserPrompt
- **主题**:/client/\${baseSN}/send
- **功能描述**:实时设置提示反馈信息
- **参数说明**
|参数名|类型|限制|是否必填|说明|
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
|data|array|-|否|传送参数的对象数组|
|++keySns|array||是|指定的键盘SN数组,空数组表示全部在线键盘
注意:不允许空数组和指定SN数组混合使用
包含空数组默认为全部在线键盘,其他指定键盘无效|
|++info|string||否|设置的反馈信息
不同键盘可设置不同反馈信息|
```json
//分别提示
{
"fun": "rtSetKpUserPrompt",
"dataTag":"1",
"data": [
{
"keySns": ["1479824643","1479824645"],
"info": "答对了"
},
{
"keySns": ["1479824644"],
"info": "答错了"
}
]
}
//统一提示
{
"fun": "rtSetKpUserPrompt",
"dataTag":"1",
"data": [
{
"keySns": [],
"info": "答题结束"
}
]
}
```
#### 事件
##### [sEvtStateCode](#sevtstatecode)
发送指令后返回接收状态
##### fEvtSetKpUserPrompt
- **主题**:/basestation/\${baseSN}/receive
- **功能描述**:返回实时设置提示语是否成功
- **参数说明**
|参数名|类型|限制|非空|说明|
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
|data|array|-|是|传送参数的对象数组|
|++keySn|string||是|设置提示语信息的键盘SN|
|++state|string||是|设置的提示语是否成功
0 - 成功
1 - 失败|
```json
{
"fun": "fEvtSetKpUserPrompt",
"dataTag":"1",
"data": [
{
"keySn": "1479824643",
"state": "0"
},
{
"keySn": "1479824645",
"state": "0"
},
{
"keySn": "1479824644",
"state": "1"
}
]
}
```
### 在线状态
#### 方法
##### startGetKpOnline
- **主题**:/client/\${baseSN}/send
- **功能描述**:开始获取键盘在线信息,键盘在线返回键盘信息 [sEvtBsKpOnlineMsg](#sevtbskponlinemsg)
- **参数说明**
|参数名|类型|限制|是否必填|说明|
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
```json
{
"fun": "startGetKpOnline",
"dataTag":"1"
}
```
##### stopGetKpOnline
- **主题**:/client/\${baseSN}/send
- **功能描述**:停止获取键盘在线信息
- **参数说明**
|参数名|类型|限制|是否必填|说明|
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
```json
{
"fun": "stopGetKpOnline",
"dataTag":"1"
}
```
#### 事件
##### [sEvtStateCode](#sevtstatecode)
发送指令后返回此事件
##### [sEvtBsKpOnlineMsg](#sevtbskponlinemsg)
键盘在线返回此事件
### 维护功能
#### 方法
##### remoteKpSleep
- **主题**:/client/\${baseSN}/send
- **功能描述**:遥控键盘休眠
- **参数说明**
|参数名|类型|限制|是否必填|说明|
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
|data|object|-|是|传送参数的对象数组|
|+keySns|array||否|需要执行指令的键盘SN数组,空数组表示所有键盘|
- **示例代码**
```Json
{
"fun":"remoteKpSleep",
"dataTag":"1",
"data":{
"keySns":["1479824644"]
}
}
```
#### 事件
##### [sEvtStateCode](#sevtstatecode)
返回指令的接收状态
## 绑定
### 无线绑定
#### 方法
##### rtSetKpBindingInfo
- **主题**:/client/\${baseSN}/send
- **功能描述**:实时设置绑定信息到键盘
- **参数说明**
|参数名|类型|限制|是否必填|说明|
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
|data|array|-|是|传送参数的对象数组,不可为空|
|++keySn|string||是|需要设置绑定信息的键盘SN|
|++info|string||是|设置的绑定信息,一般为学生姓名
最长48个字符,显示在键盘左上角|
```json
{
"fun": "rtSetKpBindingInfo",
"dataTag":"1",
"data": [
{
"keySn": "1479824643",
"info": "张三"
},
{
"keySn": "1479824644",
"info": "李四"
}
]
}
```
##### clearKpBindingInfo
- **主题**:/client/\${baseSN}/send
- **功能描述**:清除键盘绑定信息
- **参数说明**
|参数名|类型|限制|是否必填|说明|
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
|data|object|-|是|传送参数的对象数组|
|+keySns|array||否|需要清除绑定信息键盘SN数组,
空数组表示清空所有键盘|
```json
{
"fun": "clearKpBindingInfo",
"dataTag":"1",
"data": {
"keySns":["1479824643","1479824644","1479824645"]
}
}
```
#### 事件
##### [sEvtStateCode](#sevtstatecode)
发送指令后返回接收状态
##### fEvtKpBindingInfo
- **主题**:/basestation/\${baseSN}/receive
- **功能描述**:返回键盘实时设置绑定信息的状态是否成功
- **参数说明**
|参数名|类型|限制|非空|说明|
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
|data|array|-|否|传送参数的对象数组|
|++keySn|string||是|需要设置绑定信息的键盘SN|
|++state|string||是|设置的绑定信息是否成功
0 - 成功
1 - 失败|
```json
{
"fun": "fEvtKpBindingInfo",
"dataTag":"1",
"data": [
{
"keySn": "1479824643",
"state": "0"
},
{
"keySn": "1479824644",
"state": "1"
}
]
}
```
##### fEvtClearKpBindingInfo
- **主题**:/basestation/\${baseSN}/receive
- **功能描述**:返回清空绑定信息的指令状态是否成功
- **参数说明**
|参数名|类型|限制|非空|说明|
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
|data|object|-|否|传送参数的对象|
|+state|string||是|设置的绑定信息是否成功
0 - 成功
1 - 失败|
```json
{
"fun": "fEvtClearKpBindingInfo",
"dataTag":"1",
"data": {
"state": "0"
}
}
```
## 签到
### 随时签到
#### 方法
##### rtStartKpSignIn
- **主题**:/client/\${baseSN}/send
- **功能描述**:启动随时签到绑定
- **参数说明**
|参数名|类型|限制|是否必填|说明|
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
|data|object|-|是|传递参数的对象|
|+mode|int|-|是|签到模式
2-PIN码签到,输入pin码后由应用程序决定是否授权|
```json
{
"fun": "rtStartKpSignIn",
"dataTag":"1",
"data":{
"mode":2
}
}
```
##### rtStopKpSignIn
- **主题**:/client/\${baseSN}/send
- **功能描述**:停止签到绑定
- **参数说明**
|参数名|类型|限制|是否必填|说明|
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
```json
{
"fun": "rtStopKpSignIn",
"dataTag":"1"
}
```
##### rtSetKpLoginAllowed
- **主题**:/client/\${baseSN}/send
- **功能描述**:实时PIN绑定授权,可取消授权
- **参数说明**
|参数名|类型|限制|是否必填|说明|
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
|data|object|-|是|传递参数的对象|
|+keySn|string|-|是|键盘SN|
|+state|int|-|是|1-授权成功
2-授权失败
3-解除已授权|
```json
{
"fun": "rtSetKpLoginAllowed",
"dataTag":"1",
"data":{
"keySn":"1479824643",
"state":1
}
}
```
#### 事件
##### [sEvtStateCode](#sevtstatecode)
发送指令后返回接收状态
##### fEvtKpSignIn
- **主题**:/basestation/\${baseSN}/receive
- **功能描述**:返回键盘提交签到信息
- **参数说明**
|参数名|类型|限制|非空|说明|
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
|data|array|-|是|传送参数的对象数组|
|++keySn|string||是|键盘SN|
|++keyValue|string||是|键盘提交的按键值|
|++keyTime|double||是|答题时间,从启动开始计算,单位秒|
```json
{
"fun": "fEvtKpSignIn",
"dataTag":"1",
"data": [{
"keySn": "1234567890",
"keyValue":"1004",
"keyTime":30.2
},
{
"keySn": "1234567891",
"keyValue":"1003",
"keyTime":32.5
}
]
}
```
##### fEvtKpLoginAllowed
- **主题**:/basestation/\${baseSN}/receive
- **功能描述**:返回键盘授权状态
- **参数说明**
|参数名|类型|限制|非空|说明|
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
|data|object|-|是|传送参数的对象|
|+keySn|string||是|键盘SN|
|+state|string||是|0-执行成功
1-执行失败|
```json
{
"fun": "fEvtKpLoginAllowed",
"dataTag":"1",
"data": {
"keySn":"1479824643",
"state":"0"
}
}
```
## 按键反馈
### 判断题
#### 方法
##### startQATrueFalse
- **主题**:/client/\${baseSN}/send
- **功能描述**:启动判断题答题
- **参数说明**
|参数名|类型|限制|是否必填|说明|
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
|data|object|-|是|传送参数的对象|
|+keySns|array||是|指定的键盘SN数组,空数组表示全部在线键盘|
|+mode|int||是|1 - True/False 对/错
2 - Yes/No 是/否
3 - √/×|
|+allowModify|int||是|0 - 不允许修改
1 - 允许修改|
|+tip|string||否|提示的标题,长度不超过16字符|
```json
{
"fun": "startQATrueFalse",
"dataTag":"1",
"data":{
"keySns":[],
"mode":1,
"allowModify":1,
"tip":"请判断对错"
}
}
```
##### stopQATrueFalse
- **主题**:/client/\${baseSN}/send
- **功能描述**:停止判断题答题
- **参数说明**
|参数名|类型|限制|是否必填|说明|
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
```json
{
"fun": "stopQATrueFalse",
"dataTag":"1"
}
```
#### 事件
##### [sEvtStateCode](#sevtstatecode)
发送指令后返回接收状态
##### fEvtQATrueFalse
- **主题**:/basestation/\${baseSN}/receive
- **功能描述**:返回键盘提交答题信息
- **参数说明**
|参数名|类型|限制|非空|说明|
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
|data|array|-|是|传送参数的对象数组|
|++keySn|string||是|键盘SN|
|++keyValue|string||是|键盘提交的按键值
1-对
2-错|
|++keyTime|double||是|答题时间,从启动开始计算,单位秒|
```json
{
"fun": "fEvtQATrueFalse",
"dataTag":"1",
"data": [{
"keySn": "1234567890",
"keyValue":"1",
"keyTime":30.2
}
]
}
```
### 选择题
#### 方法
##### startQAChoice
- **主题**:/client/\${baseSN}/send
- **功能描述**:启动选择题答题
- **参数说明**
|参数名|类型|限制|是否必填|说明|
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
|data|object|-|是|传送参数的对象|
|+keySns|array||是|指定的键盘SN数组,空数组表示全部在线键盘|
|+mode|int||是|显示模式
1:显示字母(默认值) 2:显示数字 |
|+lessMode|int||是|迫选模式
0:可缺选(默认值) 1:不可缺选2:允许重复输入3:允许重复输入且不可缺选 |
|+options|int||是|选项数量,1≤M≤10(默认值4)|
|+optionalN|int||是|可选项个数,1≤N≤M(默认值1)|
|+allowModify|int||是|修改模式
0 - 不允许修改
1 - 允许修改|
|+tip|string||否|提示的标题,长度不超过16字符|
```json
{
"fun": "startQAChoice",
"dataTag":"1",
"data":{
"keySns":[],
"mode": 1,
"lessMode": 0,
"options": 4,
"optionalN": 1,
"allowModify":1,
"tip":"请选择"
}
}
```
##### stopQAChoice
- **主题**:/client/\${baseSN}/send
- **功能描述**:停止选择题答题
- **参数说明**
|参数名|类型|限制|是否必填|说明|
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
```json
{
"fun": "stopQAChoice",
"dataTag":"1"
}
```
#### 事件
##### [sEvtStateCode](#sevtstatecode)
发送指令后返回接收状态
##### fEvtQAChoice
- **主题**:/basestation/\${baseSN}/receive
- **功能描述**:返回键盘提交答题信息
- **参数说明**
|参数名|类型|限制|非空|说明|
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
|data|array|-|是|传送参数的对象数组|
|++keySn|string||是|键盘SN|
|++keyValue|string||是|键盘提交的按键值|
|++keyTime|double||是|答题时间,从启动开始计算,单位秒|
```json
{
"fun": "fEvtQAChoice",
"dataTag":"1",
"data": [{
"keySn": "1234567890",
"keyValue":"A",
"keyTime":3.2
}]
}
```
### 数字题
#### 方法
##### startQANum
- **主题**:/client/\${baseSN}/send
- **功能描述**:启动数字题答题
- **参数说明**
|参数名|类型|限制|是否必填|说明|
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
|data|object|-|是|传送参数的对象|
|+keySns|array||是|指定的键盘SN数组,空数组表示全部在线键盘|
|+mode|int||是|模式
0:无规则 (S6最多16位,T2最多14位)
1:带小数位上下限(T2不支持)|
|+digits|int||是|小数位数,范围0-2,mode=1时有效
|+numMin|int||是|可输入下限,mode=1有效,范围0-100|
|+numMax|int||是|可输入上限,mode=1有效,范围0-100|
|+allowModify|int||是|修改模式
0 - 不允许修改
1 - 允许修改|
|+tip|string||否|提示的标题,长度不超过16字符|
```json
{
"fun": "startQANum",
"dataTag":"1",
"data":{
"keySns":[],
"mode": 1,
"digits": 1,
"numMin": 0,
"numMax": 100,
"allowModify":1,
"tip":"请输入数字"
}
}
```
##### stopQANum
- **主题**:/client/\${baseSN}/send
- **功能描述**:停止数字题答题
- **参数说明**
|参数名|类型|限制|是否必填|说明|
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
```json
{
"fun": "stopQANum",
"dataTag":"1"
}
```
#### 事件
##### [sEvtStateCode](#sevtstatecode)
发送指令后返回接收状态
##### fEvtQANum
- **主题**:/basestation/\${baseSN}/receive
- **功能描述**:返回键盘提交答题信息
- **参数说明**
|参数名|类型|限制|非空|说明|
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
|data|array|-|是|传送参数的对象数组|
|++keySn|string||是|键盘SN|
|++keyValue|string||是|键盘提交的按键值|
|++keyTime|double||是|答题时间,从启动开始计算,单位秒|
```json
{
"fun": "fEvtQANum",
"dataTag":"1",
"data": {
"keySn": "1234567890",
"keyValue":"10",
"keyTime":3.2
}
}
```
### 抢答题
#### 方法
##### startQAQuicker
- **主题**:/client/\${baseSN}/send
- **功能描述**:启动抢答题答题
- **参数说明**
|参数名|类型|限制|是否必填|说明|
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
|data|object|-|是|传送参数的对象|
|+keySns|array||是|指定的键盘SN数组,空数组表示全部在线键盘|
|+mode|int||是|模式
0:普通抢答|
|+allowModify|int||是|修改模式
0 - 不允许修改
1 - 允许修改|
|+tip|string||否|提示的标题,长度不超过16字符|
```json
{
"fun": "startQAQuicker",
"dataTag":"1",
"data":{
"keySns":[],
"mode": 0,
"allowModify":1,
"tip":"请按键抢答"
}
}
```
##### stopQAQuicker
- **主题**:/client/\${baseSN}/send
- **功能描述**:停止抢答答题
- **参数说明**
|参数名|类型|限制|是否必填|说明|
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
```json
{
"fun": "stopQAQuicker",
"dataTag":"1"
}
```
#### 事件
##### [sEvtStateCode](#sevtstatecode)
发送指令后返回接收状态
##### fEvtQAQuicker
- **主题**:/basestation/\${baseSN}/receive
- **功能描述**:返回键盘提交答题信息
- **参数说明**
|参数名|类型|限制|非空|说明|
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
|data|array|-|是|传送参数的对象数组|
|++keySn|string||是|键盘SN|
|++keyValue|string||是|键盘提交的按键值|
|++keyTime|double||是|答题时间,从启动开始计算,单位秒|
```json
{
"fun": "fEvtQAQuicker",
"dataTag":"1",
"data": [{
"keySn": "1234567890",
"keyValue":"1",
"keyTime":3.2
}]
}
```
## 在线测验
### 标准测验
#### 方法
##### startKpExam
- **主题**:/client/\${baseSN}/send
- **功能描述**:启动标准测验
- **参数说明**
|参数名|类型|限制|是否必填|说明|
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
|data|object|-|是|传送参数的对象|
|+examNo|int||是|0-9999
=0,新的测验
>0时,与上次启动卷号一致继续测验,不一致进入新的测验|
|+mode|int||是|显示模式
0-不显示开头
1-显示“Q”开头
2-显示“题”开头|
|+questions|array||是|题目详情|
|++symbol | string||是 | 题号前缀,可为空 |
|++quesType | int||是| 题目类型
1:单选
2:多选(排序)
3:数字
4:判断 |
|++option |int||是 |选项数目
quesType = 1 有效。
quesType = 2 有效。
此项缺省时 默认4;
范围:1-10。|
|++startNo | int||是| 起始题号 |
|++count | int||是| 题目数量 |
```json
//自定义题号
{
"fun": "startKpExam",
"dataTag":"1",
"data":{
"mode": 0,
"examNo": 1,
"questions": [{
//题号1-1-1 到1-1-10 共10题单选
"symbol": "1-1-",
"quesType": 1,
"startNo": 1,
"count":10
}, {
//题号2-2和2-3共两题 多选题,5个选项
"symbol": "2-",
"quesType": 2,
"option": 5,
"startNo": 2,
"count":2
}, {
//题号3-1和3-2共两道数字题
"symbol": "3-",
"quesType": 3,
"startNo": 1,
"count":2
}, {
//题号4和5 ,判断题
"symbol": "",
"quesType": 4,
"startNo": 4,
"count":2
}]
}
}
//显示Q开头
{
"fun": "startKpExam",
"dataTag":"1",
"data":{
"mode": 1,
"examNo": 1,
"questions": [{
//Q1-Q20,单选题
"symbol": "",
"quesType": 1,
"startNo": 1,
"count":20
}]
}
}
//显示题开头
{
"fun": "startKpExam",
"dataTag":"1",
"data":{
"mode": 2,
"examNo": 1,
"questions": [{
//题1-题20,单选题
"symbol": "",
"quesType": 1,
"startNo": 1,
"count":20
}]
}
}
```
##### stopKpExam
- **主题**:/client/\${baseSN}/send
- **功能描述**:停止标准测验
- **参数说明**
|参数名|类型|限制|是否必填|说明|
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
```json
{
"fun": "stopKpExam",
"dataTag":"1"
}
```
##### rtKpAllowEdited
- **主题**:/client/\${baseSN}/send
- **功能描述**:键盘键盘后,允许键盘修改答案
- **参数说明**
|参数名|类型|限制|是否必填|说明|
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
|data|object|-|是|传送参数的对象|
|+keySns|array||是|指定的键盘SN数组,空数组表示全部在线键盘|
```json
{
"fun": "rtKpAllowEdited",
"dataTag":"1",
"data":{
"keySns":["1234567890","1234567891"]
}
}
```
#### 事件
##### [sEvtStateCode](#sevtstatecode)
发送指令后返回接收状态
##### fEvtKpExam
- **主题**:/basestation/\${baseSN}/receive
- **功能描述**:返回键盘提交答题信息
- **参数说明**
|参数名|类型|限制|非空|说明|
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
|data|array|-|是|传送参数的对象数组|
|++keySn|string||是|键盘SN|
|++keyValue|string||是|键盘提交的按键值,1:A;2:B表示第1题提交A,第二题提交B|
|++keyTime|double||是|答题时间,从启动开始计算,单位秒|
```json
{
"fun": "fEvtKpExam",
"dataTag":"1",
"data": [{
"keySn": "1234567890",
"keyValue":"1:A;2:B",
"keyTime":3.2
},
{
"keySn": "1234567891",
"keyValue":"1:B;2:B",
"keyTime":3.5
}
]
}
```
##### fEvtFinalSubmit
- **主题**:/basestation/\${baseSN}/receive
- **功能描述**:返回键盘手动交卷标识
- **参数说明**
|参数名|类型|限制|非空|说明|
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
|data|object|-|是|传送参数的对象数组|
|++keySn|string||是|键盘SN|
|++keyValue|string||是|0 - 未提交(修改键盘运行提交时上报)
1 - 已交卷|
|++keyTime|double||是|提交时间,从启动开始计算,单位秒|
```json
{
"fun": "fEvtFinalSubmit",
"dataTag":"1",
"data": [{
"keySn": "1234567890",
"keyValue":"1",
"keyTime":3.2
}]
}
```