2016-01-18 25 views
0

我在Bluemix中使用IoT服務,並使用Node.js express服務器和Android設備連接到它。對於Android vs Node.js,IBM Bluemix IoT主題/ URL有所不同,需要說明嗎?

Android應用程序基於ibmiot初學者應用程序(https://github.com/ibm-messaging/iot-starter-for-android)。這種連接着:
網址:<org> .messaging.internetofthings.ibmcloud.com:1883年
主題格式:IOT-2/CMD/+/FMT/JSON
憑據:組織,設備類型,設備ID

的express服務器連接到npm ibmiotf模塊,版本0.2.2。
URL:<org> .messaging.internetofthings.ibmcloud.com:8883
主題格式:與連接IOT-2 /類型/ <type>/ID/<id>/CMD/<cmd>/FMT/JSON
憑證:組織,id(Bluemix空間名稱?),apiKey,apiToken

如果我嘗試使用Android應用程序訂閱第二種格式的主題,由於該主題無效,我與服務斷開連接。但是,npm節點中提供的對象(ApplicationClient)包含發佈到第二種格式的主題的函數,如publishDeviceCommand(deviceType,deviceId,commandType,格式,數據)
,該主題以應用程序無法訂閱的第二種格式發佈。這是由於不同版本的主題樣式重新格式化?

那麼,我該如何發佈到應用程序可以訂閱的快遞服務器的有效主題?這是否需要編寫我自己的publishDeviceCommand版本?這是可行的,但似乎並不理想。它也是提供的npm模塊中的一個功能,更改只會在本地而不是遠程。

我可以查看應用程序通過服務儀表板以第一種格式發佈主題的事件,但對於表達ApplicationClient,我看不到相同的情況 - 可能是因爲它不是註冊設備?

+0

你連接的Android設備,而無需指定一個組織?你能否確認你是否作爲註冊設備連接?例如:<組織ID> .messaging.internetofthings.ibmcloud.com – ValerieLampkin

+0

我已將更多信息添加到原始問題,但我爲這兩個連接指定了相同的組織結構。 – Jake

回答

2

這裏的區別在於,您正在使用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應用與設備類型=機器人,設備ID = myTestDevice連接,然後預訂

iot-2/cmd/updates/fmt/json 

和節點。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

+0

完美地工作,謝謝。 最後一個問題,當我發佈到帶有fmt/json的主題並傳遞JSON對象作爲消息時,我被告知消息必須是字符串。我可以通過調用JSON.stringify(object)來做到這一點。這是做這件事的正確方法嗎? – Jake

+0

是的,這將是正確的做法。 –

+0

MQTT客戶端實際上並未使用主題字符串中指定的格式。 '/ fmt/json'的用途是: 1.可用性。您在您的應用程序中知道,您期望收到的關於此主題的數據應該看起來像給定的格式。 2.物聯網歷史數據。 Bluemix中的IoT服務可訪問您設備的歷史數據。發佈到具有'/ fmt/json'主題的消息存儲在歷史數據中。 https://docs.internetofthings.ibmcloud.com/reference/concepts.html#/historical-event-storage#historical-event-storage –