おんどとりWeb StorageはAPIが公開されているので、任意のプログラムから登録してある機器のデータを取得する事ができます。
Rubyで最新の温度データを取得するには以下のようにします。
データ取得するためのgemを作成しましたondotori-ruby-client
事前準備
- API Keyの取得
- 読み取り専用アカウントを作成する
- APIのアクセス情報を/var/tmp/webstorage.jsonに記載する
アクセス情報はjson形式の外部ファイルから読み込む仕様にしました。
Key | 説明 |
---|---|
api_key | API Key |
user_id | WebStorageのアカウントID |
user_pass | WebStorageのアカウントパスワード |
アカウントIDとパスワードは読み取り専用アカウントを作成することをオススメします。
サンプルコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 | #!/usr/bin/env ruby # -*- coding: utf-8 -*- require 'net/http' require 'uri' require 'json' # WebStorageのアクセスURI # WebStorageへの認証情報のファイルパス WEB_STORAGE_ACCESS_INFO_PATH = "/var/tmp/webstorage.json" = begin 認証情報は JSON 形式 { "api_key" : "おんどとりWebStorageから取得したAPI-KEY" , "user_id" : "rbacxxxx" , "user_pass" : "password" } = end # WebStorage APIにアクセスするための情報をファイルから読み込みます def load_webstorage_settings() begin File .open( WEB_STORAGE_ACCESS_INFO_PATH ) do |file| storage_info = file.read load_info = JSON .parse(storage_info) # 読み込んだ情報をWSS APIのKeyにコンバート wss_access_info = {} wss_access_info[ "api-key" ] = load_info[ "api_key" ] wss_access_info[ "login-id" ] = load_info[ "user_id" ] wss_access_info[ "login-pass" ] = load_info[ "user_pass" ] return wss_access_info end rescue SystemCallError => e puts % Q ( class =[ #{e.class}] message=[#{e.message}]) rescue IOError => e puts % Q ( class =[ #{e.class}] message=[#{e.message}]) end end # 現在値データを取得します def get_current_data() begin # 接続パラメータを読み込み params = load_webstorage_settings() if params. nil ? then return nil end uri = URI .parse( WEB_STORAGE_URI ) http = Net:: HTTP . new (uri.host, uri.port) http.use_ssl = uri.scheme === "https" headers = { "Content-Type" => "application/json" , "X-HTTP-Method-Override" => "GET" } response = http.post(uri.path, params.to_json, headers) case response when Net::HTTPSuccess json = response.body return JSON .parse(json) else puts [uri.to_s, response.value].join( " : " ) end rescue Net::HTTPBadResponse => e puts "Bad Response #{e}" rescue Net::HTTPHeaderSyntaxError => e puts "Header Syntax Error #{e}" rescue Net::HTTPClientException => e puts "Client Exception #{e}" rescue Net::HTTPServerException => e puts "Server Exception #{e}" rescue Net::HTTPError => e puts "Error #{e}" rescue Net::HTTPFatalError => e puts "Fatal Error #{e}" rescue Net::HTTPRetriableError => e puts "Retriable Error #{e}" rescue => e puts [uri.to_s, e. class , e].join( " : " ) end return nil end # __main__ current_data = get_current_data() if current_data. nil ? then return 1 end # こんな感じで取得可能 puts current_data[ "devices" ][ 0 ] |
0 件のコメント :
コメントを投稿