日本語フォーラム

last person joined: 3 days ago 

Arubaのソリューション、ネットワークマーケットに関する日本語ディスカッションフォーラム
Expand all | Collapse all

[IoT] Node-RED を使ってIoT Gatewayからのデータを簡単にデコード

This thread has been viewed 44 times
  • 1.  [IoT] Node-RED を使ってIoT Gatewayからのデータを簡単にデコード

    EMPLOYEE
    Posted Jun 10, 2021 01:08 AM
    以前、ArubaのAPはIoT Gatewayとして活用できると紹介しました。(AP as a IoT Platform!

    今回は、実際にAPをIoT Gatewayとして動作させたときに、どのようにAPからの情報を読み取ることができるのか、
    Node-REDを使った一例をご紹介します。

    APをIoT Gatewayとして設定した場合の簡単な構成イメージは以下のようになります。
    ArubaのAPの展開方法には、APだけのモデル(IAP)とコントローラ管理型の2つがあるので、APだけの場合はAPから、コントローラ管理型の場合はコントローラ(Mobility Controller)から外部のシステムに情報を送信します。
    APから外部のシステムとの連携には、主にNorthbound API (NB API) でIoTデバイスのステータスを伝えることが多く、
    このNB APIではHTTPやWeb Socketを使います。データはArubaのTelemetryデータとしてIoTデバイスのステータスなどを送信します。
    このTelemetryデータはそのままでは解読できないので、Protobufの定義ファイルをAruba Support Portalで公開しています。

    今回の検証環境では、Web Socketの情報を受け取るサーバ(上記の3rd Party System)をNode-REDで作ってみました。
    Node-REDは以前もこちらで紹介したのですが、ブラウザで簡単にプログラミングのようなものができるオープンソースソフトウェアで、NodejsベースなのでWebサーバ、Web Socketとは相性が良く、私もよく利用しています。
    さらに、Protobufの定義ファイル(protoファイル)を簡単に読み込むモジュールも容易されているので、
    Web SocketでTelemetryデータを受け取り、ParseしてJSON形式で出力するだけであれば、これだけの設定で完了します。
    それでは、もう少し具体的な設定を解説していきます。

    1. IAPの設定
    IAPのIPアドレスなどの初期設定は割愛します。IoT Gatewayに関する設定だけ解説します。
    IAPの初期設定はこちらをご参照ください。
    IoTの設定は、IoT Radio ProfileとIoT Transport Profileの2つだけです。
    IoT Radio Profile
    iot radio-profile custome_profile
     radio-mode ble​
    
    iot use-radio-profile custome_profile

    BLE or Zigbee どちらを利用するのか、モードを指定するだけです。
    EnOceanなど、APにUSBを挿入するモデルの場合はこの設定も不要になります。

    IoT Transport Profile

    iot transportProfile nodered
     endpointURL ws://192.168.19.150:1880/ws/enocean
     endpointType telemetry-websocket
     payloadContent serial-data
     endpointToken <<your_token>>
     transportInterval 15
    
    iot useTransportProfile nodered

    Transport Profile では、APが送るデータについてを設定します。
    URLで宛先のWeb Socketサーバを指定します。
    Node-REDでWebサーバを設定する時は、1880ポートをデフォルトで使っています。
    payloadContentは今回はEnOceanのデータを送る場合は、デバイスにあわせてserial-data/enocean-switches/enocean-sensorsのどれかを設定します。
    他にもいくつかあるので、IoTデバイスに合わせて設定してください。
    transportIntervalはそのまま送信間隔です。

    2. Node-REDの設定
    今回は私が知る限り、最も簡単にWeb Socketサーバを構築してprotoファイルでデコードする方法としてNode-REDを紹介します。
    Node-REDの構築手順自体はググって調べてみてください。
    Macbook, Ubuntu, AWS上で簡単に動作させることができます。
    Node-REDが動作している環境で、http://<server ip/fqdn>:1880/ にアクセスすると、Node-REDの設定画面にアクセスできます。

    Node-REDの設定画面


    左の列のnodeを組み合わせて、ノーコードでプログラミングが可能です。

    Web Socket の設定
    デフォルトで準備されている、"websocket in" のnodeを使います。


    設定は、パスを指定するだけです。このパスはIAPで指定したURLと一致させて下さい。


    protoファイルを使ったTelemetryデータのデコード
    ここは少しだけ工夫が必要ですが、ほんの少しなので安心して下さい。
    Node-REDはオープンソースなので、世界中の人が有志でnodeを自作して公開してくれています。
    protoファイルを使ったデコードも、標準のnodeには存在していませんが、
    こちらで公開されているnodeを使うだけで簡単にデコードできます。
    https://flows.nodered.org/node/node-red-contrib-protobuf

    上記nodeをインストールし、"decode" nodeの設定画面で、protoファイルを指定します。
    protoファイルはこちらから入手してください。ファイルのダウンロードにはASPのアカウントが必要です。
    ファイルをダウンロードしたら、Node-REDが稼働しているサーバの特定フォルダに全てアップロードします。
    指定するファイルは「aruba-iot-nb.proto」です。他のprotoファイルも同じフォルダにアップロードするようにして下さい。


    出力の表示
    これはすごく簡単です。標準の"debug" nodeを最後に接続するだけで、出力をデバック画面に表示してくれます。


    アウトプットの例は以下の様になります。
    jsonなので、この結果を元に、別のnodeを使って外部に通知したり、他のデバイスに何かアクションさせたりということも簡単にできます。

    上記の例ではEnOceanのSTM431Jを使ってみました。
    Payloadはbase64でエンコードされたまま表示されているので、
    もう一つnodeを挟んでHEXで表示した方が使いやすいと思います。

    APから送信するpayloadContentをiBeaconにすれば、iBeaconの情報も取れるので、この情報を元にプッシュ通知の仕組みも簡単に作ることができます。


    この次はEnOceanのスイッチを使って、もう少し具体的なデモを作ってみようと思っています。
    どういったデモが良いかアイデアあれば是非コメントお願いします!

    ------------------------------
    Keita Shimono,
    Aruba Japan SE Manager & Airheads Leader
    ------------------------------


  • 2.  RE: [IoT] Node-RED を使ってIoT Gatewayからのデータを簡単にデコード

    Posted Feb 17, 2022 10:37 AM
    はじめまして。中畑と申します。

    EnOceanのUSBをAPに接続し、EnOceanのスイッチを操作しNode-REDに送るテストをしていますがうまく動きません。

    問題の切り分けをしたいので、APから別サーバーで動かすNode-REDに正しくデータが送れているか確認したいのですが、APからWebSocketデータをテストで送る方法はありますでしょうか?

    お助けいただけると幸いです。


    宜しくおねがいします。

    ------------------------------
    Takahiro Nakahata
    SmartLight Co.,Ltd.
    ------------------------------



  • 3.  RE: [IoT] Node-RED を使ってIoT Gatewayからのデータを簡単にデコード

    EMPLOYEE
    Posted Feb 17, 2022 10:42 AM
    検証頂いてるんですね。ありがとうございます!

    WebSocketデータをテストで送る方法はありませんが、いくつかshow commandでご確認頂くことが可能です。
    以下のポイントを一度ご確認頂けますでしょうか。

    USBを認識しているかの確認
    # show ap debug usb-device-mgmt device all
    
    USB Device Table
    ----------------
    Device ID  Manufacturer  Product  Serial Number  Version  VendorID  ProductID  Revision  Class  Device  Flags  Relationship  Identifier  Up Time
    ---------  ------------  -------  -------------  -------  --------  ---------  --------  -----  ------  -----  ------------  ----------  -------
    No USB device.
    b8:3a:5a:c1:1e:62# sh ap debug usb-device-mgmt device all
    
    USB Device Table
    ----------------
    Device ID                         Manufacturer  Product              Serial Number  Version  VendorID  ProductID  Revision  Class  Device   Flags  Relationship  Identifier   Up Time
    ---------                         ------------  -------              -------------  -------  --------  ---------  --------  -----  ------   -----  ------------  ----------   -------
    109135dc13d6939fdfc39ae105f47916  EnOcean GmbH  EnOcean USB 400J DC  FT56UCEX       2.00     0403      6001       6.00      tty    ttyUSB0  nP     0000:ROOT     enocean.usb  02s
    -------------------
    Flags:
        n - device was notified, a - device is being added, r - device is being removed, c - device was changed
        P - authorized, A - authenticating, V - validating​


    USB Radioでメッセージを受信しているかの確認

    # show ap debug iot-radio-counters
    
    Radio Counters
    --------------
    Radio Information              NORDIC ONBOARD Internal BLE Zigbee
    -----------------              ----------------------------------
    Total Bytes Read From Device   5671523
    Total Read From Device         117904
    Total Failed Read From Device  0
    Total Bytes Written To Deivce  3593
    Total Write To Device          164
    Total Failed Write To Device   0
    Total Message Bytes Read       5671523
    Total Messages Read            112951
    Total Message Bytes Written    3593
    Total Messages Written         164
    -----------------
    Radio Counters
    --------------
    Radio Information             ENOCEAN USB External
    -----------------             ----------------------
    Total Bytes Read From Device  83
    Total Message Bytes Read      83
    Total Messages Read           5
    Total Message Bytes Written   0
    Total Messages Written        0
    -----------------


    WebSocket でメッセージを送信しているかの確認

    # show ap debug ble-relay iot-profile
    
    ConfigID                                : 1
    
    ---------------------------Profile[nodered]---------------------------
    
    serverURL                               : ws://192.168.19.150:1880/ws/enocean
    serverType                              : Telemetry Websocket
    deviceClassFilter                       : Serial Data
    reportingInterval                       : 15 second
    authentication-mode                     : none
    accessToken                             : aruba123
    rssiReporting                           : Average
    environmentType                         : office
    Server Connection State
    --------------------------
    TransportContext                        : Connection Established
    Last Data Update                        : 2022-02-18 00:35:32
    Last Send Time                          : 2022-02-18 00:35:41
    TransType                               : Websocket​


    ------------------------------
    Keita Shimono,
    Aruba Japan SE Manager & Airheads Leader
    ------------------------------



  • 4.  RE: [IoT] Node-RED を使ってIoT Gatewayからのデータを簡単にデコード

    Posted Feb 17, 2022 09:40 PM

    Shimono様

    ご解説ありがとうございます!
    結果的に無事にEnOceanのスイッチからの信号を外部サーバーのNode-REDで受信することができました。

    いただいた内容で確認したところ、「WebSocket でメッセージを送信しているかの確認」で
    "No IoT pofile found"となっておりました。

    https://iotconnector-docs.readthedocs.io/en/latest/setup-aruba-ap/

    こちらのドキュメントを参考にしてたのですが
    > configure terminal > commit apply
    をプロファイル作成とアクティベーションで2回やらなければならないところを1回しかやっていなかったことが、IoT Profileが有効になっていない原因でした。

    5年前にEnOceanのゲートウェイが入手できず、しょうがなくラズパイにUSBドングルをさして使っていましたが、APがEnOceanのゲートウェイになって、簡単に指定したところにデータが送れるというのは、本当に素晴らしくて感動して嬉しくて楽しくて震えています!

    本当に素晴らしい製品と、素晴らしいサポートをありがとうございます!


    ------------------------------
    Takahiro Nakahata
    ------------------------------



  • 5.  RE: [IoT] Node-RED を使ってIoT Gatewayからのデータを簡単にデコード

    EMPLOYEE
    Posted Feb 18, 2022 01:34 AM
    早速ご確認頂きありがとうございます。うまく動作したようで安心しました。
    IAPは設定の反映にcommit applyが必要となりますので、変更後は毎回実施下さい。

    EnOceanには疎いのですが、APでご不明な点があればお気軽にご連絡下さい。

    ------------------------------
    Keita Shimono,
    Aruba Japan SE Manager & Airheads Leader
    ------------------------------