Перейти к содержанию

Строка форматирования RFID-вывода

Справочник по строке форматирования считывателей ODNFC и ODRFID: коды форматированного вывода, режимы ASCII/DEC/HEX, вывод UID и блоков памяти, примеры и режим AT-команд.

Строка форматирования задаёт, какие данные считыватель вернёт с карты и в каком виде. С её помощью можно выбрать UID или область памяти, изменить порядок байтов, добавить постоянный текст и исключить ненужные данные. Преобразование выполняет сам считыватель до передачи результата.

Строка задаётся через программу-конфигуратор, AT-команды или веб-интерфейс — способ зависит от модели и прошивки считывателя.

Настройка строки форматирования в ODRFIDConfig

ODRFIDKit и ODRFIDKit Web показывают UID и доступную память карты. Для чтения и записи секторов нужны ODRFID-M или ODRFID-N; ODRFID-E работает только с идентификаторами меток 125 кГц.

Примеры содержимого карт в ODRFIDKit

Чтение MIFARE Classic 1K в ODRFIDKit
MIFARE Classic 1K: данные нулевого сектора.
Запись данных MIFARE Classic в режиме ASCII в ODRFIDKit
Запись MIFARE Classic в режиме ASCII.
Чтение MIFARE Ultralight в ODRFIDKit
Чтение MIFARE Ultralight.
Чтение идентификатора EM-Marine в ODRFIDKit
EM-Marine: доступен только UID.

Коды форматированного вывода

КодОписание
aрежим вывода ASCII (байт выводится как символ, только если он в диапазоне 32 «пробел» — 126 «~»)
dдесятичный режим (каждый байт — число 0…255)
hшестнадцатеричный режим в нижнем регистре (каждый байт как hh, h0..9,a..f)
Hшестнадцатеричный режим в верхнем регистре (каждый байт как HH, H0..9,A..F)
U*вывести UID целиком
U~вывести UID целиком в обратном порядке байт
UN:Mвывести байты UID с номера N по M включительно
UNвывести байт UID номер N
Urвывести UID как одно десятичное число с обратным порядком байтов; 4-байтовое значение дополняется до 10 цифр
Ucвывести 4-байтовый UID как Wiegand 26: трёхзначный Facility Code, запятая и пятизначный Card Number
Udто же представление Wiegand 26 с точкой между полями
BK%*вывести блок K целиком (отсчёт с нуля; размер зависит от типа карты — 4/16 байт)
BK%~вывести блок K целиком в обратном порядке байт
BK%N:Mвывести часть блока K
BK%Nвывести байт N блока K
\tсимвол табуляции
\nсимвол конца строки
Sвывести SAK карты
eдесятичный номер метки 125 кГц: Card Number для HID Prox или последние 3 байта EM-Marine, 10 цифр с ведущими нулями
Eполя метки 125 кГц через точку: Facility Code и Card Number для HID Prox или 3 + 5 цифр для EM-Marine
Dпротокольный десятичный номер: объединённые поля HID Prox, расширенный номер EM-Marine или UID HF-карты как little-endian число
Pидентификатор карты для устройств версии 3.0 и старше с EMV: PAN для EMV-совместимых карт, UID для остальных. Поддерживает все постфиксы кода U; PAN всегда выводится цифрами в ASCII (префиксы H, d игнорируются). Если EMV не поддерживается — работает как U

Дополнительно

Любой другой ASCII-символ выводится как есть. Чтобы вывести зарезервированный символ (например, B, U, S), поставьте перед ним \. Для вывода самого символа \ укажите его дважды: \\. Неподдерживаемые конкретным считывателем команды выводятся «как есть».

Режим по умолчанию — шестнадцатеричный. Регистр букв зависит от настройки считывателя Capitalize. В командах с диапазоном N:M отсчёт идёт с нуля. Если конечный индекс M меньше начального N, байты выводятся в обратном порядке. Например, U0:3 выводит первые четыре байта по порядку, а U3:0 — в обратном.

Допустимая длина строки зависит от модели и версии прошивки. В ODRFID-M/N/E команда AT+F= принимает до 31 байта данных; у некоторых других моделей предел составляет 57 байт. Предельная длина сформированного результата — 128 байт. Если AT-команда возвращает ERROR, сократите формат и проверьте ограничение для своей модели. Подробнее — в руководстве по AT-интеграции.

Примеры

КодРезультат
\H\ello, hU*Hello, 8d430ba4, где 8d430ba4 — UID карты
Oll\e\h, hU~Olleh, a40b438d
\H\ello\tHU0:1\tU2:3Hello→8D43→0BA4, где — табуляция
U2:3-B1%3:40BA4-4242 для MIFARE Classic; 3B56-42 для MIFARE Ultralight (размер блока 4 байта)
Ur3107602554 для UID 7A403AB9
Uc058,16506 для UID 7A403AB9

Режим AT-команд

Устанавливаем формат «Hello, + UID в HEX нижнего регистра», сохраняем и подносим карту:

> AT+F=\H\ello, hU*
OK
> AT+P
OK

# подносим карту, устройство выводит:
Hello, dcb43d07

Дополнительные материалы

История обновлений ODNFC на Lua

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

1.8.2
  • Улучшена работа устройства и исправлены ошибки.
  • Для устройств, работающих с метками 125 кГц, добавлено обнаружение типовых клонов EM-Marine.
1.8.1

Улучшения:

  • Новый веб-интерфейс.
  • Улучшена работа RFID-модулей MFRC и EM-Marine.
  • Улучшена работа Modbus.
  • Оптимизирована работа устройства.
1.7.0

Улучшения:

  • улучшена работа MFRC и EM-Marine;
  • в раздел «Редактор» добавлен простой файловый менеджер;
  • улучшена работа сетевых модулей;
  • оптимизирована работа устройства.

Исправлена ошибка в HTTP-заголовке Content-Length, из-за которой интерфейс не работал в некоторых операционных системах.

1.6.2
  • Улучшена работа MFRC и EM-Marine.
  • Улучшена библиотека Modbus.
  • Оптимизирована работа устройства.
  • В ODNFC-LAN-LUA добавлена регистрация обработчика успешного чтения.
1.6.1
  • Добавлена запись в зашифрованные карты MIFARE Classic.
  • Упрощена инициализация RFID: используются значения по умолчанию для каждой платы, поэтому изменён вызов основного класса и больше не требуются многие Lua-обёртки из rfid.lua.
  • Добавлена функция mfrc522.scan() — упрощённая версия базового класса для типовых операций.
  • Исправлены библиотеки EM-Marine и HID.
  • Оптимизирована библиотека Modbus.
  • Исправлена работа TCP-сервера.
1.6.0

Улучшения:

  • обновлён редактор кода: устранена проблема с переводами строк в новых версиях Firefox;
  • в веб-сервер добавлена поддержка HTTPS и WebSocket;
  • добавлены новые классы для работы с RFID-метками;
  • добавлена работа с NDEF и счётчиками Ultralight;
  • добавлены встроенные библиотеки cbor, cobs, mlib, Heatshrink и microtar;
  • расширены библиотеки osc, net, cutils, utils, cpu и emmarine;
  • LuaSocket больше не входит в прошивку;
  • добавлена загрузка сжатых Heatshrink-библиотек Lua;
  • добавлен WebSocket REPL для отладки через веб-IDE или расширение VS Code;
  • улучшена консоль: Unicode, автодополнение и история;
  • расширена поддержка Modbus;
  • Paho MQTT заменён собственной реализацией uMqtt;
  • ускорена работа устройства и веб-интерфейса;
  • выполнены другие небольшие исправления и оптимизации.

Исправлены ошибки, из-за которых после мягкой перезагрузки Wi-Fi запускался через раз, а RFID-модуль мог не инициализироваться.

1.5.0

Улучшения:

  • новый интерфейс и редактор кода;
  • добавлена библиотека tinycobs;
  • добавлены функции net.tcp.*;
  • добавлены функции eprint, hprint и wprint для вывода в окно «Инфо»;
  • трассировка ошибки загрузки теперь показывается в окне «Инфо»;
  • расширены возможности Telnet, SSH отключён;
  • в режиме восстановления Wi-Fi работает без пароля;
  • добавлена поддержка BLE-маяков на устройствах с BLE;
  • NTP запускается с задержкой 15 секунд, чтобы сеть успела установиться.

Исправлены режим статического Ethernet-адреса и установка яркости NeoPixel.

1.4.0
  • Улучшен встроенный веб-сервер.
  • Выполнены небольшие изменения для повышения стабильности.
  • Исправлена утечка памяти при HTTP-запросах из Windows.

Известная проблема этой версии: режим статического Ethernet-адреса в настройках не работает. Для обхода проблемы в начало пользовательской программы добавляли:

net.en.setup(
  net.packip(Settings.get("net_ip")),
  net.packip(Settings.get("net_mask")),
  net.packip(Settings.get("net_gw")),
  net.packip(Settings.get("net_dns"))
)
net.en.start()
1.3.2
  • В os.df() добавлен дополнительный параметр.
  • Выполнены небольшие изменения для повышения стабильности.
  • Исправлена утечка памяти при запросе метрики в интерфейсе.

Известная проблема этой версии: HTTP-запросы из Windows приводят к утечке памяти. После изменения настроек рекомендовалось закрыть браузер, перезагрузить устройство и не выполнять периодические HTTP-запросы.

1.3.1
  • Серийный номер синхронизирован с DataMatrix на корпусе модуля, если он есть.
1.3
  • Библиотека Telegram.lua добавлена в прошивку.
  • Библиотека LuaSocket теперь распространяется отдельно.