前回はAWS IoT Core
の設定までを行いました。
今回はその続きになります。
手順のおさらい
作業の手順をおさらいします。
AWS IoT Core
の準備RaspberryPi
へ必要なファイル(証明書情報など)をコピーRaspberryPi
のNode-RED
の準備AWS IoT Core
を使用するためのNode-RED
の拡張ノードの導入- 拡張ノードから
AWS IoT Core
を動作させる(送信・受信)
前編では 1.と 2. を行ってきましたので、この後編で 3. 以降を取り扱います。割りと作業が少ないのでサクッと終わるかもしれません。
RaspberryPiのNode-REDの準備
特にRaspberryPi
を使用しなくてもいいのかなと思いますが、せっかくならIoTデバイスを!ということで使用しています。
以下のコマンドでインストール(バージョンアップを兼ねることができます)していきます。
$ bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)
Node-RED
も気がつけばバージョン3系になっているんですねえ。少し使ってないとかなりバージョンが変わってしまうので少なくともメジャーバージョンがアップしたら触って見るようにしないと。
インストールが終わったらNode-RED
を起動します。起動の仕方もいろいろありますが、自分はCLI
で直接実行します。
$ node-red
無事に起動しました。
あとは、ブラウザからRaspberryPi
と1880ポートを使用してアクセスします。mDNSで名前の解決ができるなら以下のURLでアクセスすればOKです。
http://raspberrypi.local:1880
すると、フローエディタが起動します。
AWS IoT Coreを使用するためのNode-REDの拡張ノードの導入
ここまで来たらAWS IoT Core
を使用するための拡張ノードをインストールします。画面の右上にある【三】をクリックして、表示されたプルダウンメニューから【パレットの監視】をクリックします
そして、【ユーザ設定】画面の【ノードの追加】タブを選び、名前を指定してインストールをしていくのですが、今回使用する拡張ノードnode-red-contrib-aws-iot
を検索しても候補が存在しません。初めての経験です。
Web検索するとちゃんと情報はでてくるので
仕方がないので、今回はCLIからインストールします。一度、フローエディタを終了し、以下のように実行して拡張ノードをインストールしていきます。
$ cd ~/.node-red
$ npm install node-red-contrib-aws-iot
これで正常にインストールできました。再度、Node-RED
を起動してみます。
$ node-red
すると左側のペイン(パレット)に以下のような拡張ノードが追加されています。入力カテゴリーにaws-iot-in
と出力カテゴリーにaws-iot-out
の拡張ノードが追加されています。
これでNode-RED
の準備が完了しました。
拡張ノードからAWS IoT Coreを動作させる(送信・受信)
あとは導入した拡張ノードを使用してAWS IoT Core
の動きを確認します。
2つのフローを作成します。
injectノード
とaws-iot-inノード
を接続aws-iot-outノード
とdebugノード
を接続
実際には以下の様になっていると思います。
aws-iot-inノードのプロパティ設定
あとはAWS IoT Core
に接続する設定していきます。aws-iot-inノード
をダブルクリックし
【aws-iot-inノードの編集】画面のプロパティで【Server】の【ペンアイコン】ボタンをクリックして編集を行っていきます。
すると、【aws-iot-broker設定ノードの追加】画面になります。目には見えないノードですが、ここで行った設定はaws-iot-outノード
でも使用することになります。
Connectionタブでの設定は以下の様に行います。
- Server …
AWS IoT Core
で作成したエンドポイント - Client ID …
AWS IoT Core
で作成したモノ - Port … 8883
以下の部分を設定することになります。
続いては【Security】タブをクリックして、以下のように設定をしていきます。
- Key Path …
AWS IoT Core
作成時にダウンロードしたKeyファイルのフルパス(拡張子pem.key) - Cert Path …
AWS IoT Core
作成時にダウンロードしたCertファイルのフルパス(拡張子pem.crt) - CA Path …
AWS IoT Core
作成時にダウンロードしたCAファイルのフルパス(拡張子pem)
以下で使用するファイルを抑えておきます。
設定画完了したら【追加】ボタンをクリックしてます。
クリックすると【aws-iot-inノードの編集】画面に戻ります。設定値はモノ@エンドポイント:8883
となっていればOKです。
あとは残りのフィールドの設定を行います。
- Topic … data/RaspberryPi
- Name … RaspberryPi
設定ができたら【完了】ボタンをクリックします。
aws-iot-outノードのプロパティ設定
aws-iot-outノード
を設定します。ノードをダブルクリックして
【aws-iot-outノードを編集】画面から【Server】のプルダウンをクリックして
先ほど作成した設定を選択します。
残る設定も以下のように設定します。
- Topic … data/RaspberryPi
- Name … RaspberryPi
設定したら【完了】ボタンをクリックします。
これで以下の様になっていれば設定が完了です。
あとは【デプロイ】ボタンをクリックして
aws-iot-inノード
、aws-iot-outノード
の下にconnected
が表示されていれば成功です。
AWS IoT Coreにデータを送信・受信する
あとは実行の確認になります。AWS IoT Core
をマネージメントコンソールをブラウザから開きます。
左側のペインの【テスト】→【MQTTテストクライアント】をクリックします。
Subscribe(データの受信)
まずはSubscribeの設定(データの受信設定)を行います。
【Subscribe to a topic】タブをクリックして、以下のフィールドに入力をしていきます。
- Topic filter … data/RaspberryPi
入力後に【Subscribe】ボタンをクリックします。
画面下部の【Subscriptions】の部分にdata/RaspberryPi
が表示されます。
Node-RED
のフローエディタのデバック画面を見ると
Node-RED
側でJSONデータが受信されています。これでデータの受信が成功しました。
AWS IoT Core
の画面にも送信されたJSONデータが表示されています。
ちなみに【Edit】ボタンを押すとQOS
などの設定が表示されます。問題なければ【Confirm】ボタンをクリックします。
Publish(データの送信)
続いてPublishの設定(データの送信設定)を行います。
【Publish to a topic】タブをクリックして、以下のフィールドに入力をしていきます。
- Topic filter … data/RaspberryPi
入力後に【Publish】ボタンをクリックします。
Node-RED
のフローのinjectノード
のボタンをクリックするとNode-RED
から時刻データを送信して
AWS IoT Core
の画面にも受信され時刻情報が表示されています。
データの送受信ともに動作の確認ができました。
おわりに
Node-RED
を併用することでコードをほぼ使用することなくAWS IoT Core
を使ったMQTT
のデータ送受信をテストすることができました。実際にはこの後データの格納などを行う処理を追加していくことになるかと思います。
WebのUIは画面が変わるだけでもかなりのハードルが上がることがあるため、やっぱりきついなあという印象は大きいですね。あと、今回はnode-red-contrib-aws-iot
がフローエディタのノードの追加からできなかったのがちょっとびっくりした点でしょうか。npmコマンド
を使うことでインストールできますが、初めての事象だったので結構ドキドキしました。
今回はAWS
関連のLTを行うということで実験してみたのですが、他のクラウド環境でもデータの格納がどうなっているのか興味がでてきました。