以前、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
------------------------------