Остались у меня со старой работы разные терминалы учета рабочего времени, ну или контроль доступа для электрозамков, хочу на дачу на гараж себе поставить или на погреб чтобы помидоры никто не сожрал ) Есть разные модели но тут разберемся про ZKTeco TF1700 и как его завести в общую экосистему mqtt
Устройство ZKTeco TF1700 — это терминал учёта рабочего времени с поддержкой отпечатков, карт и PIN-кодов. Хотя оно не управляет замками напрямую, его можно использовать как «умный датчик прохода»: при успешной аутентификации оно передаёт user_id, который можно пересылать в MQTT для учёта, логирования или автоматизации.
В этой статье — пошаговая инструкция, как получать события с TF1700 и отправлять их в любой MQTT-брокер (например, Mosquitto, Home Assistant, EMQX).
1. Что нужно знать
- TF1700 поддерживает подключение по TCP/IP (порт
4370). - Он использует проприетарный протокол ZK, но его можно читать через библиотеку
pyzk. - RS-485 и USB не подходят для получения ID в реальном времени — используйте только сеть.
- MQTT-брокер должен быть доступен в той же сети (или через туннель).
192.168.1.200) и не блокируется брандмауэром.
2. Установка зависимостей
На сервере или Raspberry Pi, где будет работать скрипт:
pip install pyzk paho-mqtt
3. Проверка подключения к TF1700
Перед отправкой в 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, всё работает.
4. Основной скрипт: TF1700 → MQTT
Сохраните как 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()
5. Запуск и автозагрузка
Запустите вручную:
python3 tf1700_mqtt.py
Для автозапуска при старте системы (Linux/Raspberry Pi):
crontab -e
И добавьте строку:
@reboot /usr/bin/python3 /путь/к/tf1700_mqtt.py >> /var/log/tf1700.log 2>&1
6. Что приходит в MQTT
Пример сообщения в топике 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-код- Другие значения — см. документацию ZKTeco или логируйте для своей модели.
7. Дальнейшие шаги
- Подпишитесь на топик в Home Assistant, Node-RED или своём сервисе.
- Создайте таблицу соответствия
user_id → ФИОдля удобного отображения. - Добавьте датчик открытия двери (геркон) — чтобы отличать «прошёл мимо» от «вошёл».
Заключение
ZKTeco TF1700 — отличный источник данных о проходах. Через TCP/IP и небольшой Python-скрипт вы легко интегрируете его в умный дом, систему учёта или IoT-проект. Главное — не пытайтесь использовать RS-485 для этого: он не предназначен для передачи ID в открытом виде.
Комментарии
Пока нет комментариев. Будьте первым!