ろきメモ【ROKI MEMO】- ろきsanの備忘録 -

ろきさんの備忘録。プログラミング学習記録や開発記録、および学んだ知識等のアウトプットとシェアを目的に書いています。たまに普通のことも書きます。

【AWS IoTボタンでメッセージ送信 1 】AWS IoT 1-Clickで簡単にSMS送信までやる

スポンサーリンク

AWS IoT ボタンを購入し、いろいろ遊んでみた。
まずは使い始めの導入編として、ボタンを押したら、ケータイのショートメールにメッセージが送信される、というところまでの内容を備忘録として記述する。

ここをポチッと押したら
f:id:ahrk-izo:20191124094052p:plain:w300

こんなSMSメッセージが来る
f:id:ahrk-izo:20191124094143p:plain:w300

という内容

[前提]

  • 自宅Wi-Fi環境がある
  • AWSアカウントがある
  • スマホを持っている(BluetoothはON)
  • 若干料金が発生する(無料じゃない)

[料金について]
まずこれを利用するには、料金が発生する。(本体デバイスとは別に)
料金 - AWS IoT 1-Click | AWS
こちらによると、デバイスを登録して、有効にしたデバイスの数だけ料金が発生する。
f:id:ahrk-izo:20191124094743p:plain:w500

例えば、1ヶ月間、1台のデバイスを有効にしていたら0.25ドル(約27円)。100台なら25ドル(約2700円)。
遊びで1台だけやるなら問題ないでしょう。また、使わないときは無効にしていれば料金は発生しないので、そのときは無効にするのを忘れずに。(日割りになる)

また、今回は導入としてはじめから用意されているSMS送信の仕組みを利用するわけだが、そこにはAWSのSNSというサービスを利用していてそこの料金が発生する。これはメール送信する(ボタンを押す)ごとに発生。(料金 - Amazon SNS | AWS)ぼくの場合は、テストとして10回くらい送信したら0.65ドル(約70円)かかった。

うーん。これはなかなか高いので、たくさん送信するのは控えたほうがよい。
とりあえずここは、導入編として数十円身銭を切ってやってみよう。

(これをSlack送信にするとこの部分は無料になるので、それは別な記事に書く)

ということで目次はこんな感じ

スポンサーリンク



[準備1] AWSアカウント

AWSアカウントがないと始まらないので、もしない人は作る。
参考:
blog.rokisan.com


[準備2] デバイスの購入

本体のデバイスも当然必要。AWS IoT ボタンの購入で本体を購入する。
f:id:ahrk-izo:20191124125431p:plain:w300

[準備3] スマホアプリをダウンロード

デバイスを登録する際、スマホアプリが必要になる。iPhoneまたはAndroidで「AWS IoT 1-Click」をダウンロードしておく。
f:id:ahrk-izo:20191124103753p:plain:w300

[準備4] AWSコンソールにサインインとリージョン変更

AWSコンソールにサインインする。(コンソールってのはブラウザで操作するやつ)
このときサインインするのは、IAMユーザーでするとよいでしょう。
まぁルートユーザーでも作れるが、AWS的に推奨されていないので、IAMユーザーを作成してそのユーザーで操作していくのがよい。

IAMユーザーについては以前書いた。作成方法もあるのでよかったらどうぞ。
blog.rokisan.com


リージョンを変更する
たいていサインインすると、「リージョンは米国東部(バージニア北部)」だったりするので、「アジアパシフィック(東京)」に変更する。
f:id:ahrk-izo:20191124090347p:plain:w300
もちろんリージョンは東京でなくてもいいんだけど、どこのエリアのデータセンター使うかだから、住んでいる場所の近くのほうが通信速度はやっぱり速いので近くのリージョンにしておくのがベスト。
ちなみに、これから利用する「AWS IoT 1-Click」のサービスは、米国、EU、東京のリージョンのみ対応している(2019.11現在)。東京あってよかった。

さて、準備が終わったので、さっそく「AWS IoT 1-Click」のサービスを使っていく。

1. AWSにデバイスを登録する(AWSコンソール)

購入したデバイスを自分のAWS環境に登録することから始まる。
まずAWSコンソールで、「AWS IoT 1-Click」サービスを選択する。
f:id:ahrk-izo:20191124091214p:plain:w400
検索で「iot」などと入力すれば候補としてでてくる。

オンボード > デバイスの登録
f:id:ahrk-izo:20191124091819p:plain:w500

「登録コードまたは登録するデバイスのID」に購入したデバイスのIDを入力する
f:id:ahrk-izo:20191124092032p:plain:w400

AT&T LTE-M Button 購入確認メールに記載せれている登録コード(例: C-123456789012)を使用できます。デバイスIDはデバイスまたはパッケージにDSNまたはS/Nとして印刷されています。

このID(DSN)は、本体や箱に書いてある。
f:id:ahrk-izo:20191124092431p:plain:w200

f:id:ahrk-izo:20191124092502p:plain:w200


ちなみに、

デバイスの登録とは、AWS IoT 1-Click デバイスをアカウントに関連付ける方法です。新しく登録されたデバイスはデフォルトでは「無効」ですが、プロジェクトに追加すると即時アクティブ化されます。

と書いてあるので、デバイスを登録しただけではまずは無効となっているので、料金は発生しない。

ID(DSN)を入力したら、登録
f:id:ahrk-izo:20191124103123p:plain:w500

デバイス ID が入力されました。このプロセスを完了には、そのデバイスを手元に用意し、物理的にボタンをクリックして登録の最終処理を実行する必要があります。iOS または Android アプリを使用して AWS IoT エンタープライズボタンを設定することをお勧めします。

ここに書いてあるとおり、ここまではデバイスの番号を登録しただけで、本体と通信はできていない。通信まで完了して登録が完了する。

「登録」を押したらコンソール(ブラウザ)はこんな画面になる
f:id:ahrk-izo:20191124124736p:plain:w500

スマホアプリを使用してのデバイスのWi-Fi接続を待っている状態。ではスマホアプリで設定していく

2. AWSにデバイスを登録する(スマホアプリとデバイス)

スマホで「AWS IoT 1-Click」アプリを起動する。
f:id:ahrk-izo:20191124125833p:plain:w200

AWSアカウントでサインインする。こちらはメールアドレス使ったルートユーザーで。

日本語の方が安心なので、日本語に変更する。
f:id:ahrk-izo:20191124130156p:plain:w200

メールアドレスと、パスワードを入力。
f:id:ahrk-izo:20191124130417p:plain:w200

サインインできたらセットアップする。
f:id:ahrk-izo:20191124130505p:plain:w200

デバイスの登録はコンソールでやったので、省略。下にスクロール。
f:id:ahrk-izo:20191124130703p:plain:w200
※ここでのAWSリージョンは「米国西部(オレゴン)」でよい。登録自体は現在(2019.11)このリージョンにすべて登録されるらしい。メールを送信させるなどのプロジェクトは東京リージョンでも作成できる(ややこしい)

「Wi-Fiを設定」
f:id:ahrk-izo:20191124131206p:plain:w200

デバイスIDのスキャンをする
f:id:ahrk-izo:20191124131314p:plain:w200

この箱に貼ってあるバーコードをスキャンする
f:id:ahrk-izo:20191124092502p:plain:w200

スキャンに成功(もし失敗した場合は手入力でやってみる)
「設定」に進む
f:id:ahrk-izo:20191124131612p:plain:w200

しばらくスマホアプリの指示通りすすむ。
f:id:ahrk-izo:20191124131718p:plain:w200

デバイスを約6秒間押す。青く点滅したら離す。(押しすぎると赤く点灯してしまって失敗する。そうなったらアプリで「←」を押してもう一度やればよい)
そうそう、BluetoothはONにしておくこと。
f:id:ahrk-izo:20191124131910p:plain:w200

自宅のWi-Fiを選び、パスワードを入力して「設定」
(「マイWi-Fiネットワークを保存」はとりあえずやらなかった)
f:id:ahrk-izo:20191125230955p:plain:w200
※ここまで、青く点滅している間に行うこと。できなかったら「←」で戻ってもう一度。

処理中…
f:id:ahrk-izo:20191125231152p:plain:w200


デバイスの点滅が、青→白→緑に変わったら成功
スマホの画面はこうなる
f:id:ahrk-izo:20191125231238p:plain:w200



AWSコンソール(ブラウザ)の画面を見ると、「1/1 登録済み」となっている。成功だ。「完了」を押す。
f:id:ahrk-izo:20191125231325p:plain:w400


管理 > デバイス
デバイスが登録されているのが確認できる。デバイスリージョンは「us-west-2」、つまり米国西部(オレゴン)に登録されている。
プロジェクトはまだ作成していないので、「無効」になっている。
f:id:ahrk-izo:20191125231437p:plain:w500


ここまでできれば、デバイスの登録は完了。
あとはボタンを押したらSMSが送信されるプロジェクトを作っていく。

スポンサーリンク



3. プロジェクトを作成する

「ボタンを押したらSMSが送信される」というプロジェクトを作成する。
具体的には「プロジェクト」を作成し、そのプロジェクトに登録する「プレイスメント」というのを作成する。


管理 > プロジェクト
「プロジェクトの作成」
f:id:ahrk-izo:20191125231621p:plain:w500



プロジェクト名と説明(省略可)を入力し、「次へ」
(プロジェクト名:test-project)
f:id:ahrk-izo:20191125231708p:plain:w500


デバイステンプレートの定義。「開始」をクリック
f:id:ahrk-izo:20191125231753p:plain:w500

デバイステンプレートは、デバイスのタイプとそれがトリガーする Lambda 関数を指定します。

ここに書いてある通り、デバイステンプレートは、ボタンが押されたらどのLambda関数がキックされるかを指定する。ここではAWS IoT 1-Clickで予め用意されている「SMSを送信する」Lambda関数を使うので、自分で用意する必要はない。
(逆に言うと、自分でLambdaを用意できれば、他のことに応用できる。Slackに送信するとか)


デバイスタイプは「すべてのボタンタイプ」しかないようなので、それをクリック
f:id:ahrk-izo:20191125231833p:plain:w500



デバイステンプレート名とアクションを指定する。
デバイステンプレート名:send-sms
アクション:SMSを送信する
f:id:ahrk-izo:20191125232032p:plain:w500


「SMSを送信する」を選択すると、下に電話番号とメッセージの内容を入力するフォームが現れるので、それぞれ入力し「プロジェクトの作成」
(必須の電話番号のデフォルト値、必須のSMSメッセージのデフォルト値)
f:id:ahrk-izo:20191125232126p:plain:w500
※国際電話になるので、090ではなく、+8190から始める。
※属性の名前は空でよい


「プロジェクトとテンプレートが正常に作成されました」
これでプロジェクトはできた。でもまだ動かない。

このプロジェクトに登録するプレイスメントを作成する。
「プレイスメントの作成」
f:id:ahrk-izo:20191125232210p:plain:w500



プレイスメント名を入力し、「デバイス選択」をクリック
(プレイスメント名:test-placement)
f:id:ahrk-izo:20191125232331p:plain:w500



先程登録したデバイスのID(DSN)であること確認して、選択。
f:id:ahrk-izo:20191125232448p:plain:w500


プレイスメントの属性は、messageとPhoneNumberが先程登録したメッセージと電話番号であること確認して、「プレイスメントの作成」
f:id:ahrk-izo:20191125232555p:plain:w500


プレイスメントができた
f:id:ahrk-izo:20191125232629p:plain:w500



ダッシュボードに戻り、内容を確認する。
管理 > プロジェクト
作成したプロジェクト(test-project)が登録されている。
f:id:ahrk-izo:20191125232719p:plain:w600



管理 > デバイス
デバイスが「有効」になっている。これで使えるぞ!
f:id:ahrk-izo:20191125232750p:plain:w600



5. デバイスのボタンを押してみる

ここまでくればもう動くはず!
ボタンをポチっ
f:id:ahrk-izo:20191124094052p:plain:w300


2〜3秒後
スマホにSMSが届いた!
f:id:ahrk-izo:20191125233017p:plain:w200


登録したメッセージに、デバイスのDSNと「SINGLE」という文字。この「SINGLE」というのはボタンのクリックタイプ。実はクリックタイプは3種類あり、それぞれ以下のようになっている。

  • SINGLE : シングルクリック
  • DOUBLE : ダブルクリック
  • LONG : 長押し

用意されているLambda関数の中でこのクリックタイプを認識して表示していること想像できる。自分でこのLambda関数にかかれているプログラムを編集できれば、いろいろできそうだ。それはまた別な記事に書く。

(2019/11/30 追記)
このLambda関数を編集してメッセージを確認する記事を書いた。興味ある方はどうぞ。
blog.rokisan.com

デバイスやプロジェクトの管理

使わないときは、たとえわずかでも料金が発生するので、無効化するとよい。
デバイスの無効化は、
管理 > デバイス > デバイスを選択して > アクション > 選択したデバイスの無効化
f:id:ahrk-izo:20191125233312p:plain:w600



プロジェクトに登録したプレイスメントの編集は、
管理 > プロジェクト > プロジェクト選択し中に入り > アクション > 編集 からできる。
f:id:ahrk-izo:20191125233432p:plain:w600



これで導入編として、AWS IoTボタンを押して、SMS送信ができた。
その後は、これを改良して、ボタンのクリックタイプによってメッセージの内容を変えたり、SMSでなくSlackへ送信するようにしていく。

スポンサーリンク



おまけ(請求金額)

テストとして10回くらいSMS送信をした。料金はいくらくらい発生しているか確認してみる。

マイ請求ダッシュボード
0.97ドル(約105円)。内訳としては、SNSが0.65ドル、IoT1Clickが0.23ドル、税金で0.09ドルといったところ。

f:id:ahrk-izo:20191125233623p:plain:w300


心配な方は、ある料金があるしきい値を超えたらメールが来るように設定しておくとよい。
blog.rokisan.com


ちなみに、今回はAWSの知識がそんなになくてもいいので、特に書籍は使っていないが、AWSを本当の基礎からやるならこの本は良かった。ということでおすすめしておく。

Amazon Web Services 基礎からのネットワーク&サーバー構築 改訂版

Amazon Web Services 基礎からのネットワーク&サーバー構築 改訂版



参考にさせて頂いたサイト:
dev.classmethod.jp

chasuke.com


以上。