【Raspberry Pi】AWS IoTとRaspberry PiでIoTをやってみよう

Raspberry PiとAWS IoTを使って、AWS IoTにMQTTでメッセージ送ってAWS IoTからGmailを送るIoTを作成します。初心者なので仕組みもまったく判りませんが、以下のサイトを参考にしながらとりあえず進めてたらできました。この先は何をやろうかな。

AWS IoTとRaspberry PiではじめるIoT超入門(このサイトは、スクリーンショットのAWSのUIが古いので注意)
Raspberry PiからmosquittoでとりあえずAWS IoT叩く-AWS側準備編(前編)
AWS IoTを使って、IoT Buttonを自作してみた-①

やることをまとめると以下のようになります。
Raspberry Piの起動・インターネット環境などの基本設定はできている前提ですので、ここでは説明は省略します。

1. AWS(AWS IoT, AWS SNS)の設定

(1)AWS SNSの準備(メール送信のため)

  1. WebブラウザでAmazon SNSの設定画面にアクセスする
  2. 新しいTopicsをつくる
  3. メールの配信先を設定する

(2)AWS IoTの準備

  1. Thingsでモノの設定をする
  2. Ruleを作成する
  3. SNSの設定
  4. ロールの作成
  5. ポリシー(Policy)の作成
  6. 証明書(Certification)の作成・ダウンロード
  7. 証明書の関連付け
  8. 証明書の有効化

2. Raspberry Piの設定

  1. Raspberry PiにMosquittoをインストールする
  2. Raspberry Piに公開鍵と証明書を保存

以下の3つのファイルが必要になるみたいです。
*-certificate.pem.crt
*-private.pem.key
rootCA.pem
*は自分自身の英数字が入ります。

参考サイトだと、tera-termとかを使ってファイル転送してますが、自分は操作方法とかが良くわからなかったので
手っ取り早くUSBメモリで移動しました。全く問題ありませんでした。

3. 動作

公開鍵と証明書があるディレクトリに移動してコマンドを実行

ここでエンドポイントと呼ばれる英数字が必要になるので注意してください。
AWS IoTの画面から探して記録しておきましょう。

Raspberry Piのコンソールから以下のコマンドを実行します。
sudoは不要です。
また、参考サイトによっては、「円マーク」もしくは「\」を入れて記載している部分がありますが、何も入れなくても(=半角スペースだけでも)問題なく動作しました(何が正しいのかよくわかりませんが)。


$ mosquitto_pub --cafile rootCA.pem --cert **********-certificate.pem.crt --key **********private.pem.key -h エンドポイント -p 8883 -q 1 -d -t topic/sns -m '{"message":"Hello World"}'

成功すれば、自分で設定したメールアドレスに、自分で設定したメッセージが飛んできます。
失敗した場合、Raspberry Piのコンソールにエラーが表示されます。
エラーになった場合は、以下を参考にしてみてください。

トラブルシューティング

1. OpenSSL Error: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

コマンドを実行したところ、ここにも書かれているように、
OpenSSL Error: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
というエラーが表示された。そこで、こちらを参考にした。
要は、Raspberry Piのオフィシャルのリポジトリからインストールできるmosquitto-clientsはバージョンが古いため、ここではmosquitto.orgで公開されているdebをインストールする必要があるみたい。。

$ wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key
$ apt-key add mosquitto-repo.gpg.key
$ wget http://repo.mosquitto.org/debian/mosquitto-wheezy.list
$ cp mosquitto-wheezy.list /etc/apt/sources.list.d/
$ apt-get update
$ apt-get install mosquitto-clients

そうすると、新しいバージョンのmosquitto-clientsがインストールされ。再度コマンドを実行したところ、エラーは発生しなくなった。

2. Error: Problem setting TLS options.

公開鍵と証明書があるディレクトリに移動していない場合にこのエラーが表示されました。
コマンド実行時に「公開鍵と証明書が見つからない」というエラーなのかと、勝手に理解してます。

3. Error: The connection was lost.

こちらを参照。
証明書の関連付けが正しくできていないので、もう一度関連付けを確認しましょう。
AWS IoTのやることが多数あるので、設定が抜けてしまっていないか確認してください。
もう一度Thingsを作りなおしてもいいかも。