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

238 lines
5.5 KiB
JavaScript
Raw Normal View History

2022-07-27 05:26:26 +00:00
//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:""
}
}