読者です 読者をやめる 読者になる 読者になる

Taste of Tech Topics

Acroquest Technology株式会社のエンジニアが書く技術ブログ

SORACOM Harvest + AWS Lambdaでウィンドウ処理やってみた

これは、SORACOM Advent Calendar 2016の24日目の記事です。
qiita.com

山下@YamaHaruka925です。
いや~、クリスマスイブですね。
個人的にはひさびさにクリスマスが休みでどう過ごしたもんか、と思っております(笑)


さて、12月22日(木)に行われた「SORACOM UG Tokyo #5 / 忘年LT大会&re:Invent報告会」にて、人生初LT!やってきました!
「SORACOM Harvest + AWS Lambdaでウィンドウ処理やってみた」

www.slideshare.net

このブログでは、その発表内容を紹介します!

SORACOM Harvestとは?

2016年11月30日より提供開始となった、SORACOMのデータ収集・蓄積ができるサービス。
soracom.jp

特長をざっくりまとめると、

  1. SORACOMユーザーコンソールで、スイッチONするだけの簡単設定
  2. 勝手にグラフ化までやってくれる!
  3. APIでデータを取り出せる!
  4. アップロードされたデータが40日間保存される!
  5. しかも、値段は1日5円!!

見るからに便利そう!
IoTプラットフォーム開発している私としては、
APIでデータを取得できる」
が気になるところ。

ということで、
f:id:acro-engineer:20161223143013p:plain:w500
f:id:acro-engineer:20161223143026p:plain:w500

Story

今回の検証の流れは、以下の通り。
f:id:acro-engineer:20161224020413p:plain:w500

不快指数とは?

夏の蒸し暑さを数量的に表した指標。

不快指数の求め方は、気温をT(℃)、湿度をH(%)として、

DI = 0.81T+0.01H×(0.99T-14.3)+46.3

日本人の場合、不快指数が75になると、約9%の人が暑さによる不快を感じるそうな。
ということで、今回は75を閾値に選定。

ウィンドウ処理とは?

f:id:acro-engineer:20161224021237p:plain:w500
時系列データをある時間幅で区切り、条件判定する方法。

図の青い幅の中だと、不快指数75を超えた点は2つなので、「連続5回超える」という条件には合致しない。
一方、赤い幅の中だと、不快指数75を超えた点は5つ。=「連続5回超えた」ので条件を満たしたことになる。

今回は、2分に1回上がってくるデータをモニターし、10分間連続(=5回連続)不快指数75を超えたら通知を送る。

アーキテクチャ

Before

SORACOM Harvestを使わずに、ウィンドウ処理を実現しようとすると、、、
f:id:acro-engineer:20161224022001p:plain:w500
こんな感じ。
AWS IoTで受けて、LambdaでStorage(DynamoDBやらS3やら)に保存。
ウィンドウ処理はまた別のLambdaで、、、
可視化のために、EC2立ててアプリケーション入れる、とうい感じ。

After

SORACOM Harvestを使うと、、、
f:id:acro-engineer:20161224022132p:plain:w500
ん~、だいぶスッキリしそうですね。

いざ、実装!

SORACOM Harvestにデータを送信!

f:id:acro-engineer:20161224022310p:plain:w500
OpenBlocksEX1にSORACOM SIMを挿し、温湿度センサーusbrhでデータを2分に1度取得して、SORACOM Harvestに送信します!

SORACOM Harvest

SORACOM Harvestの設定はというと、めっちゃ簡単。
f:id:acro-engineer:20161224022705p:plain:w500
SORACOMユーザーコンソールにログインし、メニューからグループを選びましょう。
グループの設定画面からSORACOM HarvestのスイッチをONに切り替えるだけ!

そして、データが届いたかどうか確認してみましょう。
SORACOMユーザーコンソールのメニューから、「データ収集」を選び、画面でSIMを指定すれば、グラフを見ることができます。
f:id:acro-engineer:20161224022928p:plain:w500

AWS Lambdaでウィンドウ処理

f:id:acro-engineer:20161224022957p:plain:w500
AWS Lambdaで、SORACOM Harvestへのデータ問い合わせ、そして、不快指数が10分間連続で75を超えたかどうかの判定、その後のSlackへの通知を記述します。
今回はランタイムはPythonを選択。
キャプチャの通り、約40行で処理終わり。

SORACOM Harvestへの問い合わせは、SORACOM-Cliを使うやり方とREST APIを利用する方法があります。
今回は、REST APIを利用。
その場合、SORACOM API KEYとTOKENの取得があらかじめ必要です。

また、Slackへの通知にはWebhookURLを利用しています。
詳しい方法はこちら参照。

結果

f:id:acro-engineer:20161224023414p:plain:w500
ということで、SORACOM Harvest上の赤線で囲んだ部分で温度があがり、不快度も上がった結果、10分経過後、Slackに通知が来ました!

まとめ

  1. SORACOM Harvest利用、簡単!
  2. Harvest + Lambda(=超簡単!)なサーバレスアーキテクチャでウィンドウ処理を実現できた!
  3. 今後、複数センサーから上がっていた情報をもとに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