微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

aws-iot-device-sdk Thing Shadow 断开设备

如何解决aws-iot-device-sdk Thing Shadow 断开设备

我使用“aws-iot-device-sdk”为 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',stateObject) {
            console.log(`Delta received `);
        });

    thingShadows.on('timeout',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,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 连接的链接/代码,请分享

解决方法

谢谢@MehmetaliSaraç。问题是由于创建对象和阴影具有相同的客户端 ID。这导致重复客户端 ID 问题导致其中一个对象断开连接。我制作了一个对象和阴影都使用的单例对象。问题已解决。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。