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 指令事件 调用对应指令后返回

数据格式约定

  {
    "fun":"xxx", 
    "dataTag":"xxx", 
    "data":{    
       //内容
    }
  }
参数 说明 约束
fun 指令或事件名称
dataTag 数据标签,用于对应收发数据 长度不超过4,可为0-9a-zA-Z的组合
data 数据内容 对象或者数组,可为空

注意:基站接收指令数据单次不超过2K长度,在指定键盘发送指令时,如果指令长度超出限制,建议将指令进行拆分,分次发送,如果是所有键盘执行的指令,可将keySns设为空数组不使用指定键盘的模式

功能速查一览表

基站管理

功能归类 功能 API指令 指令/系统事件
基站连接 - 获取在线基站 主动获取在线基站信息
不确定基站SN时
getBsOnlineState fEvtBsOnlineState
基站连接 - 主动获取状态 主动获取基站连接状态 getBsConnectState sEvtBsConnectState
基站连接 - 自动获取状态 基站连接变化系统通知 - sEvtBsConnectState
基站授时 对基站授时用于校准时间 timeSync sEvtStateCode
键盘上线通知 单个键盘上线系统通知 - sEvtBsKpOnlineMsg
识别设置 - 基站型号 读取基站型号 getBsModel fEvtBsModel
识别设置 - 固件版本 获取基站固件版本 getBsFWVersion fEvtBsFWVersion
组网设置 - 配对码 获取基站配对码 getBsPairCode fEvtBsPairCode
组网设置 - 刷卡配对状态 获取刷卡配对状态 getBsNfcLogin fEvtBsNfcLogin
设置刷卡配对状态 setBsNfcLogin fEvtBsNfcLogin
组网设置 - 工作信道 获取基站工作信道 getBsChannel fEvtBsChannel
设置基站工作信道 setBsChannel fEvtBsChannel
登录设置 - 登录名称 获取基站登录名称 getBsSSID fEvtBsSSID
设置基站登录名称 setBsSSID fEvtBsSSID
键盘统一设置 - 键盘语言 获取键盘语言 getBsKpLanguage fEvtBsKpLanguage
设置键盘语言 setBsKpLanguage fEvtBsKpLanguage
配对模式 - 快速配对 启动基站快速配对 startBsFastPair sEvtStateCode
sEvtBsKpOnlineMsg
停止基站快速配对 stopBsFastPair sEvtStateCode
白名单模式 - 白名单管理 获取白名单 getBsWhitelist fEvtBsWhitelist
设置白名单 setBsWhitelist sEvtStateCode
fEvtSetBsWhitelist
清空白名单 clearBsWhitelist sEvtStateCode
fEvtBsWhitelist
增加白名单 addBsWhitelist sEvtStateCode
fEvtAddBsWhitelist
fEvtBsWhitelist
删除白名单 delBsWhitelist sEvtStateCode
fEvtDelBsWhitelist
fEvtBsWhitelist
网络设置 - TCP/IP参数 获取TCP/IP参数 getBsTcpipParams fEvtBsTcpipParams
设置TCP/IP参数 setBsTcpipParams fEvtBsTcpipParams
网络设置 - MQTT参数 获取MQTT参数 getBsMqttParams fEvtBsMqttParams
设置MQTT参数 setBsMqttParams fEvtBsMqttParams

键盘管理

功能归类 功能 API指令 指令事件
交互设置 - 用户实时提示信息 实时设置提示反馈信息 rtSetKpUserPrompt sEvtStateCode
fEvtSetKpUserPrompt
在线状态获取 开启扫描在线键盘 startGetKpOnline sEvtStateCode
fEvtKpOnlineMsg
停止扫描在线键盘 stopGetKpOnline sEvtStateCode
维护功能 - 遥控功能 遥控键盘休眠 remoteKpSleep sEvtStateCode

绑定

功能归类 功能 API指令 指令事件
无线绑定 设置绑定信息到键盘 rtSetKpBindingInfo sEvtStateCode
fEvtKpBindingInfo
清除键盘绑定信息 clearKpBindingInfo sEvtStateCode
fEvtClearKpBindingInfo

签到

功能归类 功能 API指令 指令事件
同步签到 启动同步签到 startKpSignIn sEvtStateCode
fEvtKpSignIn
停止同步签到 stopKpSignIn sEvtStateCode
随时签到 启动随时签到 rtStartKpSignIn sEvtStateCode
fEvtKpSignIn
停止随时签到 rtStopKpSignIn sEvtStateCode
实时PIN签到授权 rtSetKpLoginAllowed sEvtStateCode
fEvtKpLoginAllowed

按键反馈

功能归类 功能 API指令 指令事件
判断题 启动判断题答题 startQATrueFalse sEvtStateCode
fEvtQATrueFalse
停止判断题答题 stopQATrueFalse sEvtStateCode
选择题 启动选择题答题 startQAChoice sEvtStateCode
fEvtQAChoice
停止选择题答题 stopQAChoice sEvtStateCode
数字题 启动数字题答题 startQANum sEvtStateCode
fEvtQANum
停止数字题答题 stopQANum sEvtStateCode
抢答题 启动抢答题答题 startQAQuicker sEvtStateCode
fEvtQAQuicker
停止抢答题答题 stopQAQuicker sEvtStateCode

在线测验

功能归类 功能 API指令 指令事件
标准测验 启动标准测验 startKpExam sEvtStateCode
fEvtKpExam
fEvtFinalSubmit
停止标准测验 stopKpExam sEvtStateCode
允许键盘提交后退回修改 rtAllowEdited sEvtStateCode
fEvtFinalSubmit

公共事件

sEvtBsConnectState

参数名 类型 限制 非空 说明
fun string - 事件类型
dataTag string - 数据包标识,不需要时可传空字符串
data object - 传送参数的对象
+baseModel int 基站的型号码
+modelName string 基站的型号名称
+state int 基站的连接状态
1-已连接
2-连接断开
+version string 基站固件版本
//连接成功
{
    "fun":"sEvtBsConnectState",
    "dataTag":"1",
    "data":{  
        "state":1,      
        "baseModel":218,
        "modelName":"B200",
        "version":"1.0.3"
    }
}
//连接断开
{
    "fun":"sEvtBsConnectState",
    "dataTag":"1",
    "data":{        
        "state":2
    }
}

sEvtBsChannelConflict

参数名 类型 限制 非空 说明
fun string - 事件名称
dataTag string - 数据包标识,不需要时可传空字符串
data object - 传送参数的对象
+value int 有冲突的信道
{
    "fun":"sEvtBsChannelConflict",
    "dataTag":"1",
    "data":{        
        "value":5   //信道5有多个基站使用
    }
}

sEvtBsNfcResults

参数名 类型 限制 非空 说明
fun string - 事件名称
dataTag string - 数据包标识,不需要时可传空字符串
data object - 传送参数的对象
+keySn string 刷卡的键盘SN
+value int 刷卡的状态
1-成功
2-失败
{
    "fun":"sEvtBsNfcResults",
    "dataTag":"1",  //不需要时可传空字符串
    "data":{ 
        "keySn":"1234567890",       
        "value":1   
    }
}

sEvtBsKpOnlineMsg

参数名 类型 限制 非空 说明
fun string - 事件名称
dataTag string - 数据包标识
data object - 传送参数的对象
+keySn string 键盘SN
+version string 键盘固件版本
+model int 键盘型号
{
    "fun":"sEvtBsKpOnlineMsg",
    "dataTag":"1",
    "data":{ 
        "keySn":"1234567890",
        "version":"1.0.0",
        "model":67
    }
}

sEvtStateCode

参数名 类型 限制 非空 说明
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
{
    "fun":"sEvtStateCode",
    "dataTag":"1",
    "data":{ 
        "funName":"startKpRollCall",
        "code":"20005"
    }
}

基站管理

基站连接

方法

getBsOnlineState
参数名 类型 限制 是否必填 说明
fun string - 固定指令名称
dataTag string - 数据包标识
{
  "fun":"getBsOnlineState",
  "dataTag":"1"
}
getBsConnectState
参数名 类型 限制 是否必填 说明
fun string - 固定指令名称
dataTag string - 数据包标识
{
  "fun":"getBsConnectState",
  "dataTag":"1"
}

事件

sEvtBsConnectState

参见基站连接变化系统通知

fEvtBsOnlineState
参数名 类型 限制 非空 说明
fun string - 事件类型
dataTag string - 数据包标识,不需要时可传空字符串
data object - 传送参数的对象
+baseModel int 基站的型号码
+modelName string 基站的型号名称
+version string 基站固件版本
+baseSN string 基站SN
//连接成功
{
    "fun":"fEvtBsOnlineState",
    "dataTag":"1",
    "data":{       
        "baseModel":218,
        "modelName":"B200",
        "version":"1.0.3",
        "baseSN":"2024041401"
    }
}

基站授时

方法

timeSync
参数名 类型 限制 是否必填 说明
fun string - 固定指令名称
dataTag string - 数据包标识
data object - 传送参数的对象
+timeStamp long 当前时间的时间戳
{
  "fun":"timeSync",
  "dataTag":"1",
  "data":{
      "timeStamp":1718247133290
  }
}

事件

sEvtStateCode

返回指令的接收状态

识别设置

方法

getBsModel
参数名 类型 限制 是否必填 说明
fun string - 指令名称
dataTag string - 数据包标识,可为空字符串
{
  "fun":"getBsModel",
  "dataTag":"1"
}
getBsFWVersion
参数名 类型 限制 是否必填 说明
fun string - 指令名称
dataTag string - 数据包标识,可为空字符串
{
  "fun":"getBsFWVersion",
  "dataTag":"1"
}

事件

fEvtBsSN
参数名 类型 限制 非空 说明
fun string - 事件名称
dataTag string - 数据包标识
data object - 传送参数的对象
+value string - 基站的出厂编码
{
    "fun":"fEvtBsSN",
    "dataTag":"1",
    "data":{
        "value":"2024041201"
    }
}
fEvtBsModel
参数名 类型 限制 是否必填 说明
fun string - 事件名称
dataTag string - 数据包标识
data object - 传送参数的对象
+value string - 基站的型号名称
{
    "fun":"fEvtBsModel",
    "dataTag":"1",
    "data":{
        "value":"B200"
    }
}
fEvtBsFWVersion
参数名 类型 限制 是否必填 说明
fun string - 事件名称
dataTag string - 数据包标识
data object - 传送参数的对象
+value string 基站的固件版本号
{
    "fun":"fEvtBsFWVersion",
    "dataTag":"1",
    "data":{
        "value":"1.0.3"
    }
}

组网设置

方法

getBsPairCode
参数名 类型 限制 是否必填 说明
fun string - 指令名称
dataTag string - 数据包标识,可为空字符串
{
  "fun":"getBsPairCode",
  "dataTag":"1"
}
getBsNfcLogin
参数名 类型 限制 是否必填 说明
fun string - 指令名称
dataTag string - 数据包标识,可为空字符串
{
  "fun":"getBsNfcLogin",
  "dataTag":"1"
}
setBsNfcLogin
参数名 类型 限制 是否必填 说明
fun string - 指令名称
dataTag string - 数据包标识,可为空字符串
data object - 传送参数的对象
+value string - 设置的基站刷卡配对状态
0-关闭刷卡配对
1-开启刷卡配对
{
  "fun":"setBsNfcLogin",
  "dataTag":"1",
  "data":{
    "value":"1"
  }
}
getBsChannel
参数名 类型 限制 是否必填 说明
fun string - 指令名称
dataTag string - 数据包标识,可为空字符串
{
  "fun":"getBsChannel",
  "dataTag":"1"
}
setBsChannel
参数名 类型 限制 是否必填 说明
fun string - 指令名称
dataTag string - 数据包标识,可为空字符串
data object - 传送参数的对象
+value string - 设置的基站信道,可设范围:1-80
{
  "fun":"setBsChannel",
  "dataTag":"1",
  "data":{
    "value":"23"
  }
}

事件

fEvtBsPairCode
参数名 类型 限制 非空 说明
fun string - 事件名称
dataTag string - 数据包标识,可传空字符串
data object - 传送参数的对象
+value string 基站的配对码
{
    "fun":"fEvtBsPairCode",
    "dataTag":"1",
    "data":{        
        "value":"123456"
    }
}
fEvtBsChannel
参数名 类型 限制 非空 说明
fun string - 事件名称
dataTag string - 数据包标识,可传空字符串
data object - 传送参数的对象
+value string 基站信道
{
    "fun":"fEvtBsChannel",
    "dataTag":"1",
    "data":{        
        "value":"5"
    }
}
fEvtBsNfcLogin
参数名 类型 限制 非空 说明
fun string - 事件名称
dataTag string - 数据包标识,可传空字符串
data object - 传送参数的对象
+value string 0-关闭 1-开启
{
    "fun":"fEvtBsNfcLogin",
    "dataTag":"1",
    "data":{        
        "value":"1"
    }
}

登录设置

方法

getBsSSID

获取基站登录名称

参数名 类型 限制 是否必填 说明
fun string - 固定指令名称
dataTag string - 数据包标识
{
  "fun":"getBsSSID",
  "dataTag":"1"
}
setBsSSID
参数名 类型 限制 是否必填 说明
fun string - 指令名称
dataTag string - 数据包标识,可为空字符串
data object - 传送参数的对象
+value string 设置的基站SSID,最长12字符
{
  "fun":"setBsSSID",
  "dataTag":"1",
  "data":{
    "value":"1901班"
  }
}

事件

fEvtBsSSID
参数名 类型 限制 非空 说明
fun string - 事件名称
dataTag string - 数据包标识,可传空字符串
data object - 传送参数的对象
+value string 基站名称
{
    "fun":"fEvtBsSSID",
    "dataTag":"1",
    "data":{        
        "value":"1901班"
    }
}

键盘统一设置

方法

getBsKpLanguage
参数名 类型 限制 是否必填 说明
fun string - 指令名称
dataTag string - 数据包标识,可为空字符串
{
  "fun":"getBsKpLanguage",
  "dataTag":"1"
}
setBsKpLanguage
参数名 类型 限制 是否必填 说明
fun string - 指令名称
dataTag string - 数据包标识,可为空字符串
data object - 传送参数的对象
+value string 设置键盘显示的语言
1-简体中文
2-英文
{
  "fun":"setBsKpLanguage",
  "dataTag":"1",
  "data":{
    "value":"1"
  }
}

事件

fEvtBsKpLanguage
参数名 类型 限制 非空 说明
fun string - 指令名称
dataTag string - 数据包标识,可为空字符串
data object - 传送参数的对象
+value string 设置键盘显示的语言
1-简体中文
2-英文
{
  "fun":"fEvtBsKpLanguage",
  "dataTag":"1",
  "data":{
    "value":"1"
  }
}

配对模式

方法

startBsFastPair
参数名 类型 限制 是否必填 说明
fun string - 指令名称
dataTag string - 数据包标识,可为空字符串
{
  "fun":"startBsFastPair",
  "dataTag":"1"
}
stopBsFastPair
参数名 类型 限制 是否必填 说明
fun string - 指令名称
dataTag string - 数据包标识,可为空字符串
{
  "fun":"stopBsFastPair",
  "dataTag":"1"
}

事件

sEvtStateCode

发送指令后返回此事件

sEvtBsKpOnlineMsg

键盘配对成功后在线返回此事件

白名单模式

方法

getBsWhitelist
参数名 类型 限制 是否必填 说明
fun string - 指令名称
dataTag string - 数据包标识,可为空字符串
{
  "fun":"getBsWhitelist",
  "dataTag":"1"
}
setBsWhitelist
参数名 类型 限制 是否必填 说明
fun string - 指令名称
dataTag string - 数据包标识,可为空字符串
data object - 传送参数的对象
+keySns array - 待写入的键盘SN数组,最多不超过200
键盘SN为10位数字
{
  "fun":"setBsWhitelist",
  "dataTag":"1",
  "data":{
    "keySns":["2024021001","2024021002","2024021003","2024021004"]
  }
}
clearBsWhitelist
参数名 类型 限制 是否必填 说明
fun string - 指令名称
dataTag string - 数据包标识,可为空字符串
{
  "fun":"clearBsWhitelist",
  "dataTag":"1"
}
addBsWhitelist
参数名 类型 限制 是否必填 说明
fun string - 指令名称
dataTag string - 数据包标识,可为空字符串
data object - 传送参数的对象
+keySns array - 待添加的键盘SN列表
键盘SN为10位数字
{
  "fun":"addBsWhitelist",
  "dataTag":"1",
  "data":{
    "keySns":["2024021001"]
  }
}
delBsWhitelist
参数名 类型 限制 是否必填 说明
fun string - 指令名称
dataTag string - 数据包标识,可为空字符串
data object - 传送参数的对象
+keySns array - 待删除的键盘SN列表
键盘SN为10位数字
{
  "fun":"delBsWhitelist",
  "dataTag":"1",
  "data":{
    "keySns":["2024021001"]
  }
}

事件

sEvtStateCode

发送指令后返回此事件

fEvtBsWhitelist
参数名 类型 限制 非空 说明
fun string - 指令名称
dataTag string - 数据包标识,可为空字符串
data object - 传送参数的对象
+keySns array 基站当前的白名单列表
{
  "fun":"fEvtBsWhitelist",
  "dataTag":"1",
  "data":{
    "keySns":["2024021001","2024021002","2024021003","2024021004"]
  }
}
fEvtSetBsWhitelist
参数名 类型 限制 非空 说明
fun string - 指令名称
dataTag string - 数据包标识,可为空字符串
data array - 传送参数的对象数组
++keySns array 键盘SN数组
++state int 键盘SN的写入状态
0-写入成功
1-写入失败
{
  "fun":"fEvtSetBsWhitelist",
  "dataTag":"1",
  "data":[{
    "keySns":["2024021001","2024021002"],
    "state":0
  },{
    "keySns":["1211"],
    "state":1
  }]
}
fEvtAddBsWhitelist
参数名 类型 限制 非空 说明
fun string - 指令名称
dataTag string - 数据包标识,可为空字符串
data array - 传送参数的对象数组
++keySns array 键盘SN数组
++state int 键盘的增加状态
0-增加成功
1-增加失败
{
  "fun":"fEvtAddBsWhitelist",
  "dataTag":"1",
  "data":[{
    "keySns":["2024021001","2024021002"],
    "state":0
  },{
    "keySns":["1211"],
    "state":1
  }]
}
fEvtDelBsWhitelist
参数名 类型 限制 非空 说明
fun string - 指令名称
dataTag string - 数据包标识,可为空字符串
data array - 传送参数的对象数组
++keySns array 键盘SN数组
++state int 键盘的删除状态
0-删除成功
1-删除失败
{
  "fun":"fEvtDelBsWhitelist",
  "dataTag":"1",
  "data":[{
    "keySns":["2024021002"],
    "state":0
  },{
    "keySns":["2024021001"],
    "state":1
  }]
}

网络参数设置

方法

getBsTcpipParams
参数名 类型 限制 是否必填 说明
fun string - 指令名称
dataTag string - 数据包标识,可为空字符串
{
  "fun":"getBsTcpipParams",
  "dataTag":"1"
}
setBsTcpipParams
参数名 类型 限制 是否必填 说明
fun string - 指令名称
dataTag string - 数据包标识,可为空字符串
data object - 传送参数的对象
+ip string IP地址
+mask string 子网掩码
+gateway string 网关地址
+ipAllocation int 基站IP获取方式
0 - 手动指定
1 - DHCP获取
{
  "fun":"setBsTcpipParams",
  "dataTag":"1",
  "data":{
    "ip":"192.168.0.10",
    "mask":"255.255.255.0",
    "gateway":"192.168.0.1",
    "ipAllocation":1
  }
}
getBsMqttParams
参数名 类型 限制 是否必填 说明
fun string - 指令名称
dataTag string - 数据包标识,可为空字符串
{
  "fun":"getBsMqttParams",
  "dataTag":"1"
}
setBsMqttParams
参数名 类型 限制 是否必填 说明
fun string - 指令名称
dataTag string - 数据包标识,可为空字符串
data object - 传送参数的对象
+server string 服务器IP地址
+port int 端口,默认1883
+userName string 连接服务器的用户名,可不设置
+password string 连接服务器的密码,可不设置
+interval int >=10 基站连接服务器失败后重连的间隔时长,单位秒
{
  "fun":"setBsMqttParams",
  "dataTag":"1",
  "data":{
    "server":"192.168.10.10",
    "port":1883,
    "userName":"",
    "password":"",
    "interval":30
  }
}

事件

fEvtBsTcpipParams
参数名 类型 限制 非空 说明
fun string - 指令名称
dataTag string - 数据包标识,可为空字符串
data object - 传送参数的对象
+mac string MAC地址
+ip string IP地址
+mask string 子网掩码
+gateway string 网关地址
+ipAllocation int 基站IP获取方式
0 - 手动指定
1 - DHCP获取
{
  "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
参数名 类型 限制 非空 说明
fun string - 指令名称
dataTag string - 数据包标识,可为空字符串
data object - 传送参数的对象
+server string 服务器地址,IP
+port int 端口,默认1883
+userName string 连接服务器的用户名,可不设置
+password string 连接服务器的密码,可不设置
+interval int >=10 基站连接服务器失败后重连的间隔时长,单位秒
{
  "fun":"fEvtBsMqttParams",
  "dataTag":"1",
  "data":{
    "server":"192.168.10.10",
    "port":1883,
    "userName":"",
    "password":"",
    "interval":30
  }
}

键盘管理

交互设置

方法

rtSetKpUserPrompt
参数名 类型 限制 是否必填 说明
fun string - 指令名称
dataTag string - 数据包标识,可为空字符串
data array - 传送参数的对象数组
++keySns array 指定的键盘SN数组,空数组表示全部在线键盘
注意:不允许空数组和指定SN数组混合使用
包含空数组默认为全部在线键盘,其他指定键盘无效
++info string 设置的反馈信息
不同键盘可设置不同反馈信息
//分别提示
{
  "fun": "rtSetKpUserPrompt",
  "dataTag":"1",
  "data": [
    {
      "keySns": ["1479824643","1479824645"],
      "info": "答对了"
    },
    {
      "keySns": ["1479824644"],
      "info": "答错了"
    }
  ]
}
//统一提示
{
  "fun": "rtSetKpUserPrompt",
  "dataTag":"1",
  "data": [
    {
      "keySns": [],
      "info": "答题结束"
    }
  ]
}

事件

sEvtStateCode

发送指令后返回接收状态

fEvtSetKpUserPrompt
参数名 类型 限制 非空 说明
fun string - 指令名称
dataTag string - 数据包标识,可为空字符串
data array - 传送参数的对象数组
++keySn string 设置提示语信息的键盘SN
++state string 设置的提示语是否成功
0 - 成功
1 - 失败
{
  "fun": "fEvtSetKpUserPrompt",
  "dataTag":"1",
  "data": [
    {
      "keySn": "1479824643",
      "state": "0"
    },
    {
      "keySn": "1479824645",
      "state": "0"
    },
    {
      "keySn": "1479824644",
      "state": "1"
    }
  ]
}

在线状态

方法

startGetKpOnline
参数名 类型 限制 是否必填 说明
fun string - 指令名称
dataTag string - 数据包标识,可为空字符串
{
  "fun": "startGetKpOnline",
  "dataTag":"1"
}
stopGetKpOnline
参数名 类型 限制 是否必填 说明
fun string - 指令名称
dataTag string - 数据包标识,可为空字符串
{
  "fun": "stopGetKpOnline",
  "dataTag":"1"
}

事件

sEvtStateCode

发送指令后返回此事件

fEvtKpOnlineMsg
参数名 类型 限制 非空 说明
fun string - 事件名称
dataTag string - 数据包标识
data object - 传送参数的对象
+keySn string 键盘SN
+version string 键盘固件版本
+model int 键盘型号
+voltage double 键盘电量
{
    "fun":"fEvtKpOnlineMsg",
    "dataTag":"1",
    "data":{ 
        "keySn":"1234567890",
        "version":"1.0.0",
        "model":67,
        "voltage":2.8
    }
}

维护功能

方法

remoteKpSleep
参数名 类型 限制 是否必填 说明
fun string - 指令名称
dataTag string - 数据包标识,可为空字符串
data object - 传送参数的对象数组
+keySns array 需要执行指令的键盘SN数组,空数组表示所有键盘
{
  "fun":"remoteKpSleep",
  "dataTag":"1",
  "data":{
    "keySns":["1479824644"]
  }
}

事件

sEvtStateCode

返回指令的接收状态

绑定

无线绑定

方法

rtSetKpBindingInfo
参数名 类型 限制 是否必填 说明
fun string - 指令名称
dataTag string - 数据包标识,可为空字符串
data array - 传送参数的对象数组,不可为空
++keySn string 需要设置绑定信息的键盘SN
++info string 设置的绑定信息,一般为学生姓名
最长48个字符,显示在键盘左上角
{
  "fun": "rtSetKpBindingInfo",
  "dataTag":"1",
  "data": [
    {
      "keySn": "1479824643",
      "info": "张三"
    },
    {
      "keySn": "1479824644",
      "info": "李四"
    }
  ]
}
clearKpBindingInfo
参数名 类型 限制 是否必填 说明
fun string - 指令名称
dataTag string - 数据包标识,可为空字符串
data object - 传送参数的对象数组
+keySns array 需要清除绑定信息键盘SN数组,
空数组表示清空所有键盘
{
  "fun": "clearKpBindingInfo",
  "dataTag":"1",
  "data": {
    "keySns":["1479824643","1479824644","1479824645"]
  }
}

事件

sEvtStateCode

发送指令后返回接收状态

fEvtKpBindingInfo
参数名 类型 限制 非空 说明
fun string - 指令名称
dataTag string - 数据包标识,可为空字符串
data array - 传送参数的对象数组
++keySn string 需要设置绑定信息的键盘SN
++state string 设置的绑定信息是否成功
0 - 成功
1 - 失败
{
  "fun": "fEvtKpBindingInfo",
  "dataTag":"1",
  "data": [
    {
      "keySn": "1479824643",
      "state": "0"
    },
    {
      "keySn": "1479824644",
      "state": "1"
    }
  ]
}
fEvtClearKpBindingInfo
参数名 类型 限制 非空 说明
fun string - 指令名称
dataTag string - 数据包标识,可为空字符串
data object - 传送参数的对象
+state string 设置的绑定信息是否成功
0 - 成功
1 - 失败
{
  "fun": "fEvtClearKpBindingInfo",
  "dataTag":"1",
  "data": {
    "state": "0"
  }
}

签到

同步签到

方法

startKpSignIn
参数名 类型 限制 是否必填 说明
fun string - 指令名称
dataTag string - 数据包标识,可为空字符串
data object - 传递参数的对象
+mode int - 签到模式
1-按键签到,可指定按键
2-PIN码签到,可指定PIN码长度
+allowModify int - 修改模式
0-不可修改
1-可以修改(默认值)
+pinLen int - 可输入pin码的最大长度 1≤N≤14
+keyValue int - 指定按键键值
0: 未指定(OK键签到)
1-9: 按键1-9
10: 按键0
11: 上键
12: 下键
13: OK键
14: ESC键
15: Menu键
+tipTitle string - 提示标题,长度最多不超过16个字节
//按键签到
{
  "fun":"startKpSignIn",
  "dataTag":"1",
  "data":{
    "mode":1,
    "allowModify":1,
    "keyValue":5,
    "tip":"请按5键签到"
  }
}

//pin签到
{
  "fun":"startKpSignIn",
  "dataTag":"1",
  "data":{
    "mode":2,
    "allowModify":1,
    "pinLen":6,
    "tip":"请输入PIN码签到"
  }
}
stopKpSignIn
参数名 类型 限制 是否必填 说明
fun string - 指令名称
dataTag string - 数据包标识,可为空字符串
{
  "fun":"stopKpSignIn",
  "dataTag":"1"
}

事件

sEvtStateCode

发送指令后返回接收状态

fEvtKpSignIn

返回键盘提交的签到数据

随时签到

方法

rtStartKpSignIn
参数名 类型 限制 是否必填 说明
fun string - 指令名称
dataTag string - 数据包标识,可为空字符串
data object - 传递参数的对象
+mode int - 签到模式
2-PIN码签到,输入pin码后由应用程序决定是否授权
{
  "fun": "rtStartKpSignIn",
  "dataTag":"1",
  "data":{
    "mode":2
  }
}
rtStopKpSignIn
参数名 类型 限制 是否必填 说明
fun string - 指令名称
dataTag string - 数据包标识,可为空字符串
{
  "fun": "rtStopKpSignIn",
  "dataTag":"1"
}
rtSetKpLoginAllowed
参数名 类型 限制 是否必填 说明
fun string - 指令名称
dataTag string - 数据包标识,可为空字符串
data object - 传递参数的对象
+keySn string - 键盘SN
+state int - 1-授权成功
2-授权失败
3-解除已授权
{
  "fun": "rtSetKpLoginAllowed",
  "dataTag":"1",
  "data":{
    "keySn":"1479824643",
    "state":1
  }
}

事件

sEvtStateCode

发送指令后返回接收状态

fEvtKpSignIn
参数名 类型 限制 非空 说明
fun string - 指令名称
dataTag string - 数据包标识,可为空字符串
data array - 传送参数的对象数组
++keySn string 键盘SN
++keyValue string 键盘提交的按键值
++keyTime double 答题时间,从启动开始计算,单位秒
{
  "fun": "fEvtKpSignIn",
  "dataTag":"1",
  "data": [{
      "keySn": "1234567890",
      "keyValue":"1004",
      "keyTime":30.2
    },
    {
      "keySn": "1234567891",
      "keyValue":"1003",
      "keyTime":32.5
    }
  ]
}
fEvtKpLoginAllowed
参数名 类型 限制 非空 说明
fun string - 指令名称
dataTag string - 数据包标识,可为空字符串
data object - 传送参数的对象
+keySn string 键盘SN
+state string 0-执行成功
1-执行失败
{
  "fun": "fEvtKpLoginAllowed",
  "dataTag":"1",
  "data": {
      "keySn":"1479824643",
      "state":"0"
    }
}

按键反馈

判断题

方法

startQATrueFalse
参数名 类型 限制 是否必填 说明
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字符
{
  "fun": "startQATrueFalse",
  "dataTag":"1",
  "data":{
    "keySns":[],
    "mode":1,
    "allowModify":1,
    "tip":"请判断对错"
  }
}
stopQATrueFalse
参数名 类型 限制 是否必填 说明
fun string - 指令名称
dataTag string - 数据包标识,可为空字符串
{
  "fun": "stopQATrueFalse",
  "dataTag":"1"
}

事件

sEvtStateCode

发送指令后返回接收状态

fEvtQATrueFalse
参数名 类型 限制 非空 说明
fun string - 指令名称
dataTag string - 数据包标识,可为空字符串
data array - 传送参数的对象数组
++keySn string 键盘SN
++keyValue string 键盘提交的按键值
1-对
2-错
++keyTime double 答题时间,从启动开始计算,单位秒
{
  "fun": "fEvtQATrueFalse",
  "dataTag":"1",
  "data": [{
      "keySn": "1234567890",
      "keyValue":"1",
      "keyTime":30.2
    }
  ]
}

选择题

方法

startQAChoice
参数名 类型 限制 是否必填 说明
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字符
{
  "fun": "startQAChoice",
  "dataTag":"1",
  "data":{
    "keySns":[],
    "mode": 1,
    "lessMode": 0,
    "options": 4,
    "optionalN": 1,
    "allowModify":1,
    "tip":"请选择"
  }
}
stopQAChoice
参数名 类型 限制 是否必填 说明
fun string - 指令名称
dataTag string - 数据包标识,可为空字符串
{
  "fun": "stopQAChoice",
  "dataTag":"1"
}

事件

sEvtStateCode

发送指令后返回接收状态

fEvtQAChoice
参数名 类型 限制 非空 说明
fun string - 指令名称
dataTag string - 数据包标识,可为空字符串
data array - 传送参数的对象数组
++keySn string 键盘SN
++keyValue string 键盘提交的按键值
++keyTime double 答题时间,从启动开始计算,单位秒
{
  "fun": "fEvtQAChoice",
  "dataTag":"1",
  "data": [{
      "keySn": "1234567890",
      "keyValue":"A",
      "keyTime":3.2
    }]
}

数字题

方法

startQANum
参数名 类型 限制 是否必填 说明
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字符
{
  "fun": "startQANum",
  "dataTag":"1",
  "data":{
    "keySns":[],
    "mode": 1,
    "digits": 1,
    "numMin": 0,
    "numMax": 100,
    "allowModify":1,
    "tip":"请输入数字"
  }
}
stopQANum
参数名 类型 限制 是否必填 说明
fun string - 指令名称
dataTag string - 数据包标识,可为空字符串
{
  "fun": "stopQANum",
  "dataTag":"1"
}

事件

sEvtStateCode

发送指令后返回接收状态

fEvtQANum
参数名 类型 限制 非空 说明
fun string - 指令名称
dataTag string - 数据包标识,可为空字符串
data array - 传送参数的对象数组
++keySn string 键盘SN
++keyValue string 键盘提交的按键值
++keyTime double 答题时间,从启动开始计算,单位秒
{
  "fun": "fEvtQANum",
  "dataTag":"1",
  "data":[{
      "keySn": "1234567890",
      "keyValue":"10",
      "keyTime":3.2
    }]
}

抢答题

方法

startQAQuicker
参数名 类型 限制 是否必填 说明
fun string - 指令名称
dataTag string - 数据包标识,可为空字符串
data object - 传送参数的对象
+keySns array 指定的键盘SN数组,空数组表示全部在线键盘
+mode int 模式
0:普通抢答
+allowModify int 修改模式
0 - 不允许修改
1 - 允许修改
+tip string 提示的标题,长度不超过16字符
{
  "fun": "startQAQuicker",
  "dataTag":"1",
  "data":{
    "keySns":[],
    "mode": 0,
    "allowModify":1,
    "tip":"请按键抢答"
  }
}
stopQAQuicker
参数名 类型 限制 是否必填 说明
fun string - 指令名称
dataTag string - 数据包标识,可为空字符串
{
  "fun": "stopQAQuicker",
  "dataTag":"1"
}

事件

sEvtStateCode

发送指令后返回接收状态

fEvtQAQuicker
参数名 类型 限制 非空 说明
fun string - 指令名称
dataTag string - 数据包标识,可为空字符串
data array - 传送参数的对象数组
++keySn string 键盘SN
++keyValue string 键盘提交的按键值
++keyTime double 答题时间,从启动开始计算,单位秒
{
  "fun": "fEvtQAQuicker",
  "dataTag":"1",
  "data": [{
      "keySn": "1234567890",
      "keyValue":"1",
      "keyTime":3.2
    }]
}

在线测验

标准测验

方法

startKpExam
参数名 类型 限制 是否必填 说明
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 题目数量

常用样例:一级题型 + 显示“Q”开头, 单一题型,全单选题共10题

{
  "fun":"startKpExam",
  "dataTag":"1",
  "data":{
    "mode": 1,
    "examNo": 1,
    "questions": [{          
        "quesType": 1,  //单选题
        "startNo": 1,  //题号从1开始
        "count":10  //连续10题
      }]
  }
}

指令样例:一级题型 + 不显示开头,总题数6题

{
  "fun":"startKpExam",
  "dataTag":"1",
  "data":{
    "mode": 0,
    "examNo": 1,
    //第1、2题单选题,第3、4题多选题,第5题数字,第6题判断,共6题
    "questions": [{ 
        "quesType": 1,  //单选题
        "startNo": 1,  //题号从1开始
        "count":2  //连续2题
      },{
        "quesType": 2,  //多选题
        "startNo": 3,  //题号从3开始
        "count":2,  //连续2题
        "option":5   
      },{
        "quesType": 1,  //数字题
        "startNo": 5,  //题号从5开始
        "count":1  //连续1题
      },{
        "quesType": 4,  //判断题
        "startNo": 6,  //题号从6开始
        "count":1  //连续1题
      }]
  }
}

指令样例:二级题型 + 不显示开头,总题数6题

{
  "fun":"startKpExam",
  "dataTag":"1",
  "data":{
    "mode": 0,
    "examNo": 1,
    //第1-1、1-2题单选题,第2-1、2-2题多选题,第3-1题数字,第4-1题判断,共6题
    "questions": [{        
        "symbol": "1-",  
        "quesType": 1,  //单选题
        "startNo": 1,  //题号从1-1开始
        "count":2  //连续2题
      },{
        "symbol": "2-", 
        "quesType": 2,  //多选题
        "startNo": 1,  //题号从2-1开始
        "count":2,  //连续2题
        "option":5 
      },{
        "symbol": "3-",
        "quesType": 3,  //数字题
        "startNo": 1,  //题号从3-1开始
        "count":1  //连续1题
      },{
        "symbol": "4-",
        "quesType": 4,  //判断题
        "startNo": 1,  //题号从4-1开始
        "count":1  //连续1题
      }]
  }
}

指令样例:三级题型 + 不显示开头,总题数6题

{
  "fun":"startKpExam",
  "dataTag":"1",
  "data":{
    "mode": 0,
    "examNo": 1,
    //第1-1-1、1-1-2题单选题,第1-2-1、1-2-2题多选题,第2-1-1题数字,第3-1-1题判断,共6题
    "questions": [{        
        "symbol": "1-1-",  
        "quesType": 1,  //单选题
        "startNo": 1,  //题号从1-1-1开始
        "count":2  //连续2题
      },{
        "symbol": "1-2-", 
        "quesType": 2,  //多选题
        "startNo": 1,  //题号从1-2-1开始
        "count":2,  //连续2题
        "option":5 
      },{
        "symbol": "2-1-",
        "quesType": 3,  //数字题
        "startNo": 1,  //题号从2-1-1开始
        "count":1  //连续1题
      },{
        "symbol": "3-1-",
        "quesType": 4,  //判断题
        "startNo": 1,  //题号从3-1-1开始
        "count":1  //连续1题
      }]
  }
}

指令样例:一级题型 + 显示“Q”开头, 共6题

{
  "fun":"startKpExam",
  "dataTag":"1",
  "data":{
    "mode": 1,
    "examNo": 1,
    "questions": [{  
        "quesType": 1,  //单选题
        "startNo": 1,  //题号从1开始
        "count":2  //连续2题
      },{
        "quesType": 2,  //多选题
        "startNo": 3,  //题号从3开始
        "count":2,  //连续2题
        "option":5   
      },{
        "quesType": 1,  //数字题
        "startNo": 5,  //题号从5开始
        "count":1  //连续1题
      },{
        "quesType": 4,  //判断题
        "startNo": 6,  //题号从6开始
        "count":1  //连续1题
      }]
  }
}

指令样例:一级题型 + 显示“题”开头, 共6题

{
  "fun": "startKpExam",
  "dataTag":"1",
  "data":{
    "mode": 2,
    "examNo": 1,
    "questions": [{ 
        "quesType": 1,  //单选题
        "startNo": 1,  //题号从1开始
        "count":2  //连续2题
      },{
        "quesType": 2,  //多选题
        "startNo": 3,  //题号从3开始
        "count":2,  //连续2题
        "option":5   
      },{
        "quesType": 1,  //数字题
        "startNo": 5,  //题号从5开始
        "count":1  //连续1题
      },{
        "quesType": 4,  //判断题
        "startNo": 6,  //题号从6开始
        "count":1  //连续1题
      }]
  }
}
stopKpExam
参数名 类型 限制 是否必填 说明
fun string - 指令名称
dataTag string - 数据包标识,可为空字符串
{
  "fun": "stopKpExam",
  "dataTag":"1"
}
rtKpAllowEdited
参数名 类型 限制 是否必填 说明
fun string - 指令名称
dataTag string - 数据包标识,可为空字符串
data object - 传送参数的对象
+keySns array 指定的键盘SN数组,空数组表示全部在线键盘
{
  "fun": "rtKpAllowEdited",
  "dataTag":"1",
  "data":{
    "keySns":["1234567890","1234567891"]
  }
}

事件

sEvtStateCode

发送指令后返回接收状态

fEvtKpExam
参数名 类型 限制 非空 说明
fun string - 指令名称
dataTag string - 数据包标识,可为空字符串
data array - 传送参数的对象数组
++keySn string 键盘SN
++keyValue string 键盘提交的按键值,1:A;2:B表示第1题提交A,第二题提交B
++keyTime double 答题时间,从启动开始计算,单位秒
{
  "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
参数名 类型 限制 非空 说明
fun string - 指令名称
dataTag string - 数据包标识,可为空字符串
data array - 传送参数的对象数组
++keySn string 键盘SN
++keyValue string 0 - 未提交(提交完成后,允许键盘修改答案时上报)
1 - 已交卷
++keyTime double 提交时间,从启动开始计算,单位秒
{
  "fun": "fEvtFinalSubmit",
  "dataTag":"1",
  "data": [{
      "keySn": "1234567890",
      "keyValue":"1",
      "keyTime":3.2
    }]
}