# SunVote B200W MQTT通讯协议 ## MQTT服务器准备 MQTT服务器要求: 厂家使用EMQX 进行测试 能够正常收发MQTT数据。 服务器的性能参数由业务决定。 域名: 公网域名或ip或者基站所处局域网ip。 MQTT服务器配置结果检查 使用MQTT.FX客户端,配置域名,端口,用户名和密码信息,然后连接,如果提示连接成功,则表示MQTT服务器可用。基站clientid 是基站编号。 ![](img/mqtt_2.png) # 功能说明 ## 主题说明 \${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 }] } ```