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

本项目的交流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而推行的项目。所以,要想让物联网真正改变生活,还是很需要这样的复合型人才来填补产业与技术之间的鸿沟,让物联网真正的成为一个市场驱动型的产业,这样整个行业才有未来。

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

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

相关文章

vue的axios使用!

什么是axios? 1.axios是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中, 也是 vue 官方推荐使用的 http 库;封装axios,一方面为了以后维护方便,另一方面也可以对请求进行自定义处理。 如何安装? npm in…

HTTP和HTTPS的区别及HTTPS的工作原理

一、HTTP和HTTPS的区别 1、安全性 HTTP:HTTP是明文传输的,这意味着数据在传输过程中不加密,容易受到中间人攻击。敏感信息,如密码和信用卡号,如果通过HTTP传输,可能会被窃取。HTTPS:HTTPS使用SSL(Secure Sockets Lay…

网络攻击日益猖獗,安全防护刻不容缓

“正在排队登录”、“账号登录异常”、“断线重连”......伴随着社交软件用户的一声声抱怨,某知名社交软件的服务器在更新上线2小时后,遭遇DDoS攻击,导致用户无法正常登录。在紧急维护几小时后,这款软件才恢复正常登录的情况。 这…

有哪些好用电脑端时间定时软件?桌面日程安排软件推荐 桌面备忘录

随着现代生活节奏的加快,人们对于时间管理和任务提醒的需求越来越大。为了满足这一需求,市场上涌现出了众多桌面便签备忘录软件,它们不仅可以帮助我们记录待办事项,还能定时提醒我们完成任务。在这篇文章中,我将为大家…

WebGIS面试题(第六期)-GeoServer

WebGIS面试题(第六期) 以下题目仅为部分题目,全部题目在公众号 {GISer世界} ,答案仅供参考!!! 因为本人之前做过相关项目用到了GeoServer,因此在简历上写了熟悉GeoServer。所以在相关面试中都有问到,所以我…

【Unity动画系统】详解Root Motion动画在Unity中的应用(一)

Root Motion动画与普通动画的区别 普通动画:动画文件里记录的是物体的绝对坐标和方向,在播放动画时,Unity会根据Animation中记录的值,直接修改游戏对象的坐标和方向,每一帧的坐标和方向都是通过插值计算得出来的&…

2013NOIP普及组真题 1. 计数问题

线上OJ: 一本通:http://ybt.ssoier.cn:8088/problem_show.php?pid1961 核心思想: 本来想找规律,后来发现本题的数据范围不大,n为 1 0 6 10^6 106,即使每一位都判断一次,最坏的情况下时间复杂度…

ubuntu20部署ceph17

# 配置3个节点ubuntu 20操作系统源 cat /etc/apt/sources.list deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse deb http://mirrors.aliyun.co…

Int4:Lucene 中的更多标量量化

作者:来自 Elastic Benjamin Trent, Thomas Veasey 在 Lucene 中引入 Int4 量化 在之前的博客中,我们全面介绍了 Lucene 中标量量化的实现。 我们还探索了两种具体的量化优化。 现在我们遇到了一个问题:int4 量化在 Lucene 中是如何工作的以…

git clone 报错 记录

问题 $ git clone http://***.git Cloning into … remote: Enumerating objects: 110841, done. remote: Counting objects: 100% (110841/110841), done. remote: Compressing objects: 100% (46725/46725), done. error: RPC failed; curl 18 transfer closed with outstand…

微服务之并行与分布式计算

一、概述 1.1集中式系统vs分布式系统 集中式系统 集中式系统完全依赖于一台大型的中心计算机的处理能力,这台中心计算机称为主机(Host 或 mainframe ),与中心计算机相连的终端设备具有各不相同非常低的计算能力。实际上大多数终…

额外加餐-关于使用bitmap来解决缓存穿透的方案

[外链图片转存中…(img-OyLw7puy-1712760065604)] 代码 UserController GetMapping("/sign/count") public Result signCount(){return userService.signCount(); }UserServiceImpl Override public Result signCount() {// 1.获取当前登录用户Long userId User…

[前端] todoList制作

知识点回顾 后代选择器 可以使用多个选择器每个选择器之间用空格分开。只要是后代就会被选择如 <style>div a{color: red;} </style> <div><a href"">我是儿子</a><p><a href"">我是孙子</a></p>…

【ARM 裸机】BSP 工程管理

回顾一下上一节&#xff1a;【ARM 裸机】NXP 官方 SDK 使用&#xff0c;我们发现工程文件夹里面各种文件非常凌乱&#xff1b; 那么为了模块化整理代码&#xff0c;使得同一个属性的文件存放在同一个目录里面&#xff0c;所以学习 BSP 工程管理非常有必要。 1、准备工作 新建…

校车车载4G视频智能监控系统方案

一、项目背景 随着社会的快速发展&#xff0c;校车安全问题日益受到人们的关注。为了提高校车运营的安全性&#xff0c;保障学生的生命安全&#xff0c;我们提出了一套校车车载4G视频智能监控系统方案。该系统能够实时监控校车内部和外部环境&#xff0c;及时发现并处理潜在的…

沪深websocket level2/level1行情推送接入示例

行情接入包 golang packge: package hangqingimport ("bufio""bytes""compress/flate""encoding/json""github.com/gorilla/websocket""io/ioutil""log""net/http""net/url"&quo…

【方案解决思路】RPC服务器不可用

当在SCCM服务器上使用wmic /node:<客户端IP> process list命令时&#xff0c;如果遇到“RPC服务器不可用”的错误&#xff0c;这通常意味着SCCM服务器无法通过RPC协议与远程客户端通信。以下是一些可能的解决步骤&#xff1a; 检查远程客户端的RPC服务&#xff1a; 确保远…

C++下跨平台websocket库及使用示例

websocketpp库使用非常方便&#xff0c;开源&#xff0c;可跨平台&#xff0c;内部实现全部是head文件&#xff0c;无cpp&#xff0c;接口简单易用。源码路径比如 https://github.com/zaphoyd/websocketpp.git 使用方法是&#xff0c;先下载源码包并复制道工程的include目录下…

OpenResty 操作 Redis 和 MySQL

OpenResty 是一个基于 Nginx 的 Web 开发平台&#xff0c;它通过内置的方式集成了 LuaJIT&#xff0c;并内置了很多常用的第三方 Nginx 模块&#xff0c;使得开发人员可以使用 Lua 脚本来扩展 Nginx 的功能&#xff0c;这样就使得 OpenResty 可以非常方便地操作 Redis 和 MySQL…

springBoot加载配置文件

1. 说明 Spring Boot会自动加载application.properties或application.yml&#xff0c;所放置的位置如下表&#xff0c;所有位置的文件都会被加载&#xff08;互补配置&#xff09;&#xff0c;高优先级配置内容会覆盖低优先级配置内容。 自动加载配置文件的目录及优先级 位置优…