123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208 |
- 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
- })
- }
- }
- }
- };
|