74
36

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

特級呪物と化したAWS IoT Enterprise Buttonを勤怠ボタンとして活用する

Last updated at Posted at 2023-12-08

この記事はHRBrain Advent Calendar 2023 9日目の記事です。

はじめに

初めまして。11月からHRBrainで業務委託として関わっている yakiniku0220です。
12月になり、いよいよ年末感が少しずつ出てきましたね。
年末といえば大掃除ですが、一気にやるのは億劫なので私は週末に細かくやっています。
そこで久々にあるものを発見しました。

 IMG_0369.JPG

そうですAWS IoT Enterprise Buttonです。

HRBrainでは各々がtimesのチャンネルを作っており、そこで作業の開始と終了を投稿しているのですが、毎回打ち込むのは面倒くさいのでアドベントカレンダーのネタとして面白いと思ったのと、実用的にも使えそうだなと思ったので今回記事として作りました。

AWS IoT Enterprise Buttonとは

AWS IoT Enterprise Button ボタンは、Amazon Dash Button ハードウェアをベースにしたプログラミング可能なボタン。Wi-Fi デバイスは設定が簡単で、特定のデバイス向けのコードを記述することなく、AWS IoT Core、AWS Lambda、Amazon DynamoDB、Amazon SNSなどに連携できるボタンです。

今回はこのAmazon Iot Enterprise Buttonを使って勤怠ボタンを作ります。

全体の構成

構成はかなりシンプルです。

attendance.png

処理の流れとしては以下のようになってます。

  1. AWS IoT Enterprise Buttonをクリック
  2. Lambdaに紐づいたAWS IoT Enterprise Buttonのトリガーが発火。
  3. Slackに通知。
    1. シングルクリックした場合
      1. 仕事始めますとSlackに通知。
    2. ダブルクリックした場合
      1. 仕事終了しますとSlackに通知。

Lambdaの設定

関数を作成します。
右上にある 関数の作成をクリックします。

スクリーンショット 2023-12-04 12.09.21.png

関数を作成します。
今回は一から作成を選択します。
関数名は任意で、ランタイムは Node.jsの最新版を選択しました。
アーキテクチャは最初から設定されている x86_64を選択。
最後に右下にある関数の作成をクリックします。

スクリーンショット 2023-12-04 12.10.24.png

AWS IoT 1-Clickの設定

プロジェクトの作成

まずはプロジェクトを作成します。
AWS IoT 1-ClickのTopにある プロジェクト作成をクリックします。

スクリーンショット 2023-12-04 0.19.50.png

プロジェクト情報の指定をします。
今回は Attendance_to_slackというプロジェクト名にします。
説明部分は省いても問題ありません。
スクリーンショット 2023-12-04 0.26.50.png

プロジェクトのプレイスメントのテンプレート作成。
今回はLambdaを使ってSlackに通知するので、アクションは Lambda 関数の選択を指定して、リージョンは 東京Lambda関数は Lambda側に作った関数を指定します。
スクリーンショット 2023-12-04 2.05.25.png

これでAWS IoT 1-Clickのプロジェクトの作成は完了です。

AWS IoT Enterprise Buttonの登録

AWS IoT Enterprise Buttonを使用するにはAWS IoT 1-Clickでデバイスを登録させる必要があるので登録します。
ブラウザでもできますがアプリで登録するのが楽なので、今回はアプリで登録していきます。

AWS IoT 1-ClickアプリをダウンロードしたらAWSアカウントでログインします。

IMG_A20BB05EA9E9-1.jpeg

デバイスを登録します。(リージョンはLambdaなどで設定しているリージョンに変えてください。)
登録パターンは2つあります。

  • デバイスIDで登録
    • カメラを起動してAWS IoT Enterprise Buttonの裏面にあるQRコードを読み取る。
  • 登録コードで登録
    • AWS IoT Enterprise Buttonの登録コードを入力する。

今回は デバイスIDで登録で登録してみます。
IMG_0365.PNG

デバイスを登録します。
今回はデバイスをスキャンで登録するのでデバイスIDで登録を選択してスキャンのボタンをクリックします。

IMG_0361.PNG

デバイスが読み込まれると1個のデバイスが追加されましたと表示されるので、スキャンの停止をクリックします。
IMG_3DDE648C803E-1.jpeg

追加されると以下の画面のようにデバイス情報が表示されるので、登録のボタンをクリックします。

IMG_9458CE2C991D-1.jpeg

するとWi-Fiの設定をする画面が表示されるので登録をします。
今回は登録の流れは省きます。

IMG_0363.PNG

登録が完了すると設定部分が成功と表示されるようになるので、次へをクリックします。

IMG_860833C0E8A0-1.jpeg

最後にAWS IoT Enterprise Buttonをクリックすると登録が完了します。

IMG_0367.PNG

登録が成功するとAWS IoT 1-Clickのデバイス一覧に登録したデバイスが表示されます。

スクリーンショット 2023-12-05 5.50.15.png

この段階だとまだデバイスが無効になっているので有効にする必要があります。
右側の・・・をクリックしてデバイスを有効化します。

スクリーンショット 2023-12-04 1.59.31.png

プレイスメントの作成

AWS IoT 1-Clickで作ったプロジェクトに登録したデバイスを紐づける必要があるため、プレイスメントを作成します。

プロジェクト一覧に移動して、作成したプロジェクト名をクリックします。

スクリーンショット 2023-12-05 6.03.36.png

プロジェクト詳細画面に遷移したらプレイスメントをクリックして、右上にあるプレイスメントの作成をクリックします。

スクリーンショット 2023-12-05 5.55.34.png

プレイスメントを作成します。
プレイスメント名は今回はAttendanceとします。
デバイスの選択で先ほど登録したデバイスが表示されるので選択して右下のプレイスメントの作成ボタンをクリックして作成が完了します。

スクリーンショット 2023-12-05 6.07.29.png

Slackに送信するコード作成

今回はNode.jsで書きました。

export const handler = async (event) => {
  // AWS IoT Enterprise Buttonのクリックイベントを取得。 
  const clickType = event.deviceEvent.buttonClicked.clickType;

  let text;
  if (clickType === 'SINGLE') {
    text = "仕事始めます。";
  } else if (clickType === 'DOUBLE') {
    text = "仕事終了します。";
  } else {
    text = '??';
  }

  const data = {
    body: JSON.stringify({ text })
  };

  const headers = {
    'Content-Type': 'application/json; charset=utf-8',
  };

  try {
    const response = await fetch(process.env.WEBHOOK_URL, { method: 'POST', headers, body: data.body });
    console.log(`Message posted to ${text}`);
    return response;
  } catch (error) {
    console.error("Error:", error.message);
    return { statusCode: 500, body: 'Internal Server Error' };
  }
};

処理内容はとてもシンプルで、AWS IoT Enterprise Buttonでクリックされたイベントを取得してきて、クリックとダブルクリックでSlackに送信するテキストを変えています。

process.env.WEBHOOK_URLは送りたいSlackのチャンネルのWebhook URLを環境変数にセットします。

トリガーの追加

AWS IoT 1-Clickで登録した端末をトリガーにLambdaの処理を走るようにしたいのでトリガーを追加します。

トリガーを追加のボタンをクリックします。

スクリーンショット 2023-12-04 0.16.44.png

ソースの選択ではAWS Iotを選択します。

スクリーンショット 2023-12-05 6.11.53.png

IoT Buttonを選択してDevice Serial Numberには登録したAWS IoT Enterprise Buttonの番号を入力して追加を押すとトリガーの設定が完了します。

スクリーンショット 2023-12-05 6.15.44.png

実演

output.gif

ちゃんと動作してることが確認できました。

まとめ

昔試しに買ったAWS IoT Enterprise Buttonがこういうところで役に立つとは思わなかったです。
今回はシンプルなテキストにしましたが、タップした時間帯などを送ったりも出来たりするので色々とカスタマイズすれば実用的なものになると思いました。

最後に

株式会社HRBrainでは新しいメンバーを募集中です。
興味がある方は下記のリンクから宜しくお願い致します。

74
36
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
74
36

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?