15. 10月 2018 · Write a comment · Categories: PHP · Tags: ,



はじめに

私の職場があるビルはいわゆるランドマークタワーで、地元ではこの中で働いているというだけで何故か信頼を得られるのですが、実際は空調が一元管理されておりあまり融通が効かず快適な職場とは言えません。
そこで導入されたのが NETATMO ウェザーステーションです。
こちらを使って気温や CO2 濃度の計測をして、社内で決められた値を超えたら管理部門に電話をするようになりました。
しかし、この情報は NETATMO 専用の Web サイトにアクセスして確認しなければならず、忙しい業務中に確認するというのは現実的ではありませんでした。
そこで今回、NETATMO API から気温・CO2 を取得し社員が頻繁に見ている社内管理ツール上に表示するようにしてみました。


 

やりたいこと

  • NETATMO API から情報を取得

NETATMO CONNECT に登録

NETATMO API を利用するするにはアプリケーションの登録が必要となります。NETATMO CONNECT に登録をします。
※NETATMO ウェザーステーションをすでに利用している前提の話です。


netatmo connect



必須項目は2018年10月現在、以下3つです。それぞれ入力します。

  • Name
    • 作成するアプリ名です
    • 深く考える必要はありません。私は「officeAtmo」としました。
  • Description
    • アプリの説明です
    • これも深く考える必要はありません。私は「管理ツール用」としました。
  • Data Protection Officer name
    • データ保護責任者の名前
    • 会社組織の場合、該当者がいるはずですのでその方の名前を入れます
    • 事前に確認了承を得てください

登録が完了すると TECHNICAL PARAMETERS の登録となりますが、こちらは特になにも入力しなくて大丈夫です。
ただし、表示されている Client id と Client secret は API で使います。


technical param




これで事前準備は完了です。ここからは実際に API を叩いてみます。


実装

私は PHPer なので PHP での実装となります。
とりあえずコード貼ります。


<?php
// NETATMO CONNECT に登録した内容で認証 API を curl で叩く
$netatmoAuth = array(
    'client_id'     => CLIENT_ID,
    'client_secret' => CLIENT_SECRET,
    'grant_type'    => 'password',
    'username'      => MAIL_ADDRESS,
    'password'      => PASSWORD,
);
$url = 'https://api.netatmo.com/oauth2/token';
// 自作 curl ライブラリ
$requestObj = new CurlHttpRequest($url, $netatmoAuth);
$timeOutSecond = 30;
// POST で
$response = $requestObj->post($timeOutSecond);

// 例外処理は適宜入れてください

// 認証情報が json で返ってくるので decode する
$response = json_decode($response['body'], true);

// 取得した認証情報のアクセストークンを使って現在のウェザーステーション情報を取得
$url = "https://api.netatmo.com/api/getstationsdata?access_token={$response['access_token']}";
$requestObj = new CurlHttpRequest($url);
$timeOutSecond = 30;
// 今度は GET で
$response = $requestObj->get($timeOutSecond);
$response = json_decode($response['body'], true);
// 気温
$netatmo['temperature'] = $response['body']['devices'][0]['dashboard_data']['Temperature'];
// CO2 濃度
$netatmo['co2'] = $response['body']['devices'][0]['dashboard_data']['CO2'];
// 湿度
$netatmo['humidity'] = $response['body']['devices'][0]['dashboard_data']['Humidity'];


Netatmo API へのアクセスは curl で行っていますが上記の例では自作の curl ラッパークラスを使っていますので、適宜ご自身の環境で書き換えてください。
まずは認証を通過する必要があるので、認証 API を叩いています。今回は閉じた環境でサクッと利用するために簡易的な方法をとっています。
grant_type に password を指定して、NETATMO CONNECT に登録した内容と取得した Client id と Client secret で POST リクエストを送ります。
認証結果が json で返却され、中にアクセストークンが含まれています。
続いてアクセストークンを使って現在のウェザーステーション情報を取得します。
こちらも json で結果が返ってくるので、その中から必要な部分を抜き出します。今回は気温・CO2濃度・湿度を社内の管理画面に表示させてみました。


まとめ

実際の管理画面はお見せできませんが、これで気になったときにすぐオフィスの快適度が数値として分かるようになりました。
まあ、そこから管理部門に電話しなきゃいけないんですけどね。。。ハードル高すぎ。。。
では快適な職場ライフを。。。


About the author: roswellian

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

post date*