中控设备对接协议
3.2.1服务器方式对接
通讯协议:MQTT
默认端口:1883,以实际设置为准
topic公共参数
参数 | 说明 |
---|---|
APPID | 应用ID,目前固定使用"lt123gh5623"。 |
DEVICEID | 设备ID,请在设备设置页面查询,见中控设置步骤 |
payload格式为JSON字符串
[中控设置]
下载中控搜索软件,点击下载。安装后打开程序,电脑右下角工具栏出现如下图标
鼠标右键,选择工具,出现如下界面
选择设备搜索。在设备搜索页面上网网卡选择与中控接入同一网络的网卡,点击开始搜索。
在搜索到的中控后选择中控配置,打开配置页面。
在配置页面中选择对接配置选项
第三方系统需要自行搭建MQTT服务器,将服务器信息填入上图页面表单中。启用开关需要打开。连接成功后,第三方系统需要实现如下对接接口:
时间同步
当中控连上上述配置好的mqtt服务器时,会发生以下时间同步请求
topic: /gatetway/[APPID]/[DEVICEID]/action/time/req
{
"action":"reqTime"
}
集控服务器需做如下回复:
topic: /gatetway/[APPID]/[DEVICEID]/action/time/resp
{
"action":"respTime",
"time":1639358897128 //服务器当前时间,毫秒级时间戳
}
设备控制
服务器发送如下主题指令控制设备:
topic: /gatetway/[APPID]/[DEVICEID]/action/device/ctrl
payload:
{
"action":"KEY",
"protocol":"SERIAL",
"params":{
}
}
参数 | 说明 |
---|---|
action | 指令key,对应取值见下表 |
protocol | 通讯方式,对应取值见下表 |
params | 指令相关参数,如开哪一路,关哪一路空调等,对应取值见下表 |
action取值说明
KEY标识 | 名称 | protocol | params参数 | 说明 |
---|---|---|---|---|
in_class | 上课 | SERIAL | 无 | 开中控、开电脑、开投影、开大屏等 |
over_class | 下课 | SERIAL | 无 | 关中控、关电脑、关投影、关大屏等 |
cast_open | 开投影 | SERIAL | 无 | 开启投影机,上课时使用 |
cast_close | 关投影 | SERIAL | 无 | 关闭投影机 |
cloth_down | 降幕布 | SERIAL | 无 | 降下幕布,上课时使用 |
cloth_up | 升幕布 | SERIAL | 无 | 收回幕布 |
close_comp | 关电脑 | SERIAL | 无 | 关闭电脑 |
show_comp | 投电脑 | SERIAL | 无 | 显示台式电脑信号源 |
show_broadcast | 投广播 | SERIAL | 无 | 显示广播信号源 |
show_booth | 投展台 | SERIAL | 无 | 显示展台信号源 |
show_mobilepc | 投手提 | SERIAL | 无 | 显示笔记本信号源 |
voice_up | 音量加 | SERIAL | 无 | 音量加 |
voice_down | 音量减 | SERIAL | 无 | 音量加 |
open_airctrl | 开空调 | RS485通讯时取值SERIAL,ZIGBEE通讯时取值ZIGBEE | 见开空调参数 | 开空调 |
close_airctrl | 关空调 | RS485通讯时取值SERIAL,ZIGBEE通讯时取值ZIGBEE | 见关空调参数 | 关空调 |
window_open | 开窗帘 | ZIGBEE | 见开关窗帘参数 | 开窗帘 |
window_close | 关窗帘 | ZIGBEE | 见开关窗帘参数 | 关窗帘 |
stop_rotate | 电机停 | ZIGBEE | 见开关窗帘参数 | 窗帘电机停止转动 |
open_light | 开灯 | ZIGBEE | 见开关灯参数 | 开灯 |
close_light | 关灯 | ZIGBEE | 见开关灯参数 | 关灯 |
open_airswitcher_power | 开空开电源 | SERIAL | 见开关电源参数 | 开电源 |
close_airswitcher_power | 关空开电源 | SERIAL | 见开关电源参数 | 关电源 |
open_tablet_pc | 开大屏 | SERIAL | 无 | 开大屏 |
close_tablet_pc | 关大屏 | SERIAL | 无 | 关大屏 |
open_timing_controller | 开时序器 | SERIAL | 无 | 开时序器 |
close_timing_controller | 关时序器 | SERIAL | 无 | 关时序器 |
open_discussion_box_qinglu | 开青鹿盒子 | SERIAL | 无 | 开青鹿盒子 |
close_discussion_box_qinglu | 关青鹿盒子 | SERIAL | 无 | 开青鹿盒子 |
open_recorder_power | 录播电源开 | SERIAL | 无 | 录播电源开 |
close_recorder_power | 录播电源关 | SERIAL | 无 | 录播电源开 |
start_record | 录播开始 | SERIAL | 无 | 开始录播主机录制 |
stop_record | 录播停止 | SERIAL | 无 | 停止录播主机录制 |
pause_record | 录播暂停 | SERIAL | 无 | 暂停录播主机录制 |
开空调参数
{
"location":[1,2,3], //控制第几路空调,以实际安装路数为准,默认从前到后从1开始编号。可选择多路同时控制。
"temperature":26, // 控制温度 可取值18-29
"speed": 1 // 控制风速 1:小风 2:中风 3:大风
}
关空调参数
{
"location":[1,2,3], //控制第几路空调,以实际安装路数为准,默认从前到后从1开始编号。可选择多路同时控制。
"power": 1 // 断空调供电 1:关电 0:保持开启
}
开关窗帘参数
{
"location":[1,2,3], //控制第几路窗帘,以实际安装路数为准,默认从前到后从1开始编号。可选择多路同时控制。
}
开关灯参数
{
"location":[1,2,3], //控制第几排灯,以实际安装路数为准,默认从前到后从1开始编号。可选择多路同时控制。
}
开关电源参数
{
"location":[1,2,3], //控制第路电源,以实际安装路数为准,默认从前到后从1开始编号。可选择多路同时控制。
}
设备状态上报
服务器订阅如下主题
topic: /gatetway/[APPID]/[DEVICEID]/event/device/status
定时收到如下格式JSON字符串
{
"KEY1":"VLAUE1",
"KEY2":"VLAUE2"
...
}
设备状态将以key-value形式上报,服务器需要缓存每一个key-value值。注意:全部设备状态并非以一条数据合并上报,而是分开上报。
以下为key、value对应值说明
key | 对应名称 | 值类型 | value值说明 |
---|---|---|---|
controller | 中控状态 | String | on:中控开启 off:中控关闭 |
cast | 投影状态 | String | on:投影开启 off:投影关闭 |
hdmi1 | hdmi1状态 | String | on:hdmi1接入设备 off:hdmi1未接入设备 |
hdmi2 | hdmi2状态 | String | on:hdmi2接入设备 off:hdmi2未接入设备 |
sensor_tempHumidity | 传感器温湿度数据 | String | 温度、湿度,“_”拼接,计量单位:温度(℃)湿度(%RH) |
sensor_pm25 | pm2.5浓度 | Float | 计量单位:ug/m3 |
sensor_tvoc | tvoc浓度 | Float | 计量单位:mg/m3 |
sensor_formaldehyde | 甲醛浓度 | Float | 计量单位:mg/m3 |
sensor_co2 | 二氧化碳浓度 | Float | 计量单位:PPM |
sensor_illuminance | 光照度 | Float | 计量单位:LUX |
light_[n] | 灯状态,n根据实际安装路数获取,从1开始 | String | on:开启 off:关闭 |
aircontroller_[n] | 空调状态,n根据实际安装路数获取,从1开始 | JSONString | 见空调状态说明 |
curtain_[n] | 窗帘电机状态,n根据实际安装路数获取,从1开始 | JSONString | 见窗帘电机状态说明 |
airswitcher-line | 安装了哪里路空开 | HEXString | 16进制转2进制,字节倒序,1代表存在那一路空开 0代表不存在那一路空开 |
airswitcher-status | 每一路空开状态 | HEXString | 16进制转2进制,字节倒序,1代表那一路空开开启 0代表那一路空开关闭 |
airswitcher-energy1 | 每一路空开能耗低位 | HEXString | 每2位为1路空开能耗数据 |
airswitcher-energy2 | 每一路空开能耗高位 | HEXString | 每2位为1路空开能耗数据,每一路高位低位拼接后转10进制即为当前能耗,单位Wh。注意:需要考虑断电请0情况 |
airswitcher-power | 每一路空开功率 | HEXString | 每2位为1路空开功率数据 |
airswitcher-current | 每一路空开电流 | HEXString | 每2位为1路空开电流数据 |
airswitcher-voltage | 每一路空开电压 | HEXString | 每2位为1路空开电压数据 |
空调状态说明
{
"status":"on", //空调状态 on:空调正在运转 off:空调待机 offline:空调断电。
"temperature":26 //当前温度 ,
"humidity": 60 //当前湿度
}
窗帘电机状态说明
{
"status":"on", //空调状态 on:窗开 off:窗关。
"percentage":30 //当前开启百分比
}
写入卡库
服务器向中控发送如下指令
topic: /gatetway/[APPID]/[DEVICEID]/event/card/req
payload:
{
“url”:"http://..."
}
参数 | 数据类型 | 说明 |
---|---|---|
url | String | 请求卡库的接口地址,第三方服务器需要实现该地址的POST方法,一次性返回全部教职工IC卡相关信息,具体返回格式如下 |
{"data":[{
"gender":1, //0女 1男 9未登记,非空
"name":"", //姓名,非空
"department":"", //部门
"position":"", //职务
"work_code":"", //教职工工号。如需设置课表模式,此字段必须
"card_num":"",//10位IC卡号,非空
"start_time":"YYYY-MM-DD HH:mm:ss", //授权有效时间,YYYY-MM-DD HH:mm:ss,非空
"end_time":"YYYY-MM-DD HH:mm:ss",//授权过期时间,YYYY-MM-DD HH:mm:ss,非空
"card_type":1, //1管理员卡 2教职工卡
}]}
设置刷卡校验模式
topic: /gatetway/[APPID]/[DEVICEID]/action/controller/setting
{
"action":"set_lock_mode",
"mode":"all",
}
参数 | 数据类型 | 说明 |
---|---|---|
action | String | 设置刷卡校验模式固定为set_lock_mode |
mode | String | all 试运行模式 , card 一卡通模式 , schedule 课表模式 |
下发整个学期课表
topic: /gatetway/[APPID]/[DEVICEID]/action/controller/setting
{
"action":"schedule_download",
"url":"http://...",
}
参数 | 数据类型 | 说明 |
---|---|---|
action | String | 下发整个学期课表固定为schedule_download |
url | String | 请求整个学期课表的接口地址,第三方平台需要实现该接口地址的POST方法。中控调用接口时传递JSON格式参数,参数中包含device_id字段,该字段值与topic中DEVICEID相同。第三方平台需要根据device_id参数匹配课室,并返回该课室整个学期的课表 |
课表返回格式要求如下:
{
"start_date":"2022-07-04", //学期的开始日
"end_date":"2023-01-07" //学期的结束日,
"school_time":[
{
"start_time":"08:00",
"end_time":"08:40"
},
{
"start_time":"08:50",
"end_time":"09:30"
}
],
"schedule":{
"day_1":[
null,
[
{"course_name":"课程1",teacher_info:{"name":"张三","work_code":"工号"},weeks:[1,7]},
{"course_name":"课程2",teacher_info:{"name":"李四","work_code":"工号"},weeks:[8,16]}
]
],
"day_2":[],
"day_3":[],
"day_4":[],
"day_5":[],
"day_6":[],
"day_7":[]
}
}
参数 | 数据类型 | 说明 |
---|---|---|
start_date | String | 学期的开始日 YYYY-MM-DD格式 |
end_date | String | 学期的开始日 YYYY-MM-DD格式 |
school_time | Array | 节次时间信息,有多少节课就多少项 |
school_time[n].start_time | String | 课节开始时间 HH:mm格式 |
school_time[n].end_time | String | 课节结束时间 HH:mm格式 |
schedule | Object | 排课信息 |
schedule.day_[n] | Array | 星期n的排课 |
schedule.day_[n][m] | Object | 星期n第m节的课程信息。需包含course_name、teacher_info、weeks字段,其中course_name为课程名称,teacher_info为上课教师信息,weeks为上课周次(按[开始周,结束周]格式填写,[1,7]代表1至7周上课)。若某一节次无课则填null |
刷卡记录上报
topic: /gatetway/[APPID]/[DEVICEID]/event/card/slot
{
"card_num":"CARDNUM",
"checked":true,
"time":"2021-05-30 12:00:00"
}
参数 | 数据类型 | 说明 |
---|---|---|
card_num | String | 刷卡卡号 |
checked | Boolean | 是否为授权卡 |
time | DATETIME | 刷卡时间(YYYY-MM-DD HH:mm:ss) |
3.2.2单机对接(直接与中控通讯)
通讯协议:TCP
通讯端口:8000
授权认证
第三方设备通过中控的IP连接TCP后,需要认证才能有效发送或接收其他指令。 第三方设备通过TCP向中控发送如下JSON格式字符串指令
{
"type": "auth",
"code": "CODE"
}
type固定取值auth,code值请向中控供应商索取。认证成功返回:
{
"type": "auth",
"data": {
"code": 0,
"msg": "认证成功"
}
}
设备控制
第三方设备通过TCP向中控发送如下JSON格式字符串指令控制中控设备:
{
"type": "ctrl",
"action":"KEY",
"protocol":"SERIAL",
"params":{
}
}
参数 | 说明 |
---|---|
type | 固定为ctrl |
action | 指令key,对应取值见下表 |
protocol | 通讯方式,对应取值见下表 |
params | 指令相关参数,如开哪一路,关哪一路空调等,对应取值见下表 |
action取值说明
KEY标识 | 名称 | protocol | params参数 | 说明 |
---|---|---|---|---|
in_class | 上课 | SERIAL | 无 | 开中控、开电脑、开投影、开大屏等 |
over_class | 下课 | SERIAL | 无 | 关中控、关电脑、关投影、关大屏等 |
cast_open | 开投影 | SERIAL | 无 | 开启投影机,上课时使用 |
cast_close | 关投影 | SERIAL | 无 | 关闭投影机 |
cloth_down | 降幕布 | SERIAL | 无 | 降下幕布,上课时使用 |
cloth_up | 升幕布 | SERIAL | 无 | 收回幕布 |
mic_volume | 功放音量调节 | SERIAL | 见功放音量调节参数 | 调节功放麦克风的音量 |
close_comp | 关电脑 | SERIAL | 无 | 关闭电脑 |
show_comp | 投电脑 | SERIAL | 无 | 显示台式电脑信号源 |
show_broadcast | 投广播 | SERIAL | 无 | 显示广播信号源 |
show_booth | 投展台 | SERIAL | 无 | 显示展台信号源 |
show_mobilepc | 投手提 | SERIAL | 无 | 显示笔记本信号源 |
voice_up | 音量加 | SERIAL | 无 | 音量加 |
voice_down | 音量减 | SERIAL | 无 | 音量加 |
open_airctrl | 开空调 | RS485通讯时取值SERIAL,ZIGBEE通讯时取值ZIGBEE | 见开空调参数 | 开空调 |
close_airctrl | 关空调 | RS485通讯时取值SERIAL,ZIGBEE通讯时取值ZIGBEE | 见关空调参数 | 关空调 |
window_open | 开窗帘 | ZIGBEE | 见开关窗帘参数 | 开窗帘 |
window_close | 关窗帘 | ZIGBEE | 见开关窗帘参数 | 关窗帘 |
stop_rotate | 电机停 | ZIGBEE | 见开关窗帘参数 | 窗帘电机停止转动 |
open_light | 开灯 | ZIGBEE | 见开关灯参数 | 开灯 |
close_light | 关灯 | ZIGBEE | 见开关灯参数 | 关灯 |
open_airswitcher_power | 开空开电源 | SERIAL | 见开关电源参数 | 开电源 |
close_airswitcher_power | 关空开电源 | SERIAL | 见开关电源参数 | 关电源 |
open_recorder | 开启录播 | SERIAL | 无 | 开录播电源 |
close_recorder | 关录播电源 | SERIAL | 无 | 关录播电源 |
start_record | 开始录制 | SERIAL | 无 | 录播开始录制 |
stop_record | 停止录制 | SERIAL | 无 | 录播停止录制 |
pause_record | 暂停录制 | SERIAL | 无 | 录播暂停录制 |
screen_on | 开大屏 | SERIAL | 无 | 开大屏 |
screen_off | 关大屏 | SERIAL | 无 | 关大屏 |
开空调参数
{
"location":[1,2,3], //控制第几路空调,以实际安装路数为准,默认从前到后从1开始编号。可选择多路同时控制。
"temperature":26, // 控制温度 可取值18-29
"speed": 1 // 控制风速 1:小风 2:中风 3:大风
}
关空调参数
{
"location":[1,2,3], //控制第几路空调,以实际安装路数为准,默认从前到后从1开始编号。可选择多路同时控制。
"power": 1 // 断空调供电 1:关电 0:保持开启
}
开关窗帘参数
{
"location":[1,2,3], //控制第几路窗帘,以实际安装路数为准,默认从前到后从1开始编号。可选择多路同时控制。
}
开关灯参数
{
"location":[1,2,3], //控制第几排灯,以实际安装路数为准,默认从前到后从1开始编号。可选择多路同时控制。
}
开关电源参数
{
"location":[1,2,3], //控制第路电源,以实际安装路数为准,默认从前到后从1开始编号。可选择多路同时控制。
}
功放音量调节参数
{
"value":IntValue, //IntValue取值0~26,0为禁音,26为最大音量。
}
设备状态上报
认证后第三方设备定时收到如下格式JSON字符串
{
"type":"status_feedback",
"data":{
"KEY1":"VLAUE1",
"KEY2":"VLAUE2"
...
}
}
设备状态将以key-value形式上报,服务器需要缓存每一个key-value值。注意:全部设备状态并非以一条数据合并上报,而是分开上报。
以下为key、value对应值说明
key | 对应名称 | 值类型 | value值说明 |
---|---|---|---|
controller | 中控状态 | String | on:中控开启 off:中控关闭 |
cast | 投影状态 | String | on:投影开启 off:投影关闭 |
hdmi1 | hdmi1状态 | String | on:hdmi1接入设备 off:hdmi1未接入设备 |
hdmi2 | hdmi2状态 | String | on:hdmi2接入设备 off:hdmi2未接入设备 |
sensor_tempHumidity | 传感器温湿度数据 | String | 温度、湿度,“_”拼接,计量单位:温度(℃)湿度(%RH) |
sensor_pm25 | pm2.5浓度 | Float | 计量单位:ug/m3 |
sensor_tvoc | tvoc浓度 | Float | 计量单位:mg/m3 |
sensor_formaldehyde | 甲醛浓度 | Float | 计量单位:mg/m3 |
sensor_co2 | 二氧化碳浓度 | Float | 计量单位:PPM |
sensor_illuminance | 光照度 | Float | 计量单位:LUX |
light_[n] | 灯状态,n根据实际安装路数获取,从1开始 | String | on:开启 off:关闭 |
aircontroller_[n] | 空调状态,n根据实际安装路数获取,从1开始 | JSONString | 见空调状态说明 |
curtain_[n] | 窗帘电机状态,n根据实际安装路数获取,从1开始 | JSONString | 见窗帘电机状态说明 |
airswitcher-line | 安装了哪里路空开 | HEXString | 16进制转2进制,字节倒序,1代表存在那一路空开 0代表不存在那一路空开 |
airswitcher-status | 每一路空开状态 | HEXString | 16进制转2进制,字节倒序,1代表那一路空开开启 0代表那一路空开关闭 |
airswitcher-energy1 | 每一路空开能耗低位 | HEXString | 每2位为1路空开能耗数据 |
airswitcher-energy2 | 每一路空开能耗高位 | HEXString | 每2位为1路空开能耗数据,每一路高位低位拼接后转10进制即为当前能耗,单位Wh。注意:需要考虑断电请0情况 |
airswitcher-power | 每一路空开功率 | HEXString | 每2位为1路空开功率数据 |
airswitcher-current | 每一路空开电流 | HEXString | 每2位为1路空开电流数据 |
airswitcher-voltage | 每一路空开电压 | HEXString | 每2位为1路空开电压数据 |
空调状态说明
{
"status":"on", //空调状态 on:空调正在运转 off:空调待机 offline:空调断电。
"temperature":26 //当前温度 ,
"humidity": 60 //当前湿度
}
窗帘电机状态说明
{
"status":"on", //空调状态 on:窗开 off:窗关。
"percentage":30 //当前开启百分比
}