imperituroard 0.3.2 → 0.3.3

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8a9ba1bf7f94a89e810bae8f664f1e689e6fe6b1
4
- data.tar.gz: 95581f121eeee4c82c736ffc68c0fdf2a79f8957
3
+ metadata.gz: 9145a7e26b0478b84af6d549588cd403cf52080d
4
+ data.tar.gz: fbdc0528f7ff7e535eaa29a2ad3eba67216163be
5
5
  SHA512:
6
- metadata.gz: 15bed0107947bbd3a31ed87d7bc1117844b8bebe3043ce781a76246983ca9c20aa975a55f029f18732525b101bd97d35fc04ad1bf4209af16317b23c29bf38aa
7
- data.tar.gz: 842547ef619f8a3dbc57756fd04d17b02352885c5ad90e6e2df79539fffd7bbc38f35ce9ac3683d0a878ebd1b91b320a5c3a4c5e2586e8d4d27c412eb2e5e654
6
+ metadata.gz: 2db737b82e9d6127b475ea6c6e472d86c82857a253fb8e16e5de2c804fdded8681a4764d1c6735994c783e81da413370d95b300a498094fc98276792a623544e
7
+ data.tar.gz: 8e93980bda5a7d66317611c4291c62b4f094d318dd45f404196f7c5219c6fec88ae2637f00f59f0c5cc62747a56543a67d355b977209ba68ab80352b2b853e83
@@ -50,7 +50,7 @@ class HuaIot
50
50
  end
51
51
 
52
52
  def get_token(app_id, secret)
53
- internal_func.printer_texter("get_token: start. Step1, iput: app_id: #{app_id.to_s}, #{secret.to_s}", "debug")
53
+ internal_func.printer_texter("get_token: start. Step1, iput: app_id: #{app_id.to_s}, secret: #{secret.to_s}", "debug")
54
54
  out_resp = {}
55
55
  begin
56
56
  path = "/iocm/app/sec/v1.1.0/login"
@@ -134,7 +134,7 @@ class HuaIot
134
134
  end
135
135
 
136
136
  #2.2.4 Registering a Directly Connected Device (Password Mode) (V2)
137
- def dev_register_passw_code_mode2(app_id, secret, node_id, name_p, description_p, device_type, profile)
137
+ def dev_register_passw_code_mode2(app_id, secret, node_id, name_p, description_p, device_type, profile, manufacturer_id, manufacturer_name, model)
138
138
  out_resp = {}
139
139
  token = get_token(app_id, secret)[:body]["accessToken"]
140
140
  path = "/iocm/app/reg/v2.0.0/deviceCredentials?appId=" + app_id
@@ -149,7 +149,44 @@ class HuaIot
149
149
  request.content_type = 'application/json'
150
150
  request['Authorization'] = 'Bearer ' + token
151
151
  request['app_key'] = app_id
152
- request.body = {deviceInfo: {nodeId: node_id, name: name_p, description: description_p, deviceType: device_type}}.to_json
152
+ data_out = {deviceInfo: {nodeId: node_id,
153
+ name: name_p,
154
+ description: description_p,
155
+ deviceType: device_type,
156
+ manufacturerId: manufacturer_id,
157
+ manufacturerName: manufacturer_name,
158
+ model: model,
159
+ isSecurity: "FALSE",
160
+ supportedSecurity: "FALSE"}}.to_json
161
+ internal_func.printer_texter({:procedure => "dev_register_passw_code_mode2", :data => {:body => data_out, :url => url_string}}, "debug")
162
+ request.body = data_out
163
+ res = https.request(request)
164
+ p res.body.to_s
165
+ out_resp = {:code => res.code, :message => res.message, :body => JSON.parse(res.body.to_s)}
166
+ p out_resp
167
+ out_resp
168
+ end
169
+
170
+
171
+ #2.2.4 Registering a Directly Connected Device (Password Mode) (V2)
172
+ def dev_reg_passw_code_mode2_2(app_id, secret, attr_list)
173
+ out_resp = {}
174
+ token = get_token(app_id, secret)[:body]["accessToken"]
175
+ path = "/iocm/app/reg/v2.0.0/deviceCredentials?appId=" + app_id
176
+ url_string = "https://" + platformip + ":" + platformport + path
177
+ uri = URI.parse url_string
178
+ https = Net::HTTP.new(uri.host, uri.port)
179
+ https.use_ssl = true
180
+ https.cert = OpenSSL::X509::Certificate.new(File.read(cert_file))
181
+ https.key = OpenSSL::PKey::RSA.new(File.read(key_file))
182
+ https.verify_mode = OpenSSL::SSL::VERIFY_NONE
183
+ request = Net::HTTP::Post.new(uri.path)
184
+ request.content_type = 'application/json'
185
+ request['Authorization'] = 'Bearer ' + token
186
+ request['app_key'] = app_id
187
+ data_out = {deviceInfo: attr_list}.to_json
188
+ internal_func.printer_texter({:procedure => "dev_register_passw_code_mode2", :data => {:body => data_out, :url => url_string}}, "debug")
189
+ request.body = data_out
153
190
  res = https.request(request)
154
191
  p res.body.to_s
155
192
  out_resp = {:code => res.code, :message => res.message, :body => JSON.parse(res.body.to_s)}
@@ -188,7 +225,6 @@ class HuaIot
188
225
  end
189
226
  p out_resp
190
227
  out_resp
191
-
192
228
  end
193
229
 
194
230
 
@@ -298,9 +334,8 @@ class HuaIot
298
334
 
299
335
 
300
336
  #2.9.6 Querying Directly Connected Devices and Their Mounted Devices in Batches
301
- def quer_dev_direct_conn_batches(app_id, secret, dev_list)
302
- token = get_token(app_id, secret)[:body]["accessToken"]
303
- p token
337
+ def quer_dev_direct_conn_batches(app_id, dev_list, token)
338
+
304
339
  path = "/iocm/app/dm/v1.1.0/queryDevicesByIds"
305
340
  url_string = "https://" + platformip + ":" + platformport + path
306
341
  p url_string
@@ -317,9 +352,46 @@ class HuaIot
317
352
  request.body = {deviceIds: dev_list}.to_json
318
353
  res = https.request(request)
319
354
  {:code => res.code, :message => res.message, :body => JSON.parse(res.body.to_s)}
355
+
356
+ end
357
+
358
+
359
+ #2.2.11 Modifying Device Information (V2)
360
+ def dev_modify_location_v2(app_id, dev_id, token, address)
361
+ out_resp = {}
362
+
363
+ begin
364
+ path = "/iocm/app/dm/v1.4.0/devices/" + dev_id + "?app_Id=" + app_id
365
+ url_string = "https://" + platformip + ":" + platformport + path
366
+ internal_func.printer_texter({:url_string=>url_string, :procedure=>"dev_modify_location_v2"}, "debug")
367
+ uri = URI.parse url_string
368
+ https = Net::HTTP.new(uri.host, uri.port)
369
+ https.use_ssl = true
370
+ https.cert = OpenSSL::X509::Certificate.new(File.read(cert_file))
371
+ https.key = OpenSSL::PKey::RSA.new(File.read(key_file))
372
+ https.verify_mode = OpenSSL::SSL::VERIFY_NONE
373
+ request = Net::HTTP::Put.new(uri.path)
374
+ request.content_type = 'application/json'
375
+ request['Authorization'] = 'Bearer ' + token
376
+ request['app_key'] = app_id
377
+ request.body = {location: address}.to_json
378
+ res = https.request(request)
379
+ p res.code
380
+ p res.body
381
+ if res.body != nil
382
+ out_resp = {:code => res.code, :message => res.message, :body => {:answ => JSON.parse(res.body.to_s)}}
383
+ else
384
+ out_resp = {:code => res.code, :message => res.message, :body => {:answ => "no data"}}
385
+ end
386
+ rescue
387
+ out_resp = {:code => 500, :message => "dev_modify_location_v2: Unknown IOT error"}
388
+ end
389
+ p out_resp
390
+ out_resp
320
391
  end
321
392
 
322
393
 
394
+
323
395
  ##2.10.7 Adding Members to a Device Group
324
396
 
325
397
 
@@ -327,8 +399,40 @@ class HuaIot
327
399
 
328
400
 
329
401
  ########final procedures###############
330
- def add_new_device_on_huawei(app_id, secret, node_id, name_p, description_p, device_type, profile)
331
- self.dev_register_passw_code_mode2(app_id, secret, node_id, name_p, description_p, device_type, profile)
402
+
403
+ def modify_location_iot(app_id, secret, dev_id, address)
404
+
405
+ out_resp = {}
406
+ begin
407
+ token = self.get_token(app_id, secret)
408
+ if token[:code] != 500 && token[:body]["accessToken"]!=nil
409
+ out_resp = self.dev_modify_location_v2(app_id, dev_id, token[:body]["accessToken"], address)
410
+ if out_resp[:code].to_i == 200 || out_resp[:code].to_i == 204
411
+ ###logout#
412
+ begin
413
+ self.token_logout(token[:body]["accessToken"])
414
+ rescue
415
+ nil
416
+ end
417
+ ##########
418
+ end
419
+ else
420
+ out_resp = {:code => 500, :message => "modify_location_iot: Invalid IOT platform token"}
421
+ end
422
+ rescue
423
+ out_resp = {:code => 500, :message => "modify_location_iot: Unknown error"}
424
+ end
425
+ jjj = {:procedure => "modify_location_iot", :answ => out_resp}
426
+ internal_func.printer_texter(jjj, "debug")
427
+ out_resp
428
+ end
429
+
430
+ def add_new_device_on_huawei(app_id, secret, node_id, name_p, description_p, device_type, profile, manufacturer_id, manufacturer_name, model)
431
+ self.dev_register_passw_code_mode2(app_id, secret, node_id, name_p, description_p, device_type, profile, manufacturer_id, manufacturer_name, model)
432
+ end
433
+
434
+ def add_new_device_on_huawei2(app_id, secret, attr_list)
435
+ self.dev_reg_passw_code_mode2_2(app_id, secret, attr_list)
332
436
  end
333
437
 
334
438
 
@@ -353,7 +457,34 @@ class HuaIot
353
457
  rescue
354
458
  out_resp = {:code => 500, :message => "remove_one_device_from_iot: Unknown error"}
355
459
  end
356
- p jjj = {:procedure => "remove_one_device_from_iot", :answ => out_resp}
460
+ jjj = {:procedure => "remove_one_device_from_iot", :answ => out_resp}
461
+ internal_func.printer_texter(jjj, "debug")
462
+ out_resp
463
+ end
464
+
465
+ def quer_dev_query_list(app_id, secret, dev_list)
466
+ out_resp = {}
467
+ begin
468
+ token = self.get_token(app_id, secret)
469
+ if token[:code] != 500 && token[:body]["accessToken"]!=nil
470
+ out_resp = self.quer_dev_direct_conn_batches(app_id, dev_list, token[:body]["accessToken"])
471
+ if out_resp[:code].to_i == 200 || out_resp[:code].to_i == 204
472
+ ###logout#
473
+ begin
474
+ self.token_logout(token[:body]["accessToken"])
475
+ rescue
476
+ nil
477
+ end
478
+ ##########
479
+ end
480
+ else
481
+ out_resp = {:code => 500, :message => "quer_dev_query_list: Invalid IOT platform token"}
482
+ end
483
+ rescue
484
+ out_resp = {:code => 500, :message => "quer_dev_query_list: Unknown error"}
485
+ end
486
+ jjj = {:procedure => "quer_dev_query_list", :answ => out_resp}
487
+ internal_func.printer_texter(jjj, "debug")
357
488
  out_resp
358
489
  end
359
490
 
@@ -1,10 +1,12 @@
1
1
  $LOAD_PATH.unshift File.expand_path("../projects/iot", __dir__)
2
2
 
3
+ require 'date'
4
+
3
5
  class InternalFunc
4
6
 
5
7
 
6
8
  def printer_texter(text, log_level)
7
- mess = {:sdk=> "imperituroard", :sdk_version=> "0.3.2", :message => text}
9
+ mess = {:datetime => DateTime.now, :sdk=> "imperituroard", :sdk_version=> "0.3.3", :message => text}
8
10
  p mess
9
11
  end
10
12
 
@@ -23,8 +23,7 @@ class MongoIot
23
23
  def audit_logger(proc_name, src_ip, input_json, output_json, real_ip)
24
24
  out_resp = {}
25
25
  begin
26
- d = DateTime.now
27
- current = d.strftime("%d/%m/%Y %H:%M:%S")
26
+ current = DateTime.now
28
27
  collection = client[:audit]
29
28
  doc = {
30
29
  :proc_name => proc_name,
@@ -213,7 +212,7 @@ class MongoIot
213
212
  p not_ex
214
213
  p res_exists
215
214
  out_resp = {:code => 200, :result => "check_imei_exists: Request completed successfully",
216
- :body => {:exists => res_exists, :not_exists => not_ex}}
215
+ :body => {:exists => res_exists, :not_exists => not_ex}}
217
216
  internal_func.printer_texter(out_resp, "debug")
218
217
  out_resp
219
218
  end
@@ -238,7 +237,7 @@ class MongoIot
238
237
  p result
239
238
  end
240
239
  rescue
241
- continue
240
+ nil
242
241
  end
243
242
  end
244
243
 
@@ -262,10 +261,22 @@ class MongoIot
262
261
  p result
263
262
  end
264
263
  rescue
265
- continue
264
+ nil
265
+ end
266
+ end
267
+
268
+
269
+ def imei_insert_model(model)
270
+ begin
271
+ collection = client[:device_types]
272
+ result = collection.insert_one(model)
273
+ p result
274
+ rescue
275
+ nil
266
276
  end
267
277
  end
268
278
 
279
+
269
280
  def get_profile_name_from_imei(imei)
270
281
  out_resp = {}
271
282
  begin
@@ -386,6 +397,28 @@ class MongoIot
386
397
  end
387
398
 
388
399
 
400
+ def get_device_type_info_by_model(device_model)
401
+ out_resp = {}
402
+ begin
403
+ result_ps = []
404
+ collection = client[:device_types]
405
+ collection.find({"model" => device_model}).each {|row|
406
+ result_ps.append(row)
407
+ }
408
+ dattaa = result_ps[0]
409
+ if dattaa!=nil
410
+ out_resp = {:code => 200, :result => "get_device_type_info_by_model: Request completed successfully", :body => dattaa}
411
+ else
412
+ out_resp = {:code => 404, :result => "get_device_type_info_by_model: Device info not found", :body => {"model" => device_model, "ManufacturerID" => "unknown", "ManufacturerNAME" => "unknown", "device_type" => "unknown"}}
413
+ end
414
+ rescue
415
+ out_resp = {:code => 500, :result => "get_device_type_info_by_model: procedure error", :body => {"model" => device_model, "ManufacturerID" => "unknown", "ManufacturerNAME" => "unknown", "device_type" => "unknown"}}
416
+ end
417
+ internal_func.printer_texter(out_resp, "debug")
418
+ out_resp
419
+ end
420
+
421
+
389
422
  def ttt
390
423
  p "111111"
391
424
  begin
@@ -1,3 +1,3 @@
1
1
  module Imperituroard
2
- VERSION = "0.3.2"
2
+ VERSION = "0.3.3"
3
3
  end
data/lib/imperituroard.rb CHANGED
@@ -10,6 +10,7 @@ require "imperituroard/projects/iot/add_functions"
10
10
  require "imperituroard/projects/iot/internal_functions"
11
11
  require 'json'
12
12
  require 'ipaddr'
13
+ require 'date'
13
14
 
14
15
  module Imperituroard
15
16
  class Error < StandardError;
@@ -98,7 +99,8 @@ class Iot
98
99
  :add_functions_connector,
99
100
  :real_ip, #real ip address of procedure caller
100
101
  :remote_ip, #ip address of balancer
101
- :hua_aceanconnect_connector
102
+ :hua_aceanconnect_connector,
103
+ :internal_func
102
104
 
103
105
  def initialize(mongoip, mongoport, iotip, mongo_database,
104
106
  iotplatform_ip, iotplatform_port, cert_path, key_path, telegram_api_url, telegram_chat_id, real_ip, remote_ip)
@@ -115,6 +117,7 @@ class Iot
115
117
  @real_ip = real_ip
116
118
  @remote_ip = remote_ip
117
119
  @hua_aceanconnect_connector = HuaIot.new(iotplatform_ip, iotplatform_port, cert_path, key_path)
120
+ @internal_func = InternalFunc.new
118
121
  end
119
122
 
120
123
  #error list
@@ -177,10 +180,25 @@ class Iot
177
180
  for aaa in for_insert
178
181
  begin
179
182
  dev_name = aaa["imei"].to_s
180
- resss = hua_aceanconnect_connector.add_new_device_on_huawei(credentials[:body][:app_id], credentials[:body][:secret], aaa["imei"], dev_name, aaa["description"], aaa["device_type"], aaa["profile"])
183
+
184
+ #get {"model"=>"BGT_PPMC", "ManufacturerID"=>"unknown", "ManufacturerNAME"=>"unknown", "device_type"=>"unknown"}
185
+ #from database
186
+ model_data = mongo_client.get_device_type_info_by_model(aaa["device_type"])
187
+ resss = hua_aceanconnect_connector.add_new_device_on_huawei(credentials[:body][:app_id],
188
+ credentials[:body][:secret],
189
+ aaa["imei"],
190
+ dev_name,
191
+ aaa["description"],
192
+ model_data[:body]["device_type"],
193
+ aaa["profile"],
194
+ model_data[:body]["ManufacturerID"],
195
+ model_data[:body]["ManufacturerNAME"],
196
+ model_data[:body]["model"]
197
+ )
181
198
  if resss[:code]=="200"
182
199
  s1 = aaa
183
200
  s1[:huadata] = resss
201
+ s1[:created] = DateTime.now
184
202
  added_on_iot_platf.append(s1)
185
203
  else
186
204
  not_processed_list.append({:imei => aaa["imei"], :error => resss})
@@ -282,15 +300,29 @@ class Iot
282
300
 
283
301
  li_new_imei = []
284
302
  list1 = {}
303
+
304
+ #dictionary for imeis which not processed. Final dictionary
285
305
  not_processed_list = []
306
+
307
+ #dictionary for devices which was processed correctly
308
+ processed_list = []
309
+
310
+ #array for translations from old imei to new
311
+ old_new_translation = {}
312
+
286
313
  approved_list = []
287
314
  resp_out = {}
288
315
 
316
+ #old_imei_list for query to iot platform for data request
317
+ step1_approved_dict_old=[]
318
+
319
+ #form dictionary for processing
289
320
  for pr1 in im_list
290
321
  p "pr1"
291
322
  p pr1
292
323
  li_new_imei.append(pr1["imei_new"])
293
324
  list1[pr1["imei_new"]]=pr1["imei_old"]
325
+ old_new_translation[pr1["imei_old"]]=pr1["imei_new"]
294
326
  end
295
327
 
296
328
  p list1
@@ -299,41 +331,37 @@ class Iot
299
331
 
300
332
  thr3 = Thread.new do
301
333
 
334
+ #check if imei_new exists in database. If exists - not process this imei
302
335
  list_checked = mongo_client.check_imei_exists(li_new_imei)
336
+
337
+ internal_func.printer_texter({:function => "imei_replace Step1", :list_checked => list_checked}, "debug")
338
+
339
+ #add already exists new IMEI in error dictionary
303
340
  for ss in list_checked[:body][:exists]
304
341
  not_processed_list.append({:record => {:imei_old => list1[ss], :imei_new => ss}, :error => "New IMEI exists in database"})
305
342
  end
306
343
 
344
+ #new_imei list which processed step1
307
345
  step2_list = list_checked[:body][:not_exists]
308
346
 
347
+ internal_func.printer_texter({:function => "imei_replace Step2", :step2_list => step2_list}, "debug")
348
+
349
+
309
350
  for a in step2_list
310
351
  begin
311
- p "list1[a]"
312
- p list1
313
- p a
314
- p list1[a]
315
- prof_name1 = mongo_client.get_profile_name_from_imei(list1[a])
316
352
 
317
- p prof_name1
318
- if prof_name1[:code]==200
353
+ #step3 checking permission for writing for imei list
354
+ prof_name1 = mongo_client.get_profile_name_from_imei(list1[a])
319
355
 
320
- p "if prof_name1[:code]==200"
356
+ internal_func.printer_texter({:function => "imei_replace Step3", :prof_name1 => prof_name1}, "debug")
321
357
 
358
+ if prof_name1[:code]==200
322
359
  permiss1 = mongo_client.check_login_profile_permiss(login, prof_name1[:body]["profile"])[:code]
323
- p "permiss1"
324
- p permiss1
360
+ internal_func.printer_texter({:function => "imei_replace Step4", :permiss1 => permiss1, :input => prof_name1[:body]["profile"]}, "debug")
325
361
  if permiss1==200
326
362
 
327
- ##Logic for IOT Platform connection###
328
-
329
- remove_one_device_from_iot(app_id, secret, dev_id)
330
-
331
- #########end iot platform logic#######
332
-
333
- mongo_client.device_modify_any_attr_mongo(list1[a], {:imei => a})
334
-
335
363
  approved_list.append({:imei_old => list1[a], :imei_new => a})
336
-
364
+ step1_approved_dict_old.append(list1[a])
337
365
 
338
366
  else
339
367
  not_processed_list.append({:record => {:imei_old => list1[a], :imei_new => a}, :error => "Old IMEI modification denied"})
@@ -346,15 +374,67 @@ class Iot
346
374
  end
347
375
  end
348
376
 
377
+ internal_func.printer_texter({:function => "imei_replace Step5", :not_processed_list => not_processed_list, :input => list1, :approved_list => approved_list, :step1_approved_dict_old => step1_approved_dict_old}, "debug")
378
+
379
+
380
+ ##Logic for IOT Platform connection###
381
+
382
+ list_from_iot = self.get_info_by_imeilist_from_iot(login, step1_approved_dict_old)
383
+
384
+ internal_func.printer_texter({:function => "imei_replace Step6", :list_from_iot => list_from_iot, :description => "data from iot platform by old imei"}, "debug")
385
+
386
+ #processing data. modifying data on iot platform and mongoDB
387
+ if list_from_iot[:code]=="200"
388
+
389
+ for ard in list_from_iot[:body]["devices"]
390
+ p ard
391
+ new_data_cur_dev = {}
392
+ mongo_answer = {}
393
+ current_old_dev = ard["deviceInfo"]["nodeId"]
394
+ current_device_id = ard["deviceId"]
395
+ new_data_cur_dev = ard["deviceInfo"]
396
+ new_data_cur_dev["nodeId"] = old_new_translation[current_old_dev.to_i].to_s
397
+
398
+ credentials = mongo_client.get_iot_oceanconnect_credent(login)
399
+
400
+ if credentials[:code]==200
401
+ flag_remove=0
402
+ flag_create=0
403
+ remove_answer = hua_aceanconnect_connector.remove_one_device_from_iot(credentials[:body][:app_id], credentials[:body][:secret], current_device_id)
404
+ create_answer = hua_aceanconnect_connector.add_new_device_on_huawei2(credentials[:body][:app_id], credentials[:body][:secret], new_data_cur_dev)
405
+
406
+ if remove_answer[:code]=="204" || remove_answer[:code]=="200"
407
+ flag_remove=1
408
+ end
409
+ if create_answer[:code]=="200"
410
+ flag_create=1
411
+ end
412
+ if flag_remove==1 && flag_create==1
413
+ mongo_answer = mongo_client.device_modify_any_attr_mongo(current_old_dev.to_i, {:imei => old_new_translation[current_old_dev.to_i], :huadata => {:body => create_answer[:body]}, :updated => DateTime.now})
414
+ processed_list.append({:imei_old => current_old_dev.to_i, :imei_new => old_new_translation[current_old_dev.to_i]})
415
+ else
416
+ not_processed_list.append({:record => {:imei_old => current_old_dev.to_i, :imei_new => old_new_translation[current_old_dev.to_i]}, :error => "Failed for provisioning to IOT platform"})
417
+ end
418
+
419
+ internal_func.printer_texter({:function => "imei_replace Step7", :remove_answer => remove_answer, :create_answer => create_answer, :mongo_answer => mongo_answer, :description => "processing imei #{current_old_dev.to_s}"}, "debug")
420
+
421
+ else
422
+ approved_list=[]
423
+ end
424
+ end
425
+
426
+ else
427
+ approved_list=[]
428
+ end
429
+
349
430
  if approved_list!=[]
350
- resp_out = {:code => 200, :result => "Request completed successfully", :data => {:approved_list => approved_list, :unapproved_list => not_processed_list}}
431
+ resp_out = {:code => 200, :result => "Request completed successfully", :data => {:approved_list => processed_list, :unapproved_list => not_processed_list}}
351
432
  else
352
- resp_out = {:code => 202, :result => "Nothing to do", :data => {:approved_list => approved_list, :unapproved_list => not_processed_list}}
433
+ resp_out = {:code => 202, :result => "Nothing to do", :data => {:approved_list => processed_list, :unapproved_list => not_processed_list}}
353
434
  end
354
435
 
355
436
  end
356
437
 
357
-
358
438
  rescue
359
439
  resp_out = {:code => 507, :result => "Unknown SDK error"}
360
440
  end
@@ -442,7 +522,8 @@ class Iot
442
522
  #imei = newdevice_list
443
523
  #address = newdevice_list
444
524
  #newdevice_list=[{:imei=>7967843245665, :address=>"Golubeva51"}]
445
- #++
525
+ #+++
526
+ #iot platform integration completed
446
527
  def device_add_address(login, newdevice_list)
447
528
  #add_functions_connector.telegram_message(newdevice_list.to_s)
448
529
  p newdevice_list
@@ -465,6 +546,21 @@ class Iot
465
546
  if permiss[:code]==200
466
547
 
467
548
  ##Logic for IOT Platform connection###
549
+ credentials = mongo_client.get_iot_oceanconnect_credent(login)
550
+ resp = {}
551
+
552
+ if credentials[:code]==200
553
+ imei_data = mongo_client.get_imei_info_from_db([p[:imei]])
554
+ if imei_data[:body]!=[]
555
+ ans =hua_aceanconnect_connector.modify_location_iot(credentials[:body][:app_id], credentials[:body][:secret], imei_data[:body][0]["huadata"]["body"]["deviceId"], p[:address])
556
+
557
+ internal_func.printer_texter({:function => "device_add_address Step2", :ans => ans, :descrition=>"answer from hua IOT", :input=>{:did=>imei_data[:body][0]["huadata"]["body"]["deviceId"], :appid=>credentials[:body][:app_id], :secret=>credentials[:body][:secret], :address=>p[:address]}}, "debug")
558
+
559
+ p ans
560
+ end
561
+
562
+ end
563
+
468
564
 
469
565
  #########end iot platform logic#######
470
566
 
@@ -542,11 +638,8 @@ class Iot
542
638
  end
543
639
  end
544
640
  p attr
545
-
546
641
  mongo_client.device_modify_any_attr_mongo(g["imei"], attr)
547
-
548
642
  processed.append(g["imei"])
549
-
550
643
  else
551
644
  not_processed.append({:imei => g["imei"], :description => "New profile permission error", :error => permiss2})
552
645
  end
@@ -554,9 +647,7 @@ class Iot
554
647
  else
555
648
  attr = g["attributes"]
556
649
  mongo_client.device_modify_any_attr_mongo(g["imei"], attr)
557
-
558
650
  processed.append(g["imei"])
559
-
560
651
  end
561
652
  else
562
653
  not_processed.append({:imei => g["imei"], :description => "Old profile permission error", :error => permiss1})
@@ -586,6 +677,44 @@ class Iot
586
677
  mongo_client.audit_logger(proc_name, src_ip, input_json, output_json, real_ip)
587
678
  end
588
679
 
680
+ #additional procedure for checking status on iot platform
681
+ def get_info_by_imeilist_from_iot(login, imei_list)
682
+ resp_out={}
683
+ begin
684
+ dev_id_list = []
685
+ resss = {}
686
+ data_from_db = mongo_client.get_imei_info_from_db(imei_list)
687
+ p data_from_db
688
+ for g in data_from_db[:body]
689
+ dev_id_list.append(g["huadata"]["body"]["deviceId"])
690
+ end
691
+ credentials = mongo_client.get_iot_oceanconnect_credent(login)
692
+ if credentials[:code]==200
693
+ p apid = credentials[:body][:app_id]
694
+ p secre = credentials[:body][:secret]
695
+ resp_out = hua_aceanconnect_connector.quer_dev_query_list(apid, secre, dev_id_list)
696
+ end
697
+ rescue
698
+ resp_out = {:code => "500", :message => "get_info_by_imeilist_from_iot: Something wrong", :body => {"devices" => []}}
699
+ end
700
+ internal_func.printer_texter(resp_out, "debug")
701
+ resp_out
702
+ end
703
+
704
+
705
+ #for internal use. Add new device model
706
+ def add_model_to_mongo(model, manufacture_id, manufacture_name, device_type, description, note)
707
+ model = {
708
+ model: model,
709
+ ManufacturerID: manufacture_id,
710
+ ManufacturerNAME: manufacture_name,
711
+ device_type: device_type,
712
+ description: description,
713
+ note: note,
714
+ created: DateTime.now
715
+ }
716
+ mongo_client.imei_insert_model(model)
717
+ end
589
718
 
590
719
  def test()
591
720
  ddd = MongoIot.new(mongoip, mongoport, mongo_database)
@@ -595,43 +724,10 @@ class Iot
595
724
  #ddd.get_imsi_info_from_db(ff)
596
725
 
597
726
  #p ddd.get_profile_id_by_name("1341241")
598
- p ddd.get_iot_oceanconnect_credent("test")
727
+ p ddd.get_device_type_info_by_model("BGT_PPMC11")
599
728
  end
600
729
 
601
730
 
602
- def testhua()
603
- cert_file = cert_path
604
- key_file = key_path
605
- ddd1 = HuaIot.new(iotplatform_ip, iotplatform_port, cert_file, key_file)
606
- #p ddd1.dev_register_verif_code_mode("Cd1v0k2gTBCbpQlMVlW1FVqOSqga", "kbfo5JlBxTIhjVwtjHleWS5Iw5wa", "7521234165452")
607
- #ddd1.querying_device_id("Cd1v0k2gTBCbpQlMVlW1FVqOSqga", "kbfo5JlBxTIhjVwtjHleWS5Iw5wa", "a8834c5e-4b4d-4f0f-ad87-14e916f3d0bb")
608
- #ddd1.querying_device_activ_status("Cd1v0k2gTBCbpQlMVlW1FVqOSqga", "kbfo5JlBxTIhjVwtjHleWS5Iw5wa", "7521234165452")
609
- #ddd1.querying_device_info("Cd1v0k2gTBCbpQlMVlW1FVqOSqga", "kbfo5JlBxTIhjVwtjHleWS5Iw5wa", "a8834c5e-4b4d-4f0f-ad87-14e916f3d0bb")
610
- list = ["41c0ba82-d771-4669-b766-fcbfbedc17f4", "7521234165452", "feb9c4d1-4944-4b04-a717-df87dfde30f7", "9868e121-c309-4f4f-8ab3-0aa69072caff", "b3b82f35-0723-4a83-90af-d4ea40017194"]
611
- #p ddd1.querying_device_direct_conn("Cd1v0k2gTBCbpQlMVlW1FVqOSqga", "kbfo5JlBxTIhjVwtjHleWS5Iw5wa", list)
612
- #p ddd1.querying_device_type_list("Cd1v0k2gTBCbpQlMVlW1FVqOSqga", "kbfo5JlBxTIhjVwtjHleWS5Iw5wa")
613
- # ddd1.querying_device_id("Cd1v0k2gTBCbpQlMVlW1FVqOSqga", "kbfo5JlBxTIhjVwtjHleWS5Iw5wa", "7521234165452")
614
- #p ddd1.dev_register_verif_code_mode("Cd1v0k2gTBCbpQlMVlW1FVqOSqga", "kbfo5JlBxTIhjVwtjHleWS5Iw5wa", "45324523452345")
615
-
616
- p devtestid = ddd1.dev_register_passw_code_mode2("Cd1v0k2gTBCbpQlMVlW1FVqOSqga", "kbfo5JlBxTIhjVwtjHleWS5Iw5wa", "24235455", "test", "test", "phone", "0")
617
- p ddd1.quer_dev_direct_conn_batches("Cd1v0k2gTBCbpQlMVlW1FVqOSqga", "kbfo5JlBxTIhjVwtjHleWS5Iw5wa", [devtestid[:body]["deviceId"], "4c763ea1-be51-4eff-81db-863bc04791bb"])
618
-
619
- #p ddd1.querying_device_info("Cd1v0k2gTBCbpQlMVlW1FVqOSqga", "kbfo5JlBxTIhjVwtjHleWS5Iw5wa", "c6e0dfb1-8042-472a-a35d-e984f118d2a6")
620
- p "delete start"
621
- p ddd1.dev_delete("Cd1v0k2gTBCbpQlMVlW1FVqOSqga", "kbfo5JlBxTIhjVwtjHleWS5Iw5wa", devtestid[:body]["deviceId"])
622
- #p ddd1.dev_delete("Cd1v0k2gTBCbpQlMVlW1FVqOSqga", "kbfo5JlBxTIhjVwtjHleWS5Iw5wa", "2881a9cc-cb2a-4b59-8fac-de3aace2324d")
623
- end
624
-
625
-
626
- def testhua2()
627
- tt = "{\"deviceId\":\"fad0a417-b6a3-4b0b-abfc-fa2b0af9691a\",\"verifyCode\":\"6cb6dcca\",\"timeout\":180,\"psk\":\"1d16b55d577bc1f2e5e75d416ce6b8a2\"}"
628
- #tt = tt.gsub("\\","")
629
- #p tt
630
- ff = tt.to_s
631
- p ff
632
- gg = JSON.parse(ff)
633
- p gg
634
- end
635
731
 
636
732
  end
637
733
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: imperituroard
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dzmitry Buynovskiy