OTA实现设备升级方案

news2024/11/23 21:20:41

引言

空中下载技术(Over-the-Air Technology, OTA)是通过移动通信的空中接口实现对移动终端设备进行远程管理的技术。

该技术在IOT行业非常的重要,当随着市场上的产品越来越多,保有量也越来越多,随着时间的推移,很多设备的功能比较老旧,逐渐落伍。为了能远程帮助用户升级设备功能,降低产品的维护成本,OTA技术就起到了很重要的作用。

特别在智能汽车行业,OTA升级都成为厂商必吹的功能;前段时间理想的L7就推出了MAX版本,该版本就提供了一个非常高级的硬件设备,之后如果提出更高阶的自动驾驶程序,就可以通过OTA的方式,更新设备的自动驾驶能力。

既然OTA这么重要,那OTA升级的一个架构是怎样的呢?接下来结合自己的行业,来简单讲解下OTA升级的流程。

OTA升级架构

谈到对设备进行OTA升级,需要注意以下几点:

  • 什么时候升级,触发的来源
  • 规则判断,升级并不是对所有的设备
  • 设备升级中状态判断,升级超时判断
  • 升级日志记录

在这里插入图片描述

如图所示,是OTA升级的示意图,有两种OTA升级的触发方式,分别为Kafka设备上线事件、App主动查询;收到触发来源后,进行规则判断,判断该设备是否在本次的升级任务中,如果没有就直接结束,否则进入下一步进行模组判断,判断该模组和规则中是否一致,且版本低于规则中的版本,如果符合就将设备放入MQ中缓存起来,启动线程去对设备推送升级固件,推送后再将设备信息放入另一MQ中,然后在MQ中查询设备升级过程中的状态,当状态还在升级中,就将设备信息放入MQ中的重试队列中,直到重试2次后,返回升级状态,包括升级成功和升级失败两种状态,并把两种日志放入ES中进行记录。

结尾

以上就是OTA简要的升级方式,涉及的中间件较多,但整个流程比较好理解。

对于MQ的使用,可以参考我之前的文档。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/530679.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL 性能调优及生产实战篇(一)

前言数据建模方案、数据类型优化存储引擎选择合理使用范式、反范式字符集选择主键选择适当数据冗余适当拆分数据类型优化更小更好简单就好尽量避免 NULL具体优化细节整型字符、字符串类型datetime、timestamp枚举代替字符串类型特殊类型 索引优化索引用处索引分类技术名词 总结…

由浅入深RPC通信原理实战

目录 1 背景知识2 RPC概述3 RPC框架实现要点3.1 注册中心3.2 代理技术3.3 序列化技术3.4 RPC通信协议3.5 系统IO3.6 超时重试机制3.7 时间轮算法3.8 负载均衡策略3.9 熔断限流3.10 滑动窗口算法3.11 限流组件 1 背景知识 单体架构 RPC产生解决的问题: 序列化是指…

Ae:图层面板 - 视图选项

从图层面板 Layer Panel的“显示通道和色彩管理设置” Show Channel and Color Manage Settings按钮中可以选择各种视图模式,与 Alpha 通道相关的一些视图可直接通过图层面板左下方的按钮或者使用快捷键进行切换。 其它的视图选项(图层面板的最下方一行&…

基于PyQt5的图形化界面开发——PyQt示例_扫雷

基于PyQt5的图形化界面开发——PyQt示例_扫雷 前言1. 效果演示2. minesweeper.py3.图片文件其他文章 前言 今天来学习PyQt5的示例,其中主要涉及到一些触发函数窗口切换函数。 操作系统:Windows10 专业版 开发环境:Pycahrm Comunity 2022.3…

三分钟了解Spring Boot启动原理

大家通常只需要给一个类添加一个SpringBootApplication 注解,然后再加一个main 方法里面固定的写法 SpringApplication.run(Application.class, args); 那么spring boot 到底是如何启动服务的呢。 接下来咱们通过源码解析。 Spring Boot 的启动原理可以概括为以下几…

一篇吃透布隆过滤器(Bloom Filter)及其使用场景

目录 1、什么是布隆过滤器 2、布隆过滤器的原理 2.1 布隆过滤器的数据结构 2.2 布隆过滤器的检索和插入原理 2.3 布隆过滤器元素的修改和删除 3、布隆过滤器的使用场景 3.1 Redis通过布隆过滤器防止缓存穿透 3.2 RocketMQ通过布隆过滤器防止消息重复消费 4、布隆过滤器…

DAPP开发(三)——智能合约开发

智能合约 Remix IDE 是开发以太坊智能合约的在线IDE工具,部署简单的智能合约非常方便。 http://remix.ethereum.org truffle 一个世界级的智能合约开发框架,专为智能合约而生。 管理智能合约的生命周期自动化合约测试可编程,可部署&…

linux安装jupyter notebook

目录 使用miniconda的conda安装 切换conda镜像源有两种方法: 设置密码: 修改配置文件: 启动 关闭进程: 使用miniconda的conda安装 conda install jupyter 如果镜像不好用则切换conda镜像源 切换conda镜像源有两种方法: 1. [shuqiqshuqiq bin]$ ./conda config --add…

MyBatis - 基础使用Ⅰ

这篇文章将讲解MyBatis的基础使用,MyBatis的学习是非常重要的,在前面学习servlet的时候,我们就能感受到将数据持久化存储的重要性,当时在使用JDBC的时候非常繁琐麻烦,但是在Spring里,提供了一种框架可以轻松…

真题详解(传引用)-软件设计(七十五)

真题详解(补码转换)-软件设计(七十四)https://blog.csdn.net/ke1ying/article/details/130674214 分治算法技术设计______。 答案:1、问题划分 2、递归求解 3、合并解 虚拟存储体系_____两级构成。 解析:主存 和 辅…

vue项目打包成桌面应用并修改图标

目录 1. 打包为桌面应用 2.修改图标 1. 打包为桌面应用 1.在vux项目的终端执行打包 npm run build 2.会在项目文件夹里面出现一个dist文件夹 里面有这几个文件组成 3.在这里需要添加一个 package.json 文件 package.json 内容 {"name": "鼠标放图标上面的提…

环形链表解释约瑟夫问题

环形链表解释约瑟夫问题 来自尚硅谷开放课程的迁移学习,致敬尚硅谷的各位老师,受益匪浅!!! 单向链表,双向链表,环形链表对比介绍 单向链表、双向链表和环形链表都是常见的链表数据结构&#…

介绍如何在 MySQL 中创建新用户并授予权限?

MySQL 是一个开源的关系型数据库管理系统,常用于存储和管理大量的结构化数据。在使用 MySQL 进行数据管理时,为了安全和方便管理,通常需要创建新用户并授予相应的权限。本文将介绍如何在 MySQL 中创建新用户并授予权限的方法。 创建新用户 在…

第十一章结构性模式—组合模式

文章目录 组合模式解决的问题概念结构 实例组合模式的分类优点使用场景 结构型模式描述如何将类或对象按某种布局组成更大的结构,有以下两种: 类结构型模式:采用继承机制来组织接口和类。 对象结构型模式:釆用组合或聚合来组合对…

shell脚本之“awk“命令

文章目录 1.awk工作原理2.awk命令演示操作部分2.1 按行输出文本演示操作2.2 BEGIN模式演示操作2.3 按字段输出文本演示操作2.4 通过管道、双引号调用Shell命令2.5 date命令演示操作2.6 getline参数详解2.7 awk命令的数组操作 3. 总结 1.awk工作原理 逐行读取文本,默…

位域和字节对齐

结构体中的位域 位域是一种特殊的结构体成员,它允许将一个字节或多个字节中的每个位作为一个独立的成员来使用。位域的语法形式为: struct {type [member_name] : width; }; 其中,type 表示位域成员的类型,可以是 int、unsigne…

网络编程——TCP编程

TCP编程 流程服务器客户端 函数接口1、socket2、bind3、listen4、accept5、recv6、send7、connet 实现双工通信server.ccelient.c优化代码 流程 在C语言中进行TCP编程的一般步骤如下: (1)包含头文件: 在代码中包含必要的头文件&a…

面对象QgsPolygon

几何对象中的面用QgsPolygon进行封装,也称为多边形简单的多边形是由一串点连接而成,并首尾闭合多边形的结构更复杂,除了有一个外部轮廓,还可能包括内部多个轮廓 创建面对象 QgsPolygon() #创建一个空的面 使用setExteriorRing设…

Spring AOP 实践指南

Spring AOP 实践指南 文章目录 Spring AOP 实践指南一、概述1、简介2、官方资料3、本文档说明 二、基本使用1、引入依赖2、定义切面3、定义切点4、创建 HelloController5、启动项目,访问测试 三、通知1、概述五种通知通知的顺序 2、通知方法接受的参数3、前置通知代…

Thread线程学习(1) 了解线程的基本知识——什么是线程

本专栏将记录有关线程方面的知识 在计算机科学领域中,线程(Thread)是一种执行计算机程序的基本单元。对于初学者来说,理解线程是学习并发编程的关键一步。本文将带你了解线程的基础知识,包括线程的定义、线程与进程的关…