Mackerelで部屋のコンディションを監視する
こんにちは!
タダケン(@tadaken3)です。
季節が変わり目で少し肌寒くなってきましたね。
部屋のコンディション(気温・湿度など)はパフォーマンスに強く影響します。
例えば、ジメジメしていると汗が気になって仕方がなかったり、部屋が寒すぎて集中できなかったり。
今回はMackerelとNature Remoを使って部屋のコンディションを監視する方法をまとめました。
- Mackerelを採用した背景
- 必要なアカウントの取得など
- Google Apps ScriptでNatureRemoからデータを取得してMackerelに投稿する
- まとめ
- 最後に少し宣伝です
- 参考サイト
Mackerelを採用した背景
部屋のコンディションを監視する上で、やりたかったことは、大きく以下の2つです。
- 自分の部屋の温度や湿度などのコンディションを数分ごとに記録してグラフで可視化すること
- 温度や湿度などがコンディションが変化したら通知をすること(湿度が高すぎるなど)
とくに大事なのが2つ目の「部屋の状態が変化したら自動でアラートする」という部分です。部屋の温度や湿度を監視するだけなら、Google Apps Scriptとスプレッドシートだけでも実現できます。
しかし、グラフにして計測するだけとなると、都度、自分でグラフを見にいかなければなりません。快適な環境を維持して、プログラミングやブログ執筆に集中したいのに、それはとてもめんどうです。
そこでサーバー管理・監視ツールのMackerelを使うことにしました。Mackerelには、「サービスメトリックス」という機能があり、サーバーに紐付かないあらゆるメトリックを記録・可視化できます。
サービスメトリックは利用するのも簡単で、メトリックの投稿はシンプルなHTTP+JSON APIで行えます。投稿してしまえばメトリックは自動的にでグラフ化されて、すぐにMackerelのWEBサービスから確認できます。
もともと、サーバー管理・監視のためのサービスなので、しきい値を設定してSlackやチャットワーク、LINEに通知することも簡単にできます。
また、Mackerelは最初の2週間は無料のトライアルプランで利用でき、その後も(機能は制限されるものの)Free プランに自動的に移行するので、コスト面でも安心です。
単純にMackerelはグラフを見ているだけで楽しいというのもあります。ほんとにMackerelは神サービスですね。
湿度や温度の取得は、Nature Remoで行っています。「温度・湿度」のセンサー部分は、ラズパイや他のセンサーデバイスに置き換えることも可能です。
Nature Remo APIからの湿度・気温データの取得とMarkerelへの投稿については、このためにサーバーを用意するのも大変なので、Google Apps Scriptで実装することにしました。ほんとGASは便利ですね。
システム概要をまとめるとざっくりこのような感じです。
必要なアカウントの取得など
今回、必要なのはNature RemoのアクセストークンとMackerelのアカウントです。
Nature Remoのアクセストークンを取得する
まずは以下のサイトにログインして、Nature Remoのトークンを取得します。取得したトークンはどこかにメモしておきます。
Mackerel のアカウントを作成する
次に、Mackerel のサイトに行きアカウントを作成します。Mackerel ではGoogleやGithubのアカウントでサインアップすることもできます。
Mackerel のAPIトークンを取得する
アカウントが作成できたら、xメトリックを投稿するためにMackerelのAPIキーを取得します。APIキーはダッシュボードの「APIキータブ」で確認できます。
Google Apps ScriptでNatureRemoからデータを取得してMackerelに投稿する
それでは、Google Apps Scriptで実装していきます。NatureRemo APIからデータの取得して、整形して、Mackerel投げるという流れです。Nature RemoとMackerel の認証情報は、スクリプトのプロパティに保存してください。
あとは、このスクリプトを時間トリガーで5分毎に実行するだけです。
function main() { var prop = PropertiesService.getScriptProperties(); var natureRemoApiToken = prop.getProperty('NATURE_REMO_TOKEN'); var mackerelApiKey = prop.getProperty('MACKEREL_API_KEY'); var serviceName = 'room-condition';//Mackerelのサービス名を入力 var data = getNatureRemoData(natureRemoApiToken) var payload = formatToPayload(data); postMackerelServiceMetric(mackerelApiKey, serviceName, payload); } //Nature Remo APIから部屋のデータを取得する function getNatureRemoData(apiToken){ url = 'https://api.nature.global/1/devices'; var options = {"headers" : {"Authorization" : "Bearer "+ apiToken}}; res = UrlFetchApp.fetch(url,options); return res } //Mackerel用にデータを整形する function formatToPayload(data){ var jsonData = JSON.parse(data); var te = jsonData[0]['newest_events']['te']['val']; var hu = jsonData[0]['newest_events']['hu']['val']; var epoch = Date.now() / 1000; var payload = [ { 'name' : 'room.temperature', 'time' : epoch, 'value' : Number(te)}, { 'name' : 'room.humidity', 'time' : epoch, 'value' : Number(hu)}, ]; return payload } //Mackerelに送る function postMackerelServiceMetric(apiKey, serviceName, payload) { return UrlFetchApp.fetch( 'https://mackerel.io/api/v0/services/' + serviceName + '/tsdb', { 'contentType' : 'application/json', 'method' : 'post', 'headers' : { 'X-Api-Key' : apiKey }, 'payload' : JSON.stringify(payload), 'muteHttpExceptions' : true } ); }
まとめ
スクリプトを可動させるとMackerelに気温・湿度のデータが溜まっていきます。こんな感じで、グラフを見たり、しきい値を設定してアラートを飛ばすことができます。
Mackerelをうまく使えば、50行ちょっとのコードで部屋のコンディションを管理できて素敵ですね。みなさんも、季節の変わり目で体調を崩さぬようお気をつけくださいな。
最後に少し宣伝です
本ブログでは、プログラミングやIT技術に関するブログ記事を公開しております。もしよければ、Twitterアカウントをフォローもしくは、ブログの読者登録していただけるとうれしいです!
ぜひ、よろしくお願いいたします。
参考サイト
- Google Analyticsの「現在の訪問人数」を Mackerel に投稿する heroku app を作ったよ - えいのうにっき
- Raspberry Piとgo言語で部屋のコンディションを記録してグラフ化した - 丁寧に手を抜く
- 暑くて眠れないので温度を自動記録するNature Remo API/GASアプリを作った|きょーちか|note
- Google Analytics の「現在の訪問人数」を Mackerel に投稿する Google Apps Script - こんにちはこんにちはmonmonです!
- 作者: 井上大輔,粕谷大輔,杉山広通,田中慎司,坪内佑樹,松木雅幸
- 出版社/メーカー: 技術評論社
- 発売日: 2017/08/26
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る