2016-12-07 5 views
2

MQTT über Websocket ProtokollAnschluss ibm Bluemix watson IoT mit erlang MQTT websocket Client auf Port 443

Ich versuche IBM Watson IoT-Dienst erlang MQTT WebSockets auf Port 443 (SSL/TLS) zu verbinden. Aber ich erhielt einen Fehler.

Die IBM DOS (https://console.ng.bluemix.net/docs/services/IoT/iotplatform_task.html#devices) sagt, dass es Websocket-Verbindung unterstützt. Es gibt keine Erwähnung der Websocket-Nutzung (Tutorials/Guide) außer normalen TCP-Verbindung (die ich erfolgreich angeschlossen wurde).

Ich möchte eine einfache Schritt für Schritt doc wie das Amazon IoT (http://docs.aws.amazon.com/iot/latest/developerguide/protocols.html) für Websocket-Konnektivität als Client-Anwendung.

Ich denke über die URL/URI, die ich denke, könnte unpassend sein, dass ws (s): // Host: Port/Pfad. Derzeit gebe ich es als wss: //fybr123mqtt.mybluemix.net (wo fybr123mqtt ist mein Anwendungsname). Was ist der Host, Port & Pfad für die Verbindung zu IBM Watson IoT über mqtt? Und wie andere Parameter wie 'client_id', 'Benutzername', 'Passwort', 'Authentifizierungs-Token' zusammen mit dem Host senden? Empfehlen Sie auch einen Erlang-WebSocket-Client für mqtt und erwähnen Sie auch einfache Schritte, um auf den Websocket-Server zuzugreifen. Erlang mqtt client (emqttc) unterstützt Websocket nicht.

+0

Die https REST API ist auf 443 ... Ich sehe nicht, wie es für Sockets auch sein könnte. – amadain

+0

Es ist 443 und Protokoll ist wss. wss: //OrgID.messaging.internetofthings.ibmcloud.com: 443. Für den Java-Client gibt es eine "Websockets = True" -Einstellung, aber ich habe Schwierigkeiten, es zum Laufen zu bringen. Ich werde versuchen, später noch einmal nachzusehen. – amadain

Antwort

0

Der Verbindungsprozess deutlich hier beschrieben wird:
console.ng.bluemix.net/docs/services/IoT/devices/mqtt.html

Die URL, die Sie nicht richtig erwähnt wird: WSS: // fybr123mqtt.mybluemix.net

auf Schritt 2: Anschließen der Geräte an Watson IoT-Plattform von console.ng.bluemix.net/docs/services/IoT/iotplatform_task.html#devices sagt er folgendes:

Die folgenden Informationen werden beim Verbinden benötigt Ihr Gerät:

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. 

Die Org_ID, device_type, device_id und Passwort werden zur Verfügung gestellt, nachdem Sie vollständig Schritt 1: Registrieren Sie Ihr Gerät mit Watson IoT Plattform

Hinweis: Die clienID ist Device Identifier: d: org_id: device_type: device_id

Ich habe erfolgreich mqttfx, eclipse paho, mosquitto und es gibt viele andere kostenlose mqtt-Clients, die Sie verwenden können.

Es gibt auch gute Tutorials (Rezepte), die Ihnen helfen können, mit den Clientbibliotheken von IBM in Java, Python usw. zu beginnen. Als Beispiele können Sie sich ansehen: "ibm.com/developerworks/cloud/library/cl-mqtt-bluemix-iot-knoten-rot-app/"

Hier ist ein Beispiel für Gateway-Gerätetyp mit Mosquitto " developer.ibm.com/recipes/tutorials/using-mosquitto-asa- Gateway-for-Watson-Iot/"

Lässt die Client-Knoten von NodeRed nicht vergessen, die sehr einfach zu bedienen sind.

Lassen Sie mich wissen, wenn Sie noch Hilfe zu diesem Thema benötigen.

Danke, Daniel

+0

Haben Sie eine Verbindung über Websocket oder TCP hergestellt? Ich denke, du antwortest für normale TCP-Verbindung. Das Öffnen der Verbindung muss mit dem Protokoll ws (s): // HOST für den Websocket-Client beginnen. Außerdem wird ein Endpunkt benötigt, den ich nicht finde ... wie zB. ** wss: // HOST: 443/PATH/TO/PATH **. –

+0

wss funktioniert auch. siehe unten Kommentar von @amadain. Betreffend Themen veröffentlichen Geräte zu den Ereignisthemen im folgenden Format: iot-2/evt/ereignis_id/fmt/format_string ** event_id **: ID des Ereignisses, z. B. Status. Die Ereignis-ID kann eine beliebige Zeichenfolge sein, die in MQTT gültig ist. Wenn Platzhalter nicht verwendet werden, müssen Abonnentenanwendungen diese Zeichenfolge in ihrem Abonnementthema verwenden, um die Ereignisse zu erhalten, die zu ihrem Thema veröffentlicht werden. ** format_string **: Zeichenfolge, die den Inhaltstyp der Nachrichtennutzlast definiert, sodass der Empfänger der Nachricht bestimmen kann, wie der Inhalt analysiert wird. – idan

0

Url: wss://6DigitOrgID.messaging.internetofthings.ibmcloud.com:8883

Es funktioniert gut NodeJS verwenden. Ich gebe keinen weiteren Endpunkt an.

[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 

Dies wird die Probe client code mit "enforce-ws" : true

ich diesen Client geändert und getestet mit 443 auch basierend aus:

[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 

Ich weiß nicht von irgendwelchen Proben für erlang.

+0

Danke amadain für die Antwort. Wie Sie gesagt haben, müssen wir keinen weiteren Endpunkt angeben. Wie sollen wir 'client_id', 'username', 'password' senden? Müssen wir all diese Details in den HEADERS angeben? –

+0

Ich weiß nichts über Erlang. Für Nodejs ist es dasselbe wie die Verbindung über MQT, nur das Protokoll ändert sich in WSS. Sie können sich den Beispielcode von nodejs ansehen. – amadain

Verwandte Themen