0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

おんどとり WebStorage APIのデータ活用 (1)

Last updated at Posted at 2024-09-03

はじめに

こんにちは!今回はおんどとり 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}")

実行すると、以下のようなデータフレームが得られます。(シリアル番号はダミーです)

image.png

JSONデータ確認

取得したJSONデータを確認したい場合は、以下のコードを実行してください。

# 受信したjsonデータをそのまま表示
from pprint import pprint
pprint(response.json())

次回予告

次回は、取得したデータをAzure CosmosDBへ保存する方法をご紹介します。お楽しみに!

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?