
本教程详细介绍了如何将ZKTeco考勤机(如K40、F18)的考勤数据集成到Google Sheets或自定义在线服务器。通过开发中间程序获取设备数据,并在服务器端进行处理,最终利用Google Apps Script的UrlFetch服务将JSON数据导入Google Sheets,有效解决了考勤设备无法直接进行HTTP请求的集成难题。
ZKTeco考勤设备,尤其是较早期的型号如K40和F18,通常不直接支持通过HTTP请求将数据推送到外部服务器。它们通常通过TCP/IP协议与PC端的SDK进行通信,或通过USB、串口导出数据。因此,要实现将考勤数据自动传输到Google Sheets或在线服务器,需要一个中间层来桥接设备与目标服务。
核心思路是:
这一阶段是整个集成的关键,需要一台运行稳定程序的服务器来与ZKTeco设备通信。
ZKTeco通常会提供不同语言的SDK(如C++、Java、.NET),或者社区中也有很多优秀的开源库可以用于与ZKTeco设备通信,例如:
以Python pyzk 为例,获取考勤数据的基础逻辑如下:
from pyzk.zk import ZK
from pyzk.misc import get_connection
# 替换为你的考勤机IP地址和端口
DEVICE_IP = '192.168.1.201'
DEVICE_PORT = 4370
def get_attendance_logs():
conn = None
try:
conn = get_connection(DEVICE_IP, DEVICE_PORT)
zk = ZK(conn)
zk.disable_device() # 禁用设备,防止操作冲突
# 获取所有考勤记录
attendances = zk.get_attendance()
attendance_list = []
for att in attendances:
attendance_list.append({
'uid': att.uid,
'user_id': att.user_id,
'timestamp': att.timestamp.strftime('%Y-%m-%d %H:%M:%S'),
'status': att.status,
'punch': att.punch
})
zk.enable_device() # 重新启用设备
return attendance_list
except Exception as e:
print(f"Error connecting to ZKTeco device: {e}")
return []
finally:
if conn:
conn.disconnect()
if __name__ == '__main__':
logs = get_attendance_logs()
if logs:
print(f"Fetched {len(logs)} attendance records.")
# 在这里可以将logs数据存储到数据库,或通过Web框架暴露为API
# 例如,使用Flask或Django创建一个简单的API接口
else:
print("No attendance logs fetched.")获取到考勤数据后,你需要一个Web服务来将这些数据以JSON格式暴露出来,供Google Sheets调用。这可以通过任何Web框架实现,例如:
示例:使用PHP创建一个简单的JSON API
假设你已经有了一个机制(例如,一个定时任务)将考勤数据从设备获取并存储到了一个数据库中(例如MySQL)。以下是一个简单的PHP脚本,用于从数据库读取数据并以JSON格式返回:
<?php
header('Content-Type: application/json');
// 数据库连接配置
$servername = "localhost";
$username = "your_db_user";
$password = "your_db_password";
$dbname = "attendance_db";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die(json_encode(['error' => 'Database connection failed: ' . $conn->connect_error]));
}
$sql = "SELECT user_id, timestamp, status FROM attendance_logs ORDER BY timestamp DESC";
$result = $conn->query($sql);
$attendance_data = [];
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
$attendance_data[] = $row;
}
}
$conn->close();
echo json_encode($attendance_data);
?>将此PHP文件部署到你的Web服务器上(例如 http://your-server.com/api/get_attendance.php),它将返回一个JSON数组,包含所有考勤记录。
一旦你的服务器端API准备就绪,就可以在Google Sheets中使用Google Apps Script来获取并显示数据。
在你的Google Sheets文档中,点击 扩展 > Apps Script。这将打开一个新的脚本项目。
在脚本编辑器中,粘贴以下代码。确保将 your_api_url 替换为你实际的API地址。
/**
* 从外部API获取ZKTeco考勤数据并写入Google Sheet。
*/
function importZKTecoAttendance() {
// 替换为你的服务器端API URL
var apiUrl = 'http://your-server.com/api/get_attendance.php';
try {
// 使用UrlFetchApp服务调用API
var response = UrlFetchApp.fetch(apiUrl);
var content = response.getContentText();
var json = JSON.parse(content); // 解析JSON字符串
// 获取当前活动的电子表格和工作表
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
// 清除旧数据(可选,根据需求决定是否清空)
// sheet.clearContents();
// 设置表头
var headers = ['User ID', 'Timestamp', 'Status']; // 确保与API返回的JSON键名一致
sheet.getRange(1, 1, 1, headers.length).setValues([headers]).setFontWeight("bold");
// 准备要写入的数据
var data = [];
for (var i = 0; i < json.length; i++) {
var record = json[i];
data.push([
record.user_id,
record.timestamp,
record.status
]);
}
// 将数据写入工作表
if (data.length > 0) {
// 从第二行开始写入数据
sheet.getRange(2, 1, data.length, headers.length).setValues(data);
Logger.log('Successfully imported ' + data.length + ' records.');
} else {
Logger.log('No data received from API.');
}
} catch (e) {
Logger.log('Error importing attendance data: ' + e.toString());
SpreadsheetApp.getUi().alert('数据导入失败', '发生错误: ' + e.toString(), SpreadsheetApp.getUi().ButtonSet.OK);
}
}在Apps Script编辑器中,选择 importZKTecoAttendance 函数,然后点击运行按钮(▶)。首次运行时,你需要授权脚本访问外部服务和你的Google Sheets。
为了实现自动化,你可以设置一个定时触发器,让脚本定期运行:
通过上述分层的方法,即使ZKTeco考勤设备本身不具备高级网络功能,也能实现其考勤数据与Google Sheets或任何在线系统的无缝集成。这种模式不仅适用于考勤机,也适用于许多其他需要桥接传统硬件与现代云服务的场景。
以上就是ZKTeco考勤数据集成至Google Sheets或在线服务器实战教程的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号