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

如何使用pyzk库对接Proface X[t]解决考勤获取及live_capture超时问题?

解决Proface X[t]设备通过pyzk获取考勤数据及live_capture超时问题

问题描述

我来自阿塞拜疆,使用pyzk库连接Proface X[t]考勤设备时,能够正常获取设备MAC地址、用户列表等信息,但无法获取考勤数据,且调用live_capture()方法时出现超时错误。

代码运行结果

try auth
b'00000000000000000000000000000000020000000000000000000000000000000000000000000000200000000000000000000000000000000000000050c3000040420f00000000004ec3000040420f00020000002e750000307500000000000000000000000000000000000000000000'
rwb cs b'\\x01\\t\\x00\\x05\\x00\\x00\\x00\\x00\\x00\\x00\\x00'
DATA! is 148 bytes, tcp length is 156
Enough data
user size 148 (= 148)
00:17:61:12:90:e0
[<User>: [uid:2, name:NN-2 user_id:2], <User>: [uid:3, name:NN-1 user_id:1]]
Enter
b'00000000000000000000000000000000020000000000000000000000000000000000000000000000200000000000000000000000000000000000000050c3000040420f00000000004ec3000040420f00020000002e750000307500000000000000000000000000000000000000000000'
rwb cs b'\\x01\\t\\x00\\x05\\x00\\x00\\x00\\x00\\x00\\x00\\x00'
DATA! is 148 bytes, tcp length is 156
Enough data
user size 148 (= 148)
start live_capture
esperando event
time out

我的代码

# -*- coding: utf-8 -*-
import os
import sys

CWD = os.path.dirname(os.path.realpath(__file__))
ROOT_DIR = os.path.dirname(CWD)
sys.path.append(ROOT_DIR)

from zk import ZK


conn = None
zk = ZK('10.1.19.170', port=4073, password=123456, verbose=True)
try:
    conn = zk.connect()


    users = conn.get_users()
    print(conn.get_mac())

    print(users)
    print("Enter")
    for attendance in conn.live_capture():
        if attendance is None:
            print(attendance.user_id)
        else:
            print("salam")
            print (attendance)
except Exception as e:
    print ("Process terminate : {}".format(e))
finally:
    if conn:
        conn.disconnect()

解决方案

1. 排查协议兼容性问题

Proface X[t]可能采用了私有协议或扩展协议,与pyzk默认支持的标准ZK协议不兼容,导致考勤数据读取和实时捕获失败。

  • 初始化ZK对象时延长超时时间:
    zk = ZK('10.1.19.170', port=4073, password=123456, verbose=True, timeout=30)
    
  • 查阅设备官方文档,确认是否支持标准ZK协议,或是否需要使用Proface官方SDK进行对接。

2. 尝试获取历史考勤数据

先跳过实时捕获,调用get_attendance()获取历史记录,替换代码中live_capture部分:

# 获取历史考勤记录
attendance_records = conn.get_attendance()
for record in attendance_records:
    print(f"用户ID: {record.user_id}, 考勤时间: {record.timestamp}, 状态: {record.status}")

如果该方法也无法返回数据,说明协议不兼容的概率极高。

3. 检查设备实时推送设置

live_capture()超时可能是因为设备未开启实时事件推送:

  • 登录设备管理界面,查找“实时事件推送”“主动上报”相关设置,确保已开启。

4. 升级pyzk版本

旧版本pyzk可能未适配Proface X[t]设备,执行升级命令:

pip install --upgrade pyzk

升级后重新测试功能,若仍无效,可查看pyzk项目的issue列表,确认是否有同类兼容问题。

5. 验证设备参数准确性

虽然能获取用户信息,但仍需确认:

  • 设备端口是否为4073(部分考勤设备默认端口为4370)
  • 密码格式是否符合设备要求(比如是否需要转为十六进制或特定编码)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.01 15:07:27