はじめに
こんにちは!今回はおんどとり WebStorage APIを使ってデータを取得する方法をご紹介します。これを読めば、温度・湿度のデータを簡単に取得できるようになりますよ。
利用機器
- RTR503B(子機:温度・湿度測定)
- RTR500BM(親機:SIM対応モバイル回線でクラウドへデータ転送)
取得方法・条件
- Pythonプログラム(Jupyter Notebook)を使用
- 環境構築やパッケージのインストールは省略
- APIを利用して、指定期間・件数のデータを取得
- おんどとり WebStorageに登録済みで、データが閲覧可能であること
APIリファレンス
APIの詳細は以下のリンクから確認できます。
WebStorage APIへのアクセス情報準備
APIアクセスに必要な情報をondotori.env
ファイルにまとめ、コードと同じフォルダに保存します。APIキーは「おんどとり WebStorage」の「アカウント管理」→「開発者向けAPI管理」から発行できます。
API_KEY = '*****'
LOGIN_ID = 'おんどとりWebStorageのログインID'
LOGIN_PASS = 'おんどとりWebStorageログインパスワード'
REMOTE_SERIAL = '子機のシリアル番号'
BASE_SERIAL = '親機のシリアル番号'
Pythonコード
以下のコードでデータを取得し、データフレームとして整形します。コードは分割して説明しますが、まとめて実行することも可能です。
パッケージインポートと環境変数の取得
import requests
import os
import pandas as pd
import json
from dotenv import load_dotenv
from pprint import pprint
from datetime import datetime, timedelta
# 環境変数をセット
load_dotenv(dotenv_path='./ondotori.env')
# 環境変数から情報を取得
API_KEY = os.getenv('API_KEY')
LOGIN_ID = os.getenv('LOGIN_ID')
LOGIN_PASS = os.getenv('LOGIN_PASS')
REMOTE_SERIAL = os.getenv('REMOTE_SERIAL')
BASE_SERIAL = os.getenv('BASE_SERIAL')
データ取得
# データを取得してデータフレーム形式へ変換
# 現在の時刻と24時間前の時刻をUNIXタイムスタンプで取得
now = datetime.now()
unixtime_to = int(now.timestamp())
unixtime_from = int((now - timedelta(days=1)).timestamp())
# APIエンドポイントとヘッダー
url = "https://api.webstorage.jp/v1/devices/data-rtr500"
headers = {
"Content-Type": "application/json",
"X-HTTP-Method-Override": "GET"
}
# リクエストボディ
payload = {
"api-key": API_KEY,
"login-id": LOGIN_ID,
"login-pass": LOGIN_PASS,
"remote-serial": REMOTE_SERIAL,
"base-serial": BASE_SERIAL,
"unixtime-from": unixtime_from,
"unixtime-to": unixtime_to,
"type": "json"
}
# APIリクエスト
response = requests.post(url, headers=headers, json=payload)
# レスポンスの確認
if response.status_code == 200:
data = response.json()
# データフレームの作成
df = pd.DataFrame(data['data'])
print(df)
df['remote-serial'] = data['remote-serial']
df['base-serial'] = data['base-serial']
df = df[['remote-serial', 'base-serial', 'data-id', 'unixtime', 'ch1', 'ch2']]
df.columns = ['remote_serial', 'base_serial', 'data_id', 'time', 'temperature', 'humidity']
# UNIXタイムを人間が読める形式に変換
df['time'] = pd.to_datetime(df['time'].astype(int), unit='s')
# 'id'列の追加
df['id'] = df['remote_serial'] + '-' + df['base_serial'] + '-' + df['data_id'].astype(str) + '-' + df['time'].dt.strftime('%Y%m%d%H%M%S')
# CSVファイルに出力する場合
# df.to_csv('data.csv', index=False)
# print("CSVファイルにデータを出力しました。")
print(df)
else:
print(f"エラーが発生しました: {response.status_code}")
実行すると、以下のようなデータフレームが得られます。(シリアル番号はダミーです)
JSONデータ確認
取得したJSONデータを確認したい場合は、以下のコードを実行してください。
# 受信したjsonデータをそのまま表示
from pprint import pprint
pprint(response.json())
次回予告
次回は、取得したデータをAzure CosmosDBへ保存する方法をご紹介します。お楽しみに!