Можно ли подключиться к 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.