【发布时间】: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:实际上我并不想检查设备是否已连接。或者主题是否被订阅。设备的状态会根据设备中配置的特定条件而变化。基于此,我将显示绿色、黄色、红色。所以我试图让初始状态显示,然后等待订阅后的消息事件,如果有任何变化,更新状态。
标签: amazon-web-services aws-iot