IBMIOTF/BlueMix 发布命令语法

IBMIOTF/BlueMix Publish Command Syntax

我正在尝试 assemble IBM Bluemix/Internet of Things 的小型概念验证系统。目前这包括 Raspberry Pi 将事件提供给基于云的应用程序,该应用程序目前将这些事件存储起来,并定期尝试使用以下代码块发送命令:

def sendCmd(command, payload, device="raspberrypi" ):
    deviceId = #Fixed value
    global cmdCount
    client.publishCommand("raspberrypi", deviceId, str(command), "json", payload)
    print "Sending '%s' cmd, payload '%s' to device %s" % (command, payload, deviceId)
    cmdCount = cmdCount + 1

就文档而言,这似乎是正确的语法,如 documentation :

所述
   client.connect()
   commandData={'rebootDelay' : 50}
   client.publishCommand(myDeviceType, myDeviceId, "reboot", "json", myData)

这段代码没有抛出异常,但是设备没有接收到任何命令;并且 cloud foundry 日志没有抛出任何错误。我缺少的语法有什么微妙之处吗?

这个问题归结为在 Raspberry Pi 上实例化了错误的 class。我有一个 ibmiotf.application 的实例,它向变量 self.client.commandCallback 注册了一个函数。但是似乎没有任何东西触发回调。

一旦我使用 ibmiotf.device 导入而不是 ibmiotf.application 实例化设备,命令回调开始被称为。这需要进行一些小的更改,以支持略有不同的函数调用,但在尝试 运行 代码时,它们是相当不言自明的。

设备 Class 控制从单元发布的事件,并确定如何处理来自上游的命令。而应用程序 Class 处理事件的接收和命令的发出。