基于开源OpenWrt的认证路由器定点考勤*

2018-08-08 07:31
单片机与嵌入式系统应用 2018年8期
关键词:考勤开源路由器

(郑州大学 信息工程学院,郑州 450001)

引 言

现今社会,人力资源管理是现代企业工作的重中之重,其有效性严重影响企业发展,进一步影响企业的兴衰成败[1]。传统的企业管理方式,例如在公司办公时刷卡签到、外勤办公时电话查勤、月末汇总考勤信息时用纸质报表或电脑应用软件[2]等方式拥有如下弊端:第一,考勤数据统计工作量大,而且误差较大;第二,容易出现签而未到、代打卡等情况。随着社会节奏的加快,企业对管理的便捷、真实、高效的需求日益迫切。

移动终端的普及为解决这一难题提供了契机[3]。但是手机的室内定位精确度较低,不能满足企业管理室内考勤真实有效的要求。传统的室内考勤,如RFID[4]、指纹识别[5]和脸部识别[6]等虽解决了室内考勤问题,但是其效率不高,不能满足现今企业对管理的高效要求。

随着科技的发展,WiFi室内定位技术因其容易安装、总精度高,且易于整合的优点逐渐走进人们视野。普通路由器基于WiFi实现室内考勤的方式[7]在企业管理中也是存在的,但是其考勤数据的真实性和有效性难以保证。通常标识路由器有两种方式,一种基于IP地址,另一种基于MAC地址。路由器一般通过拨号等方式进行上网,每次重启时公网IP可能发生变化,所以IP地址不能作其唯一标识;对于MAC地址来说,也会被非法改变或复制,难以实现唯一标识的作用。因此,这就使基于普通路由器的室内考勤方式流于形式。与此同时,开源路由器[8]设备也随着开源路由器软件的风靡而日趋流行,它解决了传统路由器设备价格昂贵、灵活性差等问题,满足用户根据自己的需要进行定制开发的需求,这为实现企业管理的真实高效提供了新的解决思路。

综上所述,针对现今企业管理便捷、真实、高效的要求,根据河南省某运营商的委托,结合智能移动手机终端、Android平台和开源路由器,本文提出了基于OpenWrt开源路由器的企业管理系统解决方案。本方案利用OpenWrt开源路由器系统高灵活性的优点设计实现定制认证路由器;开发基于Android平台的智能手机应用系统实现企业管理;两者结合有效解决了手机无法准确完成室内考勤的问题,实现企业的便捷、真实、高效的管理;可以增强企业管理的信息化,为企业管理的信息化建设提供支持;可以使工作流程更顺畅、企业健康向上发展。

1 系统总体设计

1.1 网络拓扑图

图1为本系统的网络拓扑图。根据系统的需求,企业日常工作分为室内和室外两种工作场景,所以本系统设计分为室内定点考勤和室外移动考勤两种模式。在室内定点考勤时,由于GPS和基站室内定位困难,不能满足公司室内定点打卡的需求,本系统设计了认证路由器。OpenWrt认证路由器安装在办公室内,手机客户端通过连接OpenWrt路由器的WiFi信号实现信息通信;OpenWrt路由器对手机客户端发送的考勤信息进行解析认证,并将认证后的考勤信息发送到服务器端考勤打卡,以此确定用户考勤操作在公司规定范围内实现,保证室内考勤的真实有效性。在室外移动考勤模式中,员工使用Android客户端利用3G/4G和WiFi连接网络实现数据通信,通过GPS和基站来实现定位功能,基于百度API显示员工当前位置地址,通过HTTP协议实现客户端和服务器端的信息通信。

图1 系统网络拓扑图

1.2 系统总体架构

系统总体架构设计图如图2所示,本系统的整体架构分为服务器、OpenWrt认证路由器和Android客户端三部分。认证路由器是基于开源嵌入式系统OpenWrt实现的,经过裁剪使其更适用于本系统所选择的JS7628嵌入式开发板。在此基础上设计实现了自定义协议和RSSI阈值比对模块,实现与Android客户端的快速认证,并确保室内打卡在认证路由器规定距离的范围内,以避免非法打卡等现象的发生,满足本系统室内定点考勤的需求。Android客户端基于Android平台采用C/S模式开发,通过GPS和基站实现室外考勤,并将室内与室外考勤融合在一起,实现考勤、请假、内部信息等管理功能,满足系统整体需求。服务器端实现数据的后台操作,包括数据的汇总、反馈和保存。

图2 系统总体架构设计图

1.2.1 Android手机客户端

基于企业管理系统操作简单、管理方便的目的,针对室内室外两种工作模式下传统考勤方式便捷性不足的弊端,本系统设计了Android客户端。出于与开源路由器结合实现企业的便捷管理的目的,本方案的 Android客户端设计了数据采集、数据展示以及交互模块。

通过Android客户端获取用户考勤的基本信息完成数据采集,包括当前时间、地点等实时信息和用户姓名、部门等用户基本信息。数据展示是整个系统的展示窗口,实现与用户的交互,提高用户体验的满意度,用户通过Android客户端可以实现查看各种信息的目的,包括打卡考勤及统计信息、请假及统计信息和公司内部信息等。企业考勤管理客户端为了实现与认证路由器和服务器的数据交互,设计了交互模块。基于TCP协议的Socket通信实现与OpenWrt认证路由器间的数据交互,为了实现能够通过认证路由器的解析认证,设计自定义协议对采集到的室内考勤信息进行处理,实现室内考勤。通过HTTP协议实现与服务器端的数据交互,实现室外移动考勤和其他企业管理功能。

1.2.2 OpenWrt认证路由器

针对传统室内考勤便捷性不足和真实性较低的问题,本系统设计了基于OpenWrt开源嵌入式系统的认证路由器,实现对室内考勤数据的认证,确保室内考勤的真实性;另外,实现与Android客户端结合以提高系统的便捷性。为了实现与Android客户端以及服务器端的数据交互设计了数据收发模块,接收Android客户端发来的考勤数据,并将认证处理过的数据发送到服务器端。为了确保室内考勤的有效性、避免非法打卡等情况的发生,本系统在认证路由器上设计实现了认证处理模块,认证处理模块是路由器的关键模块。

为了防止认证路由器中的认证程序意外终止、保证进程的不间断运行,本系统设计了进程管理。考虑到系统实现过程中的可配置性,本系统通过配置文件来配置参数,当进行系统维护时,维护人员可直接在配置文件中对相关参数进行配置,避免在源码中的修改,提高了系统的可管理性。

1.2.3 服务器

服务器主要实现数据的汇总、反馈及保存,对收到的路由器或者手机客户端发送的数据给予反馈,标记打卡等操作是否成功,并且将数据保存汇总以便响应手机客户端发来的数据请求并生成考勤汇总表等。

2 OpenWrt认证路由器的设计

2.1 OpenWrt认证路由器的总体设计

针对传统室内考勤真实性较低的问题,本系统设计了OpenWrt认证路由器实现对用户室内考勤时的认证,以此确保企业管理系统室内考勤的真实有效性。同时,认证路由器与Android客户端结合实现室内室外考勤集中管理,以提高系统的便捷性。为了弥补普通路由器标识符不可靠的问题,本系统利用开源路由器可定制的特性设计了自定义协议及RSSI阈值对比认证模块,通过对手机客户端接收到的考勤信息进行认证处理,然后向服务器端发送打卡请求实现室内定点考勤,提高室内考勤的真实有效性。

OpenWrt认证路由器的总体模块设计分为硬件平台、操作系统和应用程序三部分,主要包含内容如图3所示。

图3 OpenWrt认证路由器总体模块设计图

在运行过程中,启动OpenWrt系统的Linux内核需要启动文件Bootloader,本系统选择Uboot程序来实现。根据系统需求,为了提高系统室内考勤的真实性,本系统基于嵌入式硬件平台和OpenWrt操作系统设计了应用程序,实现数据接收、数据处理和数据传送功能,对考勤信息进行认证处理,确保室内考勤信息的真实有效。本系统通过TCP协议的Socket通信从Android客户端接收打卡信息实现数据接收;数据处理模块将接收到的数据通过自定义协议和RSSI阈值对比模块进行处理认证;数据发送模块通过HTTP传输协议与服务器端传输数据,基于Libcurl库实现数据传送。另外为了支撑各数据操作模块,系统还设计了进程管理、配置文件等模块。

2.2 硬件平台以及操作系统OpenWrt开发

2.2.1 系统硬件平台

经过对比分析,本设计选用JS7628开发板为本系统的硬件平台,它的主芯片是MTK(联发科)的MT7628AN SoC芯片,其核心板是基于该芯片的WiFi模块,具有580 MHz的CPU频率,300 MHz的WiFi。JS7628开发板可长期稳定运行OpenWrt系统,满足本文OpenWrt对认证路由器的设计要求。

图4为 JS7628开发板实物图。为了满足本系统的设计需求,在设计过程中将开发板的3个以太网接口分别设置成一个WAN口和两个LAN口。WAN口与外网相连并且实现本系统考勤等数据的发送;两个LAN口设置局域网实现认证路由器端打卡数据的接收。拥有双天线,可以保证本系统打卡数据接收和发送的高速进行。DC 5 V/2 A的电源接口为开源路由器提供运行基础,电源指示灯为是否正常供电提供指示作用。下排的5个LED指示灯,分别指示系统是否正常运行、WiFi是否正常通信以及3个以太网口是否处于正常工作状态。另外,开发板通过复位按钮来实现故障恢复。

图4 JS7628开发板外观图

2.2.2 OpenWrt开发流程

OpenWrt系统开发的流程如图5所示。与其他在WRT54G/GS的源码基础上修改得来的开源路由系统不同,OpenWrt系统是基于Linux源码日渐完善的。开发者利用OpenWrt的高度模块化特性可以方便快捷地将各种功能移植到该系统下,丰富用户体验。

图5 OpenWrt系统开发的流程

2.3 各功能模块设计

本文设计的OpenWrt认证路由器主要有数据接收、数据处理、数据发送、进程管理和配置文件等模块。

2.3.1 数据接收

认证路由器的数据接收模块主要是从手机客户端接收到考勤信息送去认证处理模块的过程,即与手机客户端的交互模块。基于数据传送的安全性和连接的可靠性考虑,本系统通过TCP协议的Socket通信实现手机客户端与OpenWrt认证路由器的数据传输,确保可靠连接。

2.3.2 数据处理

为了实现认证路由器对用户的快速认证,避免二次以及多次交互认证,本系统设计了一个自定义的数据封装协议,并且为了确保用户在公司规定范围内打卡,本系统设计了RSSI的阈值比对认证。

2.3.2.1自定义协议

为了提高室内考勤的真实有效性,本系统设计了自定义协议对手机客户端传送的考勤信息进行认证处理,以此来确保此次考勤打卡的信息有效且是在公司定点打卡。本文的自定义协议分段设计了数据内容;并且对界定字符进行区分,分为起始符SOF和结束符EOF,使界定更加明确,区分有用数据和垃圾数据,提高传输的有效性。图6将室内考勤信息分成了两部分,即标识符部分和数据部分。

图6 自定义协议数据内容设计图

为了方便公司间设置不同的标识符,设计了UNIQUE字段,实现标识符的唯一性,以示不同企业间的区别。数据部分的设计则和具体的传输内容有关,包括公司ID、员工ID等信息以及其他考勤信息,对数据进行自定义的认证处理,以此防止非法打卡等情况出现;另外,数据部分还设计了CRC校验字段,用于差错检测,加强传输过程中数据的纠错检测,提高数据传输的正确率。

图7为本文自定义协议的数据封装图。

图7 本文自定义协议数据封装图

其数据转义规则如下:

为了避免数据中与起始符SOF相同的数据字符被当成起始符,减少数据处理过程中的错误率,本协议通过将相同字符SOF转义为连续的两个字符ALT和S1,实现字符转义。与之对应的是,当数据接收端接收到连续的两个字符ALT和S1时,将其转回与起始符SOF相同的数据字符。同理EOF和ALT。

2.3.2.2RSSI阈值对比

针对传统室内考勤存在的真实有效性差等问题,进一步确保用户进行室内考勤时的地点范围,本系统设计了RSSI的阈值比对认证,圈定用户考勤打卡时与OpenWrt认证路由器间的距离范围。RSSI(Received Signal Strength Indication)为接收信号强度。RSSI定位是通过接收到的信号强弱来测定接收点与信号源的距离。本文设计的RSSI阈值比对认证模块选择了基于RSSI距离损耗测距方法。

无线信号的发射功率和接收功率的关系用式(1)表示,PR是无线信号的接收功率,PT是无线信号的发射功率,r是收发单元之间的距离,n为传播因子,数值大小取决于无线信号传播的环境。

(1)

在式两边取对数可得到:

10nlgr=10lgPT/PR

(2)

节点的发射功率是已知的,将发送功率代入上式得:

10lgPR=A-10×nlgr

(3)

式(3)的左半部分10lgPR是接收信号功率转换为dBm的表达式,可以直接写成下式:

PR(dBm)=A-10×nlgr

(4)

这里的PR(dBm)就是指在距离为r的时候应该获取的RSSI值,A可以看作信号传输1 m远时接收信号的功率。

根据式(4),计算出当距离OpenWrt路由器d时的RSSI值,将其设为阈值,然后将获取的手机RSSI值与阈值进行比对,若大于该阈值,则说明用户打卡时距离认证路由器的距离小于设定距离d,由此判定打卡信息有效。另外,将参数A和n以及认证距离d放进配置文件,方便改动。

本系统设计的RSSI阈值对比的实现流程如图8所示。当手机与认证路由器进行连接时,认证路由器可以获取到手机端的RSSI值。程序从配置文件中获取企业事先设定好的考勤距离d,将d值带入公式计算出RSSI阈值Py。将获取的用户RSSI值与程序计算出的阈值Py进行比较,若RSSI值大,则判定本次考勤打卡有效。

图8 RSSI阈值对比流程图

2.3.3 数据发送

本系统将接收到的数据进行处理后,需要将数据发送到服务器端进行汇总和存储。OpenWrt认证路由器与服务器端的数据传送利用HTTP协议的Post方式实现,认证路由器对服务器发出室内考勤打卡请求,服务器收到请求后做出响应。在数据发送模块中,本系统基于Libcurl库实现认证路由器与服务器端基于HTTP协议Post方式的数据发送。

2.3.4 进程管理和配置文件

为了防止认证路由器中的认证程序在运行过程中意外终止,本系统为OpenWrt认证路由器设置进程管理功能的守护进程,以保证进程的不间断运行,如数据处理(包括自定义协议的认证和RSSI阈值对比模块)、数据接收和数据传送等。

将配置文件同主程序放在同一文件夹下,当系统初始化的时候自动读取配置文件,加载出相应参数。配置文件的内容是以键值对的方式存储的,当读取参数的键时,就可以得到该参数的具体值。RSSI部分的可配置参数有d、A、n等,其中d是手机端打卡时与OpenWrt认证路由器之间的距离阈值,不同公司会对距离d有不同需求,参数A、n也一样,与环境有关,不同的公司环境不同,需对其进行不同配置。将它们放进配置文件中,当有不同需求时,只需要在配置文件中修改然后初始化系统即可,无需修改源码。

3 Android客户端与OpenWrt认证路由器的结合

本系统手机客户端利用百度API定位员工的上班打卡位置,定位的实现过程如下:

① 确认百度定位需要的权限并在AndroidMainifest.XML文件中设置:

② 设置百度密匙,代码如下:

android:name="com.baidu.lbsapi.API_KEY"

android:value="@string/baidu_key"

③ 设置定位参数;

private void initLocation(){

LocationClientOption option = new LocationClientOption();

option.setLocationMode(tempMode); //设置定位模式

option.setOpenGps(true); //打开GPS

option.setCoorType(tempcoor); //返回的定位结果是百度

//经纬度,默认值gcj02

option.setScanSpan(span_time_); //设置发起定位请求的间

//隔时间为5000ms

option.setIsNeedAddress(is_need_address);

//获取反地理编码

mLocationClient.setLocOption(option);

}

④ 在员工打卡时获取员工定位信息,代码实现如下:

protected void getBaiduLocationResult() {

locationInfo_ = LocationUtil.getLocationInfo(baiDuLocationListener,

context, lm);//获取员工位置信息

if (locationInfo_ != null) {

longitude_ = locationInfo_.getLongitude();

latitude_ = locationInfo_.getLatitude();

tv_addr.setText(addr);

mBaiduMap = mMapView.getMap();//调用百度地图

mCurrentMarker = BitmapDescriptorFactory

.fromResource(R.drawable.map_dingwei);

//将手机的经纬度生成坐标

LatLng cenpt = new LatLng(Double.valueOf(latitude_),

Double.valueOf(longitude_));

//构造地图状态

MapStatus mMapStatus = new MapStatus.Builder()

.target(cenpt).zoom(16).build();

//构造描述地图变化的对象

MapStatusUpdate mMapStatusUpdate = MapStatusUpdateFactory

.newMapStatus(mMapStatus);

mBaiduMap.setMapStatus(mMapStatusUpdate);

//定位员工位置

}

图9展示了本系统设计的室内考勤时Android客户端与认证路由器的交互过程。

图9 室内考勤Android客户端与开源路由器交互

① Android客户端与认证路由器通过三次握手后建立连接;

② Android客户端将考勤信息包括员工基本信息等按照本系统设计的自定义协议进行封装,使其可以通过认证路由器的认证处理;

③ 数据封装完成后传输到认证路由器,认证路由器接收到考勤数据进行认证处理,处理过程上文已详细说明;

④ 认证路由器认证完成后将数据上传到服务器端,并得到反馈信息传给Android客户端;

⑤ Android客户端得到反馈信息,本次室内考勤完成。

结 语

本文基于实际项目对企业管理的便捷、真实和高效的需求,设计实现基于OpenWrt开源路由器的企业考勤管理系统。首先,针对传统考勤方案中不能兼顾室内室外两种情况的弊端,提出了手机客户端和OpenWrt开源路由器(WiFi)相结合的考勤方案;然后,基于开源嵌入式系统OpenWrt设计本系统认证路由器并实现了自定义协议和RSSI阈值比对等认证处理模块,保证了企业管理系统室内考勤信息的真实性;最后,基于Android设计开发了本系统的手机客户端,兼顾了企业管理的高效便捷性。基于OpenWrt开源路由器的企业管理系统基本满足用户需求,但是系统有待进一步完善:

① 增加手机客户端人脸识别功能,在手机客户端采集人脸信息,提取特征值后上传到服务器端识别验证,从而进一步保证考勤信息的真实性;

猜你喜欢
考勤开源路由器
买千兆路由器看接口参数
维持生命
路由器每天都要关
五毛钱能买多少头牛
基于人脸识别技术的考勤应用研究
智能人脸识别考勤系统
无线路由器的保养方法
便携式指纹考勤信息管理系统设计
大家说:开源、人工智能及创新
开源中国开源世界高峰论坛圆桌会议纵论开源与互联网+创新2.0