Можно ли подключиться к Google IOTCore MQTT Bridge через Javascript?

Я пытался использовать версию javacscript MQTT-клиента Eclipse Paho для доступа к Google IOTCore MQTT Bridge, как предлагается здесь:

https://cloud.google.com/iot/docs/how-tos/mqtt-bridge

Однако, что бы я ни делал, любая попытка подключиться с известными хорошими учетными данными (работа с другими клиентами) приводит к этой ошибке подключения:

errorCode: 7, errorMessage: "AMQJS0007E Socket error:undefined."

Там особо нечего делать, поэтому мне интересно, успешно ли когда-либо подключался к MQTT Bridge через Javascript с помощью Eclipse Paho, клиентской реализации, предложенной Google в их документации.

Я прошел через их шаги по устранению неполадок, и, похоже, все идет вверх и вниз, так что здесь тоже нет никакой помощи.

https://cloud.google.com/iot/docs/troubleshooting

Я заметил, что в их документах есть образцы кода для Java / Python и т.д., но не для Javascript, поэтому мне интересно, просто ли он не поддерживается, и в их документации просто не упоминается как таковой.

Я упростил свой код, чтобы просто использовать пример Hello World в документации Paho, и, насколько я могу судить, я все сделал правильно (включая использование пути к моему устройству в качестве ClientID, токена JWT в качестве пароля, указав «неиспользуемое» поле userName и явно требуя MQTT v3.1.1).

А пока я возвращаюсь к опросу через их HTTP-мост, но у него есть очевидные задержки и недостатки сетевого трафика.

// Create a client instance
client = new Paho.MQTT.Client("mqtt.googleapis.com", Number(8883), "projects/[my-project-id]/locations/us-central1/registries/[my registry name]/devices/[my device id]");

// set callback handlers
client.onConnectionLost = onConnectionLost;
client.onMessageArrived = onMessageArrived;

// connect the client
client.connect({
    mqttVersion: 4,   // maps to MQTT V3.1.1, required by IOTCore
    onSuccess:onConnect,
    onFailure: onFailure,
    userName: 'unused',  // suggested by Google for this field
    password: '[My Confirmed Working JWT Token]' // working JWT token

function onFailure(resp) {
    console.log(resp);
}


// called when the client connects
function onConnect() {
  // Once a connection has been made, make a subscription and send a message.
  console.log("onConnect");
  client.subscribe("World");
  message = new Paho.MQTT.Message("Hello");
  message.destinationName = "World";
  client.send(message);
}

// called when the client loses its connection
function onConnectionLost(responseObject) {
  if (responseObject.errorCode !== 0) {
    console.log("onConnectionLost:"+responseObject.errorMessage);
  }
}

// called when a message arrives
function onMessageArrived(message) {
  console.log("onMessageArrived:"+message.payloadString);
}

person SantaCruzDeveloper    schedule 21.03.2018    source источник


Ответы (1)


Я гуглер (но не работаю в Cloud IoT).

Ваш код мне нравится, и он должен работать. Я попробую сегодня вечером или завтра и доложу вам.

Я провел последний день, работая над версией Golang образцов, опубликованных в документации Google. Как и вы, я был разочарован тем, что не все обычные языки Google были охвачены примерами.

Вы запускаете код из браузера или он работает на Node.JS?

У вас есть package.json (если есть Node), которым вы бы тоже поделились?

Обновить

Вот Node.JS (JavaScript, но не браузер), который подключается к Cloud IoT, подписывается на /devices/${DEVICE}/config и публикует на /devices/${DEVICE}/events.

https://gist.github.com/DazWilkin/65ad8890d5f58eae9612632d594af2de

  • Поместите все файлы в один каталог
  • Замените значения в index.js местоположения центра сертификации Google и вашего ключа
  • Заменяет [[YOUR-X]] значения в config.json
  • Используйте "npm install", чтобы вытащить пакеты
  • Используйте node index.js

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

person DazWilkin    schedule 20.04.2018
comment
Я поговорил с командой инженеров, и выяснил, что невозможно использовать JavaScript для подключения к Cloud IoT Core. Это связано с тем, что Cloud IoT Core в настоящее время не поддерживает использование WebSockets (это то, что использует библиотека JavaScript MQTT) для подключения к Cloud IoT Core. - person DazWilkin; 20.04.2018
comment
Это было мое подозрение, спасибо, что нашли время добавить это подтверждение. - person SantaCruzDeveloper; 21.06.2018
comment
@DazWilken, это все еще так? Я столкнулся с той же ошибкой при использовании библиотеки Paho JS. Я пытался следовать этому руководству, чтобы публиковать сообщения в теме в GCP Core IoT из моего приложения React Native. В документах GCP Cloud IoT Core упоминается Проект Eclipse Paho, но, похоже, не вдавался в подробности. - person Brad W; 13.01.2020
comment
@ brad-w - Я давно не пользовался Cloud IoT и не могу ответить на ваш вопрос - person DazWilkin; 15.01.2020