//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:"" } }