【发布时间】:2021-03-24 00:19:19
【问题描述】:
当我第一次开始学习如何使用 aws 时,我通过转到 AWS IoT 管理控制台并创建“事物”将我的设备/thingShadow 连接到 IoT 核心。每个事物都附带一个私有、公共和证书密钥,您可以通过执行以下操作来连接到 IoT:
var awsIot = require('aws-iot-device-sdk');
const keyPath = `./260b380cc2-private.pem.key`
const certPath = `./260b380cc2-certificate.pem.crt`
const caPath = './rootCA.pem'
const clientId = 'client'
const host = 'XXXXXXXXXXXXXXXX.iot.us-east-2.amazonaws.com'
var thingShadow = awsIot.thingShadow({
keyPath: keyPath,
certPath: certPath,
caPath: caPath,
clientId: clientId,
host: host
});
var shadowName = 'testShadow'
thingShadow.on("connect", () => {
thingShadow.register(shadowName, {}, () => {
console.log("Conneced. Getting shadow")
thingShadow.get(shadowName)
})
})
thingShadow.on('status',
function(thingName, stat, clientToken, stateObject) {
console.log('received '+stat+' on '+thingName+': '+
JSON.stringify(stateObject))})
现在,我不是使用 RSA 密钥连接到 IoT Core,而是使用 Amazon 的 Cognito 身份池通过 websocket 协议连接设备:
Aws = require('aws-sdk/dist/aws-sdk-react-native');
awsIot = require('aws-iot-device-sdk');
const AWS_REGION = 'us-east-2';
const AWS_COGNITO_IDENTITY_POOL = 'us-east-2:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
const AWS_IOT_ENDPOINT = 'XXXXXXXXXXXXXX.iot.us-east-2.amazonaws.com';
Aws.config.region = AWS_REGION
Aws.config.credentials = new Aws.CognitoIdentityCredentials({
IdentityPoolId: AWS_COGNITO_IDENTITY_POOL
})
Aws.config.credentials.get(() => {
const config = {}
let client
config.host = AWS_IOT_ENDPOINT
config.protocol = 'wss'
config.clientId = `client-${Math.floor((Math.random() * 100000) + 1)}`
config.accessKeyId = 'XXXXXXXXXXXXXX';
config.secretKey = 'XXXXXXXXXXXXXXXXXXXXXX';
//client = awsIot.device(config)
client = awsIot.thingShadow(config);
client.on('connect', (success) => {
if (success) {
console.log("Connected.")
client.register('testShadow')
client.get('testShadow')
} else {
console.log("Could not connect.")
}
})
client.on('close', () => {
console.log("Connection closed.")
})
client.on('message', (topic, message) => {
console.log(topic, message)
})
client.on("status", (shadow, stat, id, state) => {
console.log(JSON.stringify(state))
})
client.on('error', error => {
console.log(error)
})
})
第二个代码块的问题是,当我使用client = awsIoT.thingShadow(config)时,客户端无法连接并打印Could not connect. 但是当我使用client = awsIot.device(config)时,客户端连接并打印出Connected(当我使用aws.Iot.device,我不包括 client.register 和 client.get 代码行)。除此之外,我没有收到任何类型的错误,所以我不确定为什么它无法连接或我应该做什么,以便我可以通过 cognito 身份池获得一个 thingShadow 来连接。甚至可能吗?如果是,我怎样才能获得这种功能?
【问题讨论】:
标签: node.js amazon-web-services mqtt iot aws-iot