class Sensingplaza::Client
Attributes
Public Class Methods
mailaddress - String ex) hoge@mail.com logger - Logger
# File lib/sensingplaza/client.rb, line 11 def initialize(mailaddress = nil, logger = nil) @sensingplaza_url = SENSINGPLAZA_URL @mailaddress = mailaddress @logger = logger @webreq = WebRequest.new(@sensingplaza_url, @logger) end
Public Instance Methods
sensorkey - String(s) ex) “12abe9de” or [“12abe9de”, “433bedd2”, …] datetime - String ex) “2018-07-04 12:00:00”
# File lib/sensingplaza/client.rb, line 144 def get_data(sensorkey, datetime) return nil if @mailaddress.nil? datetime = Time.now.to_s[0, 19] if datetime.nil? return nil unless datetime_format?(datetime) skeys = skey_forming(sensorkey) return nil if skeys.empty? result = download(skeys, datetime) return result end
sensorkey - String(s) ex) “12abe9de” or [“12abe9de”, “433bedd2”, …] datetime - String ex) “2018-05-22 12:34:00”
# File lib/sensingplaza/client.rb, line 209 def get_image(sensorkey, datetime) return nil if @mailaddress.nil? return nil unless datetime_format?(datetime) skeys = skey_forming(sensorkey) return nil if skeys.empty? result = Hash.new datas = download(skeys, datetime) datas.each do |k, v| unless v.nil? imgdat = Base64.strict_decode64(v) imgtype, mimetype = check_image_format(imgdat[0, 4]) # first 4bytes fname = "#{datetime.gsub(/[\-\s\:]/, "")}.#{imgtype}" result[k] = { "blob" => imgdat, "filename" => fname, "content-type" => mimetype } else result[k] = nil end end return result end
sensorkey - String(s) ex) “” or [“”, “”, …]
# File lib/sensingplaza/client.rb, line 175 def get_last_data(sensorkey, isFromAllData = false) return nil if @mailaddress.nil? skeys = skey_forming(sensorkey) return nil if skeys.empty? datetime = nil max_datetime = Time.now.to_s[0, 19] max_datetime = nil if isFromAllData result = download(skeys, datetime, max_datetime) return result end
sensorkey - String(s) sdatetme, edatetime - String ex) “2018-07-04 12:12:00”
getting data from sdatetime to edatetime
result: { :skey => [[:datetime, value], …], [:datetime, value], …] }
# File lib/sensingplaza/client.rb, line 161 def get_period_data(sensorkey, sdatetime, edatetime) return nil if @mailaddress.nil? return nil unless datetime_format?(sdatetime) return nil unless datetime_format?(edatetime) skeys = skey_forming(sensorkey) return nil if skeys.empty? result = bulkdown(skeys, sdatetime, edatetime) return result end
sensorkey - String(s) ex) “” or [“”, “”, …] sdatetime, edatetime -String ex) “2018-07-05 12:00:00”
# File lib/sensingplaza/client.rb, line 234 def get_period_image(sensorkey, sdatetime, edatetime) return nil if @mailaddress.nil? return nil unless datetime_format?(sdatetime) return nil unless datetime_format?(edatetime) skeys = skey_forming(sensorkey) return nil if skeys.empty? result = Array.new datas = bulkdown(skeys, sdatetime, edatetime) datas.each do |dat| dt = dat["datetime"] rehash = Hash.new rehash["datetime"] = dt dat["data"].each do |k, v| unless v.nil? imgdat = Base64.strict_decode64(v) imgtype, mimetype = check_image_format(imgdat[0, 4]) # first 4bytes fname = "#{dt.gsub(/[\-\s\:]/, "")}.#{imgtype}" rehash[k] = { "blob" => imgdat, "filename" => fname, "content-type" => mimetype } else rehash[k] = nil end end result.push(rehash) end return result end
sensorkey - String(s) ex) “” or [“”, “”, …]
# File lib/sensingplaza/client.rb, line 288 def get_sensor_information(sensorkey) skeys = skey_forming(sensorkey) return nil if skeys.empty? endpoint = "/api/sensor_info" req = { "mailaddress" => @mailaddress, "data" => skeys } jsonstr = @webreq.post(req, endpoint) response = JSON.parse(jsonstr) return response["data"] end
# File lib/sensingplaza/client.rb, line 23 def logger=(val) @logger = val @webreq.logger = val end
sensorkey - String ex) “ssssssss” bulkdata - Array ex) [[:datetime, value], [:datetime, value], …]
# File lib/sensingplaza/client.rb, line 304 def push_bulkdata(sensorkey, bulkdata) return nil if @mailaddress.nil? skeys = skey_forming(sensorkey) return nil if skeys.empty? result = bulkupload(skeys, bulkdata) return result end
sensorkey - String(s) ex) “” or [“”, “”, …] data - value(s) ex) 12.45 or [12.45, “on”, …] datetime - String or Nil ex) “2018-07-04 12:34:00”, nil -> now time
# File lib/sensingplaza/client.rb, line 192 def push_data(sensorkey, data, datetime = nil) return nil if @mailaddress.nil? datetime = Time.now.to_s[0, 19] if datetime.nil? return nil unless datetime_format?(datetime) skeys = skey_forming(sensorkey) return nil if skeys.empty? datas = data_forming(data) return nil if datas.empty? result = upload(skeys, datetime, datas) return result end
sensorkey -String(s) ex) “12abe9de” or [“12abe9de”, “433bedd2”, …] data - image data(binary) datetime - String ex) “2018-07-04 12:34:00” or nil -> now time
# File lib/sensingplaza/client.rb, line 268 def push_image(sensorkey, data, datetime = nil) return nil if @mailaddress.nil? datetime = Time.now.to_s[0, 19] if datetime.nil? return nil unless datetime_format?(datetime) skeys = skey_forming(sensorkey) return nil if skeys.empty? datas = data_forming(data) return nil if datas.empty? imgs = Array.new datas.each do |dat| imgs.push(Base64.strict_encode64(dat)) end result = upload(skeys, datetime, imgs) return result end
# File lib/sensingplaza/client.rb, line 19 def sensingplaza_url=(val) @sensingplaza_url = val @webreq.url = val end
Private Instance Methods
# File lib/sensingplaza/client.rb, line 55 def bulkdata_forming(bulkdata) # nop end
# File lib/sensingplaza/client.rb, line 89 def bulkdown(skeys, sdatetime, edatetime) result = Hash.new endpoint = "/api/bulkdown2" req = { "mailaddress" => @mailaddress, "start_datetime" => sdatetime, "end_datetime" => edatetime, "data" => skeys } jsonstr = @webreq.post(req, endpoint) response = JSON.parse(jsonstr) return response["sheaf"] end
# File lib/sensingplaza/client.rb, line 101 def bulkupload(skeys, bulkdata) sensvals = Hash.new skey = skeys[0] sensvals[skey] = bulkdata endpoint = "/api/bulkups" req = { "mailaddress" => @mailaddress, "sheaf" => sensvals } jsonstr = @webreq.post(req, endpoint) response = JSON.parse(jsonstr) return response["sheaf"] end
img_header -> first 4bytes of data :p
# File lib/sensingplaza/client.rb, line 116 def check_image_format(img_header) hstr = img_header.unpack("H*").first mime = { "unk" => "application/octet-stream", "jpg" => "image/jpeg", "png" => "image/png", "gif" => "image/gif", "bmp" => "image/x-bmp", "pic" => "image/pict", "tif" => "image/tiff" } result = "unk" result = "jpg" if hstr[0, 4] == "ffd8" result = "png" if hstr == "89504e47" result = "gif" if hstr == "47494638" resutl = "bmp" if hstr[0, 4] == "424d" result = "pic" if hstr[0, 6] == "504943" result = "tif" if hstr[0, 4] == "4949" || hstr[0, 4] == "4d4d" return result, mime[result] end
# File lib/sensingplaza/client.rb, line 46 def data_forming(data) datas = Array.new if data.instance_of?(Array) datas = data else datas.push(data) end return datas end
-
-+--
-+--
-+--
-+--
-+--
-+--
-+--
-+--
-+--
-+--
-+--
-+- --
-+--
-+--
-+--
-+--
-+--
-+--
-+--
-+--
-+--
-+--
-+--
-+ private methods
# File lib/sensingplaza/client.rb, line 33 def datetime_format?(datetime) return datetime.match(/^\d{4}\-\d{2}\-\d{2} \d{2}\:\d{2}:\d{2}$/) end
# File lib/sensingplaza/client.rb, line 59 def download(skeys, datetime, max_datetime = nil) endpoint = "/api/download" req = { "mailaddress" => @mailaddress, "datetime" => datetime, "max_datetime" => max_datetime, "data" => skeys } jsonstr = @webreq.post(req, endpoint) response = JSON.parse(jsonstr) if datetime.nil? return response end return response["data"] end
# File lib/sensingplaza/client.rb, line 36 def skey_forming(sensorkey) skeys = Array.new skeys.push(sensorkey) if sensorkey.instance_of?(String) if sensorkey.instance_of?(Array) if (sensorkey.collect{|c| c.instance_of?(String)} - [true]).empty? skeys = sensorkey end end return skeys end
# File lib/sensingplaza/client.rb, line 73 def upload(skeys, datetime, datas) sensvals = Hash.new skeys.each_with_index do |skey, i| sensvals[skey] = datas[i] end endpoint = "/api/upload" req = { "mailaddress" => @mailaddress, "datetime" => datetime, "data" => sensvals } jsonstr = @webreq.post(req, endpoint) response = JSON.parse(jsonstr) return response["data"] end