同时使用 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