demo-device.js 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. /**
  2. * 烟感设备模拟器
  3. */
  4. var _logger = logger;
  5. //设备实例id前缀
  6. var devicePrefix = "test";
  7. var eventId = Math.ceil(Math.random() * 1000);
  8. //事件类型
  9. var events = {
  10. reportProperty: function (index, session) {
  11. var deviceId = "test001";
  12. var topic = "/report-property";
  13. var prop = new java.util.HashMap();
  14. //prop.put("temperature", java.util.concurrent.ThreadLocalRandom.current().nextDouble(20, 30))
  15. for (var i = 0; i < 3; i++) {
  16. prop.put("temp" + i, randomFloat())
  17. }
  18. var json = com.alibaba.fastjson.JSON.toJSONString({
  19. "deviceId": deviceId,
  20. "success": true,
  21. "timestamp": new Date().getTime(),
  22. // "headers":{"keepOnline":true},
  23. properties: prop,
  24. });
  25. session.sendMessage(topic, json)
  26. },
  27. fireAlarm: function (index, session) {
  28. var deviceId = "test001";
  29. var topic = "/fire_alarm/department/1/area/1/dev/" + deviceId;
  30. var json = JSON.stringify({
  31. "deviceId": deviceId, // 设备编号 "pid": "TBS-110", // 设备编号
  32. "a_name": "商务大厦", // 区域名称 "bid": 2, // 建筑 ID
  33. "b_name": "C2 栋", // 建筑名称
  34. "l_name": "12-05-201", // 位置名称
  35. "time": "2020-04-20 13:12:11",
  36. "timestamp": new Date().getTime() // 消息时间
  37. });
  38. session.sendMessage(topic, json)
  39. }
  40. };
  41. var counter = 0;
  42. function randomFloat(){
  43. var val=java.util.concurrent.ThreadLocalRandom.current().nextInt(20, 30);
  44. return val;
  45. // return parseInt(val*100)/100;
  46. }
  47. //事件上报
  48. simulator.onEvent(function (index, session) {
  49. counter++;
  50. // if (counter >= 200000) {
  51. // java.lang.System.exit(0);
  52. // return;
  53. // }
  54. //上报属性
  55. events.reportProperty(index, session);
  56. // events.reportProperty(index, session);
  57. // events.reportProperty(index, session);
  58. // events.reportProperty(index, session);
  59. // events.reportProperty(index, session);
  60. //上报火警
  61. // events.fireAlarm(index, session);
  62. // events.fireAlarm(index, session);
  63. // events.fireAlarm(index, session);
  64. // events.fireAlarm(index, session);
  65. // events.fireAlarm(index, session);
  66. //
  67. // events.fireAlarm(index, session);
  68. // events.fireAlarm(index, session);
  69. // events.fireAlarm(index, session);
  70. // events.fireAlarm(index, session);
  71. // events.fireAlarm(index, session);
  72. });
  73. simulator.bindHandler("/read-property", function (message, session) {
  74. var prop = new java.util.HashMap();
  75. prop.put("temperature", java.util.concurrent.ThreadLocalRandom.current().nextDouble(20, 30))
  76. for (var i = 0; i < 40; i++) {
  77. prop.put("temp" + i, java.util.concurrent.ThreadLocalRandom.current().nextDouble(20, 30))
  78. }
  79. var reply = {
  80. messageId: message.messageId,
  81. deviceId: message.deviceId,
  82. timestamp: new Date().getTime(),
  83. properties: prop,
  84. success: true
  85. };
  86. _logger.info("读取属性:[{}]:{}", message, com.alibaba.fastjson.JSON.toJSONString(reply));
  87. session.sendMessage("/read-property-reply", com.alibaba.fastjson.JSON.toJSONString(reply));
  88. // simulator.runDelay(function () {
  89. // session.sendMessage("/read-property-reply", JSON.stringify({
  90. // messageId: message.messageId,
  91. // deviceId: message.deviceId,
  92. // timestamp: new Date().getTime(),
  93. // properties: {"temperature": java.util.concurrent.ThreadLocalRandom.current().nextInt(20, 30)},
  94. // success: true
  95. // }));
  96. // }, 2000)
  97. });
  98. simulator.bindHandler("/children/read-property", function (message, session) {
  99. _logger.info("读取子设备属性:[{}]", message);
  100. session.sendMessage("/children/read-property-reply", JSON.stringify({
  101. messageId: message.messageId,
  102. deviceId: message.deviceId,
  103. timestamp: new Date().getTime(),
  104. properties: {"temperature": java.util.concurrent.ThreadLocalRandom.current().nextInt(20, 30)},
  105. success: true
  106. }));
  107. });
  108. simulator.bindHandler("/children/read-property", function (message, session) {
  109. _logger.info("读取子设备属性:[{}]", message);
  110. session.sendMessage("/children/read-property-reply", JSON.stringify({
  111. messageId: message.messageId,
  112. deviceId: message.deviceId,
  113. timestamp: new Date().getTime(),
  114. properties: {"temperature": java.util.concurrent.ThreadLocalRandom.current().nextInt(20, 30)},
  115. success: true
  116. }));
  117. });
  118. simulator.bindHandler("/children/invoke-function", function (message, session) {
  119. _logger.info("调用子设备功能:[{}]", message);
  120. session.sendMessage("/children/invoke-function", JSON.stringify({
  121. messageId: message.messageId,
  122. deviceId: message.deviceId,
  123. timestamp: new Date().getTime(),
  124. output: "ok", //返回结果
  125. success: true
  126. }));
  127. });
  128. simulator.bindHandler("/invoke-function", function (message, session) {
  129. _logger.info("调用设备功能:[{}]", message);
  130. session.sendMessage("/invoke-function", JSON.stringify({
  131. messageId: message.messageId,
  132. deviceId: message.deviceId,
  133. timestamp: new Date().getTime(),
  134. output: "ok", //返回结果
  135. success: true
  136. }));
  137. });
  138. simulator.bindHandler("/write-property", function (message, session) {
  139. var reply = com.alibaba.fastjson.JSON.toJSONString({
  140. messageId: message.messageId,
  141. deviceId: message.deviceId,
  142. timestamp: new Date().getTime(),
  143. headers:{"partialProperties":true},
  144. properties: new java.util.HashMap(message.properties),
  145. success: true
  146. });
  147. _logger.info("修改属性:{}\n{}", message, reply);
  148. session.sendMessage("/write-property", reply);
  149. });
  150. //订阅固件更新
  151. simulator.bindHandler("/firmware/push", function (message, session) {
  152. _logger.info("固件更新:{}", message.toString());
  153. if (message.success === false) {
  154. return;
  155. }
  156. var progress = 0;
  157. var version = message.version;
  158. doUpgrade();
  159. function doUpgrade() {
  160. simulator.runDelay(function () {
  161. progress += 10;
  162. session.sendMessage("/firmware/progress", JSON.stringify({
  163. deviceId: message.deviceId,
  164. complete: progress >= 100, //更新完成
  165. progress: progress, //更新进度
  166. timestamp: new Date().getTime(),
  167. version: version, //更新版本号
  168. success: true
  169. }));
  170. if (progress >= 100) {
  171. return;
  172. }
  173. //模拟进度
  174. doUpgrade();
  175. }, 1000)
  176. }
  177. });
  178. simulator.onConnect(function (session) {
  179. // simulator.runDelay(function () {
  180. //
  181. // session.sendMessage("/firmware/report", JSON.stringify({
  182. // deviceId: session.auth.clientId,
  183. // timestamp: new Date().getTime(),
  184. // version: "1.0",
  185. // success: true
  186. // }));
  187. //
  188. // session.sendMessage("/firmware/pull", JSON.stringify({
  189. // deviceId: session.auth.clientId,
  190. // timestamp: new Date().getTime(),
  191. // version: "1.0",
  192. // success: true
  193. // }));
  194. // }, 2000)
  195. //自动注册
  196. // session.sendMessage("/register", JSON.stringify({
  197. // deviceId: "aaaaabb",
  198. // timestamp: new Date().getTime(),
  199. // success: true,
  200. // headers:{
  201. // "productId":"demo-device",
  202. // "deviceName":"自动注册"
  203. // }
  204. // }));
  205. // simulator.runDelay(function () {
  206. // session.sendMessage("/children/unregister", JSON.stringify({
  207. // deviceId: "test202278",
  208. // timestamp: new Date().getTime(),
  209. // success: true
  210. // }));
  211. // },2000)
  212. });
  213. simulator.onAuth(function (index, auth) {
  214. auth.setClientId("test001");
  215. auth.setUsername("test");
  216. auth.setPassword("test");
  217. });