Taste of Tech Topics

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

mockmockのSORACOM連携機能を試してみた

f:id:acro-engineer:20190701141735p:plain:w550

こんにちは、IoTデータ分析プラットフォーム「Torrentio」開発者のmiuraです。

2019年7月2日にリリースされたばかりのmockmockのSORACOM連携機能について試してみましたのでご紹介します。

■mockmock SORACOM連携機能とは

https://mock-mock.com/ja/

mockmockは、クラウド上に仮想デバイスを作成し、開発中のサーバーに疑似データを届けられるサービスです。

そのmockmockのデータ送信方法に、今回新たにSORACOMとの連携が出来るようになりました。
これにより、実デバイス(実環境)/仮想デバイス(mockmock環境)のどちらでもSORACOMを通じてデータを送信することになるため、ユーザー環境にそれぞれの環境構成を用意する必要がなくなります。

f:id:acro-engineer:20190701135939p:plain:w600

SORACOMのサービスからデータを受け取れるか確認するには実際にデバイスを用意する必要がありました。
私も自社サービスの開発過程で検証する際に、SORACOM SIMを挿した実機を用意して試験を行なっていましたが、試験の度に実機を用意するのが面倒だと思っていました。
しかし、この新機能を使えばmockmockで生成した疑似データを使って確認することが出来ます。

では、さっそくmockmockの新機能を試していきましょう。

1. 試してみる前に

今回はmockmockの新機能SORACOM連携機能とIoTデータ分析プラットフォーム「Torrentio」との連携を行います。

https://www.site.torrentio.tech/torrentio/

Torrentioとは弊社(アクロクエストテクノロジー株式会社)が開発しているサービスです。
SORACOM Beamで利用できるREST-APIhttps)や、SORACOM Funnel Adapterに対応しており、デバイスからのデータを収集・分析することができるサービスです。
今回はデバイスから直接ではなく、mockmockからSORACOM経由でTorrentioにデータを送ることを試してみます。

2. mockmockの環境を作成する

2-1. SORACOMタイプのプロジェクトを作成する

プロジェクト一覧タブからプロジェクト作成ボタンを押して新規作成します。

f:id:acro-engineer:20190628173705j:plain:w500

2-2. グラフバリュージェネレーターを作成する

サイドメニューの「グラフ」の+ボタンから新規作成を行います。
グラフバリュージェネレーター名を「temperature」と登録し、以下の設定を入力して更新します。

f:id:acro-engineer:20190628171613p:plain:w500

2-3. データテンプレートを作成する

サイドメニューの「データテンプレート」の+ボタンから新規作成を行います。
JSON形式で送信データの形を登録すると、パースされてテーブル形式で表示されます。
また、キーごとに編集が出来るので、生成タイプを変更します。

f:id:acro-engineer:20190628171725p:plain:w500

2-4. mockを作成する

まず、サイドメニューの「mockグループ」の+ボタンから新規作成を行います。

f:id:acro-engineer:20190628172509p:plain:w500

次に、新規作成されたmockグループのmockステータスタブに移動し、mockステータスを新規作成します。

f:id:acro-engineer:20190628172529p:plain:w500

最後に、mockグループのmock管理タブに移動し、mock一覧にあるmock作成ボタンを押して新規作成します。
その際、mockごとにidを割り当てられるので、12345など適当な値を入力し、登録してください。

3. SORACOM連携の準備をする

3-1. soracom-cliをインストールする

mockmockで自動で生成されるsoracomデバイスグループに設定を行うためにsoracom-cliを準備します。
soracom-cliのGitHubリポジトリから「soracom_0.4.4_windows_amd64.zip」をダウンロードします。
ダウンロードしたzipファイルを解凍し、「soracom.exe」を適当なフォルダに配置してください。
(必要であれば、PATHを通して実行できるようにしてください)

3-2. soracom cliのprofileを設定する

プロジェクト設定画面にてSORACOM認証キー一覧の新規作成ボタンを押して、SORACOM認証キーID(AuthKeyId)とSORACOM認証キーシークレット(AuthKey)を取得します。

f:id:acro-engineer:20190628180409p:plain:w500

以下のコマンドを実行してAuthKeyIdとAuthKeyを入力し、soracom-cliのprofileを設定します。

$ soracom configure --profile mockmock
--- SORACOM CLI セットアップ ---
/Users/yourname/.soracom ディレクトリがなければ作成し、そこにファイル 'mockmock.json' を作成します。

カバレッジタイプを選択してください。

1. Global
2. Japan

選択してください (1-2) > 2


認証方法を選択してください。

1. AuthKeyId と AuthKey を入力する(推奨)
2. オペレーターのメールアドレスとパスワードを入力する
3. SAM ユーザーの認証情報を入力する(オペレーターID、ユーザー名、パスワード)

選択してください (1-3) > 1
authKeyId: <JSONファイルに書かれたAuthKeyIdを入力する>
authKey: <JSONファイルに書かれたAuthKeyを入力する> ← 入力内容は非表示となります。


以上でSORACOMと連携するための下準備は完了です。
それでは実際にmockmockと今回対応されたSORACOMのサービス「Beam」と「Funnel」との連携、おとびTorrentioへのデータ送信を行っていきます。

4. SORACOM Beamと連携する

4-1. REST APIのエンドポイントを作成する

TorrentioにてデータをREST APIで受け付けられるようにエンドポイントを作成します。
エンドポイント一覧画面の新規作成ボタンを押し、各項目を選択して作成します。
その後、作成したエンドポイントの更新画面に行き、以下の値をメモしておきます。

  • エンドポイント
  • APIキー

f:id:acro-engineer:20190628182310p:plain:w500

4-2. サービスを作成する

Torrentioにてデータを格納する場所である「サービス」を作成します。
サービス一覧画面の新規作成ボタンを押し、サービス名とエンドポイントを選択して作成します。

f:id:acro-engineer:20190628182328j:plain:w500

4-3. soracomデバイスグループにSORACOM Beamを設定する

SORACOM Beamの設定となるbeam.jsonを準備します。

[
  {
    "key": "inventory://beam.soracom.io",
    "value": {
      "enabled": true,
      "name": "Torrentio",
      "addEquipmentHeader": false,
      "addSignature": false,
      "addSubscriberHeader": false,
      "customHeaders": {
        "x-api-key": {
          "action": "append",
          "headerKey": "x-api-key",
          "headerValue": "<APIキー>"
        }
      },
      "skipStatusCode": false,
      "useClientCert": false,
      "useClientCredentials": false,
      "addDeviceIdHeader": false,
      "destination": "<エンドポイント>"
    }
  }
]

mockmockで生成されたsoracomデバイスグループに対して、以下のコマンドを実行します。

$ soracom groups put-config  --group-id <デバイスグループID> --namespace SoracomBeam --body @beam.json --profile mockmock

4-4. テスト送信をしてみる

mockステータス画面にてテスト送信を実行します。
レスポンスコードが200という結果になり、データをTorrentioへ送信することができました。

f:id:acro-engineer:20190628191414j:plain:w500

Torrentioのサービスコンソールにてデータが来ていることも確認できます。

f:id:acro-engineer:20190628190915j:plain:w500

5. Funnelと連携する

5-1. SORACOM Funnel対応のエンドポイントを作成する

SORACOM Funnelと連携できるTorrentioのエンドポイントを作成します。
エンドポイント一覧画面の新規作成ボタンを押し、種類に「SORACOM Funnel」を選択して作成します。
その後、作成したエンドポイントの編集画面に行き、以下の値をメモしておく。

  • テナントID
  • エンドポイントID
  • APIキー

f:id:acro-engineer:20190628183514p:plain:w500

5-2. サービスに紐づくエンドポイントを変更する

「4-2. サービスを作成する」で作成したサービスのエンドポイントを変更します。

f:id:acro-engineer:20190628185457p:plain:w500

5-3. soracomデバイスグループにSORACOM Funnelを設定する

SORACOM Funnelで使用する認証情報をSORACOMに登録するためにcredential.jsonを準備します。

{
  "type": "api-token-credentials",
  "description": "for_mockmock",
  "credentials": {
    "token": "<APIキー>"
  }
}

mockmockのプロジェクト設定のSORACOM 認証情報ストアにてSORACOM 認証情報IDを新規作成する。

f:id:acro-engineer:20190628184513p:plain:w500

以下のコマンドを実行して認証情報を登録します。

$ soracom credentials update --credentials-id <SORACOM 認証情報ID> --body @credential.json --profile mockmock

SORACOM Funnelの設定となるfunnel.jsonを準備します。

[
    {
      "key": "contentType",
      "value": "json"
    },
    {
      "key": "credentialsId",
      "value": "<SORACOM 認証情報ID>"
    },
    {
      "key": "destination",
      "value": {
        "provider": "acroquest",
        "resourceUrl": "torrentio",
        "service": "torrentio",
        "tenantId": "<テナントID>",
        "endpointId": "<エンドポイントID>"
      }
    },
    {
      "key": "enabled",
      "value": true
    }
  ]

mockmockで生成されたsoracomデバイスグループに対して、以下のコマンドを実行する。

$ soracom groups put-config  --group-id <デバイスグループID> --namespace SoracomFunnel --body @funnel.json --profile mockmock

5-4. テスト送信をしてみる

mockステータス画面にてテスト送信を実行します。
SORACOM Funnelを経由してのTorrentioへのデータ送信が出来ることが確認できました。

f:id:acro-engineer:20190628192307p:plain:w500

5-5. mock起動

mock管理画面のmock一覧にある作成したmockの操作メニューから起動を選択します。
mockmockで生成されたデータが定期的にTorrentioに蓄積されていきました!

f:id:acro-engineer:20190628193324p:plain:w500

まとめ

SORACOMのサービスと連携させた際に、実際のデバイスを用意してデータを送信する必要がありました。
しかし今回のmockmockのSORACOM連携により、実際のデバイスがなくともSORACOMのサービスを介したデータ送信を試すことが出来るようになります。
また、実際のデバイスを使う際には切り替えるだけでデータを送信することが出来るので、適用が楽になります。
SORACOMのサービスとの連携がぐんとやりやすくなった新機能でした。

Acroquest Technologyでは、キャリア採用を行っています。

  • ディープラーニング等を使った自然言語/画像/音声/動画解析の研究開発
  • Elasticsearch等を使ったデータ収集/分析/可視化
  • マイクロサービス、DevOps、最新のOSSを利用する開発プロジェクト
  • 書籍・雑誌等の執筆や、社内外での技術の発信・共有によるエンジニアとしての成長

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。
モノリシックなアプリケーションをマイクロサービス化したいエンジニア募集! - Acroquest Technology株式会社のWeb エンジニア中途・インターンシップ・契約・委託の求人 - Wantedlywww.wantedly.com

mockmock Data Recorderを使って異常検知を試してみた!

f:id:acro-engineer:20190412104902p:plain:w800

こんにちは、IoTエンジニアのHaruka Yamashita (@YamaHaruka925) | Twitterです。

2019年4月にプレビュー版がリリースされた、mockmock DataRecorderを使ってみて、IoT PoCを担当する者としてグッときたポイントをご紹介します!

■mockmock DataRecorderとは

f:id:acro-engineer:20190412105107p:plain:w240

mockmockは、クラウド上に仮想デバイスを作成し、開発中のサーバーに疑似データを届けられるサービスです。

これまでは、
 ・データの階層構造や、値の型・生成方法などをコンソール上で入力するだけで、簡単に疑似データを設定することができる。
 ・仮想デバイスは、瞬時に動作や台数を変更できる。
 ・欲しいデータを、欲しいタイミングで、欲しい量だけ受け取ることができる。
という特徴がありました。

さらに、新たにリリースされたDataRecorderでは、人工的に作成した疑似データではなく、実際のデバイスから収集されるリアルなデータを用いて仮想デバイスを生成することができます。

1. mockmock DataRecorderを使えば、IoT PoCのよくある困った!を解決できるのでは?

1-1. IoT PoCでよくある困った!ポイント

PoCを実施する中では、次のような課題が発生することが多くあります。
私自身、IoT担当エンジニアとして、以下のような点を毎度自分で作成・加工するのに時間を取られています。。。

  • センサー/エッジデバイスの選定から始めると、分析までたどり着くまで時間がかかる
  • データを蓄積するのに、時間がかかる。
  • PoCの期間内に、想定する異常(部品の消耗など)が発生するとは限らない
  • データの取得間隔やデータ量、送信頻度など、パラメータを変更するのが大変
  • PoCで実施した数台での試行だけでは、最終的な可視化や分析の効果まで予測できない
1-2. mockmock DataRecorderを利用することで、IoT開発の「困った」を解決!

1-1. のような課題に対し、mockmock DataRecorderを利用すれば、データ収集や実データを基にした想定される異常波形を作成・加工する部分を簡単にできる!

f:id:acro-engineer:20190412105607p:plain:w800

  • 実際に測定したデータをmockmock DataRecorderに登録することで、疑似波形ではなく実際のデータをもとに、パラメータの試行錯誤ができる。
  • 通信方式が決定していなくても、csvファイルからmockmock DataRecorderに登録することができる。
  • 実際のデータをベースに波形加工をできるため、想定される異常波形など作りこむことができる。
  • 実際のデータをベースに仮想デバイスの台数を増やすことができるため、対象機器の種類や台数が増えた場合のシステム全体を想定できる。

2. mockmock DataRecorderを利用して実際のデータから想定される異常データを作成してみる

2-1. mockmock DataRecorderにデータを登録する

f:id:acro-engineer:20190412105741p:plain:w600

まずは、mockmock DataRecorderに実際のデータを登録します。
そのためには、
 ①mockmock DataRecorderにMQTTSでデータを送信する
 ②csvファイルをアップロードする
という二つの方法があります。
詳しくは、mockmockのドキュメントをご覧ください。

実際のデータを登録することで、仮想デバイスから送るデータを疑似データではなく実際のデータをそのまま利用することができるようになります。

f:id:acro-engineer:20190419102256p:plain:w800

2-2. 実際のデータをもとに、異常波形をつくりこむ

mockmockに登録した実際のデータを基に、異常波形をつくりこんでみましょう。
mockmock DataRecorderには、データ変換タイプとして以下の4種類が用意されています。

  • 無変換(コピー)
  • ノイズを付与する
  • ピーク値を付与する
  • データを間引く

今回は、「ピーク値を付与する」を利用して、異常データを作りこんでみました。

もともとの波形に対し、データの途中からピーク値をのっけることで想定外の振動が発生した状態を模擬します。
元データに対し、「どのデータ位置から、どのようなピーク値を、どれくらいの点数分、どれくらいの間隔をあけて」付与するかをJsonでパラメータ定義してあげます。

f:id:acro-engineer:20190412105923p:plain:w800

これだけで、もともとのデータに対し、ピーク値を付与することができます。
今回は、以下のように波形を変化させました。
mockmock DataRecorderにはデータ可視化機能も付いており、登録/変形させたデータをすぐに可視化して確かめることができます!

f:id:acro-engineer:20190419102336p:plain:w800

2-3. Torrentioへのデータ送信

今回、データ分析部分は当社Torrentioを利用しています。
mockmockからTorrentioにデータを送るための設定は簡単です。
mockmockのデータ送信先設定にTorrentioのMQTTエンドポイント設定を記入するだけ。

f:id:acro-engineer:20190412111315p:plain:w800

mockmockから送信するデータのリプレイヤー定義にて、2-1. で登録したDataRecorderのデータセットを選択します。

f:id:acro-engineer:20190412110247p:plain:w800

mockグループ設定にて、上で定義したデータリプレイヤーを利用するよう設定し、TorrentioのTopic名、MQTTクライアントIDを設定して準備完了。

f:id:acro-engineer:20190412110314p:plain:w800

あとは好きな台数の仮想デバイス(mock)を作成し、起動するだけ!
今回は、もともと1台から収集したデータを3台に増幅して送っています。

2-4. 異常検知してみる

mockmockから送信されたデータをTorrentioで異常検知してみます。

PoCとしてセンサーによりデータを測定しているのは1台ですが、mockmockにより実データを送信できる仮想デバイスを増やすことで、複数台で実施した場合の分析の見え方なども検討することができます。

f:id:acro-engineer:20190412110400p:plain:w800

※ここでは異常検知を実施しましたが、Torrentioでは、他にもIoTダッシュボードでのリアルタイム可視化やルールエンジンによる制御なども実施することができます。
 詳しくは、Torrentio Cloudについてをご覧ください。

3. まとめ

小さく始めることで、実施しようとしているIoTシステム開発が有効かどうかを見極めるためのPoC(実証実験)ですが、IoTシステムにはセンサー/ネットワーク/分析プラットフォームなど必要なステップが多く試行錯誤に時間がかかることや、監視対象の機器台数がスケールした場合の想定が難しいなどの課題がありました。
mockmock DataRecorderを利用することにより、「測定した実際のデータをもとに」仮想デバイスの台数を増やせたり、異常波形を創りこむことができます。
PoCでの試行錯誤がぐんとやりやすくなりますね!

Acroquest Technologyでは、キャリア採用を行っています。


  • ディープラーニング等を使った自然言語/画像/音声/動画解析の研究開発
  • Elasticsearch等を使ったデータ収集/分析/可視化
  • マイクロサービス、DevOps、最新のOSSを利用する開発プロジェクト
  • 書籍・雑誌等の執筆や、社内外での技術の発信・共有によるエンジニアとしての成長

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。

www.wantedly.com

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

SORACOM Beam のアノ機能追加に感動しました!

これはSORACOMリリース1周年記念リレーブログ10/31分です。

blog.soracom.jp

山下@YamaHaruka925です。
10月に開催されたSORACOM UG#4に参加した、SORACOMさんのソリューションパートナーであるAcroquestで働く女性エンジニアで、IoTプラットフォーム開発やってます。
お酒をこよなく愛するリケジョです。(リケジョブログも書いてます^^)
SORACOM UGで熊崎さんとお話ししてたら、楽しくお酒を飲んで酔った勢いで、リレーブログ参戦が決定!

f:id:acro-engineer:20161028112855j:plain:w500

今回は、最近体験した「え!?こまった!」を解決してくれたSORACOMさんのアップデートについて書いてみようかなと。

SORACOM Beamがつながらないが原因不明。。。

AcroquestではIoTアプリケーションプラットフォーム「Torrentio」を提供してるわけですが、相談に来られる方々は、やっぱり、センサーからデータ分析・可視化まで一貫して提供してほしい!!という人が多いので、SORACOMさんやその他パートナー企業さんのお力を借りて、トータル提供する流れになります。


そんなある日。
SORACOMのBeamも使用した実証検証を実施することに。

いざ、設定も完了し、データ送信検証開始!

・・・つながらない。

通信できていないようすだけど、エラーも出力されない。
Beamの設定が悪いのか?
はたまたデータ受付側が悪いのか?
送っているデータに不備があるのか?

・・・さっぱりわからない。

手探りでデバッグ、、、なかなか大変でした(^^;

そんなとき、新機能追加の朗報が!

「新機能:SORACOM Beam / Funnel のエラーログが確認できるようになりました」

blog.soracom.jp


ということで、

SORACOM Beamでエラーログの確認、やってみた

構成

OpenBlocks IoT EX1に、SORACOM SIMを挿して、
SORACOM Beamを利用してAWS API Gatewayに転送します。
AWS API Gatewayからは、受け取ったデータをそのまま返却します。
f:id:acro-engineer:20161028133211p:plain:w600


AWS API Gatewayの設定は、POSTメソッドで簡単にするために認証なしを採用。
f:id:acro-engineer:20161031011935j:plain


AWS API Gatewayの後段には、Lambdaを置き、うけとったデータをそのまま返却するスクリプトを書く。
f:id:acro-engineer:20161031012119j:plain


設定ができたら、ステージにデプロイし、URLをgetします。
このURLが、SORACOM Beamの転送先に設定するURLになります。
f:id:acro-engineer:20161031011945j:plain


SORACOM Beamの設定はこんな感じ。
f:id:acro-engineer:20161031012014j:plain


エントリポイントは、「http://beam.soracom.io:8888/test
転送先には、上記で作成したAWS API GatewayのURLを指定しています。

エラーログ確認方法

エラーログは、SORACOMコンソールのサイドメニュー「ログ」から確認できます。
f:id:acro-engineer:20161031005309j:plain
f:id:acro-engineer:20161031005325j:plain

SIMのIMSIを入力することで、エラーログを絞り込んで表示することができます。


通信して検証

まずは、Beamを使って正常に通信。

$ curl -XPOST http://beam.soracom.io:8888/test -d '{"key":"value"}'
{"key":"value"}

API Gatewayから、送ったデータがそのまま返ってきます。
このとき、エラーは発生していないので、SORACOMコンソールのログ表示を見ても、空っぽ。



つぎに、誤ったURLで送信してみましょう。

$ curl -XPOST http://beam.soracom.io:8888/xxxx -d '{"key":"value"}'
{"message":"Beam configuration for http://beam.soracom.io:8888/xxxx is not found"}

エラーメッセージが返ってきて、「URLがみつからない」ということが一目瞭然。
SORACOMコンソールのログを確認してみると、
f:id:acro-engineer:20161031005913j:plain

エラーログが表示されている!!
これがあれば、リモートで実施している検証でも、エラーをトレースしてデバッグできる!

「便利!!!」



他のエラーも同様に、レスポンスでエラーメッセージが返ってくるとともに、
SORACOMコンソールからログが確認できます。

【メッセージのフォーマット謝り】

$ curl -XPOST http://beam.soracom.io:8888/test -d 'test message'
{"message":"Could not parse request body into json: Unrecognized token \'test|' was expecting\'null\',\'true\',\'false\' or NAN\n at [Source: [B@c9e04ec; line: 2, column: 6]"}

【認証不正】

$ curl -XPOST http://beam.soracom.io:8888/test -d '{"key":"value"}'
{"message":"Missing Authentication Token"}

SORACOMコンソールのログはこんな感じ。
f:id:acro-engineer:20161031005933j:plain

エラーコードがコンソールから確認できるので、リモートでも何が悪いかの推測が立ちますね。

要望に迅速に対応してもらえるのはありがたい!

このBeamのエラーログ取得機能も、ユーザーからの声を聞いて、
機能追加となったとのこと。

私自身、新機能追加の1週間ほど前に苦労していた内容でした。
実際にBeamを設定し、デバイスにSIMを挿して検証しましたが、実はデバイス側での送信先指定が誤っており、通信ができていなかった。。。
なんてミスをして、検証やり直し。。。なんて苦い思い出が。

なので、今回の機能追加はとてもとてもありがたい。

なので、メジャーなA~Gのサービス追加のような機能追加ではありませんが、このようなユーザの要望に迅速に対応して、サービスに反映している部分こそ、SORACOMさんの素晴らしさだと思いました。

バックエンドで対応してくださっているSORACOMのエンジニア/サポートのみなさん、ありがとうございます!!!

Acroquest Technologyでは、キャリア採用を行っています。


  • 日頃勉強している成果を、AWSHadoop、Storm、NoSQL、Elasticsearch、SpringBoot、HTML5/CSS3/JavaScriptといった最新の技術を使ったプロジェクトで発揮したい。
  • 社会貢献性の高いプロジェクトに提案からリリースまで携わりたい。
  • 書籍・雑誌等の執筆や対外的な勉強会の開催を通した技術の発信や、社内勉強会での技術情報共有により、技術的に成長したい。
  • OSSの開発に携わりたい。

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。
 
データ分析で国内に新規市場を生み出す新サービス開発者WANTED! - Acroquest Technology株式会社の新卒・インターンシップ - Wantedlywww.wantedly.com

AWS IoTの性能を測ってみた ~AWS IoT Performance Benchmarks~

こんにちは、再びishida(@)です。

本投稿はQiitaのAWS IoTアドベントカレンダーの11日目になります。
8日目「AWS IoTから NumericなRangeKeyを持つDynamoDBテーブルへput-itemをする方法 - Qiita」からの投稿からの続きとなります。

2015年10月に、AWS re:Invent 2015にて発表されたAWS IoTですが、じわじわと人気が出始めていますね。ブログで「○○と繋いでみた」というような記事を公開している人も増えてきました。

f:id:acro-engineer:20151211103150p:plain

AWS IoTはデバイスとクラウドのセキュリティを確保しつつ、HTTPやMQTTといった様々な通信プロトコルにも対応し、さらに各種AWSサービスへの連携も簡単に可能な、マネージド型クラウドプラットフォームです。

今回、このAWS IoTに対してPub/Subの性能評価を実施し、その結果をまとめてみました。

前提

AWS IoTは、普通のMQTTの仕様に対して、限定的な対応がされています。MQTT v3.1.1とAWS IoTを比較すると、以下のようになります。

AWS IoT MQTT
対応QoS 0,1 0,1,2
Retain ×
Will ×
TLS/SSL
Payloadサイズ制限 128KB 256MB
順序保証 × ×

計測条件/内容

以下の条件で、今回測定をしています。

Clientツール AWS IoT
リージョン ap-northeast-1 ap-northeast-1
インスタンスタイプ c4.xlarge -
インスタンス 1(Pub/Sub同一インスタンス上で実施) -

計測結果

3回ずつ測っての平均値をとりましたが、以下の通りになりました。

Publish Subscribe
QoS=0 32273 4844
QoS=1 10512 1012

*単位は[messages/sec]

  • Publishについては約32000msg/secと、十分な性能を出すことができている。
  • Subscribeは約4800msg/secと、Publishに比べて性能が出ていない。


SSLを使用したMQTT通信のため、そもそも性能がそれほど出ないのではないかと思っていましたが、予想に反してPublishの性能が良かったですね。

IoTが世間でも頻繁に使われるようになった現在において、如何にAWS IoTが時代を引っ張って行ってくれるか、まだまだ目が離せませんね!


それでは。

Acroquest Technologyでは、キャリア採用を行っています。


  • 日頃勉強している成果を、AWSHadoop、Storm、NoSQL、SpringBoot、HTML5/CSS3/JavaScriptといった最新の技術を使ったプロジェクトで発揮したい。
  • 社会貢献性の高いプロジェクトに提案からリリースまで携わりたい。
  • 書籍・雑誌等の執筆や対外的な勉強会の開催を通した技術の発信や、社内勉強会での技術情報共有により、技術的に成長したい。
  • OSSの開発に携わりたい。

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。
 キャリア採用ページ

MQTT Meetup Tokyo 2014.08に参加してきました!

id:KenichiroMurata(@ )です。

皆さんはMQTTに興味はありますか?私は昨年末くらいからMQTTに興味を持ち、そこからあれこれ調べています。

また社内でも、Stormのエコシステムとして開発しているAcroMUASHI Streamの開発チームが、MQTTと連係した分散ストリーム処理を実現しており、私の周辺では盛り上がっています。

そんな中、先日 MQTT Meetup Tokyo 2014.08が開催され、幸運にも参加することができましたので、今回はその参加レポートをお届けします。

イベントの概要はこちらをご覧下さい。イベントは非常に内容の濃いものであり、面白かったです。
少しでも何かお手伝いできることがあればとイベント当日のtweettogetterにまとめましたので、当日の雰囲気や反応をご覧になりたい方はMQTT Meetup Tokyo 2014.08 まとめも合わせてご覧下さい。

1. MQTTの機能概要 - ツキノワ 若山さん(@r_rudi)

MQTTについてのまとめ — そこはかとなく書くよん。を書かれた方による発表。MQTTの概要についての説明であり、特にWill、Retain、CleanSessionについての説明は理解を復習する意味でも非常に分かりやすかったです。Retainの活用方法の例として、Subscribeしてくるデバイスに最新の設定情報をRetainを使って渡すという話は、なるほどでした。また、Microservicesについても少し触れられていました。

2. IBM MessageSight - IBM 鈴木徹さん

IBM MessageSightはMQTTのアプライアンスサーバーで、なんと100万デバイスを常時接続可能、毎秒1500万メッセージを処理できるとのこと。100万のデバイスを60秒以内で全て接続できるとか、毎秒1万メッセージを平均85マイクロ秒でさばけるとか、サーバの冗長化も当然可能という凄いものでした。お値段は怖くて聞けないレベルです。

プレゼンをされた鈴木さんは、普段はMQTTがどれだけ良いかを説明するのにほとんどの時間を使うのに対して、今日は参加者が皆MQTTのことは良いモノと知っているので、その説明がいらないのが最高!とあれこれネタを仕込んだマシンガントークを展開し、非常に面白かったです。

話の焦点はMQTTうんぬんではなく、IoTをどのようにしてビジネスにつなげて利益を生み出すのか?という内容になり、車内センサーで運転手の状態を常時接続で情報収集し、その情報を保険会社が活用するといった事例紹介もありました。

あとは、IBMさんでは、MQTT/IoTで収集したデータをどうやって活用するのか、既存の様々なシステムと結合できるように仕組み化している点についても説明があり、ここでもMicroservicesを連想させる「3年後に取り替え可能な部品によるシステムを作る。疎結合に」なんて話が聞けました。

3. IoT/M2M Hot Topics in IETF - レピダム 林さん(@lef)

CoAPとその周辺に関する話題について。CoAPについては私は初めて知りました。HTTP/RESTと親和性のあるIoT/M2M用の軽量プロトコルであり、UDPとのこと。MQTTがTCPで常時接続であるのに対して、UDPを利用するMQTT-SNと対応付く関係にあるものだと理解しました。

CoAPそのものというよりもIETFの仕様策定の裏側(仕様に関するユースケースを話してしまうと、ビジネス上問題なので、ユースケースの話になると大人の事情で議論が進まなくなる)みたいな話がきけて面白かったです。

4. 時雨堂 MQTT ブローカー (AKANE) - @voluntas さん

本イベントの主催者であり、イベント前日にMQTT as a Seriviceであるsangoを発表した時雨堂の@voluntasさんによるsangoの中で使われている MQTT ブローカー (AKANE) の開発苦労談。

仕様としてはシンプルなMQTTですが、MQTT Brokerを本気で開発しようとすると、どのような問題があって、苦労するのかという話で非常に面白かったです。特に、仕様には含まれていないが、現実的にシステムとして運用できるようにするために実装した機能についてはとても参考になりました。

仕事上、数万、数十万の監視対象ノードを集中監視制御するシステムを開発してきたので、リトライ、ノード別の状態遷移制御、時系列制御、優先キュー、一斉接続などなど、それに類する話題が基本なのでイメージしやすかったし、共感できました。MQTTでは、さばくクライアント数が多いのは当然として、トピックのSubscribeの指定方法によっては1クライアントに配信するメッセージが爆発的に増えるし、QoSダウングレードはさらに複雑になるので、その実装はたしかにつらそうです。なぜに世のMQTT Brokerの実装が(私が観測する範囲では)どれも途中に見えるのは、このような背景があるからなんですね。

5. MQTT+RaspberryPi+Arduino+センサーで制御とGUIを実装した話 - 小松電機産業 廣江さん (@hiroe_orz17)

RaspberryPi+Arduino、オムロンPLC、Intel Galileo でMQTTしてみた話 - ごろねこ日記を書かれた方による発表。具体的にアプリケーションを作る上で、どのように考えて、何を試して、結果どう実現したかが具体的に分かる内容でした。MQTTのペイロード部をどのようにするのか、3G環境下で通信量を削減/効率化するために配列やバイト列を使った表現やMessagePackの利用など、試行錯誤も含めての説明だったので、イメージが沸きました。

おまけ sangoを試してみる

githubアカウントで簡単にsangoを使い始められるということで、イベント終了後に早速アカウントを作成し、試してみました。mosquittoを使ってCLIで試すのは直ぐにできたので、以前から気になっていたMQTTInspectorというiOSアプリ(有料)を使って試してみました。

アプリの使い方そのものに慣れるのに手探り状態でしたが、以下のように簡単に動作させることができました。ビューによっては通信状態が見えるのがよいですね。

メッセージを送受信している例


通信ログ

最後に

MQTT Meetup Tokyo 2014.08 はMQTTの概要から始まって、仕様の話、ビジネス活用の話、Broker実装の裏話、クライアントアプリ開発の話と幅広い内容で、しかもそれぞれが濃い話でした。このようなイベントを企画してくださり、どうもありがとうございました!

Acroquest Technologyでは、キャリア採用を行っています。

  • 日頃勉強している成果を、Hadoop、Storm、NoSQL、HTML5/CSS3/JavaScriptといった最新の技術を使ったプロジェクトで発揮したい。
  • 社会貢献性の高いプロジェクトに提案からリリースまで携わりたい。
  • 書籍・雑誌等の執筆や対外的な勉強会の開催を通した技術の発信や、社内勉強会での技術情報共有により、技術的に成長したい。
  • OSSの開発に携わりたい。

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。
 キャリア採用ページ