CO2センサーとGoogle Cloud Functionsを使ったサーバレスアラートシステム

はじめに

このページではウェビオのCO2センサーとGoogle Cloud Functionsを用いてSlackに通知する方法をご紹介します。

仕組み

ウェビオのセンサーから直接Slackに通知はできないので、Google Cloud Functionsを用いて、CO2センサーからのHTTPリクエストをトリガーにしてGoogle Cloud Functionsに記述されている関数を実行します。

システム図

メリット

このシステムのメリットは

  • 値に応じた判断ロジックを自分で組める
  • サーバ不要。Google Cloud FunctionsにJavascriptのコードを書くだけでやりたいことが実現できる。
  • 安い(1ヶ月に200万回まで無料) Google Cloud Platform の無料枠

デメリット

  • 基礎的なJavascriptとhttpの理解が必要

実装

1. Slackの設定

ここでは事前にbot_testというチャンネルを作成しておき、そのチャンネルにIncoming WebhooksというHTTPリクエストを受け取った時にメッセージをチャンネルに送信してくれるものを設定します。

Incoming Webhooksのページから通知したいチャンネルを選択します。

チャンネルの選択

チャンネルを選択した後、Add Incoming WebHooks integrationをクリックします。 すると、WebhookのURLが表示されます。

WebhookのURL

このURLをあらかじめコピーしてメモ帳などに張り付けておきます。 BOTの名前やアイコンなどを設定したらSave Settingsをクリックします。 設定の保存

2. Google Cloud Functionsの設定

まず、Google Cloud Functionsで関数を作成していきます。Google Cloud プラットフォームにログインして左側のメニューからCloud Functionsを選択します。

さらに、関数を作成ボタンを押すと関数を記述できるページが現れます。

  • 名前: 関数の名前(ここではnotifyCO2Value)
  • 割り当てられるメモリ: 256MB
  • トリガー: HTTP
  • ソースコード: インラインエディタ
  • ランタイム: Node.js 8

を設定してます。 関数の設定

以下は、CO2センサーから受け取った値が閾値を超えたらSlackに通知するindex.jsのサンプルコードです。

const request = require('request')

exports.notifyCO2Value =  function (req, res) {
   console.log(req.body)

  const receivedCO2Value = Number(req.body.value)
  const threshold = 950 // 警告閾値
  const url = process.env.WEBHOOKURL  //  "https://hooks.slack.com/services/*****/****"  Slackのwebhook url を環境変数に設定
  //リクエストモジュールのオプション
  const options = {
    url: url,
    method: 'POST',
    json: true,
    body: {
      "text": `基準を超えました (${receivedCO2Value})`,
      "username": "webhookbot",
      "channel": "#bot_test"
    }
  }

  //閾値以上の場合は、Slackにポスト
  if(receivedCO2Value >= threshold) {
    request.post(options, function(error, response, body){
      if (!error && response.statusCode == 200) {
        console.log("success")
      } else {
        console.error('error: '+ response.statusCode)
      }
    })
  }

  // ウェビオにレスポンスを戻す
  res.json({msg:"OK"})
}

package.jsonはこちらです。

{
  "name": "NotifyCO2Value",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "Takayuki Miura",
  "license": "MIT",
  "dependencies": {
    "request": "^2.88.0"
  }
}

index.jsとpackage.jsonを記述した後、実行する関数を自分が設定した関数(notifyCO2Value)とし、

その他をクリックして環境変数を追加します。名前をWEBHOOKURL、値に先ほどWebhookをSlackに設定したときにコピーしたURLをペーストします。

最後に作成ボタンをクリックします。

ウェビオのセンサーからデータをPOSTするために、作成した関数のトリガータブからURLをコピーしておきます。

URLのコピー

3. ウェビオCO2センサー

次に、ウェビオのCO2センサーのデータ連携設定を行います。ウェビオコンソールから左側のメニューのデータ連携をクリックし、下にあるルールを追加をクリックします。以下の画面からHTTP POSTを選択します。以下の画面からHTTP POSTを選択します。

HTTPメソッドの選択

次に、チームを選択し、送りたいセンサーの種類にチェックを付けます。ここではCO2センサーの値が知りたいので、該当するセンサーのCO2にチェックを入れ、次へをクリックします。

データ連携設定画面が表示されたら、送信先URLに先ほどGoogle Cloud Functionsで生成したURLを張り付け、BODY欄に以下のものをコピーして貼り付けます。

{
  "value":"{{value}}"
}

jsonの入力

次へをクリックし、テストボタンをクリックし、以下のように 200 { "msg": "OK" } となれば成功です。

テスト画面

最後に設定するボタンをクリックすれば設定完了です。

結果

実際にSlackに通知が来ているか確認してみます。 結果

bot_testチャンネルに通知が来ていることが確認できました。

最後に

今回は、ウェビオのCO2センサーを使って環境のモニタリングを行いました。CO2の濃度が高いと作業のパフォーマンスに影響が出るため、CO2の濃度を把握して換気などを行うことは大切です。ウェビオのセンサーとクラウドサービスを連携することで、柔軟に業務の改善に繋げることができます。ぜひあなたのIoTプロジェクトにご活用ください。

関連ページ

お問い合わせ

ご不明な点がございましたら、お気軽にお問い合わせ下さい。
ピクスー株式会社

  • 所在地: 〒150-0002 東京都渋谷区渋谷1-20-9 co-factory渋谷402 ピクスー株式会社
  • メール: info@webiot.io
  • 電話番号: 090-9863-0987(担当:塩澤)