↩️ На главную

Доступ к компьютеру или админке умного дома по физической RFID-карте за 300 рублей

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

Контроль доступа к админке умного дома по RFID-карте

Авторизация по RFID-карте: 300 рублей и немного Python

Недавно купил за 300 рублей модуль RC522 — и сразу подумал: «А чё бы не сделать авторизацию через RFID-карту?» Не ради фантастики, а реально: разрешить вход в веб-интерфейс (например, админку IoT-системы) только если карта приложена.

Идея

  • Карта приложена → скрипт Python записывает 1 в файл (например, auth_status.txt).
  • Карта убрана → пишется 0.
  • PHP-интерфейс читает этот файл и решает: показывать форму входа или нет.

Просто. Дёшево. Работает даже без базы — хотя, конечно, в базу писать тоже можно.

Что нужно

  • Raspberry Pi (любая модель с GPIO)
  • Модуль RFID RC522
  • Карта/брелок (идёт в комплекте)
  • Библиотека mfrc522 для Python
  • Подключение RC522 к Raspberry Pi

    RC522Raspberry Pi (GPIO)
    SDACE0 (GPIO8)
    SCKSCLK (GPIO11)
    MOSIMOSI (GPIO10)
    MISOMISO (GPIO9)
    RSTGPIO25
    GNDGND
    3.3V3.3V

    Python-скрипт для записи статуса

    Устанавливаем библиотеку:

    pip3 install mfrc522

    Сам скрипт (rfid_auth.py):

    #!/usr/bin/env python3
    import RPi.GPIO as GPIO
    from mfrc522 import SimpleMFRC522
    import time
    
    reader = SimpleMFRC522()
    auth_file = "/var/www/html/auth_status.txt"  # Путь, доступный PHP
    
    # Сюда можно вписать UID своей карты (получить через отладочный запуск)
    AUTHORIZED_UID = 123456789  # ЗАМЕНИ НА СВОЙ!
    
    try:
        with open(auth_file, "w") as f:
            f.write("0")  # Сбрасываем статус при старте
    
        print("Жду карту...")
        while True:
            id, text = reader.read_no_block()
            if id:
                if id == AUTHORIZED_UID:
                    with open(auth_file, "w") as f:
                        f.write("1")
                    print(f"Карта {id} — доступ разрешён")
                else:
                    with open(auth_file, "w") as f:
                        f.write("0")
                    print(f"Неизвестная карта {id}")
            else:
                with open(auth_file, "w") as f:
                    f.write("0")
            time.sleep(1)
    
    finally:
        GPIO.cleanup()
    

    ⚠️ Не забудь заменить AUTHORIZED_UID на настоящий UID своей карты! Узнать его можно, запустив простой пример из документации mfrc522.

    PHP-проверка в веб-интерфейсе

    Пример admin.php:

    <?php
    $auth_file = 'auth_status.txt';
    $allowed = file_get_contents($auth_file) === "1";
    
    if (!$allowed) {
        die("Доступ запрещён. Приложите карту.");
    }
    ?>
    
    <h2>Админка IoT</h2>
    <p>Вы авторизованы по RFID!</p>
    <form method="post">
      Логин: <input name="login"><br>
      Пароль: <input type="password" name="pass"><br>
      <input type="submit" value="Войти">
    </form>

    Как запускать

    • Запусти скрипт в фоне: nohup python3 rfid_auth.py &
    • Убедись, что у пользователя www-data есть права на чтение auth_status.txt.

    Варианты улучшения

    • Запись в SQLite вместо файла — безопаснее и масштабируемее.
    • Добавить таймер: если карта не обновляла статус 10 секунд — автоматически ставить 0.
    • Использовать несколько UID для разных пользователей.

    Всё это можно собрать за вечер. И да — это реально работает даже в гараже 😉




Категории:

Категории

Комментарии

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

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

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

Посетителей сегодня: 0
о блоге | карта блога

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