如何使用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
相关产品推荐
相关产品推荐

