同时使用 AWS IOT 获取多台设备状态的问题

Posted

技术标签:

【中文标题】同时使用 AWS IOT 获取多台设备状态的问题【英文标题】:Issue with getting status of multiple devices using AWS IOT at the same time 【发布时间】:2018-06-02 23:57:10 【问题描述】:

我有一个包含 30 个物联网设备的列表,我试图在页面加载时在网页中显示每个设备的状态。我正在为此使用 AWS IOT 设备 SDK(https://github.com/aws/aws-iot-device-sdk-js)。

我一开始就创建了影子。然后我正在运行一个带有 deviceId 数组的循环,尝试使用唯一的 deviceId 作为事物名称将每个设备注册到事物影子,然后在注册回调中,我尝试使用事物名称调用 get 方法以获取初始状态。我已经为状态事件添加了一个监听器。

这适用于少数设备,get 方法返回有效的客户端令牌,但是在 10-12 个设备之后,我得到 null 作为 get 方法的响应,因此也不会为设备触发状态事件。

我的代码是这样的:

for (var i = 0; i < me.deviceList.length; i++) 
    var deviceId = me.deviceList[i].DeviceId;
    awsIotThing.register(deviceId, , function() 
        var token = client.thing.get(deviceId);
         console.log('thingName', thingName, token);
    );

如果是异步方法调用问题,我也在这里尝试了一些超时。

for (var i = 0; i < me.deviceList.length; i++) 
    var deviceId = me.deviceList[i].DeviceId;
    $timeout(function()
        awsIotThing.register(deviceId, , function() 
            var token = client.thing.get(deviceId);
            console.log('thingName', thingName, token);
         );
    , 1000*i);

但我还是遇到了同样的错误。

我附上了浏览器控制台的屏幕截图,您将在其中看到它最初获得了客户端令牌,它侦听状态事件,并且设备状态也在应用程序中进行了修改,但在少数设备之后,它开始获取null 作为 get 事件的响应,因此也不会触发 status 事件。

【问题讨论】:

不确定您要完成什么,但您是否看到过 AWS IoT 生命周期事件?我为我的用例构建了一个 Web 应用程序,它基于这些主题来显示设备状态。 docs.aws.amazon.com/iot/latest/developerguide/… @dvd86:实际上我并不想检查设备是否已连接。或者主题是否被订阅。设备的状态会根据设备中配置的特定条件而变化。基于此,我将显示绿色、黄色、红色。所以我试图让初始状态显示,然后等待订阅后的消息事件,如果有任何变化,更新状态。 【参考方案1】:

您可以使用启用了 Connectivity Indexing https://docs.aws.amazon.com/iot/latest/developerguide/managing-index.html 的 Fleet Indexing 并搜索您的 deviceId。在结果中,您可以检查连接性。

您还可以使用带有查询 connectivity.connected:true 的搜索来搜索所有连接的设备

【讨论】:

以上是关于同时使用 AWS IOT 获取多台设备状态的问题的主要内容,如果未能解决你的问题,请参考以下文章

使用mitmproxy嗅探双向认证ssl链接——嗅探AWS IoT SDK的mqtts

AWS IOT Device C SDK 使用

每次设备连接并发送数据时,是不是使用带有 aws-iot (wss) 的自定义授权方创建一个新设备?

AWS IoT 设备网关是 MQTT 代理吗?

aws iot 使用 php sdk 订阅?

AWS JAVA IoT 客户端重新连接和超时