Google IoT Core tidak dapat berfungsi


10

Adakah yang mendapat contoh di quickstart mereka untuk bekerja? Mereka menyediakan kode NodeJS untuk terhubung ke jembatan MQTT mereka, tetapi bagi saya itu tidak berfungsi:

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

(ribuan garis jejak tumpukan) dan tidak ada aktivitas di dasbor Google IoT Core, atau pesan apa pun dalam langganan tarikan.

Mosquitto_pub mengembalikan kesalahan aneh:

% ./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.

Rupanya pesan yang dihasilkan oleh aplikasi NODEJS mereka butuh beberapa saat untuk sampai ke langganan. Tetapi mosquitto_pub masih tidak berfungsi.
Dukungan Gambit

Menambahkan argumen -P ke mosquitto_pub dengan kata sandi JWT seperti yang dibuat oleh aplikasi NODEJS mereka tidak membantu.
Dukungan Gambit

Jawaban:


5

Kesalahan ini terjadi, ketika ada ketidakcocokan protokol pada permintaan yang Anda kirim ke Google MQTT API.

Anda menggunakan port 8883 yang untuk MQTT melalui SSL. Di mata saya, alamat yang Anda panggil adalah alamat http normal (tanpa https atau http defaultnya adalah http), yang akan menggunakan 1883, port dari MQTT biasa.

Jika Anda bermaksud menggunakan 8883 dan SSL, buat panggilan ke alamat menggunakan https. Jika Anda sama sekali tidak bermaksud MQTT melalui SSL, perbaiki port ke 1883.


Ini tidak membantu. Mereka MEMERLUKAN port 8883, yang digunakan oleh contoh NODEJS mereka.
Dukungan Gambit

Ya, itulah alasan yang paling jelas untuk protokol mismatch, tetapi kesalahan dapat terjadi juga di dalam pesan mqtt, misalnya pesan yang terlalu panjang dibandingkan dengan apa yang ditentukan. Sulit mengatakan apa yang menimbulkan masalah dalam kasus Anda.
mico

1
Jawaban yang tepat adalah melihat wireshark. Saya tahu bahwa mosquitto_pub tidak mengirim pesan terenkripsi bahkan ketika --tls-versi ditambahkan ke baris perintah asli, karena pesan plaintext ada di PCAP.
Dukungan Gambit
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.