123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- var mid=1;
- function getMid(){
- mid++;
- if(mid>10000){
- mid=1;
- }
- return mid+"";
- }
- this.decode = function (msg) {
- //对msg进行解析,并返回物模型数据
- var content=msg.content;
- var topic = content.topic;
- var payload = content.payload;
- var identifier = topic.substring(topic.lastIndexOf("/") + 1);
-
- //透传上报
- if(topic.endsWith("/event/rawReport")){
- var rst= component.transparentDecode(payload.params);
- if(!rst){
- return null;
- }
- rst.occur=new Date().getTime();
- rst.time=new Date().getTime();
- return rst;
- }
- if (topic.endsWith("/property/post")) {
- //属性上报
- return {
- mid: msg.mid,
- productKey: msg.productKey,
- deviceName: msg.deviceName,
- type:"property",
- identifier: "report", //属性上报
- occur: new Date().getTime(), //时间戳,设备上的事件或数据产生的本地时间
- time: new Date().getTime(), //时间戳,消息上报时间
- data: payload.params,
- };
- } else if (topic.indexOf("/event/") > 0) {
- //事件上报
- return {
- mid: msg.mid,
- productKey: msg.productKey,
- deviceName: msg.deviceName,
- type:"event",
- identifier: identifier,
- occur: new Date().getTime(),
- time: new Date().getTime(),
- data: payload.params,
- };
- }else if(topic.endsWith("/service/property/set_reply")){
- //属性设置回复
- return {
- mid: msg.mid,
- productKey: msg.productKey,
- deviceName: msg.deviceName,
- type:"property",
- identifier: identifier,
- occur: new Date().getTime(),
- time: new Date().getTime(),
- code: payload.code
- };
- } else if (topic.endsWith("_reply")) {
- //服务回复
- return {
- mid: msg.mid,
- productKey: msg.productKey,
- deviceName: msg.deviceName,
- type:"service",
- identifier: identifier,
- occur: new Date().getTime(),
- time: new Date().getTime(),
- code: payload.code,
- data: payload.data,
- };
- }
- return null;
- };
- this.encode = function (service,device) {
- var deviceMid=getMid();
- var method="thing.service.";
- var topic="/sys/"+service.productKey+"/"+service.deviceName+"/c/service/";
- var params={};
-
- //透传下发
- if(device.transparent){
- var rst=component.transparentEncode(service,device);
- topic="/sys/"+rst.productKey+"/"+rst.deviceName+"/c/service/rawSend";
- params.model=rst.content.model;
- params.mac=rst.content.mac;
- params.data=rst.content.data;
-
- return {
- productKey:rst.productKey,
- deviceName:rst.deviceName,
- mid:rst.mid,
- content:{
- topic:topic,
- payload:JSON.stringify({
- id:rst.mid,
- method:method+"rawSend",
- params:params
- })
- }
- }
-
- }
-
- var type=service.type;
- var identifier=service.identifier;
- if(type=="property"){
- method+="property."+identifier;
- topic+="property/"+identifier;
- }else if(type=="service"){
- method+=identifier;
- topic+=identifier;
- }
- for(var p in service.params){
- params[p]=service.params[p];
- }
-
- return {
- productKey:service.productKey,
- deviceName:service.deviceName,
- mid:deviceMid,
- content:{
- topic:topic,
- payload:JSON.stringify({
- id:deviceMid,
- method:method,
- params:params
- })
- }
- }
- };
|