No se puede hacer que Google IoT Core funcione

10

¿Alguien ha obtenido el ejemplo en su inicio rápido para trabajar? Proporcionan el código NodeJS para conectarse a su puente MQTT, pero para mí no funciona:

[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] },

(miles de líneas más de seguimiento de pila) y ninguna actividad en el panel de Google IoT Core, ni mensajes en ninguna suscripción de extracción.

Un mosquitto_pub devuelve un extraño error:

% ./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.
Soporte de Gambito
fuente
Aparentemente, los mensajes generados por su aplicación NODEJS tardaron un tiempo en llegar a las suscripciones. Pero el mosquitto_pub todavía no funciona.
Gambit Support
Agregar el argumento -P a mosquitto_pub con una contraseña JWT como la creada por sus aplicaciones NODEJS no ayuda.
Gambit Support

Respuestas:

5

Este error se produce cuando hay una falta de coincidencia de protocolo en la solicitud que envía a la API MQTT de Google.

Utiliza el puerto 8883 que es para MQTT sobre SSL. En mi opinión, la dirección a la que llama es la dirección http normal (sin https ni http, el valor predeterminado es http), que usaría 1883, el puerto de MQTT simple.

Si tiene la intención de usar 8883 y SSL, llame a la dirección usando https. Si no quiso decir MQTT sobre SSL en absoluto, arregle el puerto a 1883.

mico
fuente
Esto no ayuda REQUIEREN el puerto 8883, que es el que usa su ejemplo NODEJS.
Gambit Support
Bueno, esa es la razón más obvia para la falta de coincidencia de protocolo, pero el error también puede ocurrir dentro de los mensajes mqtt, por ejemplo, un mensaje demasiado largo en comparación con lo especificado. Es difícil decir qué genera un problema en su caso.
mico
1
La respuesta correcta es mirar a Wirehark. Descubrí que mosquitto_pub no envía mensajes cifrados incluso cuando --tls-version se agrega a la línea de comando original, porque el mensaje de texto sin formato está en el PCAP.
Gambit Support