首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >aws-物联网设备-sdk产品阴影断开装置

aws-物联网设备-sdk产品阴影断开装置
EN

Stack Overflow用户
提问于 2021-06-17 05:57:55
回答 1查看 490关注 0票数 0

我已经用‘’为AWS IoT编写了一个代码。我能够创建一个设备并发布。设备之间不会断开连接。(独立)我还可以创建一个影子设备,并正确地发布、订阅(独立)。

然而,当我连接2,设备一直被断开和重新连接。

我已经找过了,但找不到任何解决办法。

下面是我写的代码。请告知我做错了什么

index.js

代码语言:javascript
复制
const fs = require('fs');

const Constants = require('./constants');
const Transmission = require('./transmission');
const ThingShadow = require('./thingShadow');

execute = () => {
  ThingShadow.shadowing();
  Transmission.transmit();
}

execute();

thingShadow.js

代码语言:javascript
复制
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

代码语言:javascript
复制
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();

下面是程序的输出

代码语言:javascript
复制
Connected to AWS
offline
close
reconnect
Data sent : {"records":{"key1":"10","key2":"20","key3":"value3"}}

如果有人有链接/代码连接mqtt.js与nodejs,请分享。

EN

回答 1

Stack Overflow用户

发布于 2021-06-26 06:29:21

谢谢@MehmetaliSara。该问题是由于使用相同的客户端id创建对象和阴影造成的。这导致重复的客户端id问题,导致其中一个对象断开连接。我已经做了一个单例对象,对象和阴影都使用它。这个问题已经解决了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68013719

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档