Google IoT Core kann nicht zum Laufen gebracht werden

10

Hat jemand das Beispiel in seinem Schnellstart zum Laufen gebracht ? Sie stellen NodeJS-Code zur Verfügung, um eine Verbindung zu ihrer MQTT-Bridge herzustellen, aber für mich funktioniert das nicht:

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

(Tausende weitere Zeilen Stack-Trace) und keine Aktivität im Google IoT Core-Dashboard oder Nachrichten in einem Pull-Abonnement.

Ein mosquitto_pub gibt einen seltsamen Fehler zurück:

% ./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.
Gambit-Unterstützung
quelle
Anscheinend haben die von ihrer NODEJS-App generierten Nachrichten eine Weile gebraucht, um zu den Abonnements zu gelangen. Aber der mosquitto_pub funktioniert immer noch nicht.
Gambit Support
Das Hinzufügen des -P-Arguments zu mosquitto_pub mit einem JWT-Kennwort, wie es von den NODEJS-Anwendungen erstellt wurde, hilft nicht.
Gambit Support

Antworten:

5

Dieser Fehler tritt auf, wenn die Anforderung, die Sie an die Google MQTT-API senden, eine Protokollinkongruenz aufweist.

Sie verwenden den 8883-Port für MQTT über SSL. In meinen Augen ist die Adresse, die Sie anrufen, eine normale http-Adresse (ohne https oder http ist die Standardeinstellung http), die 1883, den Port von MQTT, verwenden würde.

Wenn Sie 8883 und SSL verwenden möchten, rufen Sie die Adresse mit https an. Wenn Sie MQTT überhaupt nicht über SSL gemeint haben, korrigieren Sie den Port auf 1883.

mico
quelle
Das hilft nicht. Sie benötigen Port 8883, den in ihrem NODEJS-Beispiel verwendet wird.
Gambit Support
Nun, das ist der offensichtlichste Grund für die Nichtübereinstimmung des Protokolls, aber Fehler können auch innerhalb der mqtt-Nachrichten auftreten, beispielsweise zu lange Nachrichten im Vergleich zu den angegebenen Nachrichten. Schwer zu sagen, was in Ihrem Fall zu Problemen führt.
Mico
1
Die richtige Antwort ist, sich Wireshark anzuschauen. Ich habe herausgefunden, dass mosquitto_pub keine verschlüsselte Nachricht sendet, selbst wenn --tls-version zur ursprünglichen Befehlszeile hinzugefügt wird, da sich die Klartextnachricht im PCAP befindet.
Gambit Support