SHARE
TWEET

Untitled

a guest Nov 13th, 2019 132 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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.     },
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top