You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:无法通过pyzk的get_attendance()从Zkteco设备获取正确考勤数据

解决思路:针对MiniTA(ZAM170_TFT)设备pyzk获取考勤数据错误问题

基础信息确认

设备参数:

  • 固件版本:Ver 6.60 May 13 2020
  • 设备序列号:CKII204760276
  • 型号:ZAM170_TFT / MiniTA

已知状态:可正常获取用户、密码、设备基础信息,但调用get_attendance()返回错误数据。


具体排查与解决步骤

  1. 校准设备与本地系统时间
    考勤记录的时间解析依赖设备本地时间,若设备与代码运行系统时间偏差过大,会直接导致数据错乱。先在设备菜单核对当前时间,再通过代码同步:

    from datetime import datetime
    conn.set_time(datetime.now())
    

    校准后重新拉取考勤数据。

  2. 降级pyzk版本适配老固件
    你的设备固件版本较老,新版pyzk可能存在协议兼容问题。尝试安装稳定旧版本:

    pip install pyzk==0.9.1
    

    该版本对MiniTA系列老设备的支持更稳定。

  3. 添加参数限制拉取范围
    默认get_attendance()可能拉取全部历史数据(含已标记读取的旧数据),或解析逻辑冲突。尝试指定过滤条件:

    # 仅拉取未读取的新数据
    attendances = conn.get_attendance(clear=False)
    # 或指定时间范围
    start_date = datetime(2024, 1, 1)
    end_date = datetime.now()
    attendances = conn.get_attendance(start=start_date, end=end_date)
    
  4. 检查设备通讯参数
    老设备可能需要特定通讯模式,确认连接参数是否匹配:

    from zk import ZK
    # 尝试开启UDP模式,部分老设备依赖此协议
    conn = ZK('设备IP', port=4370, timeout=5, force_udp=True)
    
  5. 调试原始数据定位问题
    绕过pyzk的解析逻辑,直接获取原始二进制数据,判断是设备输出问题还是解析问题:

    raw_data = conn.get_raw_attendance()
    print(raw_data)
    

    若原始数据乱码,需检查设备的波特率、奇偶校验等通讯设置是否与代码一致。

  6. 设备端手动同步数据
    部分设备需在本地操作触发数据同步:进入设备菜单→数据管理→考勤记录→同步到主机,完成后再运行代码拉取。


内容的提问来源于stack exchange,提问作者Sneha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 18:40:01