Пример: Bluetooth-маяки на ODNFC
Приём Bluetooth-маяков на ODNFC: возможности и ограничения iBeacon и Eddystone, пример на Lua и требования к защищённой идентификации.
Bluetooth-маяки передают короткие сообщения без установления соединения. ODNFC может использовать их для обнаружения устройств, телеметрии и прототипирования мобильной идентификации.
Требуется устройство с Lua, RTOS 1.5 или новее и поддержкой BLE.
Считыватель умеет передавать и принимать пакеты Eddystone URL, Eddystone UID, Eddystone TLM и iBeacon. Это отдельный канал: поддержка Bluetooth-маяков не превращает телефон в NFC-карту.
Что можно передавать
- Публичный идентификатор подходит для учёта присутствия и инвентаризации. Постоянное значение можно скопировать и повторить, поэтому его нельзя считать защищённым пропуском.
- Короткоживущий токен подходит для контроля доступа, если приложение и проверяющая сторона умеют его формировать и проверять. Добавьте время или счётчик, ограничьте срок действия, подпишите данные кодом аутентификации и отклоняйте уже использованные значения.
- Уровень сигнала RSSI помогает приблизительно оценить расстояние, но сильно зависит от телефона, положения антенны и помех. Не используйте RSSI как единственную проверку права доступа.
Однонаправленный маяк не выполняет полноценный обмен «запрос — ответ». Если нужно доказать владение секретным ключом и защититься от повторной передачи, потребуется BLE-соединение либо отдельный двусторонний протокол с проверкой свежести и подлинности сообщений. Одного шифрования без аутентификации недостаточно.
Тестирование
На снимках ниже показана проверка с BeaconSimulator на iOS и Locate на Android. Можно использовать и другое приложение, которое умеет передавать и принимать нужный формат маяка. Доступность конкретных приложений зависит от версии мобильной ОС и магазина приложений.



Код для приёма iBeacon
bt.attach(bt.mode.BLE)
bt.scan.start(function(data)
if data.type == bt.frameType.iBeacon then
print(data.type, data.ibeacon_major, data.ibeacon_minor, data.ibeacon_uuid)
end
end)
Пример консольного вывода при приёме пакета iBeacon:

Дополнительные материалы
История обновлений 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 теперь распространяется отдельно.