TCP&UDP协议
最后更新于
最后更新于
通过TCP&UDP自定义协议,与网关设备交互获取设备信息及控制智能家居设备
使用TCP&UDP协议接入需要网关作为服务端,使用UDP监听背景音乐主机发送过来的连接广播数据,TCP服务端用来接收协议数据
监听UDP端口:5555
回复UDP端口:5554
public static int xorSum(byte[] datas) {
int temp = datas[1]; // 此处首位取1是因为本协议中第一个数据不参数异或校验,转为int防止结果出现溢出变成负数
for (int i = 2; i < datas.length; i++) {
int preTemp = temp;
int iData;
if (datas[i] < 0) {
iData = datas[i] & 0xff; // 变为正数计算
} else {
iData = datas[i];
}
if (temp < 0) {
temp = temp & 0xff; // 变为正数
}
temp ^= iData;
}
return temp;
}
背景音乐主机发送隔5秒发送一次UDP广播包,网关设备收到后,回复自身TCP服务的IP地址和端口号
当背景音乐主机收到UDP广播回复后会连接网关的TCP服务
{
"type":"REQUEST_LINK_HOST"
}
{
"type":"RESPONSE_LINK_HOST",
"data":{
"ip":"",
"port":
}
}
获取智能家居设备信息
{
"type":"REQUEST_FIND_DEVICES"
}
{
"type":"RESPONSE_FIND_DEVICES",
"data":{
"appliances":[
{
//设备支持的操作,可不填写
"actions": [
"turnOn",
"turnOff",
"incrementBrightnessPercentage",
"decrementBrightnessPercentage"
],
//补充字段
"additionalApplianceDetails": {},
//设备唯一ID
"applianceId": "设备唯一ID",
//设备类型
"applianceTypes": [
"LIGHT"
],
//设备属性
"attributes": [
{
"name": "name",
"scale": "",
"timestampOfSample": 1496741861,
"uncertaintyInMilliseconds": 10,
"value": "卧室的灯"
}
],
//设备友好描述
"friendlyDescription": "展现给用户的详细介绍",
//设备名
"friendlyName": "卧室的灯",
//厂商名称
"manufacturerName": "设备制造商的名称",
//型号名
"modelName": "fancyLight",
//软件版本
"version": "your software version number here."
}
]
}
}
设备控制时发送的数据
data的携带参数会因为aciton的不同而改变,可参考请求类型与数据
{
//代表协议指令类型
"type":"REQUEST_DEVICE_CONTROLLER",
//控制请求的类型
"action":"TurnOnRequest",
"voiceStr":"语音原句",
//控制可能携带的数据
"data":{
"applianceId":"设备ID",
"values":{
"temperature":2,
"fanSpeedValue":2,
"fanSpeedLevel":2,
"mode":"",
"fanDirection":"fanDirection",
"color":{
"hue":double
"saturation":double
"brightness":double
},
"isMute":2,
"volume":2,
"channel":2,
}
}
}
{
"type":"RESPONSE_DEVICE_CONTROLLER",
"success":true/false,
"msg":"返回的信息",
"voiceStr":"控制完成后需要播报的语句",
"data":{
"applianceId":"设备ID",
"values":{
//控制后的数据状态上报
"turnOnState":"ON/OFF"
"temperature":2,
"fanSpeedValue":2,
"fanSpeedLevel":"",
"mode":"",
"fanDirection":"fanDirection",
"color":{
"hue":double
"saturation":double
"brightness":double
},
"isMute":2,
"volume":2,
"channel":2,
}
}
}
包头
数据长度
JSON数据
校验和
FF494F54
为JSON数据所占字节数(16进制)
DATA,字符串数据
异或校验,数据长度+数据
的字节进行异或(16进制)