Không thể để Google IoT Core hoạt động


10

Có ai đã lấy ví dụ trong khởi động nhanh để làm việc chưa? Họ cung cấp mã NodeJS để kết nối với cầu MQTT của họ, nhưng đối với tôi nó không hoạt động:

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

(thêm hàng nghìn dòng theo dõi ngăn xếp) và không có hoạt động nào trong bảng điều khiển Google IoT Core, cũng như bất kỳ thông báo nào trong bất kỳ đăng ký kéo nào.

Một mosquitto_pub trả về một lỗi lạ:

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

Rõ ràng các tin nhắn được tạo bởi ứng dụng NODEJS của họ đã mất một lúc để đến đăng ký. Nhưng mosquitto_pub vẫn không hoạt động.
Hỗ trợ Gambit

Thêm đối số -P vào mosquitto_pub bằng mật khẩu JWT vì mật khẩu được tạo bởi các ứng dụng NODEJS của họ không giúp ích được gì.
Hỗ trợ Gambit

Câu trả lời:


5

Lỗi này xảy ra, khi có một giao thức không khớp với yêu cầu bạn gửi tới Google MQTT API.

Bạn sử dụng cổng 8883 dành cho MQTT qua SSL. Trong mắt tôi, địa chỉ bạn gọi là địa chỉ http bình thường (không có https hay http, mặc định là http), sẽ sử dụng 1883, cổng của MQTT đơn giản.

Nếu bạn có ý định sử dụng 8883 và SSL, hãy gọi tới địa chỉ bằng https. Nếu bạn không có nghĩa là MQTT qua SSL, hãy sửa cổng thành 1883.


Điều này không giúp được gì. Họ YÊU CẦU cổng 8883, đó là những gì mà ví dụ NODEJS của họ sử dụng.
Hỗ trợ Gambit

Vâng, đó là lý do rõ ràng nhất cho sự không phù hợp của giao thức, nhưng lỗi cũng có thể xảy ra bên trong các tin nhắn mqtt, ví dụ như tin nhắn quá dài so với những gì được chỉ định. Khó có thể nói những gì tạo ra vấn đề trong trường hợp của bạn.
mico

1
Câu trả lời đúng là nhìn vào wireshark. Tôi đã tìm ra rằng mosquitto_pub không gửi tin nhắn được mã hóa ngay cả khi phiên bản --tls được thêm vào dòng lệnh ban đầu, bởi vì tin nhắn văn bản gốc có trong PCAP.
Hỗ trợ Gambit
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.