Категории

ZKTeco TF1700 → MQTT: как отправлять ID пользователей в брокер

19.12.2025 | Статья из категории: IOT умный дом

ZKTeco TF1700 → MQTT: как отправлять ID пользователей в брокер

Остались у меня со старой работы разные терминалы учета рабочего времени, ну или контроль доступа для электрозамков, хочу на дачу на гараж себе поставить или на погреб чтобы помидоры никто не сожрал ) Есть разные модели но тут разберемся про ZKTeco TF1700 и как его завести в общую экосистему mqtt
Устройство ZKTeco TF1700 — это терминал учёта рабочего времени с поддержкой отпечатков, карт и PIN-кодов. Хотя оно не управляет замками напрямую, его можно использовать как «умный датчик прохода»: при успешной аутентификации оно передаёт user_id, который можно пересылать в MQTT для учёта, логирования или автоматизации.

В этой статье — пошаговая инструкция, как получать события с TF1700 и отправлять их в любой MQTT-брокер (например, Mosquitto, Home Assistant, EMQX).

1. Что нужно знать

Важно: Убедитесь, что TF1700 имеет статический IP-адрес (например, 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:

7. Дальнейшие шаги

Заключение

ZKTeco TF1700 — отличный источник данных о проходах. Через TCP/IP и небольшой Python-скрипт вы легко интегрируете его в умный дом, систему учёта или IoT-проект. Главное — не пытайтесь использовать RS-485 для этого: он не предназначен для передачи ID в открытом виде.

Комментарии

Пока нет комментариев. Будьте первым!

Оставить комментарий

← Назад к списку статей

Важно: Блог-эксперимент

Блог только запустил, все статьи генерирую через нейросеть т.к. лень, возможны ошибки. Просто чтобы вы знали и не запускали ядерный реактор по моим статьям ))
Если у вас есть вопросы, или Нашли неточность? пишите в коментах — вместе поправим и сделаем статью более качественной. Я лично объясню нюансы из практики.

Посетителей сегодня: 0


кто я | книга | контакты

© Digital Specialist | Не являемся сотрудниками Google, Яндекса и NASA