我在Bluemix中使用IoT服务,并通过Node.js快速服务器和安卓设备连接到它。
安卓应用程序基于ibmiot应用程序(https://github.com/ibm-messaging/iot-starter-for-android)。这与以下方面有关:
网址:<org>.messaging.internetofthings.ibmcloud.com:1883
主题格式: iot-2/cmd/+/fmt/json
凭证:组织,deviceType,deviceId
快速服务器与npm ibmiotf模块连接,版本为0.2.2。连接:
网址:<org>.messaging.internetofthings.ibmcloud.com:8883
主题格式: iot-2/type/<type>/id/<id>/cmd/<cmd>/fmt/json
凭证:组织,id (蓝光空间名称?),apiKey,apiToken
如果我尝试使用Android应用程序订阅第二种格式的主题,由于该主题无效,我将与该服务断开连接。但是,npm节点提供的对象(ApplicationClient)包含publishDeviceCommand(deviceType、deviceId、commandType、format、data)等功能。
它发布到第二种格式的主题,应用程序无法订阅该主题。这是否是由于不同版本而导致的主题样式的重新格式化?
那么,如何使用应用程序可以订阅的快捷服务器发布到有效的主题呢?这需要编写我自己版本的publishDeviceCommand吗?这是可行的,但似乎并不理想。它也是提供的国家预防机制模块中的一个功能,更改只能是本地的,而不是远程的。
我可以通过服务仪表板查看应用程序以第一种格式发布到主题的事件,但是对于express ApplicationClient,我看不到同样的情况--可能是因为它不是注册的设备?
发布于 2016-01-19 14:47:09
这里的不同之处在于,您正在使用ibmiotf node.js包作为应用程序连接到Bluemix中的IoT服务,而安卓应用程序是作为设备连接的。
当连接为设备时,您将使用具有下列格式的主题
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/jsonnode.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
https://stackoverflow.com/questions/34861842
复制相似问题