当前位置:首页 期刊杂志

基于微服务架构的智慧楼宇管理系统设计

时间:2024-05-04

李宏顺 卜宗炜 闭传琦 宋俊慷

(广西民族师范学院数理与电子信息工程学院 广西壮族自治区崇左市 532200)

1 引言

随着科技不断进步和人民对便捷生活方式的需求日益增长,智慧化的楼宇项目如雨后春笋般纷纷落地,城市信息化建设得到了迅速发展,人们生产生活方式得到转变、社会治理模式也随着发生变革。智慧楼宇是集成数字化技术、信息通信技术,开展建筑空间、智能设备、信息化软件和一体化设计及应用,实现楼宇智能信息集成、设备优化控制和空间综合管理。根据智慧楼宇理念为小区物业门禁管理提供无人、便捷且自动化的数字管理系统,在完成整栋楼的数据共享基础上,配合传感器、执行器群和赋予机器视觉能力的网络摄像头,实现楼宇智慧管控。

经过多年技术演进,互联网项目从早期的单体架构发展到垂直架构、分布式架构、SOA(Service-Oriented Architecture)架构最后演进到微服务架构。单体架构是将所有功能模块部署在同一台服务器上,该架构结构简单部署快捷,但存在项目启动慢、可靠性差、可伸展性差、扩展性和可维护性差等诸多缺点。垂直架构的出现一定程度上解决了单体架构的部分问题,但是它将单体架构的模块拆分成两个及以上的独立项目,如果独立项目之间需要使用同一类功能,在部署时需要分别部署该模块,存在重复功能太多的问题。分布式架构是在垂直架构的基础上演进而来,将公共的功能抽离出来,作为独立的服务模块为系统调用者实现服务复用,服务之间的调用基于RPC(Remote Procedure Call)的方式实现,该架构仍存在单体架构中提到的可维护性差等问题。SOA与微服务架构出现使上述缺点得到解决,SOA是一个组件模型,它将服务拆分并通过接口与契约实现交互,引入ESB(Enterprise Service Bus)服务中介的概念,作为各个服务之间交互的中间件,使得各个服务之间可以通过中间件进行调用,服务之间的变更不再相互受到影响。微服务架构是对SOA的升级改造,将单个系统拆分成一个个可独立开发、设计、测试、部署与运行的应用,各应用之间的交互通过HTTP(Hyper Text Transfer Protocol)的“RESTfuLAPI”实现,不受任何语言与平台的限制。综上所述微服务宗旨是将一个庞大的系统拆分成一个个服务模块,实现系统“高内聚,低耦合”的特点,其架构十分符合智慧楼宇管理系统稳定、快速、高扩展的核心需求。

2 系统总体设计

系统对原有传统楼宇管理系统进行改良与完善,基于传感器群和网络摄像头,在执行器群的配合下依托服务器和数据展示大屏,实现楼宇现场情况的实时监测与控制。以分层设计思想将系统功能划分为接入层、网络层、服务层三个部分。接入层负责采集数据,可分为“移动客户端”与“硬件群”两部分:基于微信小程序的移动客户端完成采集与变更用户数据、远程审核、实时查看传感器数据、控制执行器、自动下发定时任务等功能;以微控制器STM32为核心的传感、执行器群配合多路摄像头组成智能采集控制节点,通过串口连接的方式与X86架构工控机连接形成硬件群,由硬件群管理上位机对数据进行封装与解析。网络层负责实现接入层与服务层交互数据的传输工作,通过特定的网络方式将接入层数据上传至服务层,由服务层解析并处理后将反馈指令或数据再次通过网络层下发至接入层进行响应。服务层为整个系统提供数据存储、分析和计算的能力,是整个系统控制中枢,该层主要功能是接收网络层上传的业务请求,配合数据库与缓存将数据持久化并在需要时将数据调出进行分析处理,实现自动下发任务指令、返回业务请求。

3 硬件设计

系统硬件设计以STM32F103芯片为核心,配合传感器完成对数据的采集,依托执行器根据控制指令实现对控制对象的调节。数据指令利用JSON(JavaScript Object Notation)数据格式通过STM32串口传输与硬件群管理上位机进行信息交换。系统硬件流程分为四个线程,分别是初始化线程、传感器线程、执行器线程、上传数据线程。

系统首次运行进入初始化线程,根据不同外设初始化SMT32的IO端口、ADC端口、通信端口和内部定时器等模块;传感器线程用于控制SMT32读取传感器采集的数据,将其更新至STM32 flash内存中;执行器线控用于控制SMT32接收硬件群管理上位机下发的JSON数据,解析JSON数据中执行器的控制信息并保存,根据信息更新执行器工作状态;上传数据线程在定时器产生的溢出控制下,将存储在STM32 flash内存中的传感器数据与执行器状态指令封装为JSON数据格式并通过串口发送至硬件群管理上位机。系统硬件群控制主板实物如图1所示。

图1:系统硬件群控制主板实物图

4 硬件群管理上位机设计

硬件群管理上位机是接入层的硬件群与服务端软件进行数据双向交互的中间载体,其主要功能如下:读取硬件群中传感器数据和执行器参数发送至服务端;转发服务端软件下发的控制指令,操作执行器完成相应动作;读取楼宇摄像头数据并将检测到的面部数据保存后发送至服务端核验来访者身份。硬件群管理上位机的设计针对X86架构工控机可实现跨平台部署且对运行环境要求极低,只需安装相应的插件库即可在Windows或Linux系统上运行,即使全部线程同时工作,运行内存占用小于128MB, CPU(以酷睿四核为参考)使用率小于35%,在极低的资源占用下实时捕捉画面的帧率仍超过30FPS,相对于基于ARM的边缘计算单元性能十分可观。硬件群管理上位机功能结构如图2所示。

图2:硬件群管理上位机功能结构

硬件群管理上位机主要使用Python语言开发,PyQT5设计UI界面,采用多线程技术分别负责不同功能模块的运行。串口收线程读到传感器群数据和执行器群参数后进行编码,并将结果使用全局变量“serial InPut”存储后修改对应的标志位触发MQTT(Message Queuing Telemetry Transport)发线程,通过MQTT协议将数据发送至MQTT中间件等待被消费同时将“serial InPut”全局变量置为NULL值,完成一次传感器群数据和执行器群参数上报流程。MQTT收线程在完成自检后就成功连接至MQTT中间件,如果收到由服务端软件下发的数据包,则将其解析并完成编码存入“mqtt InPut”全局变量,交给串口发线程成功处理后将“mqtt InPut”全局变量置为NULL值,完成一次控制指令下发响应的流程。人脸捕捉线程和摄像头线程均是使用OpenCV库函数,通过串口或者网络数据流的方式读取摄像头的RGB数据矩阵,将其转换显示到硬件群管理上位机窗体对应的控件。人脸捕捉线程不但在每帧画面中找到人脸,而且通过从零归一化算法找到人脸的矩形坐标并生成面部照片发送至服务端,在串口收线程配合下,读取接收数据包中关于来访者与门禁的距离、体温等数据。当距离小于预设值时,系统则认为来访者需要通过门禁,此时人脸捕捉线程将来访者的面部数据与体温数据保存到内存中同时进行封装,由被触发的来访信息线程将封包的数据发送至服务器,服务器处理后返回来访者的信息,信息中的数据会被来访信息线程显示到对应的窗体控件,并且配合串口发线程控制执行器群的运行,完成一次无人无接触人脸识别、测温门禁运行流程,硬件群管理上位机实际效果如图3所示。

图3:硬件群管理上位机运行效果

5 数据展示大屏设计

数据大屏是运行在硬件群管理上位机的网页,基于HTML、JavaScript、CSS编写而成,通过异步AJAX (Asynchronous Javascript And XML And HTML)网络请求方式获取服务器的历史数据并直观的呈现在数据大屏显示器上,便于管理员更进一步掌握楼宇近况。数据展示大屏由六个历史数据模块与楼宇大门监控组成,数据模块每秒向服务器发送一次异步请求,返回的JSON数据用于更新图表,数据大屏实际效果如图4所示。

图4:数据大屏效果展示

6 移动客户端设计

移动客户端由用户引导、设备管理、数据存储等多个功能模块组成,其具体功能结构如图5所示。移动客户端分为管理端与用户端,管理端为楼宇管理者设计,用户端则面向楼宇的住户、访客。

图5:移动客户端功能结构

管理员使用管理端小程序,调用微信云函数获取“openid”,并以此为参数连接系统的服务器确认身份与权限。如果已注册则返回Token(一种具有时效性且高效的数字签名技术)等相关数据,并通过数据存储模块将获取到的信息存储到手机中,为后续进行其他业务做准备,同时跳过引导模块直接进入管理端UI。如果未注册则进入用户引导模块,随后填个人信息并通过扫描硬件群管理上位机的二维码,绑定系统硬件群并在连接MQTT中间件成功后,楼宇管理员即进入系统拥有本系统全部操作权限,随后进入管理端UI。成功进入管理端UI后,管理员可以通过基于HTTPS的网络请求方式审核楼宇住户的信息,对楼宇用户添加与删除,查看传感器群实时数据与历史数据,修改执行器群的参数并下发自动定时任务。用户端小程序启动的前导流程与管理端小程序类似,先获取“openid”并作为参数请求服务器确认身份,若未注册先进入用户引导模块由用户填写个人信息,选择对应楼宇管理员同时上传三张面部照片,管理员核验通过后即可进入用户端UI。若已注册并由管理员审核通过的用户可以直接进入用户端UI,成功后就可以正常通过人脸门禁,同时还可以使用一键邀请访客、变更个人信息、查看个人出入记录等功能。移动客户端部分界面如图6所示。

图6:移动客户端部分界面

7 服务端设计

服务端是智慧楼宇管理系统的核心部分,由五个微服务与多个非商业性质的开源项目组成,为系统提供数据存储、计算和分析能力,具体程序功能结构如图7所示。每个功能模块基于输入与输出的设计思想,配合数据库进行工作。

图7:服务端程序功能结构

自动任务管理模块可分为调度器与执行器。调度器接收设备管理微服务发送的任务表单,定时启动执行器执行原先编辑好的业务代码,移动客户端以Cron表达式(一种便于记载的时间表达式)、执行条件、选择的执行器等作为参数,向设备管理微服务发送自动任务请求,设备管理微服务收到请求后进行参数解析,使用HTTP调用任务调度器完成任务编排后返回处理结果给设备管理微服务,设备管理微服务向数据库与缓存Redis写入一条待执行任务并向移动客户端返回处理结果,完成一次自动定时任务的设置操作;执行器被激活时会根据“openid”查询数据库确定需要执行的任务,同时获取“openid”下对应硬件群设备的特定传感器前十秒平均数据,在分析是否要执行当前任务后通过MQTT协议进行任务下发,由硬件群响应执行,完成一次自动定时任务的执行工作。

1:N人脸比对模块承担系统对于面部数据的编码与比对工作。用户注册时用户管理微服务已将注册者的个人信息和面部图片编码存储到数据库并同步至缓存Redis中,当来访者想要通过门禁时,硬件群管理上位机控制摄像头和传感器,采集来访者的面部图片和体温数据等相关参数发送给用户管理微服务。用户管理微服务根据传入的面部照片调用人脸比对引擎逐一扫描比对缓存Redis中的数据,当Redis查无此人则查询数据库,如果成功匹配人脸数据则返回此人的信息否则返回NULL值,硬件群管理上位机根据返回的信息决定是否允许来访者通过门禁,完成一次无人无接触式人脸门禁流程。

MySQL数据库用于存储各种类型的数据,记录着各个字段作用、表与表之间的关系使系统每一个行为处于合理的状态。使用ER关系的概念,将数据库的表描述为多个实体,表示每个实体对象之间的关系、行为、属性等。在宏观上让表与表之间产生逻辑关系,使数据库表便于设计与理解。

8 总结

针对楼宇的管理需求,以微服务为设计架构结合云计算、机器视觉、传感器链路,设计了基于微服务架构的智慧楼宇管理系统,实现无接触式人体测温和人脸门禁、数据展示大屏、信息预警、远程调控等自动控制功能。该系统的部署和实施一定程度上提高了楼宇的管理效率,为楼宇管理提供一站式服务设计和必要的技术支撑,具有较好的应用价值。

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!