converter.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. var mid=1;
  2. function getMid(){
  3. mid++;
  4. if(mid>10000){
  5. mid=1;
  6. }
  7. return mid+"";
  8. }
  9. this.decode = function (msg) {
  10. //对msg进行解析,并返回物模型数据
  11. var content=msg.content;
  12. var topic = content.topic;
  13. var payload = content.payload;
  14. var identifier = topic.substring(topic.lastIndexOf("/") + 1);
  15. //透传上报
  16. if(topic.endsWith("/event/rawReport")){
  17. var rst= component.transparentDecode(payload.params);
  18. if(!rst){
  19. return null;
  20. }
  21. rst.occur=new Date().getTime();
  22. rst.time=new Date().getTime();
  23. return rst;
  24. }
  25. if (topic.endsWith("/property/post")) {
  26. //属性上报
  27. return {
  28. mid: msg.mid,
  29. productKey: msg.productKey,
  30. deviceName: msg.deviceName,
  31. type:"property",
  32. identifier: "report", //属性上报
  33. occur: new Date().getTime(), //时间戳,设备上的事件或数据产生的本地时间
  34. time: new Date().getTime(), //时间戳,消息上报时间
  35. data: payload.params,
  36. };
  37. } else if (topic.indexOf("/event/") > 0) {
  38. //事件上报
  39. return {
  40. mid: msg.mid,
  41. productKey: msg.productKey,
  42. deviceName: msg.deviceName,
  43. type:"event",
  44. identifier: identifier,
  45. occur: new Date().getTime(),
  46. time: new Date().getTime(),
  47. data: payload.params,
  48. };
  49. }else if(topic.endsWith("/service/property/set_reply")){
  50. //属性设置回复
  51. return {
  52. mid: msg.mid,
  53. productKey: msg.productKey,
  54. deviceName: msg.deviceName,
  55. type:"property",
  56. identifier: identifier,
  57. occur: new Date().getTime(),
  58. time: new Date().getTime(),
  59. code: payload.code
  60. };
  61. } else if (topic.endsWith("_reply")) {
  62. //服务回复
  63. return {
  64. mid: msg.mid,
  65. productKey: msg.productKey,
  66. deviceName: msg.deviceName,
  67. type:"service",
  68. identifier: identifier,
  69. occur: new Date().getTime(),
  70. time: new Date().getTime(),
  71. code: payload.code,
  72. data: payload.data,
  73. };
  74. }
  75. return null;
  76. };
  77. this.encode = function (service,device) {
  78. var deviceMid=getMid();
  79. var method="thing.service.";
  80. var topic="/sys/"+service.productKey+"/"+service.deviceName+"/c/service/";
  81. var params={};
  82. //透传下发
  83. if(device.transparent){
  84. var rst=component.transparentEncode(service,device);
  85. topic="/sys/"+rst.productKey+"/"+rst.deviceName+"/c/service/rawSend";
  86. params.model=rst.content.model;
  87. params.mac=rst.content.mac;
  88. params.data=rst.content.data;
  89. return {
  90. productKey:rst.productKey,
  91. deviceName:rst.deviceName,
  92. mid:rst.mid,
  93. content:{
  94. topic:topic,
  95. payload:JSON.stringify({
  96. id:rst.mid,
  97. method:method+"rawSend",
  98. params:params
  99. })
  100. }
  101. }
  102. }
  103. var type=service.type;
  104. var identifier=service.identifier;
  105. if(type=="property"){
  106. method+="property."+identifier;
  107. topic+="property/"+identifier;
  108. }else if(type=="service"){
  109. method+=identifier;
  110. topic+=identifier;
  111. }
  112. for(var p in service.params){
  113. params[p]=service.params[p];
  114. }
  115. return {
  116. productKey:service.productKey,
  117. deviceName:service.deviceName,
  118. mid:deviceMid,
  119. content:{
  120. topic:topic,
  121. payload:JSON.stringify({
  122. id:deviceMid,
  123. method:method,
  124. params:params
  125. })
  126. }
  127. }
  128. };