Slide 1

Slide 1 text

インライン プロセッシング サービス SORACOM Orbit IoT デバイスとクラウドの間の通信経路上で双方向のデータ処理を実現 株式会社ソラコム プリンシパル ソフトウェア エンジニア 小熊 崇 @ogu

Slide 2

Slide 2 text

目次 • IoT データ通信の困りごと:データフォーマットの不一致 • SORACOM Orbit とは • SORACOM Orbit の使い方 • デモ • まとめ

Slide 3

Slide 3 text

IoT データ通信の困りごと • データフォーマットの不一致 • デバイスはバイナリデータを送りたい でもサーバーは JSON で受け取りたい どちらかのプログラムを変更できればフォーマットを一致させられるけど… どちらの変更も難しい場合があります。

Slide 4

Slide 4 text

SORACOM Air バイナリパーサー機能 σʔλసૹࢧԉ 403"$0.#FBN Ϋϥ΢υϦιʔεΞμϓλ 403"$0.'VOOFM σʔλऩूɾ஝ੵ 403"$0.)BSWFTU %BUB *P5޲͚σʔλ௨৴αʔϏε 403"$0."JS όΠφϦύʔαʔػೳ σʔλΛύʔε σʔλॲཧ ʢσίʔυɺ࢛ଇԋࢉʣ ΧελϜϑΥʔϚοτΛ ෇༩ͯ͠ૹ৴ { "battery": 54, "latitude": 35.652748, "longitude": 139.750827 } όΠφϦσʔλΛૹ৴ 0x1A2B... Ϋϥ΢υͰॲཧ͠΍͍͢ ϑΥʔϚοτ +40/ ΁ σʔλαΠζΛ࡟ݮ Ϋϥ΢υϑΝϯΫγϣϯ 403"$0.'VOL

Slide 5

Slide 5 text

より高度な変換処理がしたい! • デバイスが複数種類のデータを送っ てくるので、ヘッダーなどを見て解釈 を変えたい • デバイスが送ってくる CSV を JSON に変換したい • 下り方向のデータも変換したい

Slide 6

Slide 6 text

回避策 SORACOM Funk 経由で AWS Lambda を呼び出して処理 ユーザーコード (変換処理) AWS Lambda SORACOM Funk IoT デバイス サーバー • いろいろなプログラミング言語を使える • 高度な処理を自由に書ける • ダウンリンクも処理できる

Slide 7

Slide 7 text

Harvest や Lagoon を使いたい! • Harvest や Lagoon を使ってデータを 確認したいけど、Harvest にデータを 入れる前にちょっとした変換処理を行 いたい • センサーデータの単位の変換 • SIM のメタデータを追加

Slide 8

Slide 8 text

回避策 SORACOM Funk 経由で AWS Lambda を呼び出して処理 その後 Inventory を使って Harvest にデータ投入 SORACOM Inventory SORACOM Funk SORACOM Harvest SORACOM Lagoon AWS Lambda IoT デバイス 外部にサーバー等を用意しなくてすむ お手軽さが Harvest / Lagoon の良さですが、 これだとちょっと大変… ユーザーコード (変換処理)

Slide 9

Slide 9 text

SORACOM Orbit がお悩みを解決! SORACOM プラットフォームの通信経路上で、お客様が定義したデータ変換処理プログラ ムを実行 IoT デバイス Unified Endpoint ユーザーコード (変換処理) SORACOM Funk SORACOM Funnel SORACOM Beam SORACOM Orbit SORACOM Lagoon SORACOM Harvest

Slide 10

Slide 10 text

SORACOM Orbit のメリット • バイナリ以外の任意のデータを処理できる • 外部に変換サーバー等を用意しなくて良い • Harvest 等に連携しやすい • ダウンリンクのデータにも処理を行える • SIM のメタデータを利用可能

Slide 11

Slide 11 text

変換プログラムの書き方 • 変換プログラムは WebAssembly (WASM) のモジュー ルにコンパイルしてアップロード • 詳しくは SORACOM Orbit 開発者ガイド https://dev.soracom.io/jp/orbit/what-is-orbit/

Slide 12

Slide 12 text

WebAssembly (WASM) とは? W3C が策定した、仮想マシンと命令セットの仕様 Web ブラウザ上でアプリケーションをより高速に 実行するために作られた → 汎用的なので Web ブラウザだけでなく 一般的な処理のために利用可能

Slide 13

Slide 13 text

WASM モジュールとは? WASM 処理系で実行可能なファイル 一般的には JIT でネイティブコードに変換後 実行されるので高速 Web ブラウザでの実行を想定してセキュリティも考慮

Slide 14

Slide 14 text

WASM 対応言語は? 様々な言語が WASM モジュールの出力に対応 https://github.com/appcypher/awesome-wasm-langs "Language-agnostic"

Slide 15

Slide 15 text

WASM 対応言語は? 注意点: Orbit で実行可能なのは Non-Web Embedding 環境向けに出力された形式。Standalone などとも呼ばれる。 JS 環境 / Web 環境向けの出力にのみ対応している言語がまだ一般的。 WASI 環境向けに出力した WASM モジュールは一部実行可能。(外界と作用するための機能は使えない) WASM モジュール Node.js / Web ブラウザ WASM モジュール Windows / macOS / Linux WASM モジュール 独自ホスティング 環境 JS 環境 / Web 環境 WASI 環境 Non-Web Embedding 環境 SORACOM Orbit

Slide 16

Slide 16 text

SDK 提供言語 • AssemblyScript • TypeScript のサブセット • Rust • WASM との親和性の高い言語 • C/C++ • Emscripten というツールセットで WASM に対応 ※ 2020年7月現在

Slide 17

Slide 17 text

サンプルプログラム(C/C++) SORACOM Lagoon SORACOM Harvest { "lat":35.000000, "lon":139.000000, "bat":3, "rs":4, "temp":16.0, "humi":32.4, "x":0.0, "y":-64.0, "z":-960.0, "type":0 } ユーザーコード (変換処理) SORACOM Orbit { "lat":35.000000, "lon":139.000000, "bat":3, "rs":4, "temp":16.0, "humi":32.4, "x":0.0, "y":-64.0, "z":-960.0, "type":0, "name":"oguのGPSマルチユニット", "imsi":"44010xxxxxxxxxx", "inside_area":1, "distance":0.123487 } GPS マルチユニット SORACOM Edition SIM のタグなどの メタ情報

Slide 18

Slide 18 text

サンプルプログラム(C/C++)

Slide 19

Slide 19 text

サンプルプログラムのビルド

Slide 20

Slide 20 text

WASM モジュールのアップロード モジュールのアップロード先は Soralet(ソラレット) IoT デバイス Unified Endpoint ユーザーコード (変換処理) SORACOM Orbit ID: hello-soralet v1 v2

Slide 21

Slide 21 text

WASM モジュールのアップロード方法 • ユーザーコンソール • CLI • Visual Studio Code Extension https://dev.soracom.io/jp/orbit/deployment/

Slide 22

Slide 22 text

WASM モジュールのアップロードとテスト実行

Slide 23

Slide 23 text

WASM モジュールの動作確認(ユーザーコンソール)

Slide 24

Slide 24 text

Funk/Orbit/バイナリパーサー 機能比較 SORACOM Funk + AWS Lambda SORACOM Orbit バイナリパーサー 対応する通信 SORACOM Air (SIM, Sigfox, LoRa WAN, SMS, USSD) SORACOM Air(SIM のみ)※1 SORACOM Air (SIM, Sigfox, LoRa WAN, SMS, USSD) 対応言語 Java, Go, PowerShell, Node.js, C#, Python, Ruby, Docker, 独自 Runtime AssemblyScript, Rust, C/C++ ※2 独自 DSL ダウンリンク対応 Yes Yes No 他の SORACOM サービスとの連携 ※3 Yes Yes 処理中のインター ネットアクセス Yes No No ※1 - 2020 年 7 月現在。今後 Sigfox、LoRaWAN 等にも順次対応予定 ※2 - 2020 年 7 月現在。今後対応言語拡充予定 ※3 - SORACOM Inventory のデバイスとして Harvest にデータを投入することは可能

Slide 25

Slide 25 text

フィードバックお待ちしております • お使いいただいた感想 • 機能要望 • 技術的質問 : なんでも結構です! SORACOM プラットフォームは 皆様からのフィードバックを元に 成長・進化していきます!

Slide 26

Slide 26 text

世界中のヒトとモノをつなげ 共鳴する社会へ