Help us understand the problem. What is going on with this article?

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

More than 3 years have 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などに変更して出力を確認します。(出力例は省略)
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした