Не вдається працювати з Google IoT Core


10

Хтось отримав приклад у своєму швидкому старті на роботу? Вони надають код NodeJS для підключення до свого моста MQTT, але для мене це не працює:

[root@centos7 google-iot-mqtt]# node cloudiot_mqtt_example_nodejs.js \
>     --project_id=curious-furnace-181313 \
>     --registry_id=my-registry \
>     --device_id=mimic1 \
>     --private_key_file=./rsa_private.pem \
>     --algorithm=RS256
Google Cloud IoT Core MQTT example.
connect { '0': {},
   '1': 
   { [Function: require]
 resolve: [Function: resolve],
 main: 
  Module {
    id: '.',
    exports: {},
    parent: null,
    filename: '/home/tmp/uwe/google-iot-mqtt/cloudiot_mqtt_example_nodejs.js',
    loaded: true,
    children: [Object],
    paths: [Object] },

(ще тисячі рядків сліду стека) і жодної активності на інформаційній панелі Google IoT Core, а також жодних повідомлень у підписці на витягування.

Mosquitto_pub повертає дивну помилку:

% ./mosquitto_pub -d -h mqtt.googleapis.com -p 8883 -i projects/curious-furnace-181313/locations/us-central1/registries/my-registry/devices/mimic1 -u unused --key ~/mimic/scripts/mqtt/google-iot/rsa_private.pem --cert ~/mimic/scripts/mqtt/google-iot/rsa_cert.pem -t /devices/mimic1/events -m hello --insecure
Client projects/curious-furnace-181313/locations/us-central1/registries/my-registry/devices/mimic1 sending CONNECT
Error: Unrecognised command 16

Error: A network protocol error occurred when communicating with the broker.

Мабуть, повідомлення, створені їх додатком NODEJS, потребували певного часу, щоб дістатися до підписок. Але mosquitto_pub все ще не працює.
Підтримка Gambit

Додавання аргументу -P до mosquitto_pub з паролем JWT, який створений їх програмами NODEJS, не допомагає.
Підтримка Gambit

Відповіді:


5

Ця помилка виникає, коли є невідповідність протоколу у запиті, який ви надсилаєте до API MQTT Google.

Ви використовуєте порт 8883, який призначений для MQTT через SSL. На моє око, адреса, яку ви називаєте, - це звичайна http-адреса (без https і http, за замовчуванням, це http), яка використовувала б 1883, порт простого MQTT.

Якщо ви маєте намір використовувати 8883 та SSL, телефонуйте на адресу за допомогою https. Якщо ви зовсім не мали на увазі MQTT через SSL, поправте порт на 1883 рік.


Це не допомагає. Вони ЗАПОВІДАють порт 8883, для чого використовується їх приклад NODEJS.
Підтримка Gambit

Ну, це найочевидніша причина невідповідності протоколу, але помилка може статися і всередині mqtt-повідомлень, наприклад, занадто довге повідомлення порівняно з тим, що вказано. Важко сказати, що породжує проблему у вашому випадку.
mico

1
Правильна відповідь - подивитися на проводки. Я зрозумів, що mosquitto_pub не надсилає зашифроване повідомлення навіть тоді, коли в оригінальний командний рядок додано --tls-версію, оскільки повідомлення в простому тексті знаходиться в PCAP.
Гамбітська підтримка
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.