我已经用‘’为AWS IoT编写了一个代码。我能够创建一个设备并发布。设备之间不会断开连接。(独立)我还可以创建一个影子设备,并正确地发布、订阅(独立)。
然而,当我连接2,设备一直被断开和重新连接。
我已经找过了,但找不到任何解决办法。
下面是我写的代码。请告知我做错了什么
index.js
const fs = require('fs');
const Constants = require('./constants');
const Transmission = require('./transmission');
const ThingShadow = require('./thingShadow');
execute = () => {
ThingShadow.shadowing();
Transmission.transmit();
}
execute();thingShadow.js
const awsIot = require('aws-iot-device-sdk');
const Constants = require('./constants');
const utils = require('./utils');
var thingShadows;
shadowing = () => {
thingShadows = awsIot.thingShadow({
keyPath: Constants.ACTUAL_KEY_PATH,
certPath: Constants.ACTUAL_CERT_PATH,
caPath: Constants.CA_PATH,
clientId: Constants.THING_NAME,
host: Constants.HOST
});
thingShadows.on('connect', function () {
thingShadows.register(Constants.THING_NAME);
});
thingShadows.on('status',
function (thingName, stat, clientToken, stateObject) {
console.log('received ' + stat + ' on ' + thingName + ': ' +
JSON.stringify(stateObject));
});
thingShadows.on('delta',
function (thingName, stateObject) {
console.log(`Delta received `);
});
thingShadows.on('timeout',
function (thingName, clientToken) {
console.log('received timeout ' + ' on ' + operation + ': ' +
clientToken);
});
}
module.exports = {
shadowing
}
// shadowing();transmission.js
const awsIot = require('aws-iot-device-sdk');
const Constants = require('./constants');
const utils = require('./utils');
let data = {
"records":{
"key1":"value1",
"key2":"value2",
"key3":"value3"
}
};
let device;
transmit = () => {
// create device
device = awsIot.device({
keyPath: Constants.ACTUAL_KEY_PATH,
certPath: Constants.ACTUAL_CERT_PATH,
caPath: Constants.CA_PATH,
clientId: Constants.THING_NAME,
host: Constants.HOST
});
device.on('connect', function () {
console.log('Connected to AWS');
callPublisher();
});
device.on('error', function(err) {
console.log(error);
});
device.on('message', function (topic, payload) {
console.log(`Topic : ${topic}`);
console.log(`Payload : ${payload}`);
if (topic === `MyTopic`) {
device.publish(`MyTopic`, JSON.stringify(data));
} else {
console.log('Something else');
}
});
device
.on('close', function() {
console.log('close');
});
device
.on('reconnect', function() {
console.log('reconnect');
});
device
.on('offline', function() {
console.log('offline');
});
device
.on('error', function(error) {
console.log('error', error);
});
}
callPublisher = () => {
data.records.key1 = 10;
data.records.key2 = 20;
device.publish(`MyTopic`, JSON.stringify(data));
console.log(`Data sent : ${JSON.stringify(data)}`);
}
module.exports = {
transmit
}
// transmit();下面是程序的输出
Connected to AWS
offline
close
reconnect
Data sent : {"records":{"key1":"10","key2":"20","key3":"value3"}}如果有人有链接/代码连接mqtt.js与nodejs,请分享。
发布于 2021-06-26 06:29:21
谢谢@MehmetaliSara。该问题是由于使用相同的客户端id创建对象和阴影造成的。这导致重复的客户端id问题,导致其中一个对象断开连接。我已经做了一个单例对象,对象和阴影都使用它。这个问题已经解决了。
https://stackoverflow.com/questions/68013719
复制相似问题