ไม่สามารถทำให้ Google IoT Core ทำงานได้


10

มีใครได้ตัวอย่างในการเริ่มต้นอย่างรวดเร็วของพวกเขา ? พวกเขาให้รหัส NodeJS เพื่อเชื่อมต่อกับสะพาน MQTT ของพวกเขา แต่สำหรับฉันมันไม่ทำงาน:

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

(อีกหลายพันบรรทัดของการติดตามสแต็ก) และไม่มีกิจกรรมในแดชบอร์ดของ Google IoT Core หรือข้อความใด ๆ ในการสมัครสมาชิกแบบดึง

mosquitto_pub ส่งคืนข้อผิดพลาดแปลก ๆ :

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

เห็นได้ชัดว่าข้อความที่สร้างขึ้นโดยแอป NODEJS ของพวกเขาใช้เวลาสักครู่เพื่อไปที่การสมัครสมาชิก แต่ mosquitto_pub ยังคงไม่ทำงาน
รองรับ Gambit

การเพิ่มอาร์กิวเมนต์ -P ใน mosquitto_pub ด้วยรหัสผ่าน JWT ตามที่สร้างขึ้นโดยแอปพลิเคชัน NODEJS ของพวกเขาไม่ได้ช่วยอะไร
สนับสนุน Gambit

คำตอบ:


5

ข้อผิดพลาดนี้เกิดขึ้นเมื่อมีโปรโตคอลไม่ตรงกันในคำขอที่คุณส่งไปยัง Google MQTT API

คุณใช้พอร์ต 8883 สำหรับ MQTT ผ่าน SSL ในสายตาของฉันที่อยู่ที่คุณโทรเป็นที่อยู่ http ปกติ (โดยไม่มี https หรือ http ค่าเริ่มต้นจะเป็น http) ซึ่งจะใช้ 1883 พอร์ตของ MQTT ธรรมดา

หากคุณต้องการใช้ 8883 และ SSL โทรไปยังที่อยู่ด้วย https หากคุณไม่ได้หมายถึง MQTT ผ่าน SSL เลยให้แก้ไขพอร์ตเป็น 1883


สิ่งนี้ไม่ได้ช่วยอะไร พวกเขาต้องการพอร์ต 8883 ซึ่งเป็นตัวอย่างที่ NODEJS ใช้
สนับสนุน Gambit

นั่นเป็นเหตุผลที่ชัดเจนที่สุดสำหรับโปรโตคอลไม่ตรงกัน แต่ข้อผิดพลาดอาจเกิดขึ้นได้ภายในข้อความ mqtt เช่นข้อความยาวเกินไปเมื่อเทียบกับสิ่งที่ระบุ ยากที่จะพูดในสิ่งที่สร้างปัญหาในกรณีของคุณ
แฟลช

1
คำตอบที่ถูกต้องคือดูที่ wireshark ฉันพบว่า mosquitto_pub ไม่ส่งข้อความที่เข้ารหัสแม้เมื่อ --tls-version ถูกเพิ่มลงในบรรทัดคำสั่งเดิมเนื่องจากข้อความธรรมดาอยู่ใน PCAP
สนับสนุน Gambit
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.