我在AWS IoT项目中有一个要求,其中需要更新AWS IoT连接的设备的应用程序代码或应用程序代码的某些部分,例如应用程序版本或应用程序时间表更新等。
我应该如何实现呢?到目前为止,我发现云前端或代码部署很有用,但并未直接用于此类目的。还有其他服务可以帮助我实现AWS所需的解决方案吗?

谢谢。

最佳答案

在所有设备上进行固件升级

合理的模式是使用AWS IoT中的Device Shadow以报告状态存储设备的当前固件信息。

{
  "reported": {
    "firmware": {
      "version": "1.0.0",
      "name": "linux-3.8.0-armeabi"
    }
  }
}


当您要在设备上触发固件升级时,可以引用新版本以及指向该新版本的指针(例如,指向S3存储桶)。

{
  "reported": {
    "firmware": {
      "version": "1.0.0",
      "name": "linux-3.8.0-armeabi"
    }
  },
  "desired": {
    "firmware": {
      "version": "1.1.0",
      "name": "linux-4.0.0-armeabi",
      "url": "https://s3-<region>.amazonaws.com/<bucket>/<file>"
    }
  }
}


当发生此更改时,设备将收到一个增量事件,指示其影子文档中的更改,并且一旦他注意到以所需状态描述了新固件条目,它将开始下载新固件。


  注意:此方法的一个优点是,即使设备处于脱机状态,该方法也将起作用,当它们重新联机时,它们将与影子同步。


选择性固件升级

有时,制造商希望控制在其设备机群中部署固件的方式,例如,他们可能希望:


为全球不同地区部署不同的固件。
为硬件稍有不同的设备部署不同的固件。
为已出售给不同制造商(B2B2C)的设备部署不同的固件。
跨不同区域逐步部署固件,而不是同时部署。


如果要细化部署,要考虑到这些矛盾,可以将上述方法与设备注册表中的Things Attributes结合使用,以便在更新所需状态时执行因此,只需选择与预定义属性匹配的设备即可。

07-26 09:32
查看更多