Возникла потребность сделать СКУД сервис на базе считывателей RFID меток Impinj R420. Поискав готовые варианты доступные для работы с Python наткнулся только на Impinj Speedway Connect — ПО, которое умеет слать считанные метки в реальном времени на ваш http API (например FastApi или Flask) и работает на RFID считывателях Impinj Speedway. Стоимость лицензии составляет около $250 за считыватель. Без лицензии вы можете использовать Speedway Connect в демонстрационном режиме с ограничением на 500 считываний меток до перезагрузки устройства.

Если вы нуждаетесь в работе с RFID считывателем поддерживающим LLRP протокол, рассмотрите использование Python модуля, доступного на GitHub. Этот модуль позволяет подключаться и управлять RFID считывателем с помощью одной команды, предоставляя вам всю необходимую функциональность для работы с метками.

Подключение считывателя (на примере Impinj R420)

  1. Подключение к роутеру

    Подключите считыватель к роутеру через Ethernet-кабель.

  2. Определение IP-адреса считывателя

    Войдите в веб-интерфейс роутера на компьютере, подключенном к той же сети. Найдите IP-адрес считывателя по MAC-адресу, который указан на боковой стороне устройства.

  3. Проверка подключения

    Убедитесь, что вы правильно определили IP-адрес считывателя, попробовав подключиться к нему через HTTP (НЕ HTTPS) по этому IP (по умолчанию порт 80). Вы должны увидеть веб-интерфейс устройства.

    Логин: root
    Пароль: impinj

  4. Присвоение статического IP

    Присвойте считывателю статический IP через настройки роутера, чтобы он не изменился после перезагрузки. Инструкция по присвоению постоянного IP-адреса. Перезагрузите считыватель (вытянув питание) для обновления IP-адреса.

  5. Подключение антенн

    Подключите антенны к считывателю и подготовьте RFID метки для теста.

Установка и настройка проекта

  1. Клонирование репозитория

    Склонируйте репозиторий с GitHub:

    git clone https://github.com/Ruslanch0s/rfid_reader.git
  2. Настройка хоста считывателя

    В файле main.py укажите IP-адрес вашего считывателя:

    READER_HOST = "192.168.88.249"
  3. Запуск программы

    Убедитесь, что у вас установлен Python 3.9 или старше. Запустите программу:

    python main.py

Обработка меток

Функция callback используется для обработки меток, прочитанных считывателем. Вы можете изменить эту функцию под свои нужды. Пример:

def callback(_reader, tags):
    """
    Callback функция для обработки меток, прочитанных считывателем.

    Параметры:
        _reader (LLRPReaderClient): Объект считывателя, вызвавший callback.
        tags (list): Список прочитанных меток.
    """
    logger.info(f'TAGS:{tags}')

В своем проекте я использовал RabbitMQ для передачи данных, что позволяло избежать задержек в работе с базой данных (PostgreSQL) в периоды большого наплыва меток.

Настройка конфигурации считывателя

Файл конфигурации reader_config.py в папке core содержит настройки для считывателя. Пример конфигурации:

reader_cfg_dict = {
    'duration': 1,  # для бесконечного считывания меток !!!
    'tx_power_dbm': 31.5,  # Мощность передачи dBm
    'frequencies': {
        'HopTableId': 1,
        'Channelist': [866.9],  # Частотный диапазон в МГц
        'Automatic': False
    },
    'mode_identifier': 1004,  # Режим работы считывателя
    'session': 2,  # Сессия
    'impinj_search_mode': 2,  # Установка режима Single Target (по документации вашего устройства)
    'tag_population': 1,  # Предполагаемое количество меток в зоне считывания
    'antennas': [0],  # Какие антенны использовать (0 - все антенны)
    # какие данные о метках будут включены в отчеты:
    'tag_content_selector': {
        'EnableROSpecID': False,
        'EnableSpecIndex': False,
        'EnableInventoryParameterSpecID': False,
        'EnableAntennaID': True,  # Включение идентификатора антенны
        'EnableChannelIndex': False,
        'EnablePeakRSSI': False,
        'EnableFirstSeenTimestamp': False,
        'EnableLastSeenTimestamp': False,
        'EnableTagSeenCount': False,
        'EnableAccessSpecID': False
    }
}

Заключение

Данный код может спокойно заменить Impinj Speedway Connect, что позволит сэкономить, особенно на небольших проектах.

Источники

Код на гитхаб

Помощь с подключением

Если у вас возникнут вопросы или трудности с подключением или настройкой считывателя, я готов с удовольствием вам помочь.

  • Telegram: @Ruslanch0s

  • Email: cool.ziganshin2015@gmail.com