3

IOT Foundation (iotf) サービスにバインドされた Node-RED アプリケーションがあります。デバイスからイベントを受信し、適切に処理できます。

ただし、コマンドをデバイスに送り返すことに関心があり、いくつかの問題があります。デバイスには何も表示されていませんが、ノードでIOTFを作成することで、コマンドがiotfを通過していることを確認できます。

次のコードがうまく機能するため、純粋なpythonを使用してiotfを通過するコマンドを確実に取得できます。

クライアントコード:

#!/usr/bin/python

import ibmiotf.device
from time import sleep

options = {
  "org": "cgmncc",
  "type": "table",
  "id": "b827eb764b7a",
  "auth-method": "token",
  "auth-token": "redacted"
}

def myCommandCallback(cmd):
  print('inside command callback')
  print cmd

def main():
  client = ibmiotf.device.Client(options)
  client.connect()
  client.commandCallback = myCommandCallback
  while True:
    sleep(1)

if __name__ == "__main__":
  main()

アプリケーション コード:

#!/usr/bin/python

import ibmiotf.application

options = {
  "org": "redacted",
  "id": "python app",
  "auth-method": "apikey",
  "auth-key": "redacted",
  "auth-token": "redacted"
}

try:
  client = ibmiotf.application.Client(options)
  client.connect()
  client.publishCommand('table', 'b827eb764b7a', 'test')
  client.disconnect()
except ibmiotf.ConnectionException as e:
  print e

アプリケーション コードを実行すると、次の出力が表示されます。

root@raspberrypi ~ # ./app.py 
inside command callback
<ibmiotf.device.Command instance at 0x14e8490>

以下に示すように Node-RED iotf 出力ノードを構成しましたが、フローをトリガーすると、コマンドのコールバック関数がトリガーされません!

ここに画像の説明を入力 ここに画像の説明を入力

タイムスタンプ トリガーを使用してコマンドを起動しようとしているか、出力ノード自体を構成した方法に何か問題があるのではないかと考えています。提案やアドバイスをいただければ幸いです。

4

1 に答える 1

2

コマンドが IBM IoT Foundation に到達しているかどうかを確認する簡単なテストは、コマンドにサブスクライブする IoT App In ノードを持つ別のフローを開発することです。ここに同じNode-REDフローを添付しています

[
{
    "id": "40560f8b.30693",
    "type": "ibmiot in",
    "authentication": "boundService",
    "apiKey": "",
    "inputType": "cmd",
    "deviceId": "b827eb764b7a",
    "applicationId": "",
    "deviceType": "table",
    "eventType": "",
    "commandType": "test",
    "format": "string",
    "name": "IBM IoT App In",
    "service": "registered",
    "allDevices": false,
    "allApplications": "",
    "allDeviceTypes": false,
    "allEvents": "",
    "allCommands": false,
    "allFormats": false,
    "x": 268,
    "y": 171,
    "z": "6bd610b9.7b40a",
    "wires": [
        [
            "2f9b9c00.8b7ba4"
        ]
    ]
},
{
    "id": "2f9b9c00.8b7ba4",
    "type": "debug",
    "name": "",
    "active": true,
    "console": "false",
    "complete": "false",
    "x": 493,
    "y": 195,
    "z": "6bd610b9.7b40a",
    "wires": []
}
]

ワークスペースではこのように表示されます。
ここに画像の説明を入力

このフローを追加したら、同じワークスペースからデバイス コマンドの発行をテストできます。
これを試してもらえますか?デバッグ ノードが 2 つあるため、同じ timetamp 出力が 2 回表示されるはずです。同じ詳細 (組織を除く) で同じフローを試しましたが、正常に動作します。

ありがとうござい
ました アミット・M・マンガルヴェドカル

于 2015-06-18T13:03:11.107 に答える