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("/ota/") > 0) { //事件上报 return { mid: msg.mid, productKey: msg.productKey, deviceName: msg.deviceName, type: "ota", identifier: "ota", 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("/config/set_reply")) { //设备配置设置回复 return { mid: msg.mid, productKey: msg.productKey, deviceName: msg.deviceName, type: "config", identifier: "set_reply", occur: new Date().getTime(), time: new Date().getTime(), code: payload.code }; } else if (topic.endsWith("/config/get")) { //设备配置获取 return { mid: msg.mid, productKey: msg.productKey, deviceName: msg.deviceName, type: "config", identifier: "get", occur: new Date().getTime(), time: new Date().getTime(), data: {}, }; } 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.deviceName = rst.content.deviceName; 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; } else if (type == "ota") { method += identifier; topic = "/ota/device/upgrade/" + service.productKey + "/" + service.deviceName; } else if (type == "config") { //设备配置下发 method += identifier; topic = "/sys/" + service.productKey + "/" + service.deviceName + "/c/config/" + identifier; } else if (type = "lifetime") { //子设备注销下发 method += identifier; topic = "/sys/" + service.productKey + "/" + service.deviceName + "/c/deregister"; } if (type == "property" && identifier == "get") { var listParams = [] for (var p in service.params) { listParams.push(service.params[p]); } return { productKey: service.productKey, deviceName: service.deviceName, mid: deviceMid, content: { topic: topic, payload: JSON.stringify({ id: deviceMid, method: method, params: listParams }) } } } else { 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 }) } } } };