2018/07/04 - 17:53

AWS IoT エンタープライズボタンでSlack通知するようにした

:

:

:

こんにちは。kamui tracker担当のエンジニアのkawashigeです。
今回のブログではAWS IoT エンタープライズボタンを使ってSlackに通知を行うよう設定したので紹介します。

AWS IoTエンタープライズボタンとは?

プログラミング可能なAmazonのダッシュボタンで、ボタンのクリック時にメールを送信したり、AWS Lambda関数を実行するように設定できます。
Amazonで購入すると次のようなパッケージで届きます。

何を通知するのか?

弊社ではコーヒーメーカーでコーヒーを淹れた際に、コーヒー淹れた・なくなったという内容をSlackに毎回投稿する運用を行っていました。
毎回手動で投稿するのは面倒だったので、今回はその投稿を自動化することにしました。

設定方法

AWSアカウントにデバイスを登録する

ボタンをクリックした際の挙動を設定するのにAWS IoT 1Clickを使用します。
そのため、ダッシュボタンをAWSにデバイス登録する必要があります。
登録は次のURLのとおり実施しました。

https://aws.amazon.com/jp/blogs/news/aws-iot-1-click-use-simple-devices-to-trigger-lambda-functions/

デバイス登録時のコードの入力をパッケージのバーコードで読み取れるのでモバイルの1-Clickのアプリケーションを使うと楽に登録できます。

AWS Lambda関数の作成

ボタンクリック時の挙動を設定するため、SlackのWebhookのURLをたたいて投稿を行うLambda関数を作成します。
AWSコンソールのLambdaメニューで「一から作成」を選択してLambda関数を作成します。
今回はダッシュボタンを使用するのでポリシーテンプレートから「AWS IoTボタンのアクセス権限」を選択してロールを作成します。

あとは実行する内容を次のように記載します。※ランタイムはNode.jsを使用します。
Slackで投稿対象のチャンネルに投稿するWebhookを設定し、そのURLをYOUR_SLACK_WEBHOOK_URLに入れます。

exports.handler = (event, context, callback) => {
  const https = require('https');
  const url = require('url');
  const messages = {
      "SINGLE": "<!here> コーヒー淹れました!",
      "DOUBLE": "コーヒー無くなりました",
      "LONG": "<!here> コーヒー豆が切れそうです。購入してください!"
  };
  const clickType = event['deviceEvent']['buttonClicked']['clickType'];
  const slack_url = "YOUR_SLACK_WEBHOOK_URL";
  const options = url.parse(slack_url);
  options.method = 'POST';
  options.headers = {'Content-Type': 'application/json'};

  if (messages[clickType]) {
    const req = https.request(options, function (res) {
      if (res.statusCode === 200) {
        context.succeed('Succeed');
      } else {
        context.fail('Error has occured: ' + res.statusCode);
      }
    });

    req.on('error', function(e) {
      console.log('Error has occured: ' + e.message);
      context.fail(e.message);
    });

    req.write(JSON.stringify({text: messages[clickType]}));
    req.end();
  } else {
    console.log("Invalid clickType.");
  }
};

ボタンクリックのクリック(1回)、ダブルクリック、長押しの3パターンがevent引数から判別できるので、各パターンに応じたメッセージを設定できます。
これでLambda関数の設定は完了です。

AWS IoT 1Clickでプロジェクトを作成する

次にAWSコンソールのAWS IoT 1Clickメニューからプロジェクトを作成してデバイスとLambda関数の設定を行います。
好きな名前でプロジェクトを作成して、さきほど作成したLambda関数を選択します。

最後に登録したデバイスをプロジェクトに設定します。

これで設定は完了です!

通知の確認

あとはボタンをクリックするとSlackに通知されます。便利ですね!

ダッシュボタンはこんな感じでコーヒーメーカーに貼り付けています。

所感

設定が楽で短時間で使えるようにできるのは良かったです。
クリックの挙動に応じて3パターンの挙動を設定できるので、他の用途でも使えそうだなと思いました。
みなさんもAWS IoTエンタープライズボタンを使って日常の面倒なことを自動化してみてはいかがでしょうか?