2018年1月13日土曜日

raspiberry piで取得した温度をLINEに送る(AWS Iot-lambda)

だいぶ前に作ったのだが、忘れないうちにまとめる。

概要
会社の勉強会で4人チームで作ったもの。その中でnodejs/aws/LINE周りを担当。
その関係でpython周りはよくわからない。

概要図


作業メモ
・LINEのMessage APIを利用する為、LINE developerに登録&channel作成。
LINE developer



・せっかくなのでLINE@MANAGERからリッチメニュー作成。

・node版aws sdkインストール。

・AWS Iotへアクセスする為、認証キーを発行し、raspberry piへコピー。
/home/pi/deviceSDK/certs/に置いている。readtempture.js参考

AWS IoT デバイス証明書を作成および登録する


・AWS Iot > ACT > ルール作成
使う道は特になかったが、せっかくなのでDynamoDBにデータを貯めるようにした。

・nodejsで作成したコードと認証ファイル・node_modulesをzipで固めてlambda(s3)へアップロード。あとは本体のexports.jsを編集しながらデバック。


ハマっていたところ
・LINEのWebhookを登録しようとしたところ、「※SSLのみ対応」になっており、lambdaからの直接アクセスができなかった。
調べたところ、API gatewayを利用するとhttps化できることが分かった。


・ネットから色んな情報を参考していてが、awsが変わりすぎてあまり参考にならなかった。ちなみに現在の設定画面はこんな感じ。



・aws Iotの動きがいまいちわからない。いきなり接続が切断される場合があって、しばらく再接続ができなくなる。
ただし、aws Iot > テストにあるMQTTクライアントでpublishするとたまにsubscribeされる。


反省点
serverless frameworkで作って見たかったが、いまさら面倒なので放置。


感想
・サーバーを作らずにここまで作れたのが驚き。AWS Iotとlambdaの組み合わせはいい感じだった。今度はraspiberry piではなく、arduinoにネットワークモジュールを付けてやってみたい。
・意外とLINE@MANAGERで色々できて楽しかった。


コードはgithubへpush済み
IotToLine