自宅の室温ってどのくらいの幅があるんだろうと気になったので、Nature Remo mini2台を使って室温を取得し、Tableau Publicで可視化してみました。
- 私自身のスキルは以下の通りです。
- Nature RemoのAPIは初めて触る
- Google Apps Script(GAS)でのプログラム作成は業務で1度だけ
- Tableauは業務で触ってから2年くらい
調べながら進めて4時間ほどで完成しました。
完成した室温のダッシュボードは、以下のリンクから見られます。
Nature Remo miniで計測した室温を、1時間ごとにスプレッドシートに書き込んでいます。
そして、毎日11時~12時の間に、Tableauでスプレッドシートから過去24時間分のデータを取得しています(期間:2022/4/6~2023/1/15)。
開発環境
- OS
- Windows 11 Home
- ブラウザ
- Google Chrome
- アプリケーションなど
- Nature Remo mini 第一世代
- Google スプレッドシート
- Tableau Public 2022.1
Nature Remo miniのアクセストークンを発行する
そもそもNature Remoとは
スマートホームを手軽に。進化したリモコン。
Nature Remo(ネイチャーリモ)は、お持ちの家電をスマートフォンから操作できる進化したリモコンです。
赤外線方式のリモコンを備えた家電であれば、メーカーや型番・年式などに関係なく使用可能。
今回は、エントリーモデルのNature Remo miniの温度センサーとAPI機能を使って開発を行います。
※通常のNature Remoには温度、湿度、照度、人感センサーが搭載されていますが、miniはエントリーモデルのため温度センサーのみ搭載されています。
Nature Remo Cloud APIとは
Nature Remo Cloud API(以降API) を利用することで、Nature Remoシリーズ(以降Remo)のセンサーから得られる情報を取得する、Remoから赤外線を送信する、Natre Remo Eシリーズ(以降Remo E)に接続したスマートメーターから得られる電力データを取得するなどのアクションを行うことができる。
アクセストークンの発行方法
以下のページで、自分のアクセストークンを新規発行したり失効したりすることができます。
Googleアカウント、またはメールアドレスでログインが可能です。
私は、スマートフォンのNature Remoアプリに登録されているメールアドレスでログインしました。
入力したアドレスにログインメールが届きます。
メールのログインボタンを押してください
↓↓↓↓左下の「Generate access token」を押して↓↓↓↓
発行されたアクセストークンをコピーしてください。後ほどこのトークンを使用します。
また、アクセストークンはこの後確認ができなくなります。
注意
アクセストークンが知られると、他人に家の家電を操作されてしまいます。
公開することなく厳重に管理してください。
以上でアクセストークンの発行は終了です。
データ取得用Google Apps Script作成
1時間に一回、Nature Remo miniから室温データを取得し、スプレッドシートに書き込むスクリプトを作成します。
また、後々分析がしやすいように、データ取得時間を01:00:00や02:00:00などのきりがいい時間に設定しています。
スプレッドシートの新規作成
タイトルを分かりやすく「Nature Remo温度メモ」とします。
そして、1行目に列名を追加します。※自宅にはNature Rimo miniが2つあるので、それぞれの温度を記入する列を作成しました。
プログラムファイル作成
「拡張機能」タブからApps Scriptを選択します。
デフォルトでソースコードが入力されています。
削除して、以下のソースコードを入力してください。
※Nature Rimo miniが1つの場合のソースコードもコメントアウトで記載しています。
=======================
ソースコードを表示(折り畳み)
========================
//===========================================================================================
// 毎時59分に実行するトリガーをセットする(例:14:30に実行したら14:59のトリガーをセット)
// この関数を1時間ごとのトリガーに指定して運用
//===========================================================================================
function setNextTrigger(){
const time = new Date();
time.setMinutes(59);
//過去のトリガーを削除
removeTrigger("mainTrigger");
ScriptApp.newTrigger("mainTrigger").timeBased().at(time).create();
}
//===========================================================================================
// トリガーを削除
//===========================================================================================
function removeTrigger(triggerName){
const triggers = ScriptApp.getProjectTriggers();
for(const trigger of triggers){
if(trigger.getHandlerFunction() == triggerName){
ScriptApp.deleteTrigger(trigger);
}
}
}
//===========================================================================================
// 毎時59分に呼び出されるメイン処理のトリガー
//===========================================================================================
function mainTrigger(){
//トリガーは毎時59分にセットされるため、00分00秒に処理を開始するまで待機
const startTime = new Date();
startTime.setMinutes(startTime.getMinutes() + 1);
startTime.setSeconds(0);
startTime.setMilliseconds(0);
Utilities.sleep(startTime - new Date());
main(); //メイン処理呼び出し
}
//===========================================================================================
// Nature Remo Cloud APIで、Nature RemoシリーズのセンサーからJSONデータを取得
//===========================================================================================
function getData() {
//前工程で取得したアクセストークンを張り付けてください。
var access_token = 'アクセストークン';
var url = 'https://api.nature.global/1/devices';
var params = {
headers : {
"Content-Type" : "application/json;",
'Authorization': 'Bearer ' + access_token
},
method : 'get'
};
var data = JSON.parse(UrlFetchApp.fetch(url,params));
return data;
}
//===========================================================================================
// スプレッドシートの最終行にデータを追加
//===========================================================================================
function setValue(data) {
var ss = SpreadsheetApp.getActiveSpreadsheet()
var sheet = ss.getActiveSheet()
sheet.appendRow([new Date(), data[0]["newest_events"]["te"]["val"], data[1]["newest_events"]["te"]["val"]])
//Nature Remoが1つで日時と温度(一か所)のみを記載する場合
//sheet.appendRow([new Date(), data[0]["newest_events"]["te"]["val"]])
}
//===========================================================================================
// APIからデータを取得して、スプレッドシートへ書き込み
//===========================================================================================
function main(){
var data = getData();
setValue(data);
}
↓↓↓↓貼り付ける!!↓↓↓↓
トリガー設定
画面遷移後、右下の「トリガーを追加」ボタンからトリガーを追加します。
- 実行する関数を選択
- setNextTrigger
- 実行するデプロイを選択
- Head
- イベントのソースを選択
- 時間主導型
- 時間ベースのトリガーのタイプを選択
- 時間ベースのタイマー
- 時間の間隔を選択(時間)
- 1時間おき
- エラー通知設定
- 毎日通知を受け取る
- こちらはお好みで変更してください。※1日で1回もエラーが起こらない場合は通知はきません。
- 毎日通知を受け取る
何時間か放置してみるとこのようにデータが自動的に追加されていきます。
以上でGoogle Apps Scriptの作成は終了です。
Tableauで表示する
スプレッドシートのままでは傾向が分かりずらいため、おしゃれにまとめるためにTableauというBIツールを使用します。
Tableauとはビジュアル分析のプラットフォームであり、いくつかの製品から構成されています。
今回はその中でも「Tableau Public」という製品を使います。
Tableau Publicとは
インタラクティブなグラフ、美しいマップ、ライブダッシュボードを数分で作成できます。Viz を Tableau Public プロフィールに保存し、Web 上のどこでも共有できます。誰でも簡単に使えます。しかも無料です。
有料版の「Tableau Desktop」では様々なデータソースとの接続が可能ですが、今回はスプレッドシートと接続をするだけなので無料の「Tableau Public」を使います。
※ただし、作成したViz(Tableauで作成したビジュアライズされたグラフや表)はローカル環境に保存できないため、Tableau Publicプロフィールに保存する必要があります。
Tableau Publicをインストールする
リンク先の「PUBLICをダウンロード」ボタンを押してダウンロードしてください。
ダウンロードにはTableau製品全体で使用できるアカウントの作成が必要なので作成後してください。
※Tableau Publicで公開する際には公開される名前の変更が可能です。
ダウンロードが完了したら、手順に従ってインストールしてください。
データを接続する
インストールしたTableau Publicを起動します。
トップ画面の接続先から「Google Drive」をクリックします。
ブラウザでGoogleアカウントによる認証を行うと、Tableau Publicで上記のような画面が表示されます。
作成したスプレッドシート(今回は Nature Remo温度メモ)を選択します。
データが接続され,、日時列は日付、室温データ列は数値として正しく認識されていることが確認できます。
ダッシュボードの作り方
作り方はファイルを実際に見てもらうのが早いかと思います。
リンク先のダウンロードボタンから 室温.twbx のダウンロードができます。
twbxファイルのダウンロード方法
バージョンは「現在」で問題ないかとおもいますが、うまく見られない場合は「Tableau 2022.1」を選んでください。
ファイルの構成
- データソース
- ワークシート
- 時間室温 --1時間ごとの室温(生データ)
- 日平均室温 --1日ごとの平均室温
- 週平均室温 --1週間ごとの平均室温
- 月平均室温 --1か月ごとの平均室温
- ダッシュボード
- 室温 --ワークシートを1ページにまとめたもの
注意
このファイルはワークシートとダッシュボードの内容を確認するのみに使用するもので、データソースタブの内容を確認することはできません。
データソースタブを押すとGoogleの認証画面へ遷移しますが認証は行わないでください。
追加したフィールドについて
生データは1時間ごとのデータなので、1日・1週間・1か月間の平均室温が知りたい場合は室温を足し合わせてからレコード数で割る必要があります。
今回は、リビングと寝室の平均室温を求める計算フィールドをを追加しています。
パブリッシュする方法
Tableau Publicアプリケーションでファイルを保存しようとすると、自動的にTableau Publicへパブリッシュされます。
閲覧制限の機能はないため、扱うデータには注意してください。
データの更新頻度
Tableau Publicでデータが自動的に更新される間隔は約24時間です。データをより早く更新させるには、保存したTableau Publicページの右下にある「データ更新の要求」ボタンを押してください。※作成者のみ実行できます。
以上でTableau Publicでの表示ができました。
完成
参考
- プロジェクト関係
- 記事の書き方関係