[SORACOMBeam]で[LoRaWAN]と[enebular]をつなげた話
※本記事はSORACOM リリース1周年記念ブログ 10/14 の分です。
お声をかけて下さりありがとうございます!
リレーブログの詳細はこちらからご覧ください。
先週まで半袖一枚で大丈夫でしたが、秋がダッシュで暦に追い付いてきたようですね。寒いのは嫌いですがぬくぬくするのは好きです。
初めまして、4月に新卒社員として入社いたしました、はらだと申します。初投稿になります。
文卒ということで、技術的なことは詳しくありませんが、頑張って書きます。
1. 概要
SORACOM UG Tokyo #4 / ソラコム1周年記念祭!!で話させていただいた「LoRaWANとiBeaconを素敵につないでみた」についての記事です。以下が使用スライドになります。
今回はそこの連携に着目し順を追って書いていきます。
最後にまとめの中で、SORACOM Beamが今回何をもたらしてくれていたのか、自分なりに解釈してみましたので記載しています。
※ソラコムのLoRaWANは10月14日時点で正式サービスが開始されておりません。
2. 今回つかったもの
- LoRaWAN ・・・ LPWAとして注目されている通信システム
- mbed ・・・ オンラインIDEで書ける手早いプロトタイピングを可能にするマイコン
参考リンク:マイコン評価ボード「mbed」、高速プロトタイピングがなぜ可能なのか - SORACOM Beam ・・・ IoT デバイスにかかる暗号化等の高負荷処理や接続先の設定を、クラウドにオフロードできるサービス(公式)
- enebular ・・・ あらゆるデバイスとクラウドサービスを “つなぐ” IoTのためのデータ連携プラットフォーム(公式)
- milkcocoa ・・・ IoTデバイス・スマートフォン・PC間で簡単にリアルタイムなデータのやり取りが出来るようになるクラウドプラットフォーム(公式)
- iBeacon ・・・ BLEを使用した建物内の位置情報がとれるもの。今回はiPhoneアプリを使用
参考リンク:iBeaconとは?
※詳しくは各リンクよりご覧ください。
・LoRaWANについて
LoRaは数キロ以上の広範囲まで行き届く電波変調方式でIoT界隈で注目されているものです。
LoRaWANはLoRaを含んだ通信システムを指します。
ソラコム、IoT/M2M通信に適したLPWAネットワーク(LoRaWAN)事業に参入 (IoT News)
LoRaに関するメモ(Qiita)
LPWAとして期待されるLoRaWANは何がすごいのか(Qiita)
詳しくは上記リンクをご覧ください。
今回触らせていただいて、どこまで電波が届くのかウフルのあるビル内で実験をしたのですが、屋内ゲートウェイでも1階から11階まで電波が行き届いていることを確認できました。LoRaすごいです!
3. 今回つくったもの
iBeacon情報をmbedで集め、ATコマンドでLoRaWANで送信。
SORACOM Beamでenebular、milkcocoaへ中継し、視覚化するというもの。
モジュールを建物のそれぞれの部屋に置いて、どこにモノがあるのかを管理するなどといった使い方をします。
・SORACOM Beamからmilkcocoaに格納するまで
mbedにてBeacon情報を送るプログラムを作り、MQTTサブスクライブにより期待通り動作していることを確認しました。
これをSORACOM Beamからenebularへ送信するように実装。
以前の古城さんの記事「enebular/Node-REDでSORACOM Airを操作する」等を参考にいたしました。
※enebular及びnode-REDについては「Node-RED事始め」をご覧ください。
まずは、SORACOM Beamが送信する先を作ります。
http in nodeをこのように設定します。URLは好きなものをいれてください。SORACOM Beamの転送先に入力するものになります。
リリース環境ではnodeのリンクをデプロイ横にある「 i 」から確認できます。
先ほど入力したURLを末尾に足して使用します。
そしてSORACOM Beamのユーザコンソール画面の設定に行き、
ホスト名に先ほどのNodeのURL、(https://ではじまるもの)
パスにhttp in nodeで指定したURLを入力します。(/hoge のもの)
完了です。すっごく簡単です!
SORACOM Beamがすごすぎてこの日は定時前に帰れました。ありがとうございます!!
Funnelも試してみたいですね!
enebularの画面に戻り、http response node及びjson nodeをつなげて、msgを見てみると、
(どこまで隠せばいいのかわからず墨塗り教科書に)
生データとしてこんな感じで来ました。(画面右)
※なぜか2回ずつデータが来ていました。まだ解明されていない謎です。
これだと無駄なデータが多いので、必要なものだけ抽出してmilkcocoaに格納しようと思います。
加えて「16進数のデータがASCII変換されている」、「時間がUTCになっている」という二つの課題が見つかったので、抽出だけでなく変換もしたいです。
可能なんです。enebularならね。
json nodeのあとにfunction nodeをかませて、Java Scriptで記述していきます。
中のデータを変数に代入して、整えています。
ASCIIから16進数変換はデータを2文字ずつ切って頭に「%u00」を付ける関数を書きました。
ログを見てみると、、
うおお!きれいになってる!
UUIDが不自然な数字ですが、仕様です。mbed実装段階でこんなデータを送るようにしていました。
今度はこのデータをmilkcocoaに格納していきます。
ちゃちゃっと登録を済ませ、アプリリストの画面から「新しいアプリを作る」ボタンからアプリを作成します。
ダッシュボード画面に遷移し、API情報をゲットします。
ボタンから、新しいAPI KeyとAPI Secretを生成します。
これらに加えて概要の画面にあるidも使用します。
enebularの画面に戻り、milkcocoa nodeを先ほどのfunction nodeのあとに追加し、
各情報をコピペします。Data Storeで入力した先にデータが格納されます。
デプロイ後、milkcocoaのデータストアに先ほどの入力した文字列を入力してリストを表示すると、
このようにデータが入っていきます。
今回はここに入れる前にSwitch nodeなどを使い、さらにデータを修正いたしました。
このあとの視覚化は専門の方に頼んだので、私はよく存じておりません。
4. まとめ
今回びっくりしたのは、組んだプログラムをこうも簡単につなげることができるのかということでした。
中の仕組みもネットワークのことも何もわからない私でも、直感的に実装することができました。
・なんでSORACOM Beamを間に入れたのだろう
初めはLoRaWANを提供しているM2BのサーバーからMQTTサブスクライブを行ってデータを受信していました。(参考:MQTTについて詳しく知る)
しかしSORACOM Beamを経由するよう、上司に言われました。
(本来なら接続先によってBeamとFunnelを使い分けるようになります。)
なぜなんだろう。
不思議に思って調べてみました。だって、データのやりとりできていましたし・・・
調べた結果を自分なりにわかりやすくまとめてみました。
解釈にあたり、クラスメソッド株式会社Developers.IOの「SORACOM特集 – 特集カテゴリー」の記事を読ませていただきました。ありがとうございます。
LoRaは従来の数倍もの広範囲のデータ通信を可能にしますが、送信できるデータは1回に11バイトとなります。
このデータの中にセキュリティに関するデータやAWSやAzureに連携させるためのデータを付与させるのは非常に困難なことです。
LoRaゲートウェイから送られるデータがインターネットに流れる前にSORACOM Beamを中継させることにより、データをセキュアなものにしてくれます。
私が後で見てもわかりやすいように大好きなお寿司に例えてみました。
まず、LoRaからそのままデータを流している図になります。データがお寿司です。
このLoRa寿司では、誰もがお寿司を取ることができてしまいます。
しかも、誰かがマグロに蜂蜜をかけちゃうなんていういたずらも可能です。
LoRaちゃんは広範囲にお寿司を流せますが、流した後のお寿司に関しては放任主義なのです。
しかし、ここにBeamくんが協力してくれます。
某回転すしチェーンのようにホコリから守ってくれるバリアと、専用の鍵を付与してくれます。
これで私だけがお寿司を独り占めできます。
このようにLoRaとSORACOMさんのサービスを使うことで、安全なお寿司データのやりとりができるということです。
また、データの受け先が変わってしまったとしても、SORACOMサービス側の設定を変えることで、対応することができます。
つまり、モジュール一つ一つの設定を変える必要がないということですね。
今後LoRaWANが商用としてリリースされても、簡単にSORACOM Beam及びFunnelにより、柔軟でセキュアな通信が可能ですね。
また、弊社のenebular及びmilkcocoaはフリーで使うことができるので、ぜひ触ってみてくださいね!
それでは失礼いたします。
はらだ