I have a Node-RED application that is bound to an IOT Foundation (iotf) service. I can receive events from devices and handle them appropriately.
However, I am now interested in sending commands back to my devices and am having some problems. Nothing is showing up at the device, but by creating an IOTF in node, I can confirm that the command is passing through iotf.
I can definitely get commands to pass through iotf using pure python, as the follow code works well:
Client code:
#!/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()
Application code:
#!/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
Whenever I run the application code, I see the following output:
root@raspberrypi ~ # ./app.py
inside command callback
<ibmiotf.device.Command instance at 0x14e8490>
I have a Node-RED iotf output node configured as shown below, but when I trigger the flow, the command callback function doesn't trigger!
I'm thinking there maybe something wrong either with trying to use a timestamp trigger to fire the command, or with the way I've configured the output node itself -- any suggestions or advice would be appreciated!
A simple test to check if the commands are reaching IBM IoT Foundation is - developing another flow having an IoT App In node which subscribes to the commands. I am attaching the Node-RED flow for the same here
It would appear this way in the workspace.
After you have added this flow, you can test the device command publishing from the same workspace.
Can you please try this? Since you would now have 2 debug nodes, you should be able to see the same timetamp output twice. I have tried the same flow, with the same details (except the organization) and it works fine.
Thanks and Regards
Amit M Mangalvedkar