Остались у меня со старой работы разные терминалы учета рабочего времени, ну или контроль доступа для электрозамков, хочу на дачу на гараж себе поставить или на погреб чтобы помидоры никто не сожрал ) Есть разные модели но тут разберемся про ZKTeco TF1700 и как его завести в общую экосистему mqtt
Устройство ZKTeco TF1700 — это терминал учёта рабочего времени с поддержкой отпечатков, карт и PIN-кодов. Хотя оно не управляет замками напрямую, его можно использовать как «умный датчик прохода»: при успешной аутентификации оно передаёт user_id, который можно пересылать в MQTT для учёта, логирования или автоматизации.
В этой статье — пошаговая инструкция, как получать события с TF1700 и отправлять их в любой MQTT-брокер (например, Mosquitto, Home Assistant, EMQX).
4370).pyzk.192.168.1.200) и не блокируется брандмауэром.
На сервере или Raspberry Pi, где будет работать скрипт:
pip install pyzk paho-mqtt
Перед отправкой в MQTT убедитесь, что события читаются:
from zk import ZK
zk = ZK('192.168.1.200', port=4370, timeout=5)
conn = zk.connect()
conn.disable_device()
print("Ждём события (30 сек)...")
for event in conn.live_capture(timeout=30):
if event:
print(f"User ID: {event.user_id}, Время: {event.timestamp}, Тип: {event.verify_mode}")
conn.enable_device()
conn.disconnect()
Приложите палец или карту к TF1700 — если появится строка с ID, всё работает.
Сохраните как tf1700_mqtt.py:
# tf1700_mqtt.py
from zk import ZK
import paho.mqtt.client as mqtt
import json
import logging
import time
import sys
# === Настройки ===
ZK_IP = "192.168.1.200" # IP TF1700
MQTT_HOST = "localhost" # Адрес MQTT-брокера
MQTT_PORT = 1883
MQTT_TOPIC = "access/tf1700"
# Логирование
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(message)s')
# Подключение к MQTT
mqtt_client = mqtt.Client("tf1700_mqtt_bridge")
try:
mqtt_client.connect(MQTT_HOST, MQTT_PORT, 60)
except Exception as e:
logging.error(f"Ошибка подключения к MQTT: {e}")
sys.exit(1)
# Подключение к TF1700
zk = ZK(ZK_IP, port=4370, timeout=5, password=0)
try:
conn = zk.connect()
conn.disable_device()
logging.info("✅ Подключено к ZKTeco TF1700")
# Бесконечное чтение событий (с перезапуском при обрыве)
while True:
try:
for event in conn.live_capture(timeout=60):
if event:
payload = {
"user_id": event.user_id,
"timestamp": event.timestamp.isoformat(),
"verify_mode": event.verify_mode, # 1=отпечаток, 3=карта, 11=PIN
"device": "TF1700"
}
mqtt_client.publish(MQTT_TOPIC, json.dumps(payload, ensure_ascii=False))
logging.info(f"📤 Отправлено в MQTT: {payload}")
except Exception as e:
logging.warning(f"Потеряно соединение с TF1700: {e}")
time.sleep(5)
# Переподключение
conn = zk.connect()
conn.disable_device()
except KeyboardInterrupt:
logging.info("Остановка по Ctrl+C")
except Exception as e:
logging.error(f"Критическая ошибка: {e}")
finally:
if 'conn' in locals():
conn.enable_device()
conn.disconnect()
Запустите вручную:
python3 tf1700_mqtt.py
Для автозапуска при старте системы (Linux/Raspberry Pi):
crontab -e
И добавьте строку:
@reboot /usr/bin/python3 /путь/к/tf1700_mqtt.py >> /var/log/tf1700.log 2>&1
Пример сообщения в топике access/tf1700:
{
"user_id": "1024",
"timestamp": "2025-12-19T14:30:22",
"verify_mode": 1,
"device": "TF1700"
}
Расшифровка verify_mode:
1 — отпечаток3 — RFID-карта (EM/Mifare)11 — PIN-кодuser_id → ФИО для удобного отображения.ZKTeco TF1700 — отличный источник данных о проходах. Через TCP/IP и небольшой Python-скрипт вы легко интегрируете его в умный дом, систему учёта или IoT-проект. Главное — не пытайтесь использовать RS-485 для этого: он не предназначен для передачи ID в открытом виде.
Блог только запустил, все статьи генерирую через нейросеть т.к. лень, возможны ошибки. Просто чтобы вы знали и не запускали ядерный реактор по моим статьям ))
Если у вас есть вопросы, или Нашли неточность? пишите в коментах — вместе поправим и сделаем статью более качественной. Я лично объясню нюансы из практики.
Комментарии
Пока нет комментариев. Будьте первым!