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

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

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

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

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

Там не так много, поэтому мне интересно, удалось ли кому-нибудь когда-нибудь успешно подключиться к мосту MQTT через 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);
}

2 ответа

Решение

Я Гуглер (но я не работаю в 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, а также отправлять сообщения конфигурации на устройство.

Короткий ответ - нет. Google Cloud IoT Core не поддерживает WebSockets. Все библиотеки MQTT JavaScript используют WebSocket, поскольку JavaScript ограничен для выполнения только HTTP-запросов и соединений WebSocket.

Другие вопросы по тегам