iotkit-parent/data/components/3ababc5e-15e9-45a7-8f38-2a6.../component.js

238 lines
5.5 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

//api配置
apiTool.config("127.0.0.1",8085,3000);
this.onReceive=function(method,path,header,params,body){
//methodpost、get、delete...
//path请求路径
//headerhttp请求头数据,结构:{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:""
}
}