238 lines
5.5 KiB
JavaScript
238 lines
5.5 KiB
JavaScript
//api配置
|
||
apiTool.config("127.0.0.1",8085,3000);
|
||
|
||
this.onReceive=function(method,path,header,params,body){
|
||
//method:post、get、delete...
|
||
//path:请求路径
|
||
//header:http请求头数据,结构:{xx:xx,yy:yy}
|
||
//params:请求参数,结构:{xx:[...],yy:[...]}
|
||
//body:请求体,当提交的数据为json格式时使用,结构:{xx:xx,yy:yy}
|
||
apiTool.log("onReceive body:"+body);
|
||
var duHeader=body.header;
|
||
var namespace=duHeader.namespace;
|
||
var requestName=duHeader.name;
|
||
var messageId=duHeader.messageId;
|
||
var duPayload=body.payload;
|
||
var token=duPayload.accessToken;
|
||
var openUid=duPayload.openUid;
|
||
|
||
//设备发现
|
||
if(namespace=="DuerOS.ConnectedHome.Discovery" && requestName=="DiscoverAppliancesRequest"){
|
||
var deviceIds=[];
|
||
var discoveredDevices=[];
|
||
var content={
|
||
header:{
|
||
namespace:"DuerOS.ConnectedHome.Discovery",
|
||
name:"DiscoverAppliancesResponse",
|
||
messageId:messageId,
|
||
payloadVersion:1
|
||
},
|
||
payload:{
|
||
discoveredAppliances:discoveredDevices,
|
||
discoveredGroups:[{
|
||
groupName:"客厅",
|
||
applianceIds:deviceIds,
|
||
groupNotes:"客厅分组控制",
|
||
additionalGroupDetails:{}
|
||
}]
|
||
}
|
||
};
|
||
var rst=apiTool.getSpaceDevices(token);
|
||
apiTool.log(JSON.stringify(rst));
|
||
if(rst && rst.status==200 && rst.data){
|
||
var devices=rst.data;
|
||
for(var i in devices){
|
||
var device=devices[i];
|
||
var did=device.deviceId;
|
||
var pk=device.productKey;
|
||
var dn=device.deviceName;
|
||
|
||
//更新设备openUid
|
||
rst=apiTool.setOpenUid(token,did,"dueros",openUid);
|
||
if(!rst || rst.status!=200){
|
||
continue;
|
||
}
|
||
|
||
//插座
|
||
if(pk=="cGCrkK7Ex4FESAwe"){
|
||
var powerstate=device.property.powerstate;
|
||
discoveredDevices.push({
|
||
actions:["turnOn","turnOff"],
|
||
applianceTypes:["SOCKET"],
|
||
additionalApplianceDetails:{},
|
||
applianceId:device.deviceId,
|
||
friendlyDescription:"智能插座",
|
||
friendlyName:device.name,
|
||
isReachable:device.online,
|
||
manufacturerName:"海曼",
|
||
modelName:"S1",
|
||
version:"v1.0",
|
||
attributes:[
|
||
{
|
||
name:"客厅的插座",
|
||
scale:"",
|
||
timestampOfSample:0,
|
||
uncertaintyInMilliseconds:10
|
||
},
|
||
{
|
||
name:"connectivity",
|
||
value:"REACHABLE",
|
||
scale:"",
|
||
timestampOfSample:0,
|
||
uncertaintyInMilliseconds:10
|
||
},
|
||
{
|
||
name:"turnOnState",
|
||
value:powerstate==1?"ON":"OFF",
|
||
scale:"",
|
||
timestampOfSample:0,
|
||
uncertaintyInMilliseconds:10,
|
||
legalValue:"(ON, OFF)"
|
||
}
|
||
]
|
||
});
|
||
}else if(pk=="Rf4QSjbm65X45753"){
|
||
//开关
|
||
var powerstate=device.property.powerstate;
|
||
discoveredDevices.push({
|
||
actions:["turnOn","turnOff"],
|
||
applianceTypes:["SWITCH"],
|
||
additionalApplianceDetails:{},
|
||
applianceId:device.deviceId,
|
||
friendlyDescription:"智能开关",
|
||
friendlyName:device.name,
|
||
isReachable:device.online,
|
||
manufacturerName:"海曼",
|
||
modelName:"S1",
|
||
version:"v1.0",
|
||
attributes:[
|
||
{
|
||
name:"客厅的开关",
|
||
scale:"",
|
||
timestampOfSample:0,
|
||
uncertaintyInMilliseconds:10
|
||
},
|
||
{
|
||
name:"connectivity",
|
||
value:"REACHABLE",
|
||
scale:"",
|
||
timestampOfSample:0,
|
||
uncertaintyInMilliseconds:10
|
||
},
|
||
{
|
||
name:"turnOnState",
|
||
value:powerstate==1?"ON":"OFF",
|
||
scale:"",
|
||
timestampOfSample:0,
|
||
uncertaintyInMilliseconds:10,
|
||
legalValue:"(ON, OFF)"
|
||
}
|
||
]
|
||
});
|
||
|
||
}
|
||
}
|
||
}
|
||
|
||
return {
|
||
url:"",//不指定直接作为响应返回
|
||
header:{
|
||
contentType:"application/json"
|
||
},
|
||
content:JSON.stringify(content)
|
||
}
|
||
}else if(namespace=="DuerOS.ConnectedHome.Control"){
|
||
//设备控制
|
||
var appliance=duPayload.appliance;
|
||
var deviceId=appliance.applianceId;
|
||
var confirmName="UnsupportedOperationError";
|
||
var rst={status:500};
|
||
|
||
//开关
|
||
if(requestName=="TurnOnRequest"){
|
||
//开
|
||
confirmName="TurnOnConfirmation";
|
||
rst=apiTool.setProperties(token,deviceId,{powerstate:1});
|
||
}else if(requestName=="TurnOffRequest"){
|
||
//关
|
||
confirmName="TurnOffConfirmation";
|
||
rst=apiTool.setProperties(token,deviceId,{powerstate:0});
|
||
}
|
||
|
||
if(rst.status!=200){
|
||
confirmName="UnsupportedOperationError";
|
||
apiTool.log("device control failed:"+JSON.stringify(rst));
|
||
}
|
||
|
||
var content={
|
||
header: {
|
||
namespace: "DuerOS.ConnectedHome.Control",
|
||
name: confirmName,
|
||
messageId: messageId,
|
||
payloadVersion: "1"
|
||
},
|
||
payload: {
|
||
"attributes": []
|
||
}
|
||
};
|
||
|
||
return {
|
||
url:"",
|
||
header:{
|
||
contentType:"application/json"
|
||
},
|
||
content:JSON.stringify(content)
|
||
}
|
||
}else if(namespace=="DuerOS.ConnectedHome.Query"){
|
||
//属性查询
|
||
if(requestName=="ReportStateRequest"){
|
||
var appliance=duPayload.appliance;
|
||
var deviceId=appliance.applianceId;
|
||
var property=appliance.attributeName;
|
||
var propertyVal="";
|
||
var success=false;
|
||
if(property=="turnOnState"){
|
||
//开关状态查询
|
||
var rst= apiTool.getSpaceDeviceDetail(token,deviceId);
|
||
if(rst && rst.status==200 && rst.data.property){
|
||
propertyVal=rst.data.property.powerstate==1?"ON":"OFF";
|
||
success=true;
|
||
}
|
||
}
|
||
var content=success?{
|
||
"header": {
|
||
"namespace": "DuerOS.ConnectedHome.Query",
|
||
"name": "ReportStateResponse",
|
||
"messageId": new Date().getTime()+"",
|
||
"payloadVersion": "1"
|
||
},
|
||
"payload": {
|
||
"attributes": [
|
||
{
|
||
"name": property,
|
||
"value": propertyVal,
|
||
"scale": "",
|
||
"timestampOfSample": new Date().getTime()/1000,
|
||
"uncertaintyInMilliseconds": 0
|
||
}
|
||
]
|
||
}
|
||
}:{};
|
||
|
||
return {
|
||
url:"",
|
||
header:{
|
||
contentType:"application/json"
|
||
},
|
||
content:JSON.stringify(content)
|
||
}
|
||
}
|
||
}
|
||
return {
|
||
url:"",//不指定直接作为响应返回
|
||
header:{
|
||
contentType:"application/json"
|
||
},
|
||
content:""
|
||
}
|
||
} |