Watson IoT Platform - Node-RED - msg.payloadについて

  • 2
    Like
  • 0
    Comment
More than 1 year has passed since last update.

初めてWatson IoT Platformを使ってみよう、というかたのためのガイドです。
Watson IoT Platformを使ってみるでIoTアプリを準備しました。

msg.payloadの確認

  • Node-REDではノード間をmsgオブジェクトが受け渡されます。
  • このmsgオブジェクトのpayloadというプロパティにデータが保持されてノード間を伝搬されていきます。
  • 下記のフローをNode-REDのフローをコピーする方法を参照してコピペします。
msg.payloadを確認
[{"id":"4d54ab3a.4f00a4","type":"debug","z":"ff1028b2.e29428","name":"","active":true,"console":"false","complete":"payload","x":490,"y":320,"wires":[]},{"id":"563a7a92.68a924","type":"inject","z":"ff1028b2.e29428","name":"","topic":"","payload":"abc","payloadType":"str","repeat":"","crontab":"","once":false,"x":110,"y":280,"wires":[["effe5529.2a07a","4d54ab3a.4f00a4"]]},{"id":"effe5529.2a07a","type":"debug","z":"ff1028b2.e29428","name":"","active":false,"console":"false","complete":"true","x":470,"y":280,"wires":[]}]

スクリーンショット 2016-05-21 16.42.02.png

  • injectノードから「abc」という文字列を送出すると、この文字列がmsgオブジェクトのpayloadプロパティに格納されて伝搬されていきます。
  • 一つめのDebugノードでmsgオブジェクト全体を出力してみます。 スクリーンショット 2016-05-21 16.54.08.png

  整形すると以下のようになります。

msgオブジェクトの内容
{
    "topic": "",
    "payload": "abc",
    "_msgid": "b0a8c6ba.4f5738"
}
  • 二つめのDebugノードでmsgオブジェクトのpayloadプロパティを出力してみます。このmsg.payloadの出力はDebugノードのデフォルトです。

スクリーンショット 2016-05-21 16.54.36.png

payloadプロパティには「abc」という文字列だけが格納されていた事がわかります。

msg.payloadを更新

msg.payloadを更新
[{"id":"99234900.4e34a","type":"debug","z":"ff1028b2.e29428","name":"","active":true,"console":"false","complete":"payload","x":492,"y":380,"wires":[]},{"id":"cb6e2d7b.0e7148","type":"function","z":"ff1028b2.e29428","name":"payloadを更新","func":"msg.payload = {\n    \"data1\": \"data1\",\n    \"data2\": \"data2\"\n};\nreturn msg;","outputs":1,"noerr":0,"x":300,"y":380,"wires":[["99234900.4e34a"]]},{"id":"b3f5fd3a.887fe","type":"inject","z":"ff1028b2.e29428","name":"","topic":"","payload":"abc","payloadType":"str","repeat":"","crontab":"","once":false,"x":110,"y":380,"wires":[["cb6e2d7b.0e7148"]]}]

スクリーンショット 2016-05-21 16.45.08.png

  • injectノードからは「abc」という文字列がmsg.payloadに格納されて送出されます。
  • functionノードの内容は下記のとおりです。
functionノードでmsg.payloadを更新
msg.payload = {
    "data1": "data1",
    "data2": "data2"
};
return msg;
  • Debug出力でmsg.payloadが更新されている事を確認します。 スクリーンショット 2016-05-21 17.17.13.png

  整形すると以下のようになります。

{
    "data1": "data1",
    "data2": "data2"
}

新しいプロパティを追加

msgに追加
[{"id":"6c56095a.d4f21","type":"debug","z":"ff1028b2.e29428","name":"","active":false,"console":"false","complete":"other","x":480,"y":520,"wires":[]},{"id":"49399aca.ba5954","type":"function","z":"ff1028b2.e29428","name":"msg.other","func":"msg.other = \"other value\";\nreturn msg;","outputs":1,"noerr":0,"x":280,"y":440,"wires":[["bc0ea527.d53b58","93741d6b.4130f","6c56095a.d4f21"]]},{"id":"bc0ea527.d53b58","type":"debug","z":"ff1028b2.e29428","name":"","active":true,"console":"false","complete":"true","x":470,"y":440,"wires":[]},{"id":"1a85b5c6.4069aa","type":"inject","z":"ff1028b2.e29428","name":"","topic":"","payload":"abc","payloadType":"str","repeat":"","crontab":"","once":false,"x":110,"y":440,"wires":[["49399aca.ba5954"]]},{"id":"93741d6b.4130f","type":"debug","z":"ff1028b2.e29428","name":"","active":false,"console":"false","complete":"payload","x":490,"y":480,"wires":[]}]

スクリーンショット 2016-05-21 16.43.02.png

  • injectノードからは「abc」という文字列がmsg.payloadに格納されて送出されます。
  • functionノードの内容は下記のとおりです。
functionノードでotherプロパティを追加
msg.other = "other value";
return msg;
  • 一つめのDebug出力でmsgオブジェクトにpayloadプロパティとは別に、新しくotherプロパティが追加されている事を確認します。

スクリーンショット 2016-05-21 17.26.34.png

  整形すると以下のようになります。

{
    "topic": "",
    "payload": "abc",
    "_msgid": "aee69afc.511968",
    "other": "other value"
}
  • 二つめのDebug出力でpayloadプロパティの内容は変更されていない(「abc」)ことを確認し、三つめのDebug出力で新たに追加されたotherプロパティの内容を確認します。

スクリーンショット 2016-05-21 17.29.26.png

  • この三つめのDebugノードは、Outputのmessage propertyの設定でotherプロパティを指定して出力させています。

スクリーンショット 2016-05-21 17.32.29.png

msgを更新

msgを更新
[{"id":"ac3dbc0.454e4c8","type":"debug","z":"ff1028b2.e29428","name":"","active":true,"console":"false","complete":"true","x":470,"y":580,"wires":[]},{"id":"ca92890d.f2d3d8","type":"function","z":"ff1028b2.e29428","name":"msgを更新","func":"msg.other = \"other value\";\nmsg.payload = {\n    \"data1\": \"data1\",\n    \"data2\": \"data2\"\n};\nreturn msg;","outputs":1,"noerr":0,"x":290,"y":580,"wires":[["ac3dbc0.454e4c8"]]},{"id":"a2530279.d6c85","type":"inject","z":"ff1028b2.e29428","name":"","topic":"","payload":"abc","payloadType":"str","repeat":"","crontab":"","once":false,"x":110,"y":580,"wires":[["ca92890d.f2d3d8"]]}]

スクリーンショット 2016-05-21 16.45.30.png

  • functionノードの内容は下記のとおりです。
msgオブジェクトを更新
msg.other = "other value";
msg.payload = {
    "data1": "data1",
    "data2": "data2"
};
return msg;
  • Debug出力でmsgオブジェクトのpayloadプロパティの値が更新され、otherプロパティが追加されている事を確認します。

スクリーンショット 2016-05-21 17.39.14.png

  整形すると以下のようになります。

{
    "topic": "",
    "payload": {
        "data1": "data1",
        "data2": "data2"
    },
    "_msgid": "57b0c9b8.a84f38",
    "other": "other value"
}

IoTデータの確認

  • QuickstartからのIoTデータの内容を確認します。
  • IoTフローの先頭(左端)の青い「IBM IoT App In」から接続されている「device data」と書かれたDebugノードの出力を確認します。
    スクリーンショット 2016-05-21 17.43.38.png

  • Debugノードの出力は以下のようなイメージです。
    スクリーンショット 2016-05-21 17.44.14.png

  整形すると以下のようになります。

{
    "topic": "iot-2/type/iotqs-sensor/id/21cd03be6e36/evt/iotsensor/fmt/json",
    "payload": {
        "d": {
            "name": "21cd03be6e36",
            "temp": 16,
            "humidity": 77,
            "objectTemp": 24
        }
    },
    "deviceId": "21cd03be6e36",
    "deviceType": "iotqs-sensor",
    "eventType": "iotsensor",
    "format": "json",
    "_msgid": "9f9ad429.606528"
}
  • msg.payloadの下のdの下にセンサーデータが格納されていることがわかります。
  • DebugノードのOutput出力の設定をpayload.dpayload.d.tempなどに変更して出力を確認します。(出力例は省略)