株式会社ソラコム主催 SORACOM Discovery 2020 ONLINEにて発表された新サービス、IoTデバイスとクラウド間の通信経路上で データ処理プログラムを実行できる「SORACOM Orbit」の詳細をご説明しています。
インライン プロセッシング サービスSORACOM OrbitIoT デバイスとクラウドの間の通信経路上で双方向のデータ処理を実現株式会社ソラコムプリンシパル ソフトウェア エンジニア小熊 崇 @ogu
View Slide
目次• IoT データ通信の困りごと:データフォーマットの不一致• SORACOM Orbit とは• SORACOM Orbit の使い方• デモ• まとめ
IoT データ通信の困りごと• データフォーマットの不一致• デバイスはバイナリデータを送りたいでもサーバーは JSON で受け取りたいどちらかのプログラムを変更できればフォーマットを一致させられるけど…どちらの変更も難しい場合があります。
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
より高度な変換処理がしたい!• デバイスが複数種類のデータを送ってくるので、ヘッダーなどを見て解釈を変えたい• デバイスが送ってくる CSV を JSONに変換したい• 下り方向のデータも変換したい
回避策SORACOM Funk 経由で AWS Lambda を呼び出して処理ユーザーコード(変換処理)AWSLambdaSORACOMFunkIoT デバイスサーバー• いろいろなプログラミング言語を使える• 高度な処理を自由に書ける• ダウンリンクも処理できる
Harvest や Lagoon を使いたい!• Harvest や Lagoon を使ってデータを確認したいけど、Harvest にデータを入れる前にちょっとした変換処理を行いたい• センサーデータの単位の変換• SIM のメタデータを追加
回避策SORACOM Funk 経由で AWS Lambda を呼び出して処理その後 Inventory を使って Harvest にデータ投入SORACOMInventorySORACOMFunkSORACOMHarvestSORACOMLagoonAWSLambdaIoT デバイス外部にサーバー等を用意しなくてすむお手軽さが Harvest / Lagoon の良さですが、これだとちょっと大変…ユーザーコード(変換処理)
SORACOM Orbit がお悩みを解決!SORACOM プラットフォームの通信経路上で、お客様が定義したデータ変換処理プログラムを実行IoT デバイス UnifiedEndpointユーザーコード(変換処理)SORACOM FunkSORACOM FunnelSORACOM BeamSORACOM OrbitSORACOMLagoonSORACOMHarvest
SORACOM Orbit のメリット• バイナリ以外の任意のデータを処理できる• 外部に変換サーバー等を用意しなくて良い• Harvest 等に連携しやすい• ダウンリンクのデータにも処理を行える• SIM のメタデータを利用可能
変換プログラムの書き方• 変換プログラムは WebAssembly (WASM) のモジュールにコンパイルしてアップロード• 詳しくはSORACOM Orbit 開発者ガイドhttps://dev.soracom.io/jp/orbit/what-is-orbit/
WebAssembly (WASM) とは?W3C が策定した、仮想マシンと命令セットの仕様Web ブラウザ上でアプリケーションをより高速に実行するために作られた→ 汎用的なので Web ブラウザだけでなく一般的な処理のために利用可能
WASM モジュールとは?WASM 処理系で実行可能なファイル一般的には JIT でネイティブコードに変換後実行されるので高速Web ブラウザでの実行を想定してセキュリティも考慮
WASM 対応言語は?様々な言語が WASM モジュールの出力に対応https://github.com/appcypher/awesome-wasm-langs"Language-agnostic"
WASM 対応言語は?注意点:Orbit で実行可能なのは Non-Web Embedding 環境向けに出力された形式。Standalone などとも呼ばれる。JS 環境 / Web 環境向けの出力にのみ対応している言語がまだ一般的。WASI 環境向けに出力した WASM モジュールは一部実行可能。(外界と作用するための機能は使えない)WASMモジュールNode.js /Web ブラウザWASMモジュールWindows /macOS / LinuxWASMモジュール独自ホスティング環境JS 環境 /Web 環境WASI 環境 Non-WebEmbedding 環境SORACOM Orbit
SDK 提供言語• AssemblyScript• TypeScript のサブセット• Rust• WASM との親和性の高い言語• C/C++• Emscripten というツールセットで WASM に対応※ 2020年7月現在
サンプルプログラム(C/C++)SORACOMLagoonSORACOMHarvest{"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}ユーザーコード(変換処理)SORACOMOrbit{"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 EditionSIM のタグなどのメタ情報
サンプルプログラム(C/C++)
サンプルプログラムのビルド
WASM モジュールのアップロードモジュールのアップロード先は Soralet(ソラレット)IoT デバイス UnifiedEndpointユーザーコード(変換処理)SORACOM OrbitID: hello-soraletv1v2
WASM モジュールのアップロード方法• ユーザーコンソール• CLI• Visual Studio Code Extensionhttps://dev.soracom.io/jp/orbit/deployment/
WASM モジュールのアップロードとテスト実行
WASM モジュールの動作確認(ユーザーコンソール)
Funk/Orbit/バイナリパーサー 機能比較SORACOM Funk + AWS Lambda SORACOM Orbit バイナリパーサー対応する通信 SORACOM Air (SIM, Sigfox, LoRaWAN, SMS, USSD)SORACOM Air(SIM のみ)※1 SORACOM Air (SIM, Sigfox,LoRa WAN, SMS, USSD)対応言語 Java, Go, PowerShell, Node.js,C#, Python, Ruby, Docker, 独自RuntimeAssemblyScript, 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 にデータを投入することは可能
フィードバックお待ちしております• お使いいただいた感想• 機能要望• 技術的質問:なんでも結構です!SORACOM プラットフォームは皆様からのフィードバックを元に成長・進化していきます!
世界中のヒトとモノをつなげ共鳴する社会へ