Impossible de faire fonctionner Google IoT Core

10

Quelqu'un at-il obtenu l'exemple de son démarrage rapide pour travailler? Ils fournissent du code NodeJS pour se connecter à leur pont MQTT, mais pour moi cela ne fonctionne pas:

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

(des milliers de lignes de trace de pile supplémentaires) et aucune activité dans le tableau de bord Google IoT Core, ni aucun message dans aucun abonnement par extraction.

Un mosquitto_pub renvoie une étrange erreur:

% ./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.
Prise en charge de Gambit
la source
Apparemment, les messages générés par leur application NODEJS ont mis du temps à accéder aux abonnements. Mais le mosquitto_pub ne fonctionne toujours pas.
Support Gambit
L'ajout de l'argument -P à mosquitto_pub avec un mot de passe JWT comme celui créé par leurs applications NODEJS n'aide pas.
Support Gambit

Réponses:

5

Cette erreur se produit lorsqu'il existe une incompatibilité de protocole sur la demande que vous envoyez à l'API Google MQTT.

Vous utilisez le port 8883 qui est pour MQTT sur SSL. À mes yeux, l'adresse que vous appelez est l'adresse http normale (sans https ni http, la valeur par défaut est http), qui utiliserait 1883, le port de MQTT ordinaire.

Si vous avez l'intention d'utiliser 8883 et SSL, appelez à l'adresse en utilisant https. Si vous ne vouliez pas du tout MQTT sur SSL, corrigez le port sur 1883.

mico
la source
Cela n'aide pas. Ils ont besoin du port 8883, qui est utilisé par leur exemple NODEJS.
Support Gambit
Eh bien, c'est la raison la plus évidente de non-concordance de protocole, mais une erreur peut également se produire à l'intérieur des messages mqtt, par exemple un message trop long par rapport à ce qui est spécifié. Difficile de dire ce qui génère un problème dans votre cas.
mico
1
La bonne réponse est de regarder WireShark. J'ai compris que mosquitto_pub n'envoie pas de message crypté même lorsque --tls-version est ajouté à la ligne de commande d'origine, car le message en clair est dans le PCAP.
Prise en charge du Gambit du