実現したいこと
- Nature Remoに搭載されているセンサ情報の蓄積
- Nature Remo Cloud APIを用いたPHPからのセンサ情報取得
- Googleデータポータルでの表示
前提条件
- Nature Remoの設置が完了している
- SynologyのDBサーバがセットアップされている(Maria DB)
DB作成時にphpMyAdminが導入されていると便利です(Synologyパッケージマネージャよりインストール可能です) - SynologyでPHPがインストールされていること
- Synologyの外部公開設定が終わっている (GoogleデータポータルからSynologyのDBへアクセスする場合)
- DNSで名前解決ができる、固定IPやダイナミックDNSを利用
- ルーターのNAT / Port Foward / Virtual Serverの設定が出来ており、インタネットからSynologyのMaria DB(デフォルトポート:3307)にアクセスできる
構築手順
Nature Remo API利用時のアクセストークン発行
Nature Remo Cloud APIへアクセスし、OAUTH2認証用のアクセストークンを発行します。APIを利用する際には、HTTPヘッダに以下を指定します。
Authorization: Bearer {TOKEN}
自分のアクセストークンは、home.nature.globalより新規発行します。
Nature Remo Cloud APIのサンプルレスポンス。
[ { "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "name": "string", "temperature_offset": 0, "humidity_offset": 0, "created_at": "2019-06-29T01:47:23.111Z", "updated_at": "2019-06-29T01:47:23.111Z", "firmware_version": "string", "mac_address": "string", "serial_number": "string", "newest_events": { "te": { "value": 0, "created_at": "2019-06-29T01:47:23.111Z" }, "hu": { "value": 0, "created_at": "2019-06-29T01:47:23.111Z" }, "il": { "value": 0, "created_at": "2019-06-29T01:47:23.111Z" } } } ]
Maria DBの準備
SynologyのMaria DBで、データ蓄積用のDBとテーブルを作成します。
データ取得時間記録カラムとTE(室温)、HU(湿度)、IL(照度)を格納するカラムを作成します。また、データ蓄積時のユーザーとDB参照用のユーザーを作成しておきます。
PHPスクリプトの準備
簡単なスクリプトサンプルを載せておきます。
取得したアクセストークン、設定したDB関係のパラメーターを設定すれば動作すると思います。
<?php /************************************************************************* * home-api (History of Nature Remo Senser) * Home Tools for private. Using IFTTT and Google Home etc * * PHP 5 or later * * @category Home IoT * @author Miki * @url https://www.miki-ie.com/ * @copyright 2019 (c) MIKI-IE All rights Reserved. * @license https://opensource.org/licenses/mit-license.html MIT License * @version 1.0 *************************************************************************/ //Nature Remo API情報 $token = '@NatureRemoApiToken@'; // tokenを設定 $header = [ 'Authorization: Bearer '.$token, // 前準備で取得したtokenをヘッダに含める 'Content-Type: application/json', ]; $base_url = 'https://api.nature.global/1/'; //DB情報 $host_name = '127.0.0.1:3307'; //DB $user_name = '@DB_USER@'; $password = '@DB_PASS@'; $database_name ='@DB_NAME@'; $table_name = '@DB_TABLE@'; $mysqli = new mysqli($host_name, $user_name, $password, $database_name); $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $base_url.'devices'); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET'); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // 証明書の検証を行わない curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_HTTPHEADER, $header); curl_setopt($curl, CURLOPT_HEADER, true); $response = curl_exec($curl); // ステータスコード取得 $code = curl_getinfo($curl, CURLINFO_HTTP_CODE); echo 'HTTP_CODE:'.$code."\n"; // header & body 取得 $header_size = curl_getinfo($curl, CURLINFO_HEADER_SIZE); echo 'HEADER_SIZE:'.$header_size."\n"; $header = substr($response, 0, $header_size); $body = substr($response, $header_size); $result = json_decode($body, true); echo 'te: '.$result[0]["newest_events"]["te"]["val"]."\n"; echo 'hu: '.$result[0]["newest_events"]["hu"]["val"]."\n"; echo 'il: '.$result[0]["newest_events"]["il"]["val"]."\n"; $te = $result[0]["newest_events"]["te"]["val"]."\n"; $hu = $result[0]["newest_events"]["hu"]["val"]."\n"; $il = $result[0]["newest_events"]["il"]["val"]."\n"; $datetime = date("Y/m/d H:i:s"); curl_close($curl); // SQL(INSERT)を作成 $sql = "INSERT INTO $table_name ( DATETIME, TE, HU, IL ) VALUES ( '$datetime', $te, $hu, $il )"; echo $sql."\n"; $mysqli->query($sql); $mysqli->close(); ?>
コマンドラインより動作確認します。定期実行を設定する際にフルパスで実行指定をしたいので、動作確認もフルパス指定で実行確認を行います。
「/usr/local/bin/php72 /var/services/homes/php/Remo.php」
phpMyAdminなどで、登録されたレコードを確認することもおすすめします。
@Synology:~$ /usr/local/bin/php72 /var/services/homes/php/Remo.php HTTP_CODE:200 HEADER_SIZE:574 te: 24.6 hu: 60 il: 249.39 INSERT INTO living ( DATETIME, TE, HU, IL ) VALUES ( '2019/06/29 11:01:46', 24.6 , 60 , 249.39 ) @Synology:~$
スクリプトの定期実行登録
Synologyのタスク スケジューラーでスクリプトの定期実行を登録します。
Googleデータポータル(データスタジオ)
Googleデータポータルにアクセスし、レポートを作成します。
- データソース追加。GoogleコネクタのMySQLを選択し、接続情報を登録しSynologyのDBとの接続設定を行います。
- レポートやData Studio Explorer (Labs)を用いて、Viewを作成します。
以下にGit Hubのgistへ登録したソースコードも載せておきます。