実現したいこと
- 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}
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データポータルにアクセスし、レポートを作成します。
- データソース追加。GoogleコネクタのMySQLを選択し、接続情報を登録しSynologyのDBとの接続設定を行います。
- レポートやData Studio Explorer (Labs)を用いて、Viewを作成します。
以下にGit Hubのgistへ登録したソースコードも載せておきます。