物联网实战--平台篇之(一)架构设计

本项目的交流QQ群:701889554

物联网实战--入门篇https://blog.csdn.net/ypp240124016/category_12609773.html

物联网实战--驱动篇https://blog.csdn.net/ypp240124016/category_12631333.html

一、平台简介

        物联网平台这个概念比较宽,大致可以分为两大类,一类是行业物联网平台,面对的政企客户,定制化程度比较高,例如智慧消防平台,需要跟现有业务做对接;一种是通用物联网平台,就像小米智能家居一样,用户就是普通个人,下载一个APP就能使用设备了。不管是哪种平台,它的核心底层功能都是承载设备的连接、管理和数据存储,是用户与设备的连接纽带。

        所谓平台,其实就是一个或多个运行在服务器的软件了,这个软件涉及的知识点和技术栈会比较多,以下是一个常规的物联网平台的架构图(来自IOT-DC3),仅供参考。

二、平台定位

        这里有一些开源的物联网组件和平台盘点 12 个物联网开源项目,yyds! - 知乎,总的来讲,这些平台的技术栈过多、设计思想类似、体系过于臃肿,看似什么都能干,但在实际项目中却很难达到理想效果,因为中间件过多,有时候一个数据可以延时好几秒,甚至中间件掉链子,无法到达终端,在定位问题时经常是踢皮球,整个开发体系沟通成本过高,这是目前很多物联网公司的通病。

        总的来讲,还是定位和设计思想的问题,很多公司在设计物联网平台时候心都很大,都是要包罗万象的,MQTT、Coap、LORA、OPC、BACNet、modbus什么协议都要支持,电力、消防、水务各个行业都要能应用,地图、3D、BIM、数字孪生哪个高端整哪个,到头来基本上是老板强推、一线骂娘。这一类的物联网平台往往是政策驱动的,而不是市场驱动的。

        在从事物联网行业期间,自己也一直在找有没有简单、实用、高可靠性的物联网平台,只需要基础的设备接入和管理功能,让我可以把心思放在用户需求分析、产品设备的定义和开发上。其实米家生态是一个比较合适的对象,只不过它更倾向于消费级的商业化产品,对接一个产品前后可能要花几千甚至几万的成本,还有很多协议需要遵守。结合学习的需求,最终觉得还是得自己设计一个平台软件,对标的就是米家这种类型的,针对个人用户,用户拿到设备后只需要简单添加就可以使用了。

三、架构设计

        上图是平台架构图,主要由五部分组成:设备端、MQTT服务器、用户端、数据服务器和应用服务器。其中,MQTT服务器是中心,负责数据的路由转发,其它各模块通过话题的定义进行交流。

        在设计目标中,简单和高可靠性是两个比较重要的指标,所以设备端和用户端(主要是手机APP)采用端到端的通讯,中间除了MQTT服务器做数据转发外没有其它中间件,设备发送的数据到手机端直接解析和显示,很大程度上也降低了延时,提升了体验感;另外,即使应用服务器和数据服务器都宕机了,短时间内也不会影响用户对设备的使用和操控。而在传统的物联网平台设计中,数据需要汇集到统一的中心进行处理,然后再转发到用户端,这个过程只要数据处理服务停止运行,用户就收不到数据了,而且在设备数量上升后,对服务器的压力也会变大,意味着需要升级硬件、增加很多的服务器成本。

        应用服务器主要是对账户、应用和设备进行管理,属于常规的、各个平台都会有的内容,其主要还是跟用户端进行交互;数据服务器的作用是存储设备数据,同时实时解析设备的数据包内是否包含紧急的报警信息,这样才能及时通知用户。

        那么,使用这么一个端到端平台对于物联网开发会有什么好处呢?这个话题得回到 “物联网” 三个字本身,首先得要有物,其次才是联网,物也就是产品,跟用户直接接触的东西,大家在买智能家居产品的时候应该都有这么一个感觉--设备才是我自己的,软件和联网等功能是附加体验,决定我买不买的主要因素还是设备本身的价格和功能,平台软件很难成为决定因素。但是,在现有的开发体系中,设备端往往没有很大的话语权,一切都是以平台为中心的,很多协议、功能都只能适应平台,这也导致了很多设备产品的定义和设计只能妥协,用户体验自然就下降了。平台用端到端的设计后,设备端和用户端的定义可以自行决定,平台方无需增加开发,降低了沟通成本,提升了设备端的自主权。这样说可能比较抽象,举个例子,比如一个温度传感器,要设置报警温度阈值,我现在用过的几个产品都是把这个阈值放在平台数据库内,平台根据设备上报的温度数据进行对比,超过阈值就进行报警推送,整体逻辑没什么问题,但是体验感和可靠性上是不太行的,首先设备多久上报一次数据?有的几秒,有的几分钟,如果上报周期太长导致报警延迟,可能会导致严重的后果。比如工厂化鸡舍,如果通风系统或者制冷设备故障,高密度养殖会导致温度迅速上升,如果没有及时预警处理,可能会对用户造成极大的损失。如果把这个阈值设置在设备内部,那温度检测都是毫秒级别的,基本上能在5秒内发出报警信息。这里只是大概举例,核心要说明的问题其实还是设备端跟平台端在协议对接上的交流成本是挺高的,两边的开发人员都是站在自己的角度考虑问题,容易发生矛盾。比如对于平台来讲协议如果用json这样的文本是最好的了,简单明了,但是对于设备端来说资源受限,一般采用二进制形式,而且对于采用4G的设备来说,流量也是个大问题。所以说,这就是采用端到端开发产品的好处了,设备端可以自定义协议内容,减少沟通成本。后面等这个平台软件开发完成后,我们就会不断地用这种模式去开发各式各样的硬件产品,效率极高。

四、开发规划

        依据上面的架构图,我们主要的工作量还是在应用服务器和用户端的对接开发,包含了帐号注册、登录,密码修改,子账户管理,应用管理,分组管理,设备管理,手机验证码,扫码添加,报警消息通知等等。对于APP的设计,我们还是参考米家APP,UI设计是技术人员的短板,还是直接模仿比较快,当然了,很多冗余的东西也会删除,毕竟人家是商业性的APP了,我们这个主要还是为了学习用的,下面放一张APP截图作为参考。

        在开发技术上,我们全部使用Qt进行开发,包括服务器相关的程序和手机APP,当然了只要你理解了技术原理和设计思想,那么你用Java和安卓开发都是可以的,不限具体的技术形式。

        接下来,每一篇文章都会对新的功能模块进行开发,开发完后上传,一步一步完成,沉浸式体验整个过程,让大家在学习过程中理解物联网整个体系的设计原理和开发思维,同时掌握实战性的开发技巧。

        最后,回答一个经常有人问的问题,很多物联网专业的同学看到自己要学的内容那么多、那么杂,瞬间失去了兴趣和方向,不自觉地灵魂拷问:物联网的出路在哪里?我个人的观点是三个方向:

1、纯粹做技术,那你把物联网各个环节中的某一个环节学精来就行了,比如嵌入式、硬件设计、后台开发、前端开发等等,选一个自己感兴趣的深入学习,然后早点去找个公司实习,积累经验,这样未来找工作的时候简历就很丰富了,竞争力也就强了;

2、市场销售,物联网销售还是需要有点技术底子的,至少表面功夫得学一学,跟客户交流这是基本功了,还要有比较好的新知识的吸收能力,比如让你去给客户推销NB烟感,客户问你电池多大容量的,一天发送几次,大概能用几年,电信和移动的啥区别,用的谁家模组,报警声音几分贝,这些问题常规的销售应该是搞不定的,更何况还有更深入的问题,比如电池仓库放太久没安装,钝化了怎么办?物联网设备的销售主要还是以量取胜,谈一单往往出货量是比较可观的,够你吃一阵子了。

3、市场发掘,这个要求你是复合型人才,创业型选手,既要懂技术,又要懂产业,深入了解某个产业中的痛点和刚需,并分析出产品如何设计才能更好地适应当前产业,让用户乐意买单,这里面产业、技术、需求、成本、管理、产品各个环节缺一不可,这也是未来物联网发展的一个新契机。就目前来讲,物联网有点不温不火,风头早已经不能跟人工智能和机器人相提并论了,甚至很多物联网企业都快倒闭了,不过这在起初就可以预知的,2018年后的那几年,虽然概念火热,但是参与其中会发现物联网技术并未解决太多生活中的刚需问题,更多的是为了KPI而推行的项目。所以,要想让物联网真正改变生活,还是很需要这样的复合型人才来填补产业与技术之间的鸿沟,让物联网真正的成为一个市场驱动型的产业,这样整个行业才有未来。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

为什么要学音视频?

一直都在说“科技改变生活”,现实告诉我们这是真的。 随着通信技术和 5G 技术的不断发展和普及,不仅拉近了人与人之间的距离,还拉近了人与物,物与物之间的距离,万物互联也变得触手可及。 基于此背景下,音…

C++面经(简洁版)

1. 谈谈C和C的认识 C在C的基础上添加类,C是一种结构化语言,它的重点在于数据结构和算法。C语言的设计首要考虑的是如何通过一个过程,对输入进行运算处理得到输出,而对C,首先要考虑的是如何构造一个对象,通…

Node.js -- 包管理工具

文章目录 1. 概念介绍2. npm2.1 npm 下载2.2 npm 初始化包2.3 npm 包(1) npm 搜索包(2) npm 下载安装包(3) require 导入npm 包的基本流程 2.4 开发依赖和生产依赖2.5 npm 全局安装(1) 修改windows 执行策略(2) 环境变量Path 2.6 安装包依赖2.7 安装指定版本的包2.8 删除依赖2.…

jenkins教程

jenkins 一、简介二、下载安装三、配置jdk、maven和SSH四、部署微服务 一、简介 Jenkins是一个流行的开源自动化服务器,用于自动化软件开发过程中的构建、测试和部署任务。它提供了一个可扩展的插件生态系统,支持各种编程语言和工具。 Jenkins是一款开…

PotatoPie 4.0 实验教程(27) —— FPGA实现摄像头图像拉普拉斯边缘提取

拉普拉斯边缘提取有什么作用? 拉普拉斯边缘检测是一种常用的图像处理技术,用于检测图像中的边缘和边界。它的主要作用包括: 边缘检测:拉普拉斯算子可以帮助检测图像中的边缘,即图像中亮度快速变化的位置。这些边缘通常…

前端HTML5学习2(新增多媒体标签,H5的兼容性处理)

前端HTML5学习2新增多媒体标签,H5的兼容性处理) 分清标签和属性新增多媒体标签新增视频标签新增音频标签新增全局属性 H5的兼容性处理 分清标签和属性 标签(HTML元素)和属性,标签定义了内容的类型或结构,而…

RocketMQ 消息重复消费

现象 触发消息后,在1s内收到了两次消息消费的日志。 消息消费日志重复,reconsumeTimes0,主机实例也不同,说明是同一条消息被消费了两次 分析 生产者发送消息的时候使用了重试机制,发送消息后由于网络原因没有收到MQ…

永磁同步电机PMSM负载状态估计simulink模型

永磁同步电机PMSM负载状态估计simulink模型,龙伯格观测器,各种卡尔曼滤波器,矢量控制,坐标变换,永磁同步电机负载转矩估计,pmsm负载转矩测量,负载预测,转矩预测的matlab/simulink仿真…

【C++】---STL容器适配器之queue

【C】---STL容器适配器之queue 一、队列1、队列的性质 二、队列类1、队列的构造2、empty()3、push()4、pop()5、size()6、front()7、back() 三、队列的模拟实现1、头文件(底层:deque)2、测试文件3、底层:list 一、队列 1、队列的…

【NR RedCap】Release 18标准中对5G RedCap的增强

博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 本人就职于国际知名终端厂商,负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G技术研究。 博客内容主要围绕…

R语言贝叶斯方法在生态环境领域中的应用

贝叶斯统计已经被广泛应用到物理学、生态学、心理学、计算机、哲学等各个学术领域,其火爆程度已经跨越了学术圈,如促使其自成统计江湖一派的贝叶斯定理在热播美剧《The Big Bang Theory》中都要秀一把。贝叶斯统计学即贝叶斯学派是一门基本思想与传统基于…

使用微信开发者工具模拟微信小程序定位

哈喽,各位同僚们,我们平时在测试微信小程序的时候,如果小程序中有获取定位或者地图的功能,测试场景中常常需要去模拟不同的位置,例如我们模拟在电子围栏的外面、里面和边界区域等。那么,我们如何在模拟微信…

[笔试训练](八)

目录 022:求最小公倍数 023:数组中的最长连续子序列 024:字母收集 022:求最小公倍数 求最小公倍数_牛客题霸_牛客网 (nowcoder.com) 题目: 题解: 求最小公倍数公式:lcm(a,b)a*b/gcd(a,b)&am…

创建springboot项目的问题

IDEA搭建spring boot时报错Error: Request failed with status code 400 Could not find artifact org.springframework.boot:spring-boot-starter-parent:pom:3.2.5.RELEASE in alimaven (http://maven.aliyun.com/nexus/content/repositories/central/) 原因是父级依赖的版本…

Web前端开发 小实训(一) 成绩分类统计

用于学生web前端开发课程实训练习,掌握基本语法和数据类型 实训目的 使用分支语句,完成分数统计与等级对比,通过输入框输入分数,可以根据分数多少划分等级。 参考思路: 分析题目:根据输入分数进行等级划分。 操作过…

yolov8 dll 编译

1. 每次用yolo v8 都要用python ,对于我这种写软件的太不方便了,下面尝试编译dll 调用, 我已经有做好的模型.best.pt 参考视频方法: yolov8 TensorRT C 部署_哔哩哔哩_bilibili 【yolov8】tensorrt部署保姆级教程,c版_哔哩哔哩_bilibili 需…

怎么做视频二维码更方便?在线一键生成视频活码二维码

现在经常会发现很多的二维码可以用来展示视频内容,通过这种方式来实现视频的快速分享与传播。二维码是一种成本低传播快的内容传播方式,很多的内容都可以通过生成二维码的方式来分享给其他人,可以同时扫描相同的二维码来获取内容,…

电脑的无用设置功能(建议关闭)

目录 1、传递优化 ​2、常规​ 3、电源 1、传递优化 2、常规3、电源

Vue2和Vue3的生命周期对比

beforeCreate 、created 两个钩子被setup()钩子来替代。 所有生命周期前面加了on

【Kotlin】Channel简介

1 前言 Channel 是一个并发安全的阻塞队列,可以通过 send 函数往队列中塞入数据,通过 receive 函数从队列中取出数据。 当队列被塞满时,send 函数将被挂起,直到队列有空闲缓存;当队列空闲时,receive 函数将…