1.1. 概述
网络对接协议实现智能家居网关对接,控制智能家居
1.2. 使用场景
智能家居厂商希望通过网络协议的方式实现局域网类的家居控制
1.3. 接入说明
确认该方式对接后,需要下载一个apk安装到小可主机上,才能实现文档的协议进行连接。点击此处下载apk插件 apk下载后,可以通过usb线连接屏和电脑,使用adb命令安装,也可以复制到屏的存储下,在屏桌面-其他应用-文件管理进入找到jdxy.apk,点击安装
2. 深圳聚点互动科技有限公司
2.1. 智能家居对接协议 4.2
2.2. 目录
- 对接基本要求
- 连接方式
- 协议格式
- 指令分配规则
- 各指令发送的数据
- 5.1 心跳请求
- 5.2 心跳响应
- 5.3 请求设备列表
- 5.4 返回设备列表,设备列表有更新
- 5.5 请求场景列表
- 5.6 返回场景列表
- 5.7 请求房间列表(可选)
- 5.8 返回房间列表(可选)
- 5.9 请求楼层列表(可选)
- 5.10 返回楼层列表(可选)
- 5.11 发送控制指令
- 5.12 响应控制指令,设备状态有更新
- 5.13 让背景音主机,主动说话(可选)
- 返回状态码
- 常见设备类型
- 控制指令
2.2.1. 1. 对接基本要求
1.1 能够提供所有设备列表数据,设备信息中要包含设备ID、设备名、设备类型、设备状态(可选)、房间ID(可选)、楼层ID(可选)。
1.2 能够提供所有场景列表数据,场景信息中要包含场景ID、场景名。
1.3 能够提供所有房间列表数据,房间信息中要包含房间ID、房间名。(可选)
1.4 能够提供所有楼层列表数据,楼层信息中要包含楼层ID、楼层名。(可选)
2.2.2. 2. 连接方式
背景音主机发送UDP广播,端口(暂定)6666,发送数据如下:
{ "type": "REQUEST_TCP", "sn": "xxxxx" //背景音主机的sn码,唯一设备ID }服务器收到背景音主机发送的广播后,发送UDP广播,端口(暂定)7777,发送数据如下:
{ "type": "RESPONSE_TCP", "data": { "ip": "xxx.xxx.xxx.xxx", "port": 8888, "company": "xxxx",//company字段代表对接合作方 "protocolVersion": "v1" //protocolVersion字段表示使用的版本(可选v1和v2。协议格式对应有所改变) // v1协议头是0xAA,长度2字节。V2协议头为0xAB,长度3字节。v2版本能接收更多的设备数据 } }背景音主机获取到服务器的IP后,通过TCP连接服务器,端口(暂定)8888。
- 然后通过下面的协议格式获取数据。
2.2.3. 3. 协议格式
protocolVersion=v1/v2
| 协议头 (0XAA) | 长度 (0XXXXX) | 指令编号 (0XXXXX) | 数据 | 校验 (0XXXXX) |
|---|---|---|---|---|
| 一个字节,v1为固定的0xAA,v2为0xAB | v1为两个字节,v2为三个字节,为协议中"数据"部分的长度,不包含指令编号和校验 | 两个字节,参见指令分配规则 | 指令内容,内容为UTF-8编码的字符串 | 一个字节,把0与"长度、指令、编号、数据"中的每个字节异或再相乘 |
协议长度:
- v1协议总长度=6+数据长度
- v2协议总长度=7+数据长度
核验算法:把0与"长度、指令编号、数据"中的每个字节异或再相乘。
private boolean check(byte fcs, byte[] data) {
int xorResult = 0;
for (byte b : data) {
xorResult ^= b;
}
return fcs == xorResult;
}
2.2.4. 4. 指令分配规则
| 指令编号 | 发送方 | 接收方 | 指令类型 |
|---|---|---|---|
| 0x0001 | 客户端 | 网关 | 心跳请求 |
| 0x0002 | 网关 | 客户端 | 心跳响应 |
| 0x0003 | 客户端 | 网关 | 发送控制指令 |
| 0x0004 | 网关 | 客户端 | 响应控制指令,设备状态有更新 |
| 0x0005 | 客户端 | 网关 | 请求设备列表 |
| 0x0006 | 网关 | 客户端 | 返回设备列表,设备列表有更新 |
| 0x0007 | 客户端 | 网关 | 请求场景列表 |
| 0x0008 | 网关 | 客户端 | 返回场景列表 |
| 0x0009 | 客户端 | 网关 | 请求房间列表(可选) |
| 0x000A | 网关 | 客户端 | 返回房间列表(可选) |
| 0x000B | 客户端 | 网关 | 请求楼层列表(可选) |
| 0x000C | 网关 | 客户端 | 返回楼层列表(可选) |
| 0x000D | 客户端 | 网关 | (预留) |
| 0x000E | 网关 | 客户端 | 让背景音主机主动说话(可选) |
| 0x000F | 网关 | 客户端 | 通知屏端重新获取设备场景数据 |
注:客户端是指背景音主机
2.2.5. 5. 各指令发送的数据
5.1 心跳请求
{
"type": "REQUEST_HEART_BEAT",
"sn": "xxxxx"
}
5.2 心跳响应
{
"type": "RESPONSE_HEART_BEAT"
}
5.3 请求设备列表
{
"type": "REQUEST_DEVICE",
"sn": "xxxxx"
}
5.4 返回设备列表,设备列表有更新
{
"type": "RESPONSE_DEVICE",
"deviceData": [
{
"deviceId": "设备ID",
"deviceName": "设备名",
"deviceType": "设备类型",
"roomId": "房间ID(可选)",
"floorId": "楼层ID(可选)",
"state": {
"order": "设备命令开,关,暂停(可选)",
"mode": "设备模式(可选)",
"temperature": "温度(可选)",
"fanSpeed": "风速(可选)",
"fanDirection": "风向(可选)",
"brightness": "亮度0-100(可选)",
"colorTemp":"色温值 0-100",
"position": "进度 0-100(可选)",
"angle": "角度 0-180",
"sensorStatus": "1:有人,触发报警 0:无人,不触发",
"battery": "电量",
"humidity": "湿度",
"universalSensorData": "万能传感器数据(jsonArray.toJSONString())"
},
"modeAttributes": "模式属性,可以根据填的模式属性,桌面自定义显示控制哪些模式",
"speedAttributes": "风速属性,可以根据填的模式属性,桌面自定义显示控制哪些风速",
"directionAttributes": "风向属性,可以根据填的模式属性,桌面自定义显示控制哪些风向"
}
]
}
万能传感器universalSensorData说明:
万能传感器 type=DEVICE_TYPE_MULTIFUNCTIONAL_SENSOR
具体传感器数据,该值是jsonArray形式,可以按以下方式传
universalSensorData=jsonArray.toJSONString();
JSONArray jsonArray = new JSONArray();
jsonArray.put(new JSONObject().put("key", "温度").put("value", "23.5℃"));
jsonArray.put(new JSONObject().put("key", "湿度").put("value", "65%"));
jsonArray.put(new JSONObject().put("key", "PM2.5").put("value", "35"));
jsonArray.put(new JSONObject().put("key", "光照强度").put("value", "300lux"));
可以自行设置想要显示的,key表示名称,value是对应名称的值
"universalSensorData": "[
{"key":"温度","value":"23.5℃"},
{"key":"湿度","value":"65%"},
{"key":"PM2.5","value":"35"},
{"key":"光照强度","value":"300lux"}
]"
modeAttributes模式属性说明:
- 空调/温控支持的属性:
["cold","heat","airsupply","dehumidification","auto","manual","comfortable","sleep"] - 新风/地暖支持的属性:
["auto","manual","sleep"]
speedAttributes风速属性说明:
- 空调/温控支持的属性:
["low","medium","high","autoWind","sleepWind","quietWind"] - 新风支持的属性:
["low","medium","high","autoWind","sleepWind"]
directionAttributes风向属性说明:
- 空调支持的属性:
["leftright","updown"]
5.5 请求场景列表
{
"type": "REQUEST_SCENE",
"sn": "xxxxx"
}
5.6 返回场景列表
{
"type": "RESPONSE_SCENE",
"data": [
{
"id": "场景ID",
"name": "场景名",
"aliasList": ["场景别名1", "场景别名2"]
},
{
"id": "场景ID",
"name": "场景名",
"aliasList": ["场景别名1", "场景别名2"]
}
]
}
5.7 请求房间列表(可选)
{
"type": "REQUEST_ROOM",
"sn": "xxxxx"
}
5.8 返回房间列表(可选)
{
"type": "RESPONSE_ROOM",
"data": [
{
"id": "房间ID",
"name": "房间名"
},
{
"id": "房间ID",
"name": "房间名"
}
]
}
5.9 请求楼层列表(可选)
{
"type": "REQUEST_FLOOR",
"sn": "xxxxx"
}
5.10 返回楼层列表(可选)
{
"type": "RESPONSE_FLOOR",
"data": [
{
"id": "楼层ID",
"name": "楼层名"
}
]
}
5.11 发送控制指令
{
"type":"REQUEST_CONTROL",
"sn":"xxxxx",
"original":"原语",
"data":[
{
//具体发送的控制指令
"id":"设备ID",
"name":"设备名",
"scene":"场景",
"state":"状态",
"action":"动作",
"attribute":"属性",
"attributeValue":"属性值",
"mode":"模式",
"floor":"楼层",
"room":"房间"
}
]
}
5.12 响应控制指令,设备状态有更新
{
"type": "RESPONSE_CONTROL",
"code":0,//返回码
"msg":"返回信息", //为空则默认回答【好的】
"msgVoice":"需要背景音主机说的话",
"deviceId":"设备ID",
"deviceName":"设备名称",
"deviceType":"设备类型",
"deviceState":{
//具体返回设备状态数据
"order":"设备命令 开,关,暂停",
"mode":"设备模式",
"temperature":"温度",
"fanSpeed":"风速",
"fanDirection":"风向",
"brightness":"亮度 0-100",
"position":"进度 0-100 ",
"angle":"角度 0-180",
"sensorStatus":"1:有人,触发 0:无人,不触发",
"battery":"电量",
"humidity":"湿度",
"universalSensorData":"万能传感(jsonArray.toJSONString())"
}
}
备注:5.4获取设备列表和5.12状态刷新中的order字段为空时,会默认设为STATE_OFF|关
5.13 让背景音主机,主动说话(可选)
{
"type": "RESPONSE_VOICE",
"msgVoice": "需要背景音主机主动说的话"
}
2.2.6. 6. 返回状态码
| 状态码 | 表达的意思 |
|---|---|
| 0 | 控制成功 |
| 1 | 不存在此设备 |
| 2 | 设备不支持此操作 |
| 3 | 控制传入的参数有误 |
| 4 | 设备离线 |
| 5 | 设备控制超时 |
| 6 | 其他 |
2.2.7. 7. 常见设备类型
| 设备名 | 英文类型 |
|---|---|
| 灯 | LIGHT |
| 调光灯 | DIMMING_LAMP |
| 插座 | SOCKET |
| 窗帘 | CURTAIN |
| 可调进度窗帘 | ADJUST_CURTAIN |
| 风扇 | ELECTRIC_FAN |
| 空调 | AIR_CONDITION |
| 电视 | TV |
| 温控器 | THERMOSTAT |
| 投影仪 | PROJECT |
| 梦幻帘 | CURTAIN_ANGLE |
| 门窗磁 | DOOR_MAGNETIC_SENSOR |
| 水浸 | DOOR_WATER_SENSOR |
| 人体红外 | INFRARED_SENSOR |
| 烟雾 | SMOKER_SENSOR |
| SOS | SOS_SENSOR |
| CO2 | CO2_SENSOR |
| 万能传感器 | DEVICE_TYPE_MULTIFUNCTIONAL_SENSOR |
| 温湿度显示 | TEMP_HUMIDITY_SENSOR |
| 新风 | FRESH_AIR |
| 地暖 | FLOOR_HEATING |
| 开关 | SWITCH |
| 色温灯 | CW_LAMP |
2.2.8. 8. 屏端发出的控制指令
开关,灯等其他设备类型
- 控制下发信息:
state=STATE_ON(打开)state=STATE_OFF(关闭)
调光灯
- 亮度:
{ "action": "ACTION_TO", "attributeValue": "具体亮度值" }
色温灯
- 色温:
{ "action": "ACTION_TO", "attribute": "ATTRIBUTE_COLORTEMP", "attributeValue": "具体色温值" } - 亮度:
{ "action": "ACTION_TO", "attribute": "ATTRIBUTE_BRIGHTNESS", "attributeValue": "具体亮度值" }
空调、温控
- 模式:
{ "attribute": "ATTRIBUTE_MODE", "mode": "具体模式值" //"MODE_COOL","MODE_HEAT","MODE_FAN","MODE_DRY","MODE_AUTO","MODE_MANUAL","MODE_COMFORTABLE","MODE_SLEEP" } 风速:
{ "attribute": "ATTRIBUTE_WIND_SPEED", "attributeValue": "具体风速值" //"MODE_WIND_LOW","MODE_WIND_MID","MODE_WIND_HIGH","MODE_WIND_AUTO","MODE_WIND_SLEEP","MODE_WIND_MUTE" }空调风向:
{ "attribute": "ATTRIBUTE_WIND_DIRECTION", "attributeValue": "具体风向值" //"MODE_SWING_UP_DOWN","MODE_SWING_LEFT_RIGHT" }- 温度调节:
{ "action": "ACTION_TO", "attribute": "ATTRIBUTE_TEMPERATURE", "attributeValue": "具体温度值" }
地暖
- 模式:
{ "attribute": "ATTRIBUTE_MODE", "mode": "具体模式值" //"MODE_AUTO","MODE_MANUAL","MODE_SLEEP" } - 温度调节:
{ "action": "ACTION_TO", "attribute": "ATTRIBUTE_TEMPERATURE", "attributeValue": "具体温度值" }
新风
- 模式:
{ "attribute": "ATTRIBUTE_MODE", "mode": "具体模式值" //"MODE_AUTO","MODE_MANUAL","MODE_SLEEP" } - 风速:
{ "attribute": "ATTRIBUTE_WIND_SPEED", "mode": "具体风速值" //"MODE_WIND_HIGH","MODE_WIND_MID","MODE_WIND_LOW","MODE_WIND_SLEEP","MODE_WIND_AUTO" }
窗帘、进度窗帘:
- 控制下发信息:
state=STATE_ON(开启,进度100)state=STATE_OFF(关闭,进度0)state=STATE_STOP(暂停,进度50)
- 进度:
{ "action": "ACTION_TO", "attributeValue": "具体进度值" }
梦幻帘(带角度调节):
- 控制下发信息:
state=STATE_ON(开启,进度100)state=STATE_OFF(关闭,进度0)state=STATE_STOP(暂停,进度50)
- 进度:
{ "action": "ACTION_TO", "attribute": "ATTRIBUTE_PROGRESS", "attributeValue": "具体进度值" } - 角度:
{ "action": "ACTION_TO", "attribute": "ATTRIBUTE_ANGLE", "attributeValue": "具体角度值" }
电视:
- 频道+:
{ "action": "ACTION_ADD", "attribute": "ATTRIBUTE_CHANNEL", "attributeValue": "CHANNEL_UP" } - 频道-:
{ "action": "ACTION_REDUCE", "attribute": "ATTRIBUTE_CHANNEL", "attributeValue": "CHANNEL_DOWN" } 音量+:
{ "action": "ACTION_ADD", "attribute": "ATTRIBUTE_VOLUME", "attributeValue": "VOLUME_UP" }音量-:
{ "action": "ACTION_REDUCE", "attribute": "ATTRIBUTE_VOLUME", "attributeValue": "VOLUME_DOWN" }静音:
{ "action": "ACTION_TO", "mode": "MODE_MUTE" }外放/取消静音:
{ "action": "ACTION_TO", "mode": "MODE_CANCEL_MUTE" }
状态:
STATE_ON:开STATE_OFF:关STATE_STOP:停
动作:
ACTION_TO:调到、调至、调为、调成、设为、设成、设至、变成、变为、改为、改成、切换、换到、设置、设置为ACTION_ADD:调亮、调高、调暖、调热、调大、增大、加大、增加、亮点、亮一点、高点、高一点、下一、升高、大点、大一点、加、提高、拉上、拉开、拉起来、拉上去
模式:
MODE_COOL:制冷MODE_HEAT:制热MODE_FAN:送风MODE_DRY:抽湿、干燥MODE_AUTO:自动MODE_MANUAL:手动MODE_COMFORTABLE:舒适MODE_SLEEP:睡眠MODE_WIND_HIGH:高风MODE_WIND_MID:中风MODE_WIND_LOW:低风MODE_WIND_AUTO:自动风MODE_WIND_MUTE:静音风MODE_WIND_SLEEP:睡眠风MODE_PLAY:播放MODE_PAUSE:暂停MODE_MUTE:静音MODE_CANCEL_MUTE:取消静音MODE_NEXT:下一首、空调模式切换MODE_PREVIOUS:上一首MODE_SWING_ANGLE:播头、摆风MODE_SWING_NO:停止摆风、停止摇头MODE_SWING_LEFT_RIGHT:左右摆风MODE_SWING_UP_DOWN:上下摆风MODE_PURIFIER:空气净化
属性:
ATTRIBUTE_MODE:模式ATTRIBUTE_WIND_SPEED:风速ATTRIBUTE_WIND_DIRECTION:风向ATTRIBUTE_TEMPERATURE:温度ATTRIBUTE_HUMIDITY:湿度ATTRIBUTE_GEAR:档位ATTRIBUTE_BRIGHTNESS:亮度ATTRIBUTE_COLOR:颜色ATTRIBUTE_COLOR_TEMP:色温ATTRIBUTE_VOLUME:音量、声音ATTRIBUTE_CHANNEL:频道、节目、台ATTRIBUTE_HOUR:小时ATTRIBUTE_MINUTE:分钟ATTRIBUTE_SECOND:秒钟ATTRIBUTE_PROGRESS:进度ATTRIBUTE_ANGLE:角度
属性值:
VALUE_COLOR_WHITE:白色VALUE_COLOR_RED:红色VALUE_COLOR_ORANGE:橙色VALUE_COLOR_YELLOW:黄色VALUE_COLOR_GREEN:绿色VALUE_COLOR_CYAN:青色VALUE_COLOR_BLUE:蓝色VALUE_COLOR_PURPLE:紫色VALUE_COLOR_PINK:粉红、粉色、粉红色VALUE_MAX:最亮、最大、最高、最VALUE_MIN:最暗、最小、最低、最冷VALUE_LITTLE:一点、一点点CHANNEL_UP:频道+CHANNEL_DOWN:频道-VOLUME_UP:音量+VOLUME_DOWN:音量-0.5:半、一半1.5:一个半2.5:两个半、二个半3.5:三个半4.5:四个半