これは、SORACOM Advent Calendar 2016の24日目の記事です。
qiita.com
山下@YamaHaruka925です。
いや~、クリスマスイブですね。
個人的にはひさびさにクリスマスが休みでどう過ごしたもんか、と思っております(笑)
さて、12月22日(木)に行われた「SORACOM UG Tokyo #5 / 忘年LT大会&re:Invent報告会」にて、人生初LT!やってきました!
「SORACOM Harvest + AWS Lambdaでウィンドウ処理やってみた」
このブログでは、その発表内容を紹介します!
SORACOM Harvestとは?
2016年11月30日より提供開始となった、SORACOMのデータ収集・蓄積ができるサービス。
soracom.jp
特長をざっくりまとめると、
- SORACOMユーザーコンソールで、スイッチONするだけの簡単設定
- 勝手にグラフ化までやってくれる!
- APIでデータを取り出せる!
- アップロードされたデータが40日間保存される!
- しかも、値段は1日5円!!
見るからに便利そう!
IoTプラットフォーム開発している私としては、
「APIでデータを取得できる」
が気になるところ。
ということで、
Story
今回の検証の流れは、以下の通り。
不快指数とは?
夏の蒸し暑さを数量的に表した指標。
不快指数の求め方は、気温をT(℃)、湿度をH(%)として、
DI = 0.81T+0.01H×(0.99T-14.3)+46.3
日本人の場合、不快指数が75になると、約9%の人が暑さによる不快を感じるそうな。
ということで、今回は75を閾値に選定。
ウィンドウ処理とは?
時系列データをある時間幅で区切り、条件判定する方法。
図の青い幅の中だと、不快指数75を超えた点は2つなので、「連続5回超える」という条件には合致しない。
一方、赤い幅の中だと、不快指数75を超えた点は5つ。=「連続5回超えた」ので条件を満たしたことになる。
今回は、2分に1回上がってくるデータをモニターし、10分間連続(=5回連続)不快指数75を超えたら通知を送る。
アーキテクチャ
Before
SORACOM Harvestを使わずに、ウィンドウ処理を実現しようとすると、、、
こんな感じ。
AWS IoTで受けて、LambdaでStorage(DynamoDBやらS3やら)に保存。
ウィンドウ処理はまた別のLambdaで、、、
可視化のために、EC2立ててアプリケーション入れる、とうい感じ。
After
SORACOM Harvestを使うと、、、
ん~、だいぶスッキリしそうですね。
いざ、実装!
SORACOM Harvestにデータを送信!
OpenBlocksEX1にSORACOM SIMを挿し、温湿度センサーusbrhでデータを2分に1度取得して、SORACOM Harvestに送信します!
SORACOM Harvest
SORACOM Harvestの設定はというと、めっちゃ簡単。
SORACOMユーザーコンソールにログインし、メニューからグループを選びましょう。
グループの設定画面からSORACOM HarvestのスイッチをONに切り替えるだけ!
そして、データが届いたかどうか確認してみましょう。
SORACOMユーザーコンソールのメニューから、「データ収集」を選び、画面でSIMを指定すれば、グラフを見ることができます。
AWS Lambdaでウィンドウ処理
AWS Lambdaで、SORACOM Harvestへのデータ問い合わせ、そして、不快指数が10分間連続で75を超えたかどうかの判定、その後のSlackへの通知を記述します。
今回はランタイムはPythonを選択。
キャプチャの通り、約40行で処理終わり。
SORACOM Harvestへの問い合わせは、SORACOM-Cliを使うやり方とREST APIを利用する方法があります。
今回は、REST APIを利用。
その場合、SORACOM API KEYとTOKENの取得があらかじめ必要です。
また、Slackへの通知にはWebhookURLを利用しています。
詳しい方法はこちら参照。
結果
ということで、SORACOM Harvest上の赤線で囲んだ部分で温度があがり、不快度も上がった結果、10分経過後、Slackに通知が来ました!
まとめ
- SORACOM Harvest利用、簡単!
- Harvest + Lambda(=超簡単!)なサーバレスアーキテクチャでウィンドウ処理を実現できた!
- 今後、複数センサーから上がっていた情報をもとにCEP(複合イベント処理)なんてこともやってみたい!
明日が最終日!「SORACOM Advent Calendar 2016」
いよいよ明日が最終回となりました!
qiita.com
Acroquest Technologyでは、キャリア採用を行っています。
- ビッグデータ(Hadoop/Spark、NoSQL)、データ分析(Elasticsearch、Python関連)、Web開発(SpringCloud/SpringBoot、AngularJS)といった最新のOSSを利用する開発プロジェクトに関わりたい。
- マイクロサービス、DevOpsなどの技術を使ったり、データ分析、機械学習などのスキルを活かしたい。
- 社会貢献性の高いプロジェクトや、顧客の価値を創造するようなプロジェクトで、提案からリリースまで携わりたい。
- 書籍・雑誌等の執筆や、対外的な勉強会の開催・参加を通した技術の発信、社内勉強会での技術情報共有により、エンジニアとして成長したい。
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。
世の中に誇れるサービスを作りたいエンジニアwanted! - Acroquest Technology株式会社のエンジニア中途・インターンシップ・契約・委託の求人 - Wantedlywww.wantedly.com