IBM Bluemix IoT Topics/URL,Android 与 Node.js 不同,需要说明吗?

IBM Bluemix IoT Topics/URL, different for Android vs Node.js, clarification required?

我在 Bluemix 中使用 IoT 服务,并通过 Node.js 快速服务器和 Android 设备连接到它。

Android 应用程序基于 ibmiot 入门应用程序 (https://github.com/ibm-messaging/iot-starter-for-android)。这与:
URL: <org>.messaging.internetofthings.ibmcloud.com:1883
主题格式:iot-2/cmd/+/fmt/json
凭据:组织、deviceType、deviceId

express 服务器连接 npm ibmiotf 模块,版本 0.2.2。连接:
URL: <org>.messaging.internetofthings.ibmcloud.com:8883
主题格式:iot-2/type/<type>/id/<id>/cmd/<cmd>/fmt/json
凭据:组织、id(Bluemix space 名称?)、apiKey、apiToken

如果我尝试使用 Android 应用订阅第二种格式的主题,由于主题无效,我与服务断开连接。但是,npm 节点提供的对象 (ApplicationClient) 包含 publishDeviceCommand(deviceType, deviceId, commandType, format, data)
等函数 它以第二种格式发布到应用程序无法订阅的主题。这是因为版本不同,主题样式重新排版了吗?

那么,如何使用应用可以订阅的快速服务器发布到有效主题?这是否需要编写我自己的 publishDeviceCommand 版本?这是可行的,但似乎并不理想。它也是提供的 npm 模块中的一个功能,更改只会在本地而不是远程。

我可以通过服务仪表板查看应用程序以第一种格式发布到主题的事件,但我看不到快速 ApplicationClient 的相同内容 - 可能是因为它不是注册设备?

此处的区别在于,您使用 ibmiotf node.js 包作为应用程序连接到 Bluemix 中的 IoT 服务,而 Android 应用程序作为设备连接。

作为设备连接时,您使用格式为

的主题
iot-2/cmd/<command_id>/fmt/<format>

iot-2/evt/<event_id>/fmt/<format>

作为应用程序连接时,您使用的主题格式为

iot-2/type/<deviceType>/id/<deviceId>/cmd/<command_id>/fmt/<format>

iot-2/type/<deviceType>/id/<deviceId>/evt/<event_id>/fmt/<format>

这意味着应用程序可以发布和订阅您组织中的任何设备,但设备只能发布和订阅特定于它自己的主题。

如果 android 应用连接到 deviceType=Android,deviceID=myTestDevice 然后订阅

iot-2/cmd/updates/fmt/json

并且 node.js 应用程序发布到

iot-2/type/Android/id/myTestDevice/cmd/updates/fmt/json

然后设备会收到消息。

https://docs.internetofthings.ibmcloud.com/messaging/devices.html

https://docs.internetofthings.ibmcloud.com/messaging/applications.html