Не удается подключиться к платформе IBM Watson IoT Platform с помощью библиотеки Eclipse PAHO MQTT для JavaScript

Похоже, что IBM недавно перестала принимать не TLS-соединения с MQTT-борщиком по соображениям безопасности.

Мне нравится небольшое приложение, которое считывает данные датчика акселерометра со смартфона с помощью JavaScript и отправляет их брокеру сообщений через MQTT.

Это приложение не работает. Поэтому я пытаюсь исправить это в этой вилке.

Как уже упоминалось, соединения без TLS отклоняются, поэтому я включил TLS:

        window.client.connect({
            onSuccess: onConnectSuccess,
            onFailure: onConnectFailure,
            userName: "use-token-auth",
            password: window.password,
            useSSL: true
});

Он по-прежнему не подключается. На платформе IBM Watson IoT я вижу в журнале эту ошибку, больше ничего:

Закрытое соединение с 213.55.176.207. Операция не авторизована.

Теперь я создал небольшой тестовый файл index.html. Если я подключаюсь как устройство, оно все равно не работает, но если я подключаюсь как приложение, оно работает, как видно на здесь. Но я создал устройства на платформе. И если я использую старый экземпляр Watson IoT Platform, он работает, а с новыми - нет.

Что я делаю неправильно?


person Romeo Kienzler    schedule 19.08.2017    source источник


Ответы (1)


в вашем коде для приложения у вас есть это:

window.client = new Paho.MQTT.Client("bmzc5i.messaging.internetofthings.ibmcloud.com", 8883, 'a:myOrgId:'+Math.random().toString(16).substr(2, 8));

что нормально, когда приложение подключает формат идентификатора a:orgId:uniqueIdentifierForTheApplication

uniqueIdentifierForTheApplication может быть любой строкой (в пределах допустимого набора символов) и не требует предварительной регистрации, поэтому генерация случайного числа здесь работает в 99% случаев.

window.client = new Paho.MQTT.Client("bmzc5i.messaging.internetofthings.ibmcloud.com", 8883, 'd:bmzc5i:'+Math.random().toString(16).substr(2, 8));

когда устройство подключается, идентификатор имеет формат d:orgId:typeId:deviceId. Чтобы подключить устройство, оно должно быть сначала зарегистрировано, поэтому идентификатор d:orgId:randomNumber работать не будет.

Если вы зарегистрируете устройство с идентификатором myDevice типа устройства с идентификатором myType и установите для него токен аутентификации myToken, тогда вы создадите соединение, как показано ниже:

window.client = new Paho.MQTT.Client("bmzc5i.messaging.internetofthings.ibmcloud.com", 8883, 'd:bmzc5i:myType:myDevice'); window.client.connect({ onSuccess: onConnectSuccess, onFailure: onConnectFailure, userName: "use-token-auth", password: "myToken", useSSL: true

Также следует отметить разницу в пространстве тем при подключении в качестве устройства и приложения.

Когда вы подключаетесь в качестве приложения, у вас есть возможности для всей организации. Итак, чтобы опубликовать / подписаться на событие от имени устройства, вы должны использовать такую ​​тему, как:

опубликовать в iot-2/type/myType/id/myDevice/evt/statusEvent/fmt/json

Когда вы подключаетесь в качестве устройства, у вас есть только область действия устройства (это механизм безопасности для ограничения ущерба, который может нанести взломанное устройство). Таким образом, для устройства то же самое достигается с помощью публикации в:

iot-2/evt/statusEvent/fmt/json

Платформа использует идентификационные данные устройства, производящего публикацию, для определения того, какому устройству принадлежит данное событие, тогда как с помощью приложения приложение решает, какому устройству назначить событие.

person DavidParker    schedule 21.08.2017