AWS IoT Button Enterprise + AWS IoT 1 Click + Lambda + Akerun API V3でAkerunを開閉する

どうも、お久です。Akerun Creatorのkazuphです。

Akerun API、使ってますか?(あいさつ)

今日は先日新しく公開された本当の意味でほぼなんでも可能なAkerun APIを使ったお手軽ハックを紹介します。

prtimes.jp

Akerun APIの詳細なドキュメントは以下をチェックです。 かなーり見やすいドキュメントになってると思います。

Akerun Developers

やりたいこと

とにかく簡単にAkerunを開けたいということで、実は2年前くらいにもやったハックを 今回はより正式なものへ置き換えて再現したいと思います。

AWS Buttonも正規の方式、Akerunの解錠も正式にAPIを使います。

akerun.hateblo.jp

必要なもの

f:id:photosynth-inc:20180717185807p:plain

前提

  • OAuthで認証するユーザーが、対象のAkerunを開閉するための鍵権限を有している必要があります。

AWS IoT Button Enterpriseのアクティベート

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

このサイトを見ていればほぼ問題ないです。

一つだけ言うと、ButtonのIDはButton本体の裏面に書いてあるDSNという4桁x4のIDで、これをスペースなしで入力すればいいです。 アプリからの設定で使用する場所でのWi-Fi設定をすることで、AWS IoT経由でイベント発生が可能になります。

Lambda経由でAkerunを開閉する

Akerun API経由で遠隔開閉するスクリプトです。

exports.handler = (event, context, callback) => {
    var request = require('request');

    //ヘッダーを定義
    var headers = {
        'Authorization':'Bearer ' + process.env.ACCESS_TOKEN // Lambdaの環境変数で指定
    }

    //オプションを定義
    // ORGANIZATION_IDはO-ddddd-dddddみたいなフォーマットID
    // AKEURN_IDはA1XXXXXXみたいなフォーマットのID
    var options = {
      url: 'https://api.akerun.com/v3/organizations/' + process.env.ORGANIZATION_ID + '/akeruns/' + process.env.AKERUN_ID + '/jobs/unlock', 
      method: 'POST',
      headers: headers,
    }

    //リクエスト送信
    request(options, function (error, response, body) {
        console.log("Done Akerun Unlock Request");
        console.log(body);
    })

    callback(null, 'done ;)');
};

Lambdaのコンソールで環境変数が指定できるので、クレデンシャルは隠蔽してます。 またLambdaだとrequest モジュールがないので、ローカルで一度npm install的なことをして、メインのjsファイルとnode_modulesをzipで固めてアップロードします。

mkdir test_dir
yarn init
yarn add request
touch index.js
zip -r test.zip index.js node_modules

アップロード後はコンソールに展開され、そのまま編集できます。 右上の保存ボタンを押し、テストボタンを叩くと、実際に処理されます。

その後、冒頭のサイトの手順に従ってAWS IoT 1 clickサービス上でデバイスとLambda関数の紐付けをすれば完成です!

注意点

  • Lambdaがテスト時は成功するがButton経由では発生しない場合は、タイムアウトしている可能性がある(実際デフォの3秒から30秒に増やしたらリクエストされるようになりました)

実際の動作

正直AWSボタンを押してから開くまで10秒程度かかりますが、そのほとんどがAWSボタンがWi-Fiにつながるまでの時間でした。 瞬時に開けたいニーズには応えられませんが、ポケットに入れておいて近くなったらボタンを押すみたいな感じの使い方なら問題なさそうです。

近況報告

僕とあともう一人のエンジニアの2つのプロポーザルが通りbuildersconにて発表できることが決まりました!

builderscon.io

builderscon.io

builderscon.io

どちらの発表もガチガチハード系(ものづくり)になります! ご期待下さい!

募集

フォトシンスでは一緒にものづくりができるエンジニアを募集してます!!!

www.wantedly.com

www.wantedly.com