lib/imperituroard/projects/iot/hua_oceanconnect_adapter.rb in imperituroard-0.1.8 vs lib/imperituroard/projects/iot/hua_oceanconnect_adapter.rb in imperituroard-0.1.9

- old
+ new

@@ -1,51 +1,261 @@ require 'uri' require 'net/http' require 'net/https' require 'json' +require 'rubygems' +require 'nokogiri' +require 'rails' class HuaIot - attr_accessor :platformip, :platformport, :client, :database + attr_accessor :platformip, :platformport, :client, :database, :cert_file, :key_file - def initialize(platformip, platformport, iotip, database) + def initialize(platformip, platformport, iotip, database, cert_file, key_file) @database = database @platformip = platformip @platformport = platformport @iotip = iotip + @cert_file = cert_file + @key_file = key_file #client_host = [mongoip + ":" + mongoport] #@client = Mongo::Client.new(client_host, :database => database) end + def parse_token(str) + begin + dd = str.split(",") + acc_token = "" + refr_token = "" + exp_in = "" + + access_token = /\"accessToken\":\"(\S+)\"/ + refresh_token = /\"refreshToken\":\"(.+)\"/ + expires_in = /\"expiresIn\":(\d+)/ + + for i in dd + if i.to_s.include?("accessToken") + acc_token = access_token.match(i) + elsif i.to_s.include?("refreshToken") + refr_token = refresh_token.match(i) + elsif i.to_s.include?("expiresIn") + exp_in = expires_in.match(i) + end + end + {:status=> 200, :result=>"OK", :accessToken=>acc_token[1], :refreshToken=>refr_token[1], :expiresIn => exp_in[1] } + rescue + {:status=> 500, :result=>"failed"} + end + end + + def get_token(app_id, secret) + path = "/iocm/app/sec/v1.1.0/login" + url_string = "https://" + platformip + ":" + platformport + path + uri = URI.parse url_string + https = Net::HTTP.new(uri.host, uri.port) + https.use_ssl = true + https.cert = OpenSSL::X509::Certificate.new( File.read(cert_file) ) + https.key = OpenSSL::PKey::RSA.new( File.read(key_file) ) + https.verify_mode = OpenSSL::SSL::VERIFY_NONE + request = Net::HTTP::Post.new( uri.path) + data = { + :appId => app_id, + :secret => secret + } + request.content_type = 'application/x-www-form-urlencoded' + request.body = URI.encode_www_form(data) + res = https.request(request) + {:code => res.code, :message => res.message, :body => JSON.parse(res.body.to_s)} + end + + #Registering a Directly Connected Device (Verification Code Mode) (V2) + def dev_register_verif_code_mode(app_id, secret, node_id) + token = get_token(app_id, secret)[:body]["accessToken"] + path = "/iocm/app/reg/v1.1.0/deviceCredentials?appId=" + app_id + url_string = "https://" + platformip + ":" + platformport + path + uri = URI.parse url_string + https = Net::HTTP.new(uri.host, uri.port) + https.use_ssl = true + https.cert = OpenSSL::X509::Certificate.new( File.read(cert_file) ) + https.key = OpenSSL::PKey::RSA.new( File.read(key_file) ) + https.verify_mode = OpenSSL::SSL::VERIFY_NONE + request = Net::HTTP::Post.new( uri.path) + request.content_type = 'application/json' + request['Authorization'] = 'Bearer ' + token + request['app_key'] = app_id + request.body = {nodeId: node_id}.to_json + res = https.request(request) + p res.body.to_s + {:code => res.code, :message => res.message, :body => JSON.parse(res.body.to_s)} + end + + + def dev_delete(app_id, secret, node_id) + token = get_token(app_id, secret)[:body]["accessToken"] + path = "/iocm/app/dm/v1.1.0/devices/" + node_id + "?app_Id=" + app_id + "&cascade=true" + url_string = "https://" + platformip + ":" + platformport + path + uri = URI.parse url_string + https = Net::HTTP.new(uri.host, uri.port) + https.use_ssl = true + https.cert = OpenSSL::X509::Certificate.new( File.read(cert_file) ) + https.key = OpenSSL::PKey::RSA.new( File.read(key_file)) + https.verify_mode = OpenSSL::SSL::VERIFY_NONE + request = Net::HTTP::Delete.new( uri.path) + request.content_type = 'application/json' + request['Authorization'] = 'Bearer ' + token + request['app_key'] = app_id + res = https.request(request) + {:code => res.code, :message => res.message, :body => JSON.parse(res.body.to_s)} + end + + + #2.2.44 Querying the Device ID + def querying_device_id(app_id, secret, node_id) + token = get_token(app_id, secret)[:body]["accessToken"] + path = "/iocm/app/dm/v1.1.0/queryDeviceIdByNodeId?nodeId=" + node_id + p path + url_string = "https://" + platformip + ":" + platformport + path + uri = URI.parse url_string + https = Net::HTTP.new(uri.host, uri.port) + https.use_ssl = true + https.cert = OpenSSL::X509::Certificate.new( File.read(cert_file) ) + https.key = OpenSSL::PKey::RSA.new( File.read(key_file)) + https.verify_mode = OpenSSL::SSL::VERIFY_NONE + request = Net::HTTP::Get.new( uri.path) + request.content_type = 'application/json' + request['Authorization'] = 'Bearer ' + token + request['app_key'] = app_id + res = https.request(request) + p res.body.to_s + {:code => res.code, :message => res.message, :body => JSON.parse(res.body.to_s)} + end + + #2.2.14 Querying Device Activation Status + def querying_device_activ_status(app_id, secret, device_id) + token = get_token(app_id, secret)[:body]["accessToken"] + path = "/iocm/app/reg/v1.1.0/devices/" + device_id + "?app_Id=" + app_id + url_string = "https://" + platformip + ":" + platformport + path + uri = URI.parse url_string + https = Net::HTTP.new(uri.host, uri.port) + https.use_ssl = true + https.cert = OpenSSL::X509::Certificate.new( File.read(cert_file) ) + https.key = OpenSSL::PKey::RSA.new( File.read(key_file)) + https.verify_mode = OpenSSL::SSL::VERIFY_NONE + request = Net::HTTP::Get.new( uri.path) + request.content_type = 'application/json' + request['Authorization'] = 'Bearer ' + token + request['app_key'] = app_id + res = https.request(request) + {:code => res.code, :message => res.message, :body => JSON.parse(res.body.to_s)} + end + + + #2.9.1 Querying Information About a Device + def querying_device_info(app_id, secret, device_id) + token = get_token(app_id, secret)[:body]["accessToken"] + path = "/iocm/app/dm/v1.1.0/devices/" + device_id + "?app_Id=" + app_id + url_string = "https://" + platformip + ":" + platformport + path + uri = URI.parse url_string + https = Net::HTTP.new(uri.host, uri.port) + https.use_ssl = true + https.cert = OpenSSL::X509::Certificate.new( File.read(cert_file) ) + https.key = OpenSSL::PKey::RSA.new( File.read(key_file)) + https.verify_mode = OpenSSL::SSL::VERIFY_NONE + request = Net::HTTP::Get.new( uri.path) + request.content_type = 'application/json' + request['Authorization'] = 'Bearer ' + token + request['app_key'] = app_id + res = https.request(request) + {:code => res.code, :message => res.message, :body => JSON.parse(res.body.to_s)} + end + + #2.9.6 Querying Directly Connected Devices and Their Mounted Devices in Batches + def querying_device_direct_conn(app_id, secret, dev_list) + token = get_token(app_id, secret)[:body]["accessToken"] + path = "/iocm/app/dm/v1.1.0/queryDevicesByIds" + url_string = "https://" + platformip + ":" + platformport + path + uri = URI.parse url_string + https = Net::HTTP.new(uri.host, uri.port) + https.use_ssl = true + https.cert = OpenSSL::X509::Certificate.new( File.read(cert_file) ) + https.key = OpenSSL::PKey::RSA.new( File.read(key_file)) + https.verify_mode = OpenSSL::SSL::VERIFY_NONE + request = Net::HTTP::Post.new( uri.path) + request.content_type = 'application/json' + request['Authorization'] = 'Bearer ' + token + request['app_key'] = app_id + request.body = {deviceIds: dev_list}.to_json + res = https.request(request) + {:code => res.code, :message => res.message, :body => JSON.parse(res.body.to_s)} + end + + + #2.9.19 Querying the Complete Device Type List of All Device Capabilities + def querying_device_type_list(app_id, secret) + token = get_token(app_id, secret)[:body]["accessToken"] + path = "/iocm/app/profile/v1.1.0/allDeviceTypes" + url_string = "https://" + platformip + ":" + platformport + path + uri = URI.parse url_string + https = Net::HTTP.new(uri.host, uri.port) + https.use_ssl = true + https.cert = OpenSSL::X509::Certificate.new( File.read(cert_file) ) + https.key = OpenSSL::PKey::RSA.new( File.read(key_file)) + https.verify_mode = OpenSSL::SSL::VERIFY_NONE + request = Net::HTTP::Get.new( uri.path) + request.content_type = 'application/json' + request['Authorization'] = 'Bearer ' + token + request['app_key'] = app_id + res = https.request(request) + {:code => res.code, :message => res.message, :body => JSON.parse(res.body.to_s)} + end + def test() - url_string = "https://134.17.93.4:8743/iocm/app/authorize/v1.3.0/app" + url_string = "https://134.17.93.4:8743/iocm/app/sec/v1.1.0/login" headers = { - 'Authorization'=>'Bearer O2k2aMStOweZOeSoVDYjI3c6uaMa', + 'Authorization'=>'Bearer ppeMsOq6zdb2fSUH4GoRooS_FgEa', 'Content-Type' =>'application/json', 'Accept'=>'application/json' } - req = {"dstAppId": "Cd1v0k2gTBCbpQlMVlW1FVqOSqga" } + req = {"dstAppId": "bCRahH5zSi9SNmyfqv3BkJABAq8a" } + post_data = URI.encode_www_form(req) uri = URI.parse url_string p uri.host p uri.port p uri.path + + cert_file = "/Users/imperituroard/Desktop/cert.crt" + key_file = "/Users/imperituroard/Desktop/key.pem" + p https = Net::HTTP.new(uri.host, uri.port) https.use_ssl = true + https.cert = OpenSSL::X509::Certificate.new( File.read(cert_file) ) + https.key = OpenSSL::PKey::RSA.new( File.read(key_file) ) + https.verify_mode = OpenSSL::SSL::VERIFY_NONE - request = Net::HTTP::Post.new( uri.path, headers) + request = Net::HTTP::Post.new( uri.path) - p request.body = req - request['app_key'] = '' - request['Authorization'] = 'Bearer O2k2aMStOweZOeSoVDYjI3c6uaMa' - request.content_type = 'application/json' + data = { + :appId => "bCRahH5zSi9SNmyfqv3BkJABAq8a", + :secret => "ppeMsOq6zdb2fSUH4GoRooS_FgEa" + } + + + #request['app_key'] = 'ppeMsOq6zdb2fSUH4GoRooS_FgEa' + #request['Authorization'] = 'Bearer ppeMsOq6zdb2fSUH4GoRooS_FgEa' + request.content_type = 'application/x-www-form-urlencoded' + #p request.body = req + request.body = URI.encode_www_form(data) res = https.request(request) + p res.code p res.message + + p parse_token(res.body) end # App ID # password O2k2aMStOweZOeSoVDYjI3c6uaMa \ No newline at end of file