class Sensingplaza::Client

Attributes

mailaddress[RW]

Public Class Methods

new(mailaddress = nil, logger = nil) click to toggle source

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

get_data(sensorkey, datetime) click to toggle source

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
get_image(sensorkey, datetime) click to toggle source

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
get_last_data(sensorkey, isFromAllData = false) click to toggle source

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
get_period_data(sensorkey, sdatetime, edatetime) click to toggle source

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
get_period_image(sensorkey, sdatetime, edatetime) click to toggle source

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
get_sensor_information(sensorkey) click to toggle source

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
logger=(val) click to toggle source
# File lib/sensingplaza/client.rb, line 23
def logger=(val)
  @logger = val
  @webreq.logger = val
end
push_bulkdata(sensorkey, bulkdata) click to toggle source

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
push_data(sensorkey, data, datetime = nil) click to toggle source

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
push_image(sensorkey, data, datetime = nil) click to toggle source

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
sensingplaza_url=(val) click to toggle source
# File lib/sensingplaza/client.rb, line 19
def sensingplaza_url=(val)
  @sensingplaza_url = val
  @webreq.url = val
end

Private Instance Methods

bulkdata_forming(bulkdata) click to toggle source
# File lib/sensingplaza/client.rb, line 55
def bulkdata_forming(bulkdata)
  # nop
end
bulkdown(skeys, sdatetime, edatetime) click to toggle source
# 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
bulkupload(skeys, bulkdata) click to toggle source
# 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
check_image_format(img_header) click to toggle source

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
data_forming(data) click to toggle source
# 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
datetime_format?(datetime) click to toggle source

--+---+---+---+---+---+---+---+---+---+---+---+- ---+---+---+---+---+---+---+---+---+---+---+---+ 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
download(skeys, datetime, max_datetime = nil) click to toggle source
# 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
skey_forming(sensorkey) click to toggle source
# 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
upload(skeys, datetime, datas) click to toggle source
# 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