Google IOT Core and Raspberry Pi: Error: Connection Refused: Bad username or password
Google IOT Core and Raspberry Pi: Error: Connection Refused: Bad username or password
我按照下面的教程将我的 raspberry pi 3 连接到 Google IOT Core。我在 Google 控制台上设置了 Google Core IOT 部分 OK 并且 raspberry pi 部分遵循了所有步骤,但是,根据下面的错误消息,连接总是被拒绝。
error { Error: Connection refused: Bad username or password
at MqttClient._handleConnack (/home/pi/Desktop/Google-IoT-
Device/node_modules/mqtt/lib/client.js:920:15)
at MqttClient._handlePacket (/home/pi/Desktop/Google-IoT-
Device/node_modules/mqtt/lib/client.js:350:12)
at work (/home/pi/Desktop/Google-IoT-
Device/node_modules/mqtt/lib/client.js:292:12)
at Writable.writable._write (/home/pi/Desktop/Google-IoT-
Device/node_modules/mqtt/lib/client.js:302:5)
at doWrite (/home/pi/Desktop/Google-IoT-
Device/node_modules/mqtt/node_modules/readable-
stream/lib/_stream_writable.js:428:64)
at writeOrBuffer (/home/pi/Desktop/Google-IoT-
Device/node_modules/mqtt/node_modules/readable-
stream/lib/_stream_writable.js:417:5)
at Writable.write (/home/pi/Desktop/Google-IoT-
Device/node_modules/mqtt/node_modules/readable-
stream/lib/_stream_writable.js:334:11)
at TLSSocket.ondata (_stream_readable.js:639:20)
at emitOne (events.js:116:13)
at TLSSocket.emit (events.js:211:7) code: 4 }
close
教程link:
https://hub.packtpub.com/build-google-cloud-iot-application/#comment-53421
这是我的 index.js 文件的顶部:
var fs = require('fs');
var jwt = require('jsonwebtoken');
var mqtt = require('mqtt');
var rpiDhtSensor = require('rpi-dht-sensor');
var dht = new rpiDhtSensor.DHT11(2); // `2` => GPIO2
var projectId = 'nifty-*******-******';
var cloudRegion = 'us-central1';
var registryId = 'device-registry';
var deviceId = 'raspberrypi';
var mqttHost = 'mqtt.googleapis.com';
var mqttPort = 8883;
var privateKeyFile = '../certs/rsa_private.pem';
var algorithm = 'RS256';
var messageType = 'state'; // or event
var mqttClientId = 'projects/' + projectId + '/locations/' + cloudRegion +
'/registries/' + registryId + '/devices/' + deviceId;
var mqttTopic = '/devices/' + deviceId + '/' + messageType;
var connectionArgs = {
host: mqttHost,
port: mqttPort,
clientId: mqttClientId,
username: 'unused',
password: createJwt(projectId, privateKeyFile, algorithm),
protocol: 'mqtts',
secureProtocol: 'TLSv1_2_method'
};
本教程没有说明如何下载 Google 根 CA 证书,所以我按照本教程进行操作:
https://raspberrypi.stackexchange.com/questions/76419/entrusted-certificates-installation
我还通过 Google 中的操作检查了连接路由是否正常,并且一切都检查正常:
https://cloud.google.com/iot/docs/troubleshooting
projectID、registryID、deviceID 和区域都检查正确。
我相信它一定很简单,但这让我沮丧了一个星期。我已经在互联网上进行了搜索,但我尝试过的结果都导致了同样的错误。
有没有人可以帮忙?
需要三重检查的事情:
- 您的项目 ID、注册表和设备名称都正确,大小写和破折号与下划线都正确
- 您的 SSL 密钥类型与注册表中的算法和指定类型相匹配。 IE。如果您有 RSA 密钥,请确保它是 RSA 而不是具有注册表中指定的 x509 的 RSA。
- 根证书是正确的...您链接的那个教程比它需要的要复杂得多。只需 运行:
wget https://pki.google.com/roots.pem
从 Google. 获取当前 roots.pem
不想再向您抛出另一个教程,但我实际上也只是发布了一个 blog post with really detailed info on this with step-by-step,主要是因为其他教程要么有漏洞,要么信息陈旧。
另一个注意事项:我看到您正在使用 state
MQTT 主题发送,没错,但是在评论中您列出了 event
。是 events
。因此,如果您尝试发送至 event
,那也会失败。
我遇到并解决了同样的问题,减少了为密码创建 json 令牌的到期时间
对我来说这是一个简单的疏忽,即等号 (=) 和区域名称之间的 space。代码是:
之前(失败)....
node cloudiot_mqtt_example_nodejs.js mqttDeviceDemo \
--projectId=myproject \
--cloudRegion= us-central1 \
--registryId=1234 \
--deviceId=test-device \
--privateKeyFile=./cert/rsa_private.pem \
--numMessages=25 \
--algorithm=RS256
之后(修复了错误消息 “错误错误:连接被拒绝:用户名或密码错误) ....
--cloudRegion=us-central1 \
另请参阅此处的示例:
https://github.com/GoogleCloudPlatform/nodejs-docs-samples/tree/master/iot/mqtt_example
我按照下面的教程将我的 raspberry pi 3 连接到 Google IOT Core。我在 Google 控制台上设置了 Google Core IOT 部分 OK 并且 raspberry pi 部分遵循了所有步骤,但是,根据下面的错误消息,连接总是被拒绝。
error { Error: Connection refused: Bad username or password
at MqttClient._handleConnack (/home/pi/Desktop/Google-IoT-
Device/node_modules/mqtt/lib/client.js:920:15)
at MqttClient._handlePacket (/home/pi/Desktop/Google-IoT-
Device/node_modules/mqtt/lib/client.js:350:12)
at work (/home/pi/Desktop/Google-IoT-
Device/node_modules/mqtt/lib/client.js:292:12)
at Writable.writable._write (/home/pi/Desktop/Google-IoT-
Device/node_modules/mqtt/lib/client.js:302:5)
at doWrite (/home/pi/Desktop/Google-IoT-
Device/node_modules/mqtt/node_modules/readable-
stream/lib/_stream_writable.js:428:64)
at writeOrBuffer (/home/pi/Desktop/Google-IoT-
Device/node_modules/mqtt/node_modules/readable-
stream/lib/_stream_writable.js:417:5)
at Writable.write (/home/pi/Desktop/Google-IoT-
Device/node_modules/mqtt/node_modules/readable-
stream/lib/_stream_writable.js:334:11)
at TLSSocket.ondata (_stream_readable.js:639:20)
at emitOne (events.js:116:13)
at TLSSocket.emit (events.js:211:7) code: 4 }
close
教程link: https://hub.packtpub.com/build-google-cloud-iot-application/#comment-53421
这是我的 index.js 文件的顶部:
var fs = require('fs');
var jwt = require('jsonwebtoken');
var mqtt = require('mqtt');
var rpiDhtSensor = require('rpi-dht-sensor');
var dht = new rpiDhtSensor.DHT11(2); // `2` => GPIO2
var projectId = 'nifty-*******-******';
var cloudRegion = 'us-central1';
var registryId = 'device-registry';
var deviceId = 'raspberrypi';
var mqttHost = 'mqtt.googleapis.com';
var mqttPort = 8883;
var privateKeyFile = '../certs/rsa_private.pem';
var algorithm = 'RS256';
var messageType = 'state'; // or event
var mqttClientId = 'projects/' + projectId + '/locations/' + cloudRegion +
'/registries/' + registryId + '/devices/' + deviceId;
var mqttTopic = '/devices/' + deviceId + '/' + messageType;
var connectionArgs = {
host: mqttHost,
port: mqttPort,
clientId: mqttClientId,
username: 'unused',
password: createJwt(projectId, privateKeyFile, algorithm),
protocol: 'mqtts',
secureProtocol: 'TLSv1_2_method'
};
本教程没有说明如何下载 Google 根 CA 证书,所以我按照本教程进行操作: https://raspberrypi.stackexchange.com/questions/76419/entrusted-certificates-installation
我还通过 Google 中的操作检查了连接路由是否正常,并且一切都检查正常: https://cloud.google.com/iot/docs/troubleshooting
projectID、registryID、deviceID 和区域都检查正确。
我相信它一定很简单,但这让我沮丧了一个星期。我已经在互联网上进行了搜索,但我尝试过的结果都导致了同样的错误。 有没有人可以帮忙?
需要三重检查的事情:
- 您的项目 ID、注册表和设备名称都正确,大小写和破折号与下划线都正确
- 您的 SSL 密钥类型与注册表中的算法和指定类型相匹配。 IE。如果您有 RSA 密钥,请确保它是 RSA 而不是具有注册表中指定的 x509 的 RSA。
- 根证书是正确的...您链接的那个教程比它需要的要复杂得多。只需 运行:
wget https://pki.google.com/roots.pem
从 Google. 获取当前 roots.pem
不想再向您抛出另一个教程,但我实际上也只是发布了一个 blog post with really detailed info on this with step-by-step,主要是因为其他教程要么有漏洞,要么信息陈旧。
另一个注意事项:我看到您正在使用 state
MQTT 主题发送,没错,但是在评论中您列出了 event
。是 events
。因此,如果您尝试发送至 event
,那也会失败。
我遇到并解决了同样的问题,减少了为密码创建 json 令牌的到期时间
对我来说这是一个简单的疏忽,即等号 (=) 和区域名称之间的 space。代码是:
之前(失败)....
node cloudiot_mqtt_example_nodejs.js mqttDeviceDemo \
--projectId=myproject \
--cloudRegion= us-central1 \
--registryId=1234 \
--deviceId=test-device \
--privateKeyFile=./cert/rsa_private.pem \
--numMessages=25 \
--algorithm=RS256
之后(修复了错误消息 “错误错误:连接被拒绝:用户名或密码错误) ....
--cloudRegion=us-central1 \
另请参阅此处的示例: https://github.com/GoogleCloudPlatform/nodejs-docs-samples/tree/master/iot/mqtt_example