Advertisement
Guest User

Untitled

a guest
Nov 13th, 2019
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.88 KB | None | 0 0
  1. // params: results tu eslasticssearch
  2. processElasticSearchData: async (results, checkGetStatus0 = false) => {
  3. // lay tat ca cac room: room_id, person_sensor
  4. let rooms = await Room.findAll({
  5. attributes: ['room_id', 'person_sensor']
  6. });
  7. // khoi tao mang luu tru gia tri log sensor:
  8. var values = [];
  9.  
  10. // object luu tru cac sensor_id voi cac khoang thoi gian kem theo status(1 hoac 0) cua nhung khoang thoi gian do
  11. let responseData = {};
  12. var lastData = {};
  13.  
  14. // neu co data query tu elastic search
  15. if (results.length) {
  16. // chi lay gia tri _source tu data sensor query tu elastic search
  17. // "_source": {
  18. // "timestamp": "2019-08-01T10:00:00+07:00",
  19. // "sensor_class": "enocean_human",
  20. // "eep": "D5_00_01",
  21. // "sensor_id": "05006455",
  22. // "rssi": "",
  23. // "gw_id": "GCH00478",
  24. // "gw_status": "",
  25. // "status": 1,
  26. // "index": 1,
  27. // "@timestamp": "2019-08-01T10:00:00+07:00"
  28. // }
  29. for(let i = 0; i < results.length; i++) {
  30. values.push(results[i]._source);
  31. }
  32.  
  33. // tao object group data theo sensor id
  34. // {
  35. // sensor_id: [
  36. // data_1,
  37. // data_2
  38. // ]
  39. // }
  40. var group = values.reduce(function (r, a) {
  41. r[a.sensor_id] = r[a.sensor_id] || [];
  42. r[a.sensor_id].push(a);
  43. return r;
  44. }, Object.create(null));
  45.  
  46. // khoi tao bien idDevice = gia tri tat ca cac sensor_id query dc
  47. const idDevices = Object.keys(group);
  48.  
  49.  
  50. // check voi moi sensor id tong hop lai khoang thoi gian co log 1 va 0 va luu vao bien responseData
  51. // {
  52. // sensor_id1: [
  53. // {
  54. // start_time: a,
  55. // end_time: b,
  56. // status: 1
  57. // },
  58. // {
  59. // start_time: c,
  60. // end_time: d,
  61. // status: 0
  62. // },
  63. // ]
  64. // }
  65. for(let i=0; i < idDevices.length; i++){
  66. const values = group[idDevices[i]];
  67. let data = [];
  68. let status = '';
  69. for(let j=0; j < values.length; j++) {
  70. const item = values[j];
  71. if (status !== item.status) {
  72. let startTime = item.timestamp;
  73. if (data.length > 0 && typeof data[data.length-1].endTime == "undefined") {
  74. data[data.length-1].endTime = startTime;
  75. }
  76. data.push({startTime, status: item.status});
  77. }
  78. status = item.status;
  79. if (j + 1 < values.length && item.timestamp.substr(0,10) !== values[j + 1].timestamp.substr(0,10)) {
  80.  
  81. data[data.length -1].endTime = values[j].timestamp;
  82.  
  83. status = '';
  84. }
  85. }
  86. if (data.length > 0){
  87. data[data.length -1].endTime = values[values.length-1].timestamp;
  88. }
  89. let idDevice = idDevices[i].toUpperCase();
  90. responseData[idDevice] = data;
  91. }
  92. }
  93.  
  94. // tong hop data tu responseData phan tich o tren vao cho moi room(cac khoang thoi gian voi status cua tat ca sensor thuoc room)
  95. // {
  96. // room_id_1: [
  97. // {
  98. // start_time: a,
  99. // end_time: b,
  100. // status: 1
  101. // },
  102. // {
  103. // start_time: c,
  104. // end_time: d,
  105. // status: 0
  106. // }
  107. // ]
  108. // }
  109. var objectRoom = {};
  110. for (let i = 0; i < rooms.length; i++) {
  111. let room = rooms[i];
  112. let values = responseData[room.person_sensor.toUpperCase()];
  113.  
  114. if (typeof values != "undefined") {
  115. var roomId = room.room_id;
  116. if (typeof objectRoom[roomId] == "undefined") {
  117. objectRoom[roomId] = values;
  118. } else {
  119. objectRoom[roomId] = [...objectRoom[roomId], ...values];
  120. }
  121. }
  122. }
  123.  
  124. Object.keys(objectRoom).forEach(function (key) {
  125. //tien hanh sap xep cac khoang thoi gian duoc tong hop tu cac sensor theo thu tu start_time tang dan cua room
  126. var values = objectRoom[key];
  127. values.sort(function(a, b) {
  128. if (a.startTime > b.startTime) return 1;
  129. if (a.startTime < b.startTime) return -1;
  130. return 0;
  131. });
  132.  
  133. var result = [], last;
  134. var min = values[0].startTime;
  135. var max = values[0].startTime;
  136.  
  137. // tinh toan cac khoang thoi gian co status 1 cho room
  138. values.forEach(function (r) {
  139. if (values.length == 1 && r.status == 0) {
  140. result.push(r);
  141. return;
  142. }
  143. if (r.endTime > max) {
  144. max = r.endTime;
  145. }
  146. if (r.status === 0 ) {
  147. return;
  148. } else {
  149. if (!last || r.startTime > last.endTime)
  150. result.push(last = r);
  151.  
  152. else if (r.endTime > last.endTime)
  153. last.endTime = r.endTime;
  154. }
  155. });
  156.  
  157. if(checkGetStatus0) {
  158. //handle min max status 0
  159. var minMaxStatus = [
  160. {
  161. startTime: min,
  162. status: 0,
  163. endTime: result[0].startTime
  164. },
  165. {
  166. startTime: result[result.length - 1].endTime,
  167. status: 0,
  168. endTime: max
  169. }
  170. ];
  171.  
  172. // them cac khoang thoi gian co status = 0 vao giua cac khoang trong cua result chua cac khaong thoi gian co status = 1
  173. var addObject = [];
  174. for (let i = 1; i < result.length; i++) {
  175. if (result.length > 1) {// ko can check dk nay do result.length <=1 thi se ko chay vao trong for roi
  176. var startTime = result[i - 1].endTime;
  177. var endTime = result[i].startTime;
  178. var status = 0;
  179.  
  180. addObject.push({startTime: startTime, status: status, endTime: endTime});
  181. }
  182. }
  183. result = [...result, ...minMaxStatus, ...addObject];
  184. }
  185.  
  186. // tinh toan khoang thoi gian = minutes giua end_time va start time
  187. // {
  188. // {
  189. // start_time: a,
  190. // end_time: b,
  191. // status: 1,
  192. // minute: 20
  193. // }
  194. // {
  195. // start_time: c,
  196. // end_time: d,
  197. // status: 0,
  198. // minute: 50
  199. // }
  200. // }
  201. result = result.map(function (r) {
  202. r.minute = moment(r.endTime).diff(moment(r.startTime), 'minutes');
  203. return r;
  204. });
  205. lastData[key] = result;
  206. });
  207.  
  208. return lastData;
  209. },
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement