时间:2024-08-31
吴 迪
(黎明职业大学 信息与电子工程学院,福建 泉州 362000)
当前无线智能门锁使用非常广泛,已经逐步形成行业标准。中国五金制品协会在2019年8月发布《智能门锁消费指南》[1],给出电子智能门锁的定义:在本体上以电子方式识别、处理人体生物特征信息、电子信息、网络通信信息等并控制机械执行机构实施启闭的门锁。智能门锁因具有使用便捷、功能强、安全性高等优点而被广泛使用。智能门锁的研究已不仅仅停留在实验阶段,而是作为成熟产品投放市场,并不断迭代更新和完善。目前智能门锁基本解决了功能性和安全性方面的问题,现有研究也主要侧重这两方面的提升[2-4],但是在系统架构设计的合理性和设备功耗方面还有待优化。智能门锁产生的时间比较早,早期用于办公领域的办公电子智能门锁系统,主要由电子智能门锁、门钥卡、发卡机和门锁系统管理软件组成。其中,电子智能门锁将发射器、智能锁芯、机械锁体等结构部件优化整合在一起,由锁体的电子部分接收并分析、确认外部指令,指令则通过驱动机械锁体实现开门动作;门匙卡是主人或合法使用人的唯一身份象征,由于它需要进行数据写入设置,并由系统统一管理,所以门匙卡几乎不存在被复制的可能,管理更加安全方便;发卡机是集中统一授权的通道,授予各种卡是否开门以及能开多少门的相应权利。系统管理软件是整套系统正常运转的核心,所有安装的门锁信息、卡的信息、人的信息,以及具体操作中开门的相关信息的管理与变更,都必须通过系统管理软件来实现。随着技术的发展,智能门锁在身份识别方面衍生出更多方式,如NFC(近场通信)、指纹、蓝牙、键盘、人脸识别等。当前,智能门锁都包含Wi-Fi(无线上网)、蓝牙等数据传输模块,通过数据传输模块先连接网关[5],再连接到云端。其结构比较复杂,耗电量较大,增加了后期的使用和维护成本。基于此,本文探索性地提出一种方案,减少门锁的使用功耗,并采用动态访问权限机制,使无线智能门锁更适用于办公场景。
图1为无线智能门锁方案总体架构。
方案总体架构由智能门锁、手机app(应用软件)和云服务器组成。智能门锁具备蓝牙、指纹、NFC、键盘等方式开锁。特点是系统的架构中,手机app通过蓝牙与智能门锁互联,app除了作为智能门锁的控制设备,还充当连接云端的网关。其工作流程是:①智能门锁与app通过蓝牙连接;②app与云端的API(应用程序编程接口)连接;③数据从服务器返回给app;④由app传输给智能门锁,实现数据同步。app连接智能门锁之后,还具备对门锁的设置和控制功能。
与传统使用门钥卡开锁以及指纹、NFC、Wi-Fi等方案进行对比,该设计方案具有较为明显的优势。
首先,门钥卡在授权之后再修改权限的方式不够灵活,而且遗失也会造成麻烦,需要在每台与之相关的智能门锁上修改配置。而该方案除了使用手机,不需要其他实体设备。
其次,指纹门锁虽然安全性较高,但只能针对一把锁录入有限人员,且指纹信息不能跨门锁共享,不适合办公环境这种出入次数频繁且人员信息需要动态改变的场景。而以蓝牙连接app和门锁,身份信息保存在云端,方便动态配置。
再次,用手机模拟NFC卡跟使用蓝牙类似,都有唯一的ID(身份标识号)用于身份识别,但有的手机没有NFC功能,而蓝牙功能在手机端更为普遍。
从次,与Wi-Fi方式连接设备相比,蓝牙方式更为省电,只需要在门锁内置4节5号干电池即可持续工作数月,解决了外部电源长时间持续供电的问题。
最后,这种采取智能门锁先连接手机app再连接外部网络的方式,不需要网关组网,而手机相对于网关设备来说,它可以任意移动到合适的距离,从而解除智能门锁与蓝牙网关的距离约束。
1.3.1 硬件功能模块
图2为无线智能门锁硬件功能模块。
1.3.2 电源模块
智能门锁主板采用4节5号干电池对系统供电,当没有外部触发信号时,利用MCU(单片机)内的比较器及系统掉电保护电路,系统进入休眠状态,以中断方式唤醒单片机,及时保存相应数据。
1.3.3 锁体主板信号输入
锁体主板信号输入包括如下几个子模块:①1个指纹传感器模块,用于识别并管理指纹数据实现指纹开锁的功能;②1个读卡模块,用于识别IC(集成电路)卡线圈信号,实现刷卡开锁的功能;③1个3×4矩阵按键,用于输入按键密码开锁的功能;④1个门缝(霍尔传感器),用于检测钕铁硼1.2×106A/m以上的磁铁实现开门检测功能。
1.3.4 锁体主板输出控制
1个带过流保护的微型直流电机驱动电路,用于驱动最大电流小于80 mA的直流有刷减速电机,实现门锁的开、关动作。
1.3.5 锁体主板显示单元
锁体主板显示单元选用1个0.96英寸的OLCD液晶显示屏,显示当前操作状态及日期时间、门锁名称ID等信息,待机状态下熄灭。
1.3.6 指纹模块
指纹模块选用半导体式指纹模块,实现指纹检测和识别的功能。为满足设计需要,主要参数为:①系统可以存储200组的指纹数据;②1∶N的验证时间大约50~300 ms;③360°指纹录入和匹配。
1.3.7 蓝牙模块
玻璃门智能锁通过蓝牙连接手机,实现和云服务器的数据通信功能,优选支持蓝牙4.0以上版本的蓝牙模块。
蓝牙开锁及数据同步流程包括:①蓝牙周期性广播(间隔500 ms)用于手机app查找及开锁;②app连接锁体,与锁体进行认证,认证成功表示连接成功,认证超时或者认证无反馈将断开连接;③蓝牙连接成功之后app发起同步数据(读取开锁记录、增删改查用户及主动开锁);④蓝牙开锁的数据由app接收并上传至云端。
接口采用基于MQTT(消息队列遥测传输)协议的RESTful API。手机app的应用接口就是服务端提供给客户端的一种通信协议,业界主流采用RESTful API的方式来设计接口,一般是基于HTTP/HTTPS协议,也可以基于MQTT协议,最后以JSON(对象简谱)为数据承载体返回。方案中的接口协议采用MQTT协议。使用Spring Boot实现RESTful API接口,Spring Boot是Spring团队提供的一个Java开发框架,其设计目的是为了简化Spring应用的初始搭建过程和开发过程。该框架使用特定的方式来进行设置(提供了默认的代码和注释配置),这使得开发人员只需非常少的配置就可以快速开发基于Spring的应用[6]。首先,基于Spring Boot创建一个消息处理功能的控制器类,类名为QueueController,然后在类定义的前面加上注解前缀@RestController,返回的数据会自动转换为text/json格式。这样一个基本的RESTful API接口就实现了。
在应用场景中,app每次连接、断开、开/关锁以及设置都要与云端API接口之间进行交互,在上下班高峰期的场景中,数据交互十分频繁。由于数据的实时性要求较高,因此需要采用基于高并发场景下的实时性需求的协议。MQTT是 M2M(机器对机器)和IoT(物联网)的连接协议。它被设计为一个极其轻量级的发布/订阅消息传输协议,是专为受限设备和低带宽、高延迟或不可靠的网络而设计[7]。因此,该协议不仅成为功耗较高而电池容量有限的移动设备应用的理想选择,而且也解决了高并发场景下实时性的需求。MQTT服务的发布、订阅交互流程如图3所示。
目前,基于MQTT的开源服务器实现主要有Mosquitto、HiveMQ和EMQ等。EMQ基于高并发设计,支持MQTT-SN与Web-Socket协议和分布式集群部署,具有更强的并发性能,能够承载终端的海量MQTT并发连接,成为远程通信的可靠选择[8]。相对于HTTP 接口,MQTT接口具备如下几点优势:①MQTT可以保持设备与服务器之间的长连接,避免反复轮询,减少资源消耗;②MQTT可以在设备和服务器之间建立双向连接,实现消息推送;③可设置发布和订阅的QoS等级,确保消息的送达。
Java平台有面向消息服务的标准化接口,JMS(Java消息服务)是Java平台关于面向MOM(消息中间件)的API,用于提升系统异步通信和扩展解耦能力。异步处理方式大大节省了服务器的请求时间,从而提高系统的吞吐量。Spring Boot主要支持的JMS实现包括ActiveMQ、RabbitMQ。由于ActiveMQ具有可将消息存入文件和数据库、支持对消费消息的反馈确认、故障处理比较完善、水平扩展方便等优点[9],因此,方案采用ActiveMQ实现后台的MQTT短消息队列服务。
设计后台时考虑到实际需求,包括提高开发效率、微服务之间松耦合、可灵活集成自动部署(如Jenkins)、利于后期升级维护等。方案采用微服务架构,实现方式是Spring Cloud。Spring Cloud是以Spring Boot为基础构建的用于简化分布式系统构建的工具集,该工具集包含多个子项目,是一个完整的微服务解决方案。Spring Cloud为微服务架构中涉及的配置管理、服务发现、智能路由、断路器、微代理和控制总线等操作提供一种简单的开发方式。Spring Cloud的服务接口基本等同于Spring Boot开发的API接口,但在Spring Cloud上需要将自己的服务注册到注册中心,通过网关统一访问路径。
智能门锁的安全性是方案的设计关键,主要依赖后台的权限控制模块。由于Apache Shiro具有完善的身份认证、授权、会话管理、加密等安全模块,且都是基于RBAC(角色访问控制)来实现[10],因此,选择基于Apache Shiro权限控制框架,结合方案的场景需求,扩展对自定义行为的支持,从而实现动态访问权限机制。手机app与云端的通信中间经过不可信区域,敏感数据(如身份信息等)经过Apache Shiro的授权与验证,保证安全性[11]。
Apache Shiro与Spring Boot的集成是无缝的,在Spring Boot项目的Maven模块管理中加入对Shiro的依赖,新增、修改Shiro的相关配置即可实现。选择使用Shiro的好处是简单、灵活,但需要开发人员自己去设计权限并实现。对权限设计的关键流程做如下说明:后台程序先创建AuthorizingRealm的派生类,重载授权逻辑方法doGetAuthorizationInfo和认证逻辑方法doGetAuthenticationInfo,并自定义密码验证匹配器方法initCredentialsMatcher,在方法前加上注解前缀@PostConstruct,使得该方法在Bean初始化过程中得到执行。关键代码如下:
@PostConstruct
public void initCredentialsMatcher() {
setCredentialsMatcher(new SimpleCredentialsMatcher() {
@Override
public boolean doCredentialsMatch(AuthenticationToken authenticationToken, AuthenticationInfo authenticationInfo) {
UsernamePasswordToken token = (UsernamePasswordToken) authenticationToken;
SimpleAuthenticationInfo info = (SimpleAuthenticationInfo) authenticationInfo;
// 获取明文密码及密码盐(为增加安全性,之前做了加盐处理)
String password = String.valueOf(token.getPassword());
String salt = CodecSupport.toString(info.getCredentialsSalt().getBytes());
return equals(ShiroUtil.encrypt(password, salt), info.getCredentials());
}
});
}
手机app与智能门锁的通信采用BLE(低功耗蓝牙)标准。工作时,智能门锁进行周期性广播,手机端检测是否有智能门锁在广播。在办公场景中,手机有可能处在多个智能门锁的广播范围内,为了能与指定的智能门锁进行通信,智能门锁设置的帧格式如表1所示。
表1 帧格式和定义
表1中,帧的第1个字节是前导帧,其作用是提高调制解调电路的工作效率,值一般为0x55或者0xAA。访问地址之后是LL帧头和有效数据包长度,LL帧头表示数据包的LL类型,有效长度表示负载大小,单位是字节。BLE协议栈中的GAP(全局平均池化)层使用LTV(Length-Type-Value)结构定义数据,所以表1中的广播数据的数据02010504FF590053要拆分解析,前半段020105中的02是长度,01是类型,表示广播标记,05是值。后半段04FF590053是电量信息,其中04表示长度,FF表示数据类型(自定义数据),0x5900是供应商ID,0x53是数据[12]。
功能及功能码的设置如表2所示。
表2 主要功能码
表2(续)
依据所搭建的软、硬件和网络环境,使用Spring Boot开发后台模拟环境,开发原型app和智能门锁原型机对方案进行验证测试,测试结果满足设计需求。测试过程包括制定测试计划,列出各测试模块和测试点,分别对系统的3个组成部分进行测试。智能门锁主要完成功能、接口和功耗测试;手机app主要采用黑盒和自动化测试手段对功能、接口、兼容性、安全性以及压力等方面的测试;云端主要针对与app的对接部分进行测试。具体测试流程如图4所示。
低功耗无线智能门锁的总体架构是智能门锁通过app连接到云端,实现门锁的网络连接和智能化。该设计方案的硬件模块较少,省电节能,后期使用和维护成本较低。智能门锁和app之间通过蓝牙方式连接,实现动态访问权限机制,适合办公场景的使用。后续的研究将进一步优化解决方案,以适应家居场景的应用。
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!