Как подключить IBM Watson IOT с помощью javascript-клиента Paho MQTT?

Я пытаюсь подключить платформу IBM Watson IoT с помощью клиента Paho MQTT Javascript, как указано в приведенном ниже примере кода.

 
 var client = new Messaging.Client("myOqgId.messaging.internetofthings.ibmcloud.com", 8883, "myclientid_" + parseInt(Math.random() * 100, 10));

 //Gets  called if the websocket/mqtt connection gets disconnected for any reason
 client.onConnectionLost = function (responseObject) {
     //Depending on your scenario you could implement a reconnect logic here
     alert("connection lost: " + responseObject.errorMessage);
 };

 //Gets called whenever you receive a message for your subscriptions
 client.onMessageArrived = function (message) {
     //Do something with the push message you received
     $('#messages').append('<span>Topic: ' + message.destinationName + '  | ' + message.payloadString + '</span><br/>');
 };

 //Connect Options
 var options = {
     userName: API-Key here,
     password: Auth token here,
     timeout: 3,
     //Gets Called if the connection has sucessfully been established
     onSuccess: function () {
         alert("Connected");
     },
     //Gets Called if the connection could not be established
     onFailure: function (message) {
         alert("Connection failed: " + message.errorMessage);
     }
 };

 //Creates a new Messaging.Message Object and sends it to the HiveMQ MQTT Broker
 var publish = function (payload, topic, qos) {
     //Send your message (also possible to serialize it as JSON or protobuf or just use a string, no limitations)
     var message = new Messaging.Message(payload);
     message.destinationName = topic;
     message.qos = qos;
     client.send(message);
 }

Но подключиться не удалось. Я получаю эту ошибку: подключение WebSocket к 'ws: //myOrgIdXYZ.messaging.internetofthings.ibmcloud.com: 8883 / mqtt' не удалось: ошибка во время рукопожатия WebSocket: net :: ERR_CONNECTION_RESET

Пожалуйста, обращайтесь ко всем, кто пытался подключить IBM Watson IoT с помощью клиента Paho Mqtt.


person vinayakumarnk    schedule 06.04.2017    source источник
comment
Разве идентификатор клиента не должен быть чем-то определенным в службе Интернета вещей, а не случайно сгенерированным значением?   -  person hardillb    schedule 06.04.2017
comment
Идентификатор клиента будет отличаться для каждого пользователя, поэтому он создается динамически.   -  person vinayakumarnk    schedule 06.04.2017
comment
Но проверьте документ службы IoT, я уверен, что идентификатор клиента должен совпадать с чем-то, заявленным в службе (по крайней мере, для устройств и шлюзов).   -  person hardillb    schedule 06.04.2017
comment
Я использую как приложение. Таким образом, идентификатор клиента должен быть разным для каждого пользователя. Я уже использую такой же идентификатор клиента в клиентском приложении Node js.   -  person vinayakumarnk    schedule 06.04.2017
comment
Порт 8883 безопасен, поэтому я ожидаю, что wss будет протоколом. Что произойдет, если вы попробуете 1883 год? Согласитесь с вами в отношении клиентов для приложений, они просто должны быть уникальными для каждого соединения, поэтому генерация достаточно распространена.   -  person amadain    schedule 06.04.2017
comment
Я пробовал и 8883, и 1883. В обоих случаях мне не удалось подключиться. Я получаю эту ошибку Ошибка подключения: AMQJS0006E Неверный код возврата Connack: 5 В подключении отказано: не авторизовано.   -  person vinayakumarnk    schedule 06.04.2017
comment
@hardillb прав - в документах говорится: когда вы устанавливаете MQTT-соединение с помощью ключа API, убедитесь, что выполняются следующие рекомендации: Идентификатор клиента MQTT находится в формате: a: orgId: appId ... - см. console.ng.bluemix.net/docs/services/IoT/applications/ mqtt.html   -  person barny    schedule 06.04.2017


Ответы (1)


Спасибо всем за ваши ответы. На основании всех ответов я внес изменения в свой код.

<script type="text/javascript">

var clientId  = 'a:myOrgId:'+Math.random().toString(16).substr(2, 8);
var client = new Messaging.Client("myOqgId.messaging.internetofthings.ibmcloud.com", 1883, clientId);

 //Gets  called if the websocket/mqtt connection gets disconnected for any reason
 client.onConnectionLost = function (responseObject) {
     //Depending on your scenario you could implement a reconnect logic here
     alert("connection lost: " + responseObject.errorMessage);
 };

 //Gets called whenever you receive a message for your subscriptions
 client.onMessageArrived = function (message) {
     //Do something with the push message you received
     $('#messages').append('<span>Topic: ' + message.destinationName + '  | ' + message.payloadString + '</span><br/>');
 };

 //Connect Options
 var options = {
     userName: API-Key here,
     password: Auth token here,
     timeout: 3,
     //Gets Called if the connection has sucessfully been established
     onSuccess: function () {
         alert("Connected");    	 
     },
     //Gets Called if the connection could not be established
     onFailure: function (message) {
         alert("Connection failed: " + message.errorMessage);
     }
 };

 //Creates a new Messaging.Message Object and sends it to the HiveMQ MQTT Broker
 var publish = function (payload, topic, qos) {
     //Send your message (also possible to serialize it as JSON or protobuf or just use a string, no limitations)
     var message = new Messaging.Message(payload);
     message.destinationName = topic;
     message.qos = qos;
     client.send(message);
 }
client.connect(options);
</script>

Как видите, я внес изменения в ClientId. IBM Watson Iot будет принимать только идентификаторы клиентов в указанном ниже формате , если вы не используете библиотеки Watson IoT.

var clientId = 'a: OrgId:' + RandomString;

Если вы используете библиотеки IBM Watson IoT. Идентификатор клиента может быть любым. Даже я реализовал в node.js

person vinayakumarnk    schedule 07.04.2017
comment
И задокументировано ли это поведение? - person barny; 08.04.2017
comment
Существует документация по IBM Watson IoT console.ng. bluemix.net/docs/services/IoT/applications/ А также, если вы используете библиотеку, вы можете использовать клиент, как указано в коде github.com/ibm-watson-iot/iot-nodejs - person vinayakumarnk; 10.04.2017