无法让 Google IoT Core 工作

物联网 谷歌物联网核心
2021-06-23 00:34:16

有没有人在他们的快速入门中得到这个例子他们提供了 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.
2个回答

当您发送到 Google MQTT API 的请求存在协议不匹配时,就会发生此错误。

您使用用于 MQTT over SSL 的 8883 端口。在我看来,您调用的地址是普通的 http 地址(没有 https 或 http,默认为 http),它将使用 1883,即普通 MQTT 的端口。

如果您打算使用 8883 和 SSL,请使用 https 调用地址。如果您根本不是指 MQTT over SSL,请将端口固定为 1883。

我已经通过将 ca 证书添加到 mosquitto_pub 命令 --cafile ./roots.pem 进行了修复

谷歌 CA 根证书:https : //cloud.google.com/iot/docs/how-tos/mqtt-bridge