Не удается заставить 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 по-прежнему не работает.
Поддержка Гамбита

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

Ответы:


5

Эта ошибка возникает, когда в запросе, отправляемом в Google MQTT API, имеется несоответствие протокола.

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

Если вы собираетесь использовать 8883 и SSL, позвоните по адресу, используя https. Если вы вообще не имели в виду MQTT over SSL, установите для порта значение 1883.


Это не помогает. Они ТРЕБУЮТ порт 8883, который используется в их примере NODEJS.
Поддержка Gambit

Ну, это самая очевидная причина несоответствия протокола, но ошибка может возникать и внутри сообщений mqtt, например, слишком длинное сообщение по сравнению с указанным. Трудно сказать, что порождает проблему в вашем случае.
Мико

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