有谁在他们的快速入门中获得了榜样?他们提供了NodeJS代码以连接到其MQTT桥,但是对我来说却不起作用:

IoT控制台中的活动或任何请求订阅中的任何消息。

mosquitto_pub返回一个奇怪的错误:

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


评论

显然,他们的NODEJS应用程序生成的消息花了一些时间才能订阅。但是mosquitto_pub仍然不起作用。

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

#1 楼

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

您使用通过SSL进行MQTT的8883端口。在我看来,您呼叫的地址是普通的http地址(不带https或http,默认值为http),它将使用1883(普通MQTT的端口)。

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

评论


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

–Gambit支持
17年9月29日在13:17

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

–mico
17年9月29日在15:38

正确的答案是看wireshark。我发现即使将--tls-version添加到原始命令行中,mosquitto_pub也不会发送加密的消息,因为纯文本消息位于PCAP中。

–Gambit支持
17-10-2在14:18



#2 楼

我已通过在mosquitto_pub命令--cafile中添加ca证书来进行修复。/roots.pem
Google ca根证书:https://cloud.google.com/iot/docs/how-tos/mqtt-bridge