免费开源的HC物联网系统对接自己门禁设备

HC物联网系统对接门禁

说明

如何将自己的门禁设备对接至HC物联网系统,然后提供给别人使用是本文想要解决的问题,一般的门禁对接常见两种方式:
一种为门禁平台,这一种 不直接和门禁设备对接 而是和第三方提供的平台对接 根据平台提供的接口 将数据推送给第三方
平台;另一种则为直接和设备交互,设备会提供比较常见的 http 接口 mqtt接口 socket 接口等,两种的对接方式基本
一样 将数据同步给第三方平台或者 设备,一般第一种的对接难度会比较大一些,第三方平台一般需要的数据较多,比如小区
楼栋 单元 房屋 位置信息 设备信息 业主信息等需要将大量的数据推送给第三方平台,不推荐对接。第二种较简单写,只需要
将人脸信息上传设备即可,所需数据较少,以下为第二种方式说明整个对接过程。

源码:https://gitee.com/java110/MicroCommunityThings

需要对接的接口清单

1、获取设备上人脸接口

该接口的目的是 在 人脸同步 新增或者修改时 判断设备上是否存在 该人脸 如果存在 则修改 如果不存在则新增。
有些设备 如果已经存在时新增会失败,通过此接口判断是否存在,如果设备没有这个能力可以不对接,默认HC物联网系统
自己也有判断能力,对应于IAssessControlProcess.java 接口类的 getFace方法。

2、添加人脸

顾名思义,添加人脸为在界面添加人脸时将人脸信息送给设备,目前HC物联网系统本身不具备人脸识别的能力,人脸识别都是
需要设备自己实现。 对应于 IAssessControlProcess.java 接口类 的 addFace方法。

3、修改人脸

修改人脸为在人员的信息发生变化时将人脸信息重新同步门禁设备,对应于 IAssessControlProcess.java 接口类 的
updateFace方法 。

4、删除人脸

删除人脸为在人员信息删除后需要在设备上删除相应的人脸,不能再让该人员通信。对应于 IAssessControlProcess.java
接口类 的deleteFace方法。

5、清空人脸

当界面清空人脸时需要门禁设备清楚设备上人脸,对应于 IAssessControlProcess.java 接口类 的clearFace方法。

6、重启设备

当在界面操作重启时需要调用设备接口 重启设备 对应于 IAssessControlProcess.java 接口类 的restartMachine方法。

7、远程开门

当业主 物业人员在小程序或者 系统上 点击远程开门时门禁设备需要开门放行 对应于 IAssessControlProcess.java 接口类 的
openDoor方法。

8.0、开门记录上报

当人员通信时,设备需要将人脸信息上报给HC物联网系统,供HC物联网系统查看 对应于 IAssessControlProcess.java 接口类 的
httpFaceResult方法。

如何对接

门禁对接只需要关注 后端代码下的 src\main\java\com\java110\things\adapt\accessControl 目录就可以

如果对接新的门禁可以建一个目录例如yufan 对接宇泛的门禁。

在accessControl目录下存在 如下的java类:

ICallAccessControlService 提供给适配器调用的接口 提供如查询设备信息等方法

IAssessControlProcess 门禁适配器需要实现的接口类 里面包含了需要实现的方法 如 添加人脸,修改人脸等接口
对接新的门禁需要实现该接口 实现每个方法即可

IAssessControlProcess 方法 入参和出参介绍

getFace 方法

描述: 从设备中获取人脸信息

入参: MachineDto machineDto, UserFaceDto userFaceDto

machineDto 对象包含了设备相关信息,可以根据这个对象获取设备名称 编码 ip mac 等相关信息

userFaceDto 对象包含了人员 人脸相关信息 人员名称 人脸base64 等

方法说明: 该方法中只需要完成 根据门禁的协议 查询当前的人员是否在门禁中如果在返回人员ID,如果不在 返回-1

返回参数:字符串类型 如果有人员返回人员ID 没有返回 -1

举例:


    public String getFace(MachineDto machineDto, UserFaceDto userFaceDto) {
   
        String url = "http://" + machineDto.getMachineIp() + ":" + DEFAULT_PORT + CMD_ADD_FACE_FIND;
        
        //准备参数 json格式参数
        JSONObject param = new JSONObject();
        param.put("operator", "SearchPerson");
        JSONObject info = new JSONObject();
        info.put("DeviceID", machineDto.getMachineCode());
        info.put("SearchType", 0);
        info.put("SearchID", userFaceDto.getUserId());
        info.put("Picture", 1);
        param.put("info", info);
        
        // 调用门禁设备同步人脸信息
        HttpEntity httpEntity = new HttpEntity(param.toJSONString(), getHeaders());
        ResponseEntity<String> responseEntity = restTemplate.exchange(url, HttpMethod.POST, httpEntity, String.class);
        logger.debug("请求信息 : " + httpEntity + ",返回信息:" + responseEntity);
        saveLog(SeqUtil.getId(), machineDto.getMachineId(), CMD_ADD_FACE_FIND, param.toJSONString(), responseEntity.getBody());

        //返回参数解析
        if (HttpStatus.OK != responseEntity.getStatusCode()) {
   
            return AddUpdateFace.MACHINE_HAS_NOT_FACE;
        }

        JSONObject outParam = JSONObject.parseObject(responseEntity.getBody());

        if (!outParam.containsKey("picinfo")) {
   
            return AddUpdateFace.MACHINE_HAS_NOT_FACE;
        }

        String picinfo = outParam.getString("picinfo");

        if (StringUtil.isEmpty(picinfo)) {
   
            return AddUpdateFace.MACHINE_HAS_NOT_FACE;
        }

        String personId = outParam.getJSONObject("info").getString("CustomizeID");

        if (StringUtil.isEmpty(personId)) {
   
            return AddUpdateFace.MACHINE_HAS_NOT_FACE;
        }

        return personId;
    }

addFace 方法

描述: 添加人脸至门禁设备

入参:MachineDto machineDto, UserFaceDto userFaceDto

machineDto 对象包含了设备相关信息,可以根据这个对象获取设备名称 编码 ip mac 等相关信息

userFaceDto 对象包含了人员 人脸相关信息 人员名称 人脸base64 等

方法说明: 该方法中只需要完成 根据门禁的协议 将人员信息和人脸信息长传至门禁设备即可

返回参数:ResultDto 对象 成功code填写为0 失败填写为-1 并填写msg 失败原因

举例:


public ResultDto addFace(MachineDto machineDto, UserFaceDto userFaceDto) {
   
        String url = "http://" + machineDto.getMachineIp() + ":" + DEFAULT_PORT + CMD_ADD_USER;
        //根据门禁协议准备参数
        JSONObject param = new JSONObject();
        param.put("operator", "AddPerson");
        JSONObject info = new JSONObject();
        info.put("DeviceID", machineDto.getMachineCode());
        info.put("PersonType", 0);
        info.put("IdType", 0);
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值