2

Bluemix for IoT で Node-RED を使用しています。

関数ノード内の個々の情報 (cmdmsg や tempr など) を解析して、フロー内の他のノードで使用できるようにするにはどうすればよいですか? しようとするとエラーが発生します(以下を参照)

完全なメッセージ オブジェクトを表示するように設定したときに「デバッグ」ノードに表示される JSON 完全なメッセージ オブジェクトを (ノードの IoT から) 受信しています。下のオブジェクトを参照してください。

JSON が正しくフォーマットされているように見えます。

関数ノードに以下を入れてみたのですが、「TypeError: Cannot read property 'tempr' of undefined」というエラーが出ます。

関数パラメータは次のとおりです。 return {payload:msg.payload.d.tempr};

ここにメッセージオブジェクトがあります

{
   "topic": "iot-2/type/Arduino-tempsensor/id/FFFFFFFFFFFF/evt/status/fmt/json", 
   "payload": "{\n\"d\": {\n\"myName\": \"Arduino CF\",\n\"cmdmsg\": \"Weekly\",\n\"tempr\": -3,\n}\n}", 
   "deviceId": "FFFFFFFFFFFF", 
   "deviceType": "Arduino-tempsensor", 
   "eventType": "status", 
   "format": "json", 
   "_msgid": "ffffffff.55555" 
}

注: デバイス ID (MAC アドレス) と msgid を難読化しました

データを解析する方法と、なぜエラーが発生するのかについてのアイデアはありますか?

4

2 に答える 2

4

申し訳ありませんが、JSON ペイロードは完全に台無しです。次のようになります:ペイロードに{"d": {"myName": "Arduino CF","cmdmsg": "Weekly","tempr": -3}} は何も表示されないはず\です\n。クライアント側からはエスケープ文字のように見えます。また、tempr 値の後の最後のコンマは、有効な JSON には存在しないと考えています。

私は Arduino の専門家ではありませんが、Raspberry Pi と Mosquitto クライアントを試してみました。これは、イベントを IoTF に正常に送信する方法です。 mosquitto_pub -h <org>.messaging.internetofthings.ibmcloud.com -p 1883 -u "use-token-auth" -P "<token>" -i d:<org>:raspi:raspi2 -t iot-2/evt/message/fmt/json -m {"d":{"text":"Hello World"}}

ペイロードが正しい JSON の場合、ステートメントreturn {payload:msg.payload.d.tempr};は機能します。

これを見たことがありますか: http://www.ibm.com/developerworks/cloud/library/cl-bluemix-arduino-iot2/

于 2015-10-07T07:15:15.413 に答える