2016-12-07 81 views
2

MQTT了WebSocket協議連接IBM bluemix使用沃森物聯網二郎MQTT WebSocket的客戶端上的端口443

我試圖使用端口二郎MQTT的WebSockets 443(SSL/TLS)連接IBM沃森物聯網服務。但是,我收到錯誤。

IBM的DOS(https://console.ng.bluemix.net/docs/services/IoT/iotplatform_task.html#devices)說,它支持WebSocket連接。沒有提到websocket的使用(教程/指南),除了正常的tcp連接(我在獲取連接時取得了成功)。

我想通過例如Amazon的IoT(http://docs.aws.amazon.com/iot/latest/developerguide/protocols.html)步驟爲DOC的WebSocket連接作爲客戶端應用程序的簡單步驟。

我正在弄清楚我認爲可能不合適的URL/URI,即ws(s):// host:port/path。 目前,我給它WSS://fybr123mqtt.mybluemix.net (其中fybr123mqtt是我的應用程序的名稱)。 什麼是通過MQTT連接到IBM沃森物聯網的主機,端口&路徑? 以及如何發送其他參數如「CLIENT_ID」,「用戶名」,「密碼」,「認證令牌」與HOST一起? 另外,爲mqtt建議一些erlang websocket客戶端,並提及訪問websocket服務器的簡單步驟。 Erlang mqtt客戶端(emqttc)不支持websocket。

+0

https REST API在443上......我不明白它也可能是套接字。 – amadain

+0

它是443和協議是wss。 WSS://OrgID.messaging.internetofthings.ibmcloud.com:443。對於java客戶端來說,有一個'Websockets = true'的設置,但是我無法使它工作。我會盡量再看看。 – amadain

回答

0

連接過程清楚地描述如下:
console.ng.bluemix.net/docs/services/IoT/devices/mqtt.html

,你提到的網址是不正確:WSS:// fybr123mqtt.mybluemix.net

步驟2: console.ng.bluemix.net/docs/services/IoT/iotplatform_task.html#devices連接你的設備沃森物聯網平臺,它說以下內容:

連接時需要以下信息您的設備:

URL: org_id.messaging.internetofthings.ibmcloud.com 
Where org_id is the ID of your Watson IoT Platform organization. 
Port: 
    1883 
    8883 (encrypted) 
    443 (websockets) 
Device identifier: d:org_id:device_type:device_id 
This combination of parameters uniquely identifies your device. 
Username: use-token-auth 
This value indicates that you are using token authorization. 
Password: Authentication token 
This value is the unique token that you defined or that was assigned to your device when you registered it. 

的org_id,提供DEVICE_TYPE,DEVICE_ID和密碼後,您完全第1步:沃森物聯網平臺註冊您的設備

注:clienID是設備標識符:d: org_id:device_type:device_id

我成功地使用了mqttfx,eclipse paho,mosquitto,並且還有很多其他免費的mqtt客戶端可以使用。

此外,還有很多很好的教程(配方),可以幫助您使用Java,Pyhton等IBM客戶端庫獲得首發。作爲示例,您可以看看: 「ibm.com/developerworks/cloud/library/CL-MQTT-bluemix-IOT節點 - 紅 - 應用程序/ 「

下面是用於與mosquitto 網關設備類型的示例」 developer.ibm.com/recipes/tutorials/using-mosquitto-as-a-網關爲沃森 - IOT /」

讓我們不要忘記從NodeRed客戶端節點,是非常容易使用。

讓我知道你是否仍然需要這方面的幫助。

感謝, 丹尼爾

+0

您是否通過websocket或tcp建立了連接?我認爲你正在回答正常的tcp連接。連接的開放必須以websocket客戶端的協議ws(s):// HOST開始。另外,終端是我所不需要的,比如,** wss:// HOST:443/PATH/TO/PATH **。 –

+0

wss也適用。請參閱下面的@amadain評論。參考主題,設備以格式發佈到事件主題: iot-2/evt/event_id/fmt/format_string ** event_id **:事件的ID,例如狀態。事件ID可以是在MQTT中有效的任何字符串。如果不使用通配符,訂閱者應用程序必須在其訂閱主題中使用此字符串來接收發布在其主題上的事件。 ** format_string **:定義消息有效內容的內容類型的字符串,以便消息的接收者可以確定如何解析內容。 – idan

0

網址:wss://6DigitOrgID.messaging.internetofthings.ibmcloud.com:8883

它使用的NodeJS工作正常。我沒有指定更多的端點。

[BaseClient:connect] Connecting to IoTF with host : wss://6DigitOrgID.messaging.internetofthings.ibmcloud.com:8883 
[DeviceClient:connect] DeviceClient Connected 
connected 
[DeviceClient:publish] Publishing to topic iot-2/evt/myevt/fmt/json with payload {"radiation":1} with QoS 2 

這是基於從樣品client code"enforce-ws" : true

我修改客戶端,並與443也測試:

[BaseClient:connect] Connecting to IoTF with host : wss://6DigitOrgID.messaging.internetofthings.ibmcloud.com:443 
[DeviceClient:connect] DeviceClient Connected 
connected 
[DeviceClient:publish] Publishing to topic iot-2/evt/myevt/fmt/json with payload {"radiation":1} with QoS 2 

我不知道二郎任何樣品。

+0

感謝amadain的回覆。正如你所說的,我們不需要指定更多的端點。我們應該如何發送'client_id','用戶名','密碼'?我們是否必須在標題內提供所有這些細節? –

+0

我對erlang一無所知。對於nodej而言,它與通過mqtt連接相同,只是將協議更改爲wss。您可以查看nodejs示例代碼。 – amadain