Slide 1

Slide 1 text

可能性は無限大! SORACOM Orbit 入門 2020.09.24 SORACOM UG Online #1 株式会社ソラコム プリンシパル ソフトウェア エンジニア 小熊 崇 @ogu

Slide 2

Slide 2 text

自己紹介 小熊 崇(おぐま たかし)- @ogu • プリンシパルソフトウェアエンジニア • SORACOM Orbit 開発者 • AT コマンドの本を書きました: SORACOM で学ぶ AT コマンド入門 https://zenn.dev/bearmini/books/12ebf8331d6f9ea1d90d

Slide 3

Slide 3 text

目次 1. SORACOM Orbit とは? 2. なぜ SORACOM Orbit ? 3. SORACOM Orbit の使い方

Slide 4

Slide 4 text

SORACOM Orbit とは?

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

インライン プロセッシング・・・? όΠφϦͰ ૹ৴͍ͨ͠ 0x1A2B... IoT デバイス σʔλ௨৴ྔΛ ࡟ݮͰ͖Δ サーバー { "battery": 54, "latitude": 35.652748, "longitude": 139.750827 } +40/ Ͱ ड৴͍ͨ͠ Ϋϥ΢υͰ ॲཧ͠΍͍͢

Slide 7

Slide 7 text

インライン プロセッシング・・・! όΠφϦͰ ૹ৴͍ͨ͠ 0x1A2B... IoT デバイス σʔλ௨৴ྔΛ ࡟ݮͰ͖Δ サーバー { "battery": 54, "latitude": 35.652748, "longitude": 139.750827 } +40/ Ͱ ड৴͍ͨ͠ Ϋϥ΢υͰ ॲཧ͠΍͍͢ ユーザーコード (変換処理) SORACOM Orbit

Slide 8

Slide 8 text

バイナリパーサーとどう違うの? バイナリパーサー • ○ シンプル • ○ すぐに使える • ? 固定のフォーマットにしか対応できない • ? 入力形式はバイナリのみ • ? 出力形式は JSON のみ • ? アップリンク方向のデータのみ変換できる SORACOM Orbit • ○ 好きな言語で自由に処理を書ける • ○ ソラコム公式の開発環境が用意されている • ○ ある程度複雑なフォーマットでも対応可能 • ○ バイナリ以外のデータにも対応 • ○ JSON 以外の出力も可能 • ○ ダウンリンクのデータも変換可能 • ○ バイナリパーサーと組み合わせての利用も可能

Slide 9

Slide 9 text

バイナリだけじゃない 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 10

Slide 10 text

Funk + FaaS とどう違うの? SORACOM Funk + FaaS • ○ ほぼなんでもできる • ○ クラウドサービスとの連携 • ? Harvest や Lagoon との連携にはひと工夫必要 SORACOM Orbit • ○ Orbit の中に閉じた処理であれば何でもできる • ○ SIM のメタデータ等を活用できる • ○ Harvest や Lagoon に直結

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

Harvest / Lagoon との連携 ちょっとだけデータの形式を変えて Harvest に入れたい場合に シンプルに実現可能 SORACOM Orbit SORACOM Harvest SORACOM Lagoon IoT デバイス ユーザーコード (変換処理) Unified Endpoint

Slide 13

Slide 13 text

なぜ SORACOM Orbit ?

Slide 14

Slide 14 text

それは2017年にさかのぼります LPWA はデータサイズが 小さいとはいえ、データの 一部を読んで場合分けし たいことはありそうだよ なぁ・・・ ogu LPWA のバイナリデータを かんたんに JSON に変換できる バイナリパーサーを作りましょう! 記法はこんな感じで: status:0:uint:2:7 battery:0:uint:6:5:*2 latitude:5:float:32 longitude:1:float:32 altitude:7:uint:16:/10-100 いいね!

Slide 15

Slide 15 text

ogu DSL 記法は便利だけど、ソラコム独自の記法をユーザーのみなさまに覚えてもらうのは心苦しい・・・ 場合分けなどの複雑な機能を持たせたら、なおさら学習コストが高まる・・・ 複雑な DSL を作っちゃうとソラコム側でのメンテナンスコストも・・・ nginx とかみたいに Lua を使えばいいのかな・・・ Lua も馴染みがない人が多いよなぁ・・・ 今後廃れちゃうかもしれないしな・・・ 任意のプログラミング言語をサポートできるのが理想だけど、 そうするためにはユーザーさんの書いたネイティブコードを動かせるようにしたり、 Java VM みたいなものを動かしてその上でユーザーさんのコードを動かせるように する必要がありそう。そうなるとセキュリティが・・・ https://blog.soracom.com/ja-jp/2020/07/14/soracom-orbit/ 新サービス SORACOM Orbit のご紹介(&開発秘話)

Slide 16

Slide 16 text

時は流れて2019年

Slide 17

Slide 17 text

WebAssembly のいいところ • いろいろな言語で書いたコードを Wasm 形式に出力できる • お客様は使い慣れた言語を使えるので学習コスト:低 • ソラコム側は Wasm ランタイムのみサポートすればよいので メンテナンスコスト:低 • 言語の流行に左右されるリスク:低 • セキュア • もともと Web 向けに開発された • 軽量・高速

Slide 18

Slide 18 text

WebAssembly で万事解決! όΠφϦͰ ૹ৴͍ͨ͠ 0x1A2B... IoT デバイス σʔλ௨৴ྔΛ ࡟ݮͰ͖Δ サーバー { "battery": 54, "latitude": 35.652748, "longitude": 139.750827 } +40/ Ͱ ड৴͍ͨ͠ Ϋϥ΢υͰ ॲཧ͠΍͍͢ ユーザーコード (変換処理) SORACOM Orbit

Slide 19

Slide 19 text

SORACOM Orbit の使い方

Slide 20

Slide 20 text

SORACOM Orbit の使い方 1. 対応言語で変換処理プログラムを書く 2. Wasm モジュールにコンパイル 3. アップロード 4. テスト 5. 本番投入! 詳しくは SORACOM Orbit 開発者ガイド https://dev.soracom.io/jp/orbit/what-is-orbit/

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

開発は VS Code を使ってめっちゃ簡単 • Dev container • 開発環境(コンパイラ等)インストール済・設定済 • Orbit extension • Soralet の管理 • アップロード • テスト実行 • ログ確認

Slide 23

Slide 23 text

でも、お高いんでしょう・・・? 無料利用枠 • 基本料金 1 SIM 分 • リクエスト 10,000 回分 くわしくは SORACOM Orbit のご利用料金 https://soracom.jp/services/orbit/price/

Slide 24

Slide 24 text

API Sandbox も Orbit をサポート /v1/soralets 以下の API を実行できるようになりました • Soralet のアップロード • テスト実行 • ログの確認 etc. … New!

Slide 25

Slide 25 text

サンプルプログラム • 各言語用の SDK 内に同梱 • SORACOM IoT DIY レシピ • Meitrack T366による車両トラッキング https://soracom.github.io/iot-recipes/vehicle-tracking-by-meitrack-t366 • SORACOM Summer Challenge 2020 • 1万円で作る SORACOM LTE-M Button Plusで冷蔵庫を用いた見守りシステム https://qiita.com/reomaru7/items/8276ab4dee1c8bdc1183 • Qiita • SoracomOrbit で検索

Slide 26

Slide 26 text

Orbit でできることのほんの一例 • デバイスからは CSV を送信、JSON に変換 • 入出力のフォーマットは自由 • LTE-M button の Click type を type 別にカウント • デバイスからの GPS 座標と、タグに設定しておいた中心座標から距離を 計算しジオフェンシング • SIM のタグから設定値を読み込んで処理に利用可 • デバイスやサーバーサイドのバージョン違いを吸収 :

Slide 27

Slide 27 text

無限大の可能性 感じていただけましたか? 特に Harvest / Lagoon との相性が最高なので オススメです! みなさまからのフィードバックお待ちしております!

Slide 28

Slide 28 text

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