mqtt-devices-parser 1.0.11 → 1.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/src/db/data.js CHANGED
@@ -1,6 +1,8 @@
1
1
  const moment = require('moment');
2
2
  var mysql = require('mysql2')
3
3
 
4
+ // Use this call only for dbs outside this module, they need to be registered on sequelize
5
+
4
6
  var self = module.exports = {
5
7
 
6
8
  checkEntry : async (table,deviceId)=>{
@@ -19,8 +21,7 @@ var self = module.exports = {
19
21
  return resolve(null);
20
22
  })
21
23
  .catch( err => {
22
- console.log(err);
23
- return resolve(null);
24
+ return reject(err);
24
25
  });
25
26
  });
26
27
  },
@@ -73,8 +74,7 @@ var self = module.exports = {
73
74
  return resolve(rows);
74
75
  })
75
76
  .catch((err)=>{
76
- console.log(err);
77
- return resolve();
77
+ return reject(err);
78
78
  })
79
79
  }else{
80
80
  let filter = {
@@ -85,12 +85,14 @@ var self = module.exports = {
85
85
  return resolve(rows);
86
86
  })
87
87
  .catch((err)=>{
88
- console.log(err);
89
- return resolve();
88
+ return reject(err);
90
89
  })
91
90
  }
92
91
 
93
- }else return resolve();
92
+ }else{
93
+ return resolve();
94
+ //return reject(`columns not found for table ${table}`);
95
+ }
94
96
  }else{
95
97
 
96
98
  let key = topic;
@@ -110,8 +112,7 @@ var self = module.exports = {
110
112
  return resolve(rows);
111
113
  })
112
114
  .catch((err)=>{
113
- console.log(err);
114
- return resolve(null);
115
+ return reject(err);
115
116
  })
116
117
  }else{
117
118
  let filter = {
@@ -123,11 +124,13 @@ var self = module.exports = {
123
124
  return resolve(rows);
124
125
  })
125
126
  .catch((err)=>{
126
- console.log(err);
127
- return resolve(null);
127
+ return reject(err);
128
128
  })
129
129
  }
130
- }else return resolve();
130
+ }else{
131
+ return resolve();
132
+ //return reject(`columns not found for table ${table}`);
133
+ }
131
134
  }
132
135
  })
133
136
  },
@@ -137,7 +140,7 @@ var self = module.exports = {
137
140
  return new Promise( async (resolve, reject) => {
138
141
 
139
142
  if (!payload || typeof payload !== 'object')
140
- return resolve();
143
+ return reject("Not object");
141
144
 
142
145
  let obj = {
143
146
  updatedAt: moment().utc().format('YYYY-MM-DD HH:mm:ss'),
@@ -146,8 +149,10 @@ var self = module.exports = {
146
149
 
147
150
  // Get columns info
148
151
  const db_columns = $.models.get(table);
149
- if (db_columns == null)
150
- return resolve();
152
+ if (db_columns == null){
153
+ resolve();
154
+ //return reject(`columns not found for table ${table}`);
155
+ }
151
156
 
152
157
  // Prepare data for insertion
153
158
  for (let key in payload) {
@@ -171,8 +176,7 @@ var self = module.exports = {
171
176
  return resolve(rows);
172
177
  })
173
178
  .catch((err)=>{
174
- console.log(err);
175
- return resolve();
179
+ return reject(err);
176
180
  })
177
181
  }else{
178
182
  let filter = {
@@ -183,12 +187,9 @@ var self = module.exports = {
183
187
  return resolve(rows);
184
188
  })
185
189
  .catch((err)=>{
186
- console.log(err);
187
- return resolve();
190
+ return reject(err);
188
191
  })
189
192
  }
190
-
191
- return resolve();
192
193
  });
193
194
  },
194
195
 
@@ -198,74 +199,78 @@ var self = module.exports = {
198
199
 
199
200
  if(!payload) return resolve();
200
201
 
201
- let data = null;
202
- // check if data is in JSON format
203
- try{
204
- data = JSON.parse(payload);
205
- }catch(e){
206
- data = payload;
207
- }
202
+ let data = null;
203
+ // check if data is in JSON format
204
+ try{
205
+ data = JSON.parse(payload);
206
+ }catch(e){
207
+ data = payload;
208
+ }
208
209
 
209
- let obj = {
210
- updatedAt : moment().utc().format('YYYY-MM-DD HH:mm:ss')
211
- }
210
+ let obj = {
211
+ updatedAt : moment().utc().format('YYYY-MM-DD HH:mm:ss')
212
+ }
212
213
 
213
- let db_columns = $.models.get(table);
214
- if(db_columns == null)
215
- return resolve();
214
+ let db_columns = $.models.get(table);
215
+ if(db_columns == null){
216
+ resolve();
217
+ //return reject(`columns not found for table ${table}`);
218
+ }
216
219
 
217
- let index = topic.indexOf("/");
220
+ let index = topic.indexOf("/");
218
221
 
219
- if(index > -1){ // check if topic has subtopics
220
- let key = topic.substring(0,index);
221
- topic = topic.substring(index+1);
222
+ if(index > -1){ // check if topic has subtopics
223
+ let key = topic.substring(0,index);
224
+ topic = topic.substring(index+1);
222
225
 
223
- if(db_columns.hasOwnProperty(key)){ // check if db has a column for this key
224
- // create JSON struct with the remaining topic
225
- // key is the column
226
+ if(db_columns.hasOwnProperty(key)){ // check if db has a column for this key
227
+ // create JSON struct with the remaining topic
228
+ // key is the column
226
229
 
227
- // build object with the remaining topic and respective data
228
- if(typeof data === "object")
229
- obj[key] = JSON.stringify(parser.pathIntoObject(topic,JSON.stringify(data)))
230
- else
231
- obj[key] = JSON.stringify(parser.pathIntoObject(topic,data));
230
+ // build object with the remaining topic and respective data
231
+ if(typeof data === "object")
232
+ obj[key] = JSON.stringify(parser.pathIntoObject(topic,JSON.stringify(data)))
233
+ else
234
+ obj[key] = JSON.stringify(parser.pathIntoObject(topic,data));
235
+
236
+ obj['device_id'] = deviceId;
237
+ obj['createdAt'] = moment().utc().format('YYYY-MM-DD HH:mm:ss');
238
+ $.db.insert(table,obj)
239
+ .then((rows)=>{
240
+ return resolve(rows);
241
+ })
242
+ .catch((err)=>{
243
+ return reject(err);
244
+ })
232
245
 
233
- obj['device_id'] = deviceId;
234
- obj['createdAt'] = moment().utc().format('YYYY-MM-DD HH:mm:ss');
235
- $.db.insert(table,obj)
236
- .then((rows)=>{
237
- return resolve(rows);
238
- })
239
- .catch((err)=>{
240
- console.log(err);
241
- return resolve();
242
- })
243
-
244
- }else
245
- return resolve();
246
246
  }else{
247
+ resolve();
248
+ //return reject(`column ${key} not found for table ${table}`);
249
+ }
250
+ }else{
247
251
 
248
- let key = topic;
249
- if(db_columns.hasOwnProperty(key)){ // check if db has a column for this key
250
- // build object with respective data
251
- if(typeof data === "object")
252
- obj[key] = JSON.stringify(data);
253
- else
254
- obj[key] = data;
252
+ let key = topic;
253
+ if(db_columns.hasOwnProperty(key)){ // check if db has a column for this key
254
+ // build object with respective data
255
+ if(typeof data === "object")
256
+ obj[key] = JSON.stringify(data);
257
+ else
258
+ obj[key] = data;
255
259
 
256
- obj['device_id'] = deviceId;
257
- obj['createdAt'] = moment().utc().format('YYYY-MM-DD HH:mm:ss');
258
- $.db.insert(table,obj)
259
- .then((rows)=>{
260
- return resolve(rows);
261
- })
262
- .catch((err)=>{
263
- console.log(err);
264
- return resolve();
265
- })
266
- }else
267
- return resolve();
260
+ obj['device_id'] = deviceId;
261
+ obj['createdAt'] = moment().utc().format('YYYY-MM-DD HH:mm:ss');
262
+ $.db.insert(table,obj)
263
+ .then((rows)=>{
264
+ return resolve(rows);
265
+ })
266
+ .catch((err)=>{
267
+ return reject(err);
268
+ })
269
+ }else{
270
+ resolve();
271
+ //return reject(`column ${key} not found for table ${table}`);
268
272
  }
273
+ }
269
274
 
270
275
  });
271
276
  },
@@ -273,7 +278,7 @@ var self = module.exports = {
273
278
  addJsonLog: async (table, deviceId, dataObject) => {
274
279
  return new Promise((resolve, reject) => {
275
280
  if (!dataObject || typeof dataObject !== 'object')
276
- return resolve();
281
+ return reject("Not an object");
277
282
 
278
283
  let obj = {
279
284
  updatedAt: moment().utc().format('YYYY-MM-DD HH:mm:ss'),
@@ -284,7 +289,7 @@ var self = module.exports = {
284
289
  // Get columns info
285
290
  const db_columns = $.models.get(table);
286
291
  if (db_columns == null)
287
- return resolve();
292
+ return reject(`No columns for table: ${table}`);
288
293
 
289
294
  // Prepare data for insertion
290
295
  for (let key in dataObject) {
@@ -300,14 +305,12 @@ var self = module.exports = {
300
305
  }
301
306
  }
302
307
 
303
- //console.log("updateJSONlog")
304
308
  $.db.insert(table, obj)
305
309
  .then((rows)=>{
306
310
  return resolve(rows);
307
311
  })
308
312
  .catch((err)=>{
309
- console.log(err);
310
- return resolve();
313
+ return reject(err);
311
314
  })
312
315
  });
313
316
  },
@@ -317,8 +320,10 @@ var self = module.exports = {
317
320
  return new Promise((resolve,reject) => {
318
321
 
319
322
  let db_columns = $.models.get(table);
320
- if(db_columns == null)
321
- return resolve();
323
+ if(db_columns == null){
324
+ resolve();
325
+ //return reject(`columns not found for table ${table}`);
326
+ }
322
327
 
323
328
  $.db.delete(table,{id:0})
324
329
  let index = topic.indexOf("/");
@@ -344,8 +349,7 @@ var self = module.exports = {
344
349
  return resolve(rows);
345
350
  })
346
351
  .catch((err)=>{
347
- console.log(err);
348
- return resolve();
352
+ return reject(err);
349
353
  })
350
354
  }
351
355
  }else{
package/src/db/db.js CHANGED
@@ -144,6 +144,7 @@ var self = module.exports = {
144
144
  });
145
145
  },
146
146
 
147
+ // update column with json data
147
148
  updateJSON : async (table, column, data, filter) => {
148
149
 
149
150
  return new Promise((resolve, reject) => {
@@ -317,6 +318,29 @@ var self = module.exports = {
317
318
  });
318
319
  },
319
320
 
321
+ getDataFromDeviceId : async (table,deviceId)=>{
322
+
323
+ return new Promise((resolve,reject) => {
324
+
325
+ self.getConnection((err,conn)=>{
326
+ if(err) return reject(err);
327
+
328
+ let query = "SELECT ?? FROM ?? where device_id = ?";
329
+ let args = [field,table,deviceId];
330
+ query = mysql.format(query,args);
331
+ conn.query(query,function(err,rows){
332
+ $.db.close_db_connection(conn);
333
+ if(err) return reject(err)
334
+ else{
335
+ if(rows.length == 1 ){
336
+ return resolve(rows[0]);
337
+ }else return resolve(null);
338
+ }
339
+ });
340
+ });
341
+ });
342
+ },
343
+
320
344
  getFieldFromDeviceId : async (table,deviceId,field)=>{
321
345
 
322
346
  return new Promise((resolve,reject) => {
package/src/db/device.js CHANGED
@@ -3,10 +3,31 @@ var mysql = require('mysql2')
3
3
 
4
4
  var self = module.exports = {
5
5
 
6
+ getById : async (deviceId)=>{
7
+ return new Promise((resolve,reject) => {
8
+
9
+ let query = "SELECT * FROM ?? where id = ?";
10
+ let table = ["devices",deviceId];
11
+ query = mysql.format(query,table);
12
+
13
+ $.db.queryRow(query)
14
+ .then( rows => {
15
+ if(rows.length > 0)
16
+ return resolve(rows[0]);
17
+ else
18
+ return resolve(null);
19
+ })
20
+ .catch( err => {
21
+ console.log(err);
22
+ return resolve(null);
23
+ });
24
+ });
25
+ },
26
+
6
27
  get : async (uid)=>{
7
28
  return new Promise((resolve,reject) => {
8
29
 
9
- let query = "SELECT id,uid,project_id,model_id,status FROM ?? where uid = ?";
30
+ let query = "SELECT * FROM ?? where uid = ?";
10
31
  let table = ["devices",uid];
11
32
  query = mysql.format(query,table);
12
33
 
@@ -45,6 +66,48 @@ var self = module.exports = {
45
66
  });
46
67
  },
47
68
 
69
+ listByModel : async (model_id)=>{
70
+ return new Promise((resolve,reject) => {
71
+
72
+ let query = "SELECT * FROM ?? where model_id = ?";
73
+ let table = ["devices",model_id];
74
+ query = mysql.format(query,table);
75
+
76
+ $.db.queryRow(query)
77
+ .then( rows => {
78
+ if(rows.length > 0)
79
+ return resolve(rows);
80
+ else
81
+ return resolve(null);
82
+ })
83
+ .catch( err => {
84
+ console.log(err);
85
+ return resolve(null);
86
+ });
87
+ });
88
+ },
89
+
90
+ listOnlineByModel : async (model_id)=>{
91
+ return new Promise((resolve,reject) => {
92
+
93
+ let query = "SELECT * FROM ?? where model_id = ? and status = ?";
94
+ let table = ["devices",model_id,"online"];
95
+ query = mysql.format(query,table);
96
+
97
+ $.db.queryRow(query)
98
+ .then( rows => {
99
+ if(rows.length > 0)
100
+ return resolve(rows);
101
+ else
102
+ return resolve(null);
103
+ })
104
+ .catch( err => {
105
+ console.log(err);
106
+ return resolve(null);
107
+ });
108
+ });
109
+ },
110
+
48
111
  getField : async (id,column)=>{
49
112
  return new Promise((resolve,reject) => {
50
113
 
@@ -66,14 +129,12 @@ var self = module.exports = {
66
129
  });
67
130
  },
68
131
 
69
- insert : async(uid)=>{
132
+ insert : async(obj)=>{
70
133
 
71
134
  return new Promise((resolve,reject) => {
72
- let obj = {
73
- uid : uid,
74
- createdAt : moment().utc().format('YYYY-MM-DD HH:mm:ss'),
75
- updatedAt : moment().utc().format('YYYY-MM-DD HH:mm:ss')
76
- }
135
+ let timestamp = moment().utc().format('YYYY-MM-DD HH:mm:ss');
136
+ obj['createdAt'] = timestamp;
137
+ obj['updatedAt'] = timestamp;
77
138
 
78
139
  $.db.insert("devices",obj)
79
140
  .then (rows => {
@@ -108,4 +169,224 @@ var self = module.exports = {
108
169
  });
109
170
  },
110
171
 
172
+ updateObject : async (deviceId, obj)=>{
173
+
174
+ return new Promise( async (resolve, reject) => {
175
+
176
+ const table = "devices";
177
+
178
+ if (!obj || typeof obj !== 'object')
179
+ return reject("Not object");
180
+
181
+ obj['updatedAt'] = moment().utc().format('YYYY-MM-DD HH:mm:ss');
182
+
183
+ let filter = {
184
+ id : deviceId
185
+ }
186
+ $.db.update(table,obj,filter)
187
+ .then((rows)=>{
188
+ return resolve(rows);
189
+ })
190
+ .catch((err)=>{
191
+ return reject(err);
192
+ })
193
+
194
+ });
195
+ },
196
+
197
+
198
+ addLog : async(id,column,value)=>{
199
+ return new Promise((resolve,reject) => {
200
+
201
+ const timestamp = moment().utc().format('YYYY-MM-DD HH:mm:ss')
202
+ let obj = {
203
+ createdAt : timestamp,
204
+ updatedAt : timestamp
205
+ };
206
+
207
+ obj['device_id'] = id;
208
+ obj[column] = value;
209
+
210
+ $.db.insert("logs_devices",obj)
211
+ .then (rows => {
212
+ return resolve(rows);
213
+ })
214
+ .catch(error => {
215
+ return reject(error);
216
+ });
217
+ });
218
+ },
219
+
220
+ addLogIfChanged : async(id,column,value)=>{
221
+ return new Promise(async (resolve,reject) => {
222
+
223
+ let query = "SELECT ?? FROM ?? where id = ? and ?? is NOT NULL ORDER BY updatedAt DESC LIMIT 1";
224
+ let table = [column,"logs_devices",id,column];
225
+ query = mysql.format(query,table);
226
+
227
+ try{
228
+ let rows = await $.db.queryRow(query)
229
+
230
+ if(rows.length > 0){
231
+ let lastValue = rows[0]?.column
232
+ if(lastValue == value)
233
+ resolve();
234
+ }
235
+
236
+ const timestamp = moment().utc().format('YYYY-MM-DD HH:mm:ss')
237
+ let obj = {
238
+ createdAt : timestamp,
239
+ updatedAt : timestamp
240
+ };
241
+
242
+ obj['device_id'] = id;
243
+ obj[column] = value;
244
+
245
+ await $.db.insert("logs_devices",obj)
246
+
247
+ resolve();
248
+
249
+ }catch (err) {
250
+ return reject(err);
251
+ };
252
+
253
+ });
254
+ },
255
+
256
+ getLocalSettings : async(deviceId)=>{
257
+
258
+ return new Promise((resolve,reject) => {
259
+
260
+ let query = "SELECT local_settings FROM ?? where id = ?";
261
+ let table = ["devices", deviceId];
262
+ query = mysql.format(query,table);
263
+
264
+ $.db.queryRow(query)
265
+ .then( rows => {
266
+ if(rows?.length > 0)
267
+ return resolve(rows[0]?.local_settings);
268
+ else
269
+ return resolve(null);
270
+ })
271
+ .catch( err => {
272
+ return reject(err);
273
+ });
274
+ });
275
+ },
276
+
277
+ updateLocalSettings : async(settings, deviceId)=>{
278
+
279
+ return new Promise((resolve,reject) => {
280
+ let obj = {
281
+ local_settings : settings,
282
+ updatedAt : moment().utc().format('YYYY-MM-DD HH:mm:ss')
283
+ }
284
+
285
+ let filter = {
286
+ id : deviceId
287
+ };
288
+
289
+ resolve(null)
290
+
291
+ $.db.update("devices",obj,filter)
292
+ .then (rows => {
293
+ return resolve(rows[0]);
294
+ })
295
+ .catch(error => {
296
+ return reject(error);
297
+ });
298
+
299
+ });
300
+ },
301
+
302
+ getRemoteSettings : async(deviceId)=>{
303
+
304
+ return new Promise((resolve,reject) => {
305
+
306
+ let query = "SELECT remote_settings FROM ?? where id = ?";
307
+ let table = ["devices", deviceId];
308
+ query = mysql.format(query,table);
309
+
310
+ $.db.queryRow(query)
311
+ .then( rows => {
312
+ if(rows?.length > 0)
313
+ return resolve(rows[0]?.remote_settings);
314
+ else
315
+ return resolve(null);
316
+ })
317
+ .catch( err => {
318
+ return reject(err);
319
+ });
320
+ });
321
+ },
322
+
323
+ updateRemoteSettings : async(settings, deviceId)=>{
324
+
325
+ return new Promise((resolve,reject) => {
326
+ let obj = {
327
+ remote_settings : settings,
328
+ updatedAt : moment().utc().format('YYYY-MM-DD HH:mm:ss')
329
+ }
330
+
331
+ let filter = {
332
+ id : deviceId
333
+ };
334
+
335
+ resolve(null)
336
+
337
+ $.db.update("devices",obj,filter)
338
+ .then (rows => {
339
+ return resolve(rows[0]);
340
+ })
341
+ .catch(error => {
342
+ return reject(error);
343
+ });
344
+
345
+ });
346
+ },
347
+
348
+ getAssociatedDevice : async (deviceId)=>{
349
+
350
+ return new Promise((resolve,reject) => {
351
+
352
+ let query = "SELECT associatedDevice FROM ?? where id = ?";
353
+ let args = ["devices",deviceId];
354
+ query = mysql.format(query,args);
355
+
356
+ $.db.queryRow(query)
357
+ .then( rows => {
358
+ if(rows.length > 0)
359
+ return resolve(rows[0]?.associatedDevice);
360
+ else
361
+ return resolve(null);
362
+ })
363
+ .catch( err => {
364
+ return reject(err);
365
+ });
366
+
367
+ });
368
+ },
369
+
370
+ updateAssociatedDevice : async(deviceId,associatedDeviceId)=>{
371
+ return new Promise((resolve,reject) => {
372
+ let obj = {
373
+ associatedDevice : associatedDeviceId,
374
+ updatedAt : moment().utc().format('YYYY-MM-DD HH:mm:ss')
375
+ }
376
+
377
+ let filter = {
378
+ id : deviceId
379
+ };
380
+
381
+ $.db.update("devices",obj,filter)
382
+ .then (rows => {
383
+ return resolve(rows[0]);
384
+ })
385
+ .catch(error => {
386
+ return reject(error);
387
+ });
388
+
389
+ });
390
+ }
391
+
111
392
  }