项目地址:YQisme/Realtime-HikDoorEvent: 实时获取海康的门禁事件

海康威视 明眸门禁(HCNetSDK) 多设备实时事件采集服务:控制台输出 + 内存事件缓存 + 内置 HTTP 服务(配置、事件 JSON、图片浏览)。

功能概览

能力说明
多门禁布防DeviceConfig.xml 登录多台设备并接收回调
事件过滤仅处理 主类型=事件次类型=75(控制台显示为「未知事件类型(75)」)
抓拍存储图片保存到 D:/Picture/{设备名称}/{员工姓名}/,文件名含时间戳
员工姓名启动时从 [ApiBaseUrl]/api/employee 拉取并写入运行目录 EmployeeConfig.json,事件里用员工号解析姓名
事件仓库内存保留最近 1000 条,供 /events 查询
Web 服务HttpListener,默认端口 8080(见 app.config

快速开始

环境要求

  • Windows x64
  • .NET Framework 4.8(见 ACSEventConsole/app.configsupportedRuntime
  • 本机可访问门禁设备网段;使用员工 API 时需能访问 ApiBaseUrl
  • 海康 SDK 原生库已放在 ACSEventConsole/bin(与生成输出同目录使用)

编译

Visual Studio

  1. 打开 ACSEventConsole.sln
  2. 配置选 x64DebugRelease
  3. 生成 → 生成解决方案

命令行(按本机修改 MSBuild 路径):

cd /d E:\Desktop\GetACSEvent
"D:\VisualStudio\2022\Community\MSBuild\Current\Bin\MSBuild.exe" ACSEventConsole.sln /p:Platform=x64 /p:Configuration=Debug

查找 MSBuild:

& "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" -latest -requires Microsoft.Component.MSBuild -find MSBuild\**\Bin\MSBuild.exe

运行

必须从输出目录启动(保证 DeviceConfig.xml、海康 DLL、ACSEventConsole.exe.config 在同一目录):

cd E:\Desktop\GetACSEvent\ACSEventConsole\bin\x64\Debug
.\ACSEventConsole.exe

Release 将路径中的 Debug 改为 Release

启动后:

  1. 尝试从员工 API 更新 EmployeeConfig.json(失败仅打日志,不阻止启动)
  2. DeviceConfig.xml 启动多门禁监控
  3. 启动 Web;控制台会打印本机 IP 与端口,例如 http://192.168.x.x:8080/
  4. 按 ESC 退出

配置说明

app.config(与 exe 同目录的 ACSEventConsole.exe.config

默认值说明
WebServerUrlhttp://localhost:8080参考项
WebServerPort8080Web 监听端口
PictureBasePathD:/Picture配置项(当前抓拍逻辑在代码中仍使用 D:/Picture/... 路径,修改存储位置需改代码或保持该盘符目录存在)

DeviceConfig.xml(运行目录)

程序读取 exe 所在目录下的 DeviceConfig.xml,不是源码目录。首次可从 bin\x64\Debug\DeviceConfig.xml 复制模板后修改。

<?xml version="1.0" encoding="UTF-8"?>
<Devices>
  <Config>
    <ApiBaseUrl>http://192.168.0.14:5000</ApiBaseUrl>
  </Config>
  <Device>
    <IP>192.168.0.164</IP>
    <UserName>admin</UserName>
    <Password>your_password</Password>
    <Port>8000</Port>
    <Enabled>true</Enabled>
    <Name>前门门禁</Name>
    <DeviceName>测试门禁164</DeviceName>
    <Remark>备注</Remark>
    <DeviceID>8f283fe3ca6947fdaba16db6ef3a7914</DeviceID>
    <AreaID>root000000</AreaID>
  </Device>
</Devices>

字段说明

字段说明
IP门禁主机 IP
UserName / PasswordSDK 登录账号
Port一般为 8000
Enabledtrue 时参与登录布防
Name / DeviceName展示用名称;图片目录使用设备名称相关字段
Remark备注
DeviceID / AreaID对接外部系统的标识
Config/ApiBaseUrl员工(及可选设备)HTTP API 根地址;缺失时默认 http://192.168.0.14:5000

也支持在 <Devices> 下直接写 <ApiBaseUrl>(与 //Config/ApiBaseUrl 二选一即可)。

外部 HTTP API(当前代码行为)

接口状态说明
GET {ApiBaseUrl}/api/employee已启用启动时拉取员工列表,保存 EmployeeConfig.json,填充 EmployeeNameMap
GET {ApiBaseUrl}/api/device默认关闭ACSEventConsole.cs 中设备合并逻辑已注释;需自动同步设备时可取消注释并调用 DeviceConfigUpdater.UpdateFromApi

设备 API 若启用,合并规则(DeviceConfigUpdater)摘要:

  • 筛选:device_type = 门禁 且 is_important = 否
  • IP 为键:已存在则只更新 DeviceIDAreaIDDeviceNameName;不存在则新增
  • 运行目录生成 ApiDevice_raw.jsonApiDevice_filtered.json

内置 Web 服务

默认基址:http://localhost:8080(端口以 app.config 为准)。

程序会依次尝试绑定:http://+:{port}/http://localhost:{port}/http://127.0.0.1:{port}/

方法路径说明
GET/导航页
GET/events最近事件 JSON 数组
GET/config当前 DeviceConfig.xml 原文
GET/config/edit表单编辑配置
POST/config保存配置(application/x-www-form-urlencoded 或原始 XML body)
GET/images图片列表页(扫描 D:/Picture
GET/images/{相对路径}返回图片文件(URL 编码,支持中文路径)

/events 字段说明、图片 URL 规则见 docs/事件API说明.md

Web 无法启动(拒绝访问)

任选其一:

  • 管理员身份运行 ACSEventConsole.exe
  • 注册 URL ACL(将 8080 换成实际端口):
netsh http add urlacl url=http://+:8080/ user=Everyone

事件与图片

  • 控制台:仅输出次类型 75 且主类型为「事件」的记录
  • 图片目录D:/Picture/{设备名称}/{员工姓名}/(需提前创建盘符目录或保证 D: 可用)
  • 内存:最多 1000 条,通过 /events 读取

更多图片命名、中文路径、测试脚本见 docs/


仓库目录结构

GetACSEvent/                      # 仓库根(文件夹名可不改)
  ACSEventConsole.sln
  README.md
  docs/                           # 补充文档与测试脚本
  ACSEventConsole/
    ACSEventConsole.cs            # 入口
    ACSEventMultiDeviceService.cs
    ACSEventService.cs            # SDK 回调与存图
    SimpleWebServer.cs
    DeviceConfigUpdater.cs
    EventStore.cs
    CHCNetSDK.cs
    app.config
    Properties/
    bin/                          # 海康 DLL + x64/Debug|Release 输出
      x64/Debug/ACSEventConsole.exe
      x64/Debug/DeviceConfig.xml  # 运行配置示例(部署时与 exe 同目录)

常见问题

问题处理
找不到 DLL / SDK 初始化失败bin\x64\Debug(或 Release)下运行,勿单独拷贝 exe
门禁登录失败检查 IP、8000 端口、账号密码、防火墙与网段
Web 打不开端口占用、URLACL、或改用管理员运行
改了配置不生效编辑的是 exe 同目录DeviceConfig.xml,或通过 /config/edit 保存
XML 保存失败根节点为 <Devices>,UTF-8 编码,无非法字符
员工姓名为空确认 ApiBaseUrl/api/employee 可访问;查看 EmployeeConfig.json
无抓拍图确认事件为类型 75;D:/Picture 目录可写