Google IOT Core и Raspberry Pi: ошибка: отказано в соединении: неверное имя пользователя или пароль - PullRequest
0 голосов
/ 21 декабря 2018

Я следовал приведенному ниже руководству, чтобы подключить мой raspberry pi 3 к Google IOT Core.Я настроил часть основного ядра Google OK на консоли Google, и все шаги были выполнены для части 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

Ссылка на учебное пособие: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, поэтому я следовал этому учебнику:https://raspberrypi.stackexchange.com/questions/76419/entrusted-certificates-installation

Я также проверил, что маршрут соединения был в порядке, следуя этому в Google, и все проверил ОК: https://cloud.google.com/iot/docs/troubleshooting

ProjectID, registryID, deviceID и регион все проверены правильно.

Я уверен, что это должно быть очень просто, но это расстроило меня уже неделю.Я бродил по интернету, но все, что я пробовал, приводит к той же ошибке.Кто-нибудь может помочь?

Ответы [ 3 ]

0 голосов
/ 04 августа 2019

Та же проблема, с которой я столкнулся и решил ее, сократит время истечения срока, когда создается токен json для пароля

0 голосов
/ 25 августа 2019

Для меня это был простой недосмотр, а именно пробел между знаком равенства (=) и названием региона.Код был:

до (сбой) ....

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

0 голосов
/ 21 декабря 2018

Вещи для тройной проверки:

  1. Идентификатор вашего проекта, реестр и имена устройств все правильные, с правильным регистром и дефисом против подчеркивания
  2. Ваш тип ключа SSL соответствует алгоритму иуказанный тип в реестре.Т.е., если у вас есть ключ RSA, убедитесь, что это RSA, а не RSA с x509, указанным в реестре.
  3. Корневой сертификат верен ... Этот учебник, который вы связали, СЛЕДУЕТ сложнее, чем нужно,Просто запустите: wget https://pki.google.com/roots.pem, чтобы получить текущую версию root.pem от Google.

Не бросать вам еще одно руководство, но я также буквально только что опубликовал пост в блоге с действительно подробной информацией.об этом пошагово , в основном потому, что в других уроках либо были дыры, либо устаревшая информация.

Еще одно замечание: я вижу, что вы используете тему state MQTT для отправки,все верно, но в комментарии вы перечислили event.Это events.Поэтому, если вы попытаетесь отправить на event, это тоже не удастся.

...