无法使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核心版信息中心中没有任何活动,也没有任何请求订阅中的任何消息。

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支持

使用由其NODEJS应用程序创建的JWT密码向mosquitto_pub添加-P参数无济于事。
Gambit支持

Answers:


5

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

您使用用于SSL上的MQTT的8883端口。在我眼中,您呼叫的地址是普通的http地址(不带https或http,默认为http),它将使用1883(普通MQTT的端口)。

如果您打算使用8883和SSL,请使用https拨打地址。如果您根本不是要通过SSL进行MQTT,则将端口固定为1883。


这无济于事。他们需要端口8883,这是他们的NODEJS示例使用的端口。
Gambit支持

好吧,这是协议不匹配的最明显原因,但是mqtt消息内部也会发生错误,例如,与指定内容相比,消息太长。很难说是什么导致了您的问题。
mico

1
正确的答案是看wireshark。我发现即使将--tls-version添加到原始命令行中,mosquitto_pub也不会发送加密的消息,因为纯文本消息位于PCAP中。
Gambit支持
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.