Azure IOT 设备固件更新技巧,看这一篇就够了

嫌长不看版

今天为大家准备的硬菜是:在 Azure IoT 中心创建 Node.js 控制台应用,进行端到端模拟固件更新,为基于 Intel Edison 的设备安装新版固件的流程。通过创建模拟设备应用,可实现 firmwareUpdate 直接方法,启动等待下载固件映像、下载固件映像,最终应用新版固件映像,并在每个阶段显示操作进度。

操作细节版

在进行物联网开发的过程中,很多用户会遇到这样的问题:物联网中的某些边缘设备上运行的固件存在问题需要修复,准备好新版固件后,如何集中批量部署给所有适合的设备?

答案就是:基于 Azure IoT 技术搭建的物联网环境,通过 Azure IoT 中心创建一个简单的 Node.js 控制台应用就可以满足要求。

我们需要通过下文介绍的方法创建两个 Node.js 控制台应用:

  • dmpatterns_fwupdate_service.js:在模拟设备应用上调用直接方法、显示响应并定期(每 500 毫秒)显示更新后的报告属性。
  • dmpatterns_fwupdate_device.js:使用设备标识连接到 IoT 中心、接收 firmwareUpdate 直接方法、运行一个多状态过程以模拟固件更新,包括:等待映像下载、下载新映像,最后应用映像。

请先准备好下列内容:

  • Node.js 版本 0.12.x 或更高版本;
  • 有效的 Azure 帐户。

好了,我们开始。

2、在“IoT 中心”边栏选项卡中,选择 IoT 中心的配置。                                                                                                                                                                                                  

名称:输入 IoT 中心的名称;

选择定价和缩放层:对于本教程,可使用免费 F1 层;

资源组:创建资源组或选择现有资源组;

位置:选择托管 IoT 中心的位置。

3、选择 IoT 中心配置选项后单击“创建”。Azure 可能需要几分钟来创建 IoT 中心,若要查看创建进度,可在“启动板”或“通知”面板中查阅。

4、成功创建 IoT 中心后,在 Azure 门户中单击 IoT 中心对应磁贴,打开 IoT 中心的边栏选项卡。记下“主机名”,然后单击“共享访问策略”。

5、在“共享访问策略”边栏选项卡中,单击“iothubowner”策略,然后复制并记下“iothubowner”边栏选项卡中的 IoT 中心连接字符串。                                                                                

记下结果中的设备连接字符串。设备应用将使用此设备连接字符串以设备身份连接到 IoT 中心。

Step 3:用直接方法触发更新

随后创建一个 Node.js 控制台应用,以便在设备上启动远程固件更新。该应用使用直接方法启动更新,并使用设备孪生查询来定期获取活动的固件更新的状态。

1、新建名为 triggerfwupdateondevice 的空文件夹。在该文件夹的命令提示符处,使用以下命令创建package.json 文件。接受所有默认值:                                                             

9、保存并关闭 dmpatterns_fwupdate_service.js 文件。

第 4 步:创建模拟设备应用程序

接下来需要执行下列操作:

  • 创建一个 Node.js 控制台应用,用于响应通过云调用的直接方法
  • 触发模拟的固件更新
  • 使用报告属性,允许通过设备孪生查询标识设备及其上次完成固件更新的时间

具体过程如下:                                                                                                                                                                                                                                                                

9、添加通过报告属性将固件更新状态更改为“正在下载”的以下函数。然后该函数会模拟固件下载,并最终将固件更新状态更新为“downloadFailed”(下载失败)或“downloadComplete”(下载完成):                                                                                                                                                                                                                             

10、添加通过报告属性将固件更新状态更改为“正在应用”的以下函数。然后该函数会模拟固件映像应用,并最终将固件更新状态更新为“applyFailed”(安装失败)或“applyComplete”(安装完成):                                                                                                                                                                                                                                        

11、添加处理 firmwareUpdate 直接方法并启动多阶段固件更新过程的以下函数:                                                                                                                                                      

12、最后添加以下代码,以便连接到 IoT 中心:                                                                                                                                                                                                            

注意:为简化起见,本教程不实现任何重试策略。生产代码中应按 MSDN 文章 Transient FaultHandling(暂时性故障处理)中所述实施重试策略(例如指数性的回退)。

第 5 步:运行应用

至此已经准备就绪,可以运行应用来更新固件了。步骤如下:

1、在 manageddevice 文件夹的命令提示符处,运行以下命令进行直接重启方法的侦听。

2、在 triggerfwupdateondevice 文件夹的命令提示符处运行以下命令,以便触发远程重启并查询设备孪生了解上次重新启动时间。

3、可以在控制台中看到设备对直接方法的响应。

通过这样的方式,我们就可以根据需要为物联网边缘设备更新固件了。

 推 荐 阅 读 

如果你的物联网平台使用了 .Net 和 C# 语言,也可以通过类似方式进行更新,具体方法可参阅:

使用设备管理启动设备固件更新(.NET/Node)

Azure IoT 平台对不同开发语言、工具和框架提供了完善的支持。你可以使用不同语言完成相同的任务,资源在此:

处理设备到云的消息:.Net | Java

发送云到设备的消息:.Net | Java | Node

使用直接方法:Node.js | .Net/Node

计划和广播作业:Node.js | .Net/Node 

立即访问http://market.azure.cn

时间: 2024-12-28 22:19:09

Azure IOT 设备固件更新技巧,看这一篇就够了的相关文章

基于libUSB的USB设备固件更新程序(下载数据)(转)

源:基于libUSB的USB设备固件更新程序(下载数据) 本文紧接上一篇日志:基于libUSB-Win32的USB设备固件更新程序(前言),相关背景以及起因等,此处不再赘述,如感兴趣请移步. libUSB-Win32给出的example里面,有一个bulk.c文件,分析其关键代码,结合libusb官方文档,摘出其关键代码如下: int main(void) { usb_dev_handle *dev = NULL; /* the device handle */ usb_init(); /* i

Java中的多线程你只要看这一篇就够了

Java中的多线程你只要看这一篇就够了 引 如果对什么是线程.什么是进程仍存有疑惑,请先Google之,因为这两个概念不在本文的范围之内. 用多线程只有一个目的,那就是更好的利用cpu的资源,因为所有的多线程代码都可以用单线程来实现.说这个话其实只有一半对,因为反应"多角色"的程序代码,最起码每个角色要给他一个线程吧,否则连实际场景都无法模拟,当然也没法说能用单线程来实现:比如最常见的"生产者,消费者模型". 很多人都对其中的一些概念不够明确,如同步.并发等等,让我

iOS动画详解(学习动画看这一篇就够了)

iOS动画详解(学习动画看这一篇就够了) 一.基础知识 CAAnimation.png 二.CABasicAnimation 1. 动画的属性和解释 2.属性值的解释 repeatCount : 如果在swift中需要一直不断重复:Float.infinity,OC:HUGE_VALF timingFunction: timingFunction.png kCAMediaTimingFunctionLinear--在整个动画时间内动画都是以一个相同的速度来改变.也就是匀速运动.一个线性的计时函数

Java中的多线程=你只要看这一篇就够了

如果对什么是线程.什么是进程仍存有疑惑,请先Google之,因为这两个概念不在本文的范围之内. 用多线程只有一个目的,那就是更好的利用cpu的资源,因为所有的多线程代码都可以用单线程来实现.说这个话其实只有一半对,因为反应“多角色”的程序代码,最起码每个角色要给他一个线程吧,否则连实际场景都无法模拟,当然也没法说能用单线程来实现:比如最常见的“生产者,消费者模型”. 很多人都对其中的一些概念不够明确,如同步.并发等等,让我们先建立一个数据字典,以免产生误会. 多线程:指的是这个程序(一个进程)运

[转]关于深度学习,看这一篇就够了

关于深度学习,看这一篇就够了 原文地址:http://www.dlworld.cn/XueXiSuanFa/13.html [日期:2016-04-26] 来源:36氪  作者: [字体:大 中 小] 编者按:本文作者王川,投资人,中科大少年班校友,现居加州硅谷,个人微信号9935070,36 氪经授权转载自其个人微信公众号 investguru. 一 2016 年一月底,人工智能的研究领域,发生了两件大事. 先是一月二十四号,MIT 的教授,人工智能研究的先驱者,Marvin Minsky 去

中后台产品的表格设计,看这一篇就够了(原型规范下载)

中后台产品的表格设计,看这一篇就够了(原型规范下载) 2018年4月16日luodonggan 中后台产品的表格设计,看这一篇就够了(原型规范下载) 经过了将近一年的后台产品经历,踩了很多坑,试了很多错,也学习到了很多东西,目前也形成了自己的一套规范.本文将其中的部分收获汇总成文,希望能够对大家有所帮助. 后台产品有一个很重要.常见的元素,就是表格.表格承担着详情入口.数据展示的功能,看似简单,其实里面的细节特别多.在以效率为最重要的需求的后台产品中,如何设计一个能够高效率地进行查看和编辑的表格

关于 Docker 镜像的操作,看完这篇就够啦 !(下)

原文:关于 Docker 镜像的操作,看完这篇就够啦 !(下) 紧接着上篇<关于 Docker 镜像的操作,看完这篇就够啦 !(上)>,奉上下篇 !!! 镜像作为 Docker 三大核心概念中最重要的一个关键词,它有很多操作,是您想学习容器技术不得不掌握的.本文将带您一步一步,图文并重,上手操作来学习它. 目录: 一.Docker 删除镜像 1.1 通过标签删除镜像 1.2 通过 ID 删除镜像 1.3 删除镜像的限制 1.4 清理镜像 二.Docker 创建镜像 2.1 基于已有的镜像创建

源码时代前端干货分享| AE如何实现文字消散效果?看这一篇就够了!

源码时代前端干货分享| AE如何实现文字消散效果?看这一篇就够了!首先:1.新建合成IMAge012.新建一个纯色层做背景(如果自带背景可以忽略)02 3.新建文本图层034.打上文字,调整文字大小,让文字在画布中居中04 然后:5.给文字添加一个蒙版05 6.在0秒的位置的蒙版路径打上关键帧067.0秒的时候蒙版路径最大,3秒的时候蒙版路径最小078.继续添加蒙版羽化089.再新建一个合成为置换0910.新建一个纯色的白图层1011.给它添加一个蒙版1112.在蒙版路径上打上关键帧13.0秒的

用markdown写博客,看这一篇就够了,附markdown文件分享

0. 前言 为什么用markdown写博客? 在写博客的过程中,最大的"痛点"在于写作中总是被"格式"之类的困扰,无法专注于内容写作: 在线写博客,会被网络或者编辑器本身所拖累: 本文介绍的markdown写作,可以使你专注于博客内容本身,写好即成稿: 更重要的是,博客内容及相关素材保存在本地,可以几乎不用修改就可以发布在不同的平台,类似java程序的"一次编写,到处运行". 记得上次用markdown写博客,尽管我有markdown使用经验,但