技術情報その2:enebularによるLoRaWANデータの処理

こんにちは!実行委員会の竹之下です。

にわかに本ブログへの投稿も増えてきて、いよいよ開催間近という雰囲気が盛り上がってきました。参加者の皆様は宿の確保はお済みでしょうか?

さて、技術情報第二回目は、LoRaWANを経由してSORACOM Beamから出てきたセンサデータを処理する部分について順を追って説明します。前回の記事でご紹介したベースシステムの全体像の中で、赤枠で囲った部分です。

SORACOM Beamの設定

まず最初は、LoRaWANから上がってきたデータを転送する部分の設定を行います。設定は、SORACOM User Consoleから行います。

転送設定を行うには、「SORACOM Air for LoRaWAN Getting Started」の手順に従って、デバイスをグループに所属させておく必要があります。下図は、SORACOM User Consoleの「LoRaデバイス管理ページ」です。デバイスIDは、LoRa通信モジュールに対応しています。例えばデバイスIDが"000b78fffe050764"のモジュールは、"lora-hackathon"グループに所属しています。

User ConsoleのLoRaグループ設定のページに移動すると、グループごとにBeamの設定ができるようになっています。例えば、下記では"https://lora-hackathon.herokuapp.com/red/lora"というURLにデータを転送するように設定されています。設定方法の詳細は、「LoRaWAN デバイス設定ガイド 応用編1:Beam を使ってデータを送信する」で説明されていますので、参照してください。今回のハッカソンでは、事前に設定しておきますのでご安心を!

データの受け口の作成

続いて、SORACOM Beamから出てきたデータを受け取る口を作ります。ウフルのenebularというサービスは、HTTPやTCP、MQTTといったプロトコルで送られてきたデータを受け取り、何某かの処理を行い、別のサービスへ転送することができるため、今回はこれを利用します。

enebularにログインすると、プロジェクト管理画面が表示されます。(2017年6月時点では無償で利用可能ですので、気軽にサインアップしてください!)

適当なプロジェクトを選択すると、そのプロジェクトのトップページが表示されます。この中で、Flowsというメニューを選択すると、フローベースドプログラミング(FBP)のエディタを開くことができます。
エディタは、OSSのNode-REDをベースに開発しています。そのため、Node-REDで利用可能な"ノード"と呼ばれる処理モジュールがenebularでも利用可能になっています。enebularでは、このノードをつないで、データ処理フローを作成します。例えば、SORACOM Beamから送られてきたデータを、デバッグログに出力するだけのフローは、下記のようなものになります。とてもシンプルですね。




”[post] /lora”と表示されているノードが、HTTPリクエストを受け付ける"HTTPノード"です。設定は、下記のようになります。Beamから送られてくるデータは、POSTメソッドになりますので、その点だけ注意してください。
デバッグノードから出力されるデータは、前回のブログでもご紹介したように、下記のような形式になっています。”data”の部分が、実際にLoRa通信モジュールに渡されたデータです。

{
    "data": "696e612d6861636b", 
    "date": "2017-04-27T02:27:31.278724", 
    "deveui": "xxxxxxxxxxxxxxx", 
    "gatewayData": [
        {
            "channel": 926400000, 
            "date": "2017-04-27T02:27:31.278724", 
            "gwid": "000b78fffeb000a1", 
            "rssi": -53, 
            "snr": 8.5
        }
      ]
}

データの変換処理

Beamから送られてくるデータをパースするには、"functionノード"を使います。functionノードには、任意の処理をNode.jsで記述することができます。
"hex2bin"という名称のfunctionノードの中身は、下記のようになっています。

enebularのFlowでは、各ノード間で受け渡されるデータは、全てmsg.payloadオブジェクトに格納されます。今回のfunctionノードでは、msg.payloadのdataメンバに格納された16進数文字列(hex)をBufferクラスに変換し、 msg.payloadオブジェクトに上書きしています。

Bufferオブジェクトはバイナリ配列ですので、例えば、BufferオブジェクトをtoString()メソッドで文字列に変換すれば、'ina-hack'という文字列を得ることができます。

msg.payload = Buffer.from(msg.payload.data, 'hex').toString();

データの転送先設定

最後に、SORACOM Beamから受け取ったデータを、別のサービスに転送する方法をご紹介します。enebularには、初期状態でeMailやTwitter、Slackにデータを送信するノードが用意されています。(下図左ペインのSocialノード群)

例えば、"Slackノード"では、msg.payloadに格納された文字列を、所定のSlackチャンネルに投稿します。hex2bin functionノードの処理でBuffer.from(msg.payload.data, 'hex').toString()まで実施した後、下記設定のSlackノードをつなげると、Slackに'ina-hack'という文字列が投稿されます。(事前に、対象のSlackチャンネルのWeb hookを有効化し、Web hook URLを取得しておいてください。)

とても簡単ですね。他にも、REST APIを提供しているサービスとの連携は、"HTTP Requsetノード"を使うことで実現できます。この方法については、Platioとの連携記事で説明されることでしょう!(投げっぱなし)

今回は、SORACOM Beamから出てきたLoRaWANのデータを、enebularでハンドリングするところまでをご説明しました。次回は、mbed OS上のセンサデータの取り扱いについて説明したいと思います。お楽しみに!

コメント

このブログの人気の投稿

参加者募集中!

enebuler X MotionBoard による、IoT リアルタイムモニタリング