demo-device.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. /**
  2. * 烟感设备模拟器
  3. */
  4. var _logger = logger;
  5. //设备实例id前缀
  6. var devicePrefix = "demo-";
  7. var eventId = Math.ceil(Math.random() * 1000);
  8. //事件类型
  9. var events = {
  10. reportProperty: function (index, session) {
  11. var deviceId = session.auth.clientId;
  12. var topic = "/report-property";
  13. var json = JSON.stringify({
  14. "deviceId": deviceId,
  15. "success": true,
  16. "timestamp": new Date().getTime(),
  17. properties: {"temperature": java.util.concurrent.ThreadLocalRandom.current().nextInt(20, 30)},
  18. });
  19. session.sendMessage(topic, json)
  20. },
  21. fireAlarm: function (index, session) {
  22. var deviceId = session.auth.clientId;
  23. var topic = "/fire_alarm/department/1/area/1/dev/" + deviceId;
  24. var json = JSON.stringify({
  25. "deviceId": deviceId, // 设备编号 "pid": "TBS-110", // 设备编号
  26. "a_name": "商务大厦", // 区域名称 "bid": 2, // 建筑 ID
  27. "b_name": "C2 栋", // 建筑名称
  28. "l_name": "12-05-201", // 位置名称
  29. "timestamp": new Date().getTime() // 消息时间
  30. });
  31. session.sendMessage(topic, json)
  32. }
  33. };
  34. //事件上报
  35. simulator.onEvent(function (index, session) {
  36. //上报属性
  37. events.reportProperty(index, session);
  38. //上报火警
  39. events.fireAlarm(index, session);
  40. });
  41. //读取属性
  42. simulator.bindHandler("/read-property", function (message, session) {
  43. _logger.info("读取属性:[{}]", message);
  44. session.sendMessage("/read-property-reply", JSON.stringify({
  45. messageId: message.messageId,
  46. deviceId: message.deviceId,
  47. timestamp: new Date().getTime(),
  48. properties: {"temperature": java.util.concurrent.ThreadLocalRandom.current().nextInt(20, 30)},
  49. success: true
  50. }));
  51. });
  52. //读取子设备属性
  53. simulator.bindHandler("/children/read-property", function (message, session) {
  54. _logger.info("读取子设备属性:[{}]", message);
  55. session.sendMessage("/children/read-property-reply", JSON.stringify({
  56. messageId: message.messageId,
  57. deviceId: message.deviceId,
  58. timestamp: new Date().getTime(),
  59. properties: {"temperature": java.util.concurrent.ThreadLocalRandom.current().nextInt(20, 30)},
  60. success: true
  61. }));
  62. });
  63. //调用功能
  64. simulator.bindHandler("/invoke-function", function (message, session) {
  65. _logger.info("调用功能:[{}]", message);
  66. session.sendMessage("/invoke-function", JSON.stringify({
  67. messageId: message.messageId,
  68. deviceId: message.deviceId,
  69. timestamp: new Date().getTime(),
  70. output: "ok", //返回结果
  71. success: true
  72. }));
  73. });
  74. //修改属性
  75. simulator.bindHandler("/write-property", function (message, session) {
  76. var reply = com.alibaba.fastjson.JSON.toJSONString({
  77. messageId: message.messageId,
  78. deviceId: message.deviceId,
  79. timestamp: new Date().getTime(),
  80. properties: new java.util.HashMap(message.properties),
  81. success: true
  82. });
  83. _logger.info("修改属性:{}\n{}", message,reply);
  84. session.sendMessage("/write-property",reply);
  85. });
  86. simulator.onConnect(function (session) {
  87. //自动绑定下级设备
  88. // session.sendMessage("/children/register", JSON.stringify({
  89. // deviceId: "test202278", //子设备ID
  90. // timestamp: new Date().getTime(),
  91. // success: true
  92. // }));
  93. //注销子设备
  94. // simulator.runDelay(function () {
  95. // session.sendMessage("/children/unregister", JSON.stringify({
  96. // deviceId: "test202278",
  97. // timestamp: new Date().getTime(),
  98. // success: true
  99. // }));
  100. // },2000)
  101. });
  102. simulator.onAuth(function (index, auth) {
  103. auth.setClientId(devicePrefix + index);
  104. auth.setUsername("admin");
  105. auth.setPassword("admin");
  106. });