モチログ

はてなでのブログ

Intel Edison + Node-RED でTI SensorTagのデータをAT&T M2Xに投稿する

前回の記事で力尽きたので、今回はその続きです。記事の大半をメモ用の口調で書いているのに途中で気づいたので、そのまま通しています。

EdisonでTI SensorTagのBluetooth UUIDを調べる

hcitool lescsanを打って、SensorTagの右サイドにある電源ボタンを押すと、下記の様に検出される。

root@edison:~# hcitool lescan
LE Scan ...
XX:XX:XX:XX:XX:XX (unknown)
XX:XX:XX:XX:XX:XX CC2650 SensorTag

XX:XX:XX:XX:XX:XXの部分がUUIDになる。これをメモしておく。コマンドを終了するのはCtrl-CでOK。

Node-REDでSensorTagのFlowを作成

http://EdisonのIPアドレス:1880 でWebブラウザからアクセスする。 左のバーに、各種機能毎にNode(と呼ぶ?)があるので、それの下の方にあるsensorTagをドラッグして真ん中のキャンバスにドロップする。 さらに上のほうにある、debugもドラッグドロップする。 それから、ドロップしたsensorTagをダブルクリックする。 ここで、メモしておいたSensorTagのUUIDをペーストする。 使っているSensorTagがCC2650の場合、明るさも取得できるので、Luminosityのチェックも入れると良い。 ここまでの作業をした物が下記画像になる。

nrpic1

debugの設定

次にドロップしたdebugをダブルクリックし、OutputをComplete msg Objectに変更する。 そして、sensorTagの右とdebugの左をドラッグして線をつなぐ。右上で赤くなっているDeployをクリックして変更を適応させる。 右側のバーにある、debugタブをクリックすると、ズラーっと情報が出てくると思う。 情報を止めるにはdebugの右側のベロをクリックする。 とりあえず下記画像の感じ。

nr2

debugの情報

右のDebugに出ている情報がSensorTagから来ている情報で、見る感じ、書くセンサーデータ毎にmsgのデータが飛んできている。例としてHumidityのmsgは下記。温度と湿度の情報が格納されている。

{ "topic": "sensorTag/humidity", "payload": { "temperature": 20.9, "humidity": 22.3 }, "_msgid": "a75f2cf4.58a0d" }

M2Xに投稿するFlowの作成

今回はこの温度データをAT&TのM2Xに送るフローを作成する。ちなみに、事前にM2Xのアカウントを作成し、新規Deviceの作成、温度用のstreamの作成ができている事とする。 新たに、真ん中のキャンバスにdelay, function, http request, debug(2つめ)をドラッグ&ドロップし、上記順番につないでいく。 delaysensorTagfunctionの間に置くのは、sensorTagから流れてくる情報が多いので、それを間引くため。

functionの中身

functionをダブルクリックし、中身を下記内容にする。 api_key, dev_id, stream_nameを自分の環境に合わせて変更する。

if (msg.topic == "sensorTag/humidity"){
    var api_key = "your M2X api key";
    var dev_id = "your M2X device id";
    var stream_name = "your device stream id";

    var dev_url = "http://api-m2x.att.com/v2/devices/";
    var stream = "/streams/" + stream_name + "/value";

    var data = {"value": msg.payload.temperature};

    var msg = {
        "method" : "PUT",
        "url" : dev_url + dev_id + stream,
        "headers" : {
            "Content-Type": "application/json",
            "X-M2X-KEY": api_key
        },
        "payload" : JSON.stringify(data)
    };

    return msg;
}

画像は下記のようになる。
nr3

http requestの中身

ダブルクリックして、Methodを`set by msg.method`に変更する。 画像は下記。 nr4

debug(2つめ)の中身

1つめと同じくOutputをcomplete msg objectにする。 1つめのdebugのベロをクリックしてデバッグメッセージの出力をoffにしておく。

いざ送信

右上の赤いDeployをクリックして送る。右のDeployで出てくる情報の中のstatusCodeが202になっていると成功。4XXになっていると失敗している。