ODNFC-LAN
ODNFC-LAN-C
NFC считыватель-контроллер с сетевым интерфейсом с Lua
Ключевые возможности
  • Широкий список поддерживаемых меток
    Чтение-запись меток следующих стандартов:

    Mifare Classic 1K/4K/Mini: полная поддержка
    Mifare Ultralight: полная поддержка
    Mifare Ultralight Nano: полная поддержка
    Mifare Ultralight C: ограниченная поддержка - только чтение UID
    NTAG 213/215/216: полная поддержка
    S50/S70: полная поддержка
  • Работа в локальной сети
    Считыватель подключается в локальную сеть Ethernet с DHCP или статическими адресами, либо WiFi (AP или STA).
    Имеет встроенный WEB-интерфейс для настройки устройства.
    Может передавать данные по сетевому интерфейсу или получать команды.
  • Использование банковских карт в качестве метки
    Использование номера карты в качестве метки. Также можно использовать электронные карты из Apple Pay и Android Pay.
  • Генерация отчетов и логов
    Возможность собирать статистику "вход-выход" за период и отправлять на почту (для версии Pro).
    Данному разделу выделена отдельная страница.
  • Telegram (Pro)
    Прамая интеграция с телеграм ботом без использования сторонних сервисов.
    • Можно отправлять команды на перезагрузку и получать данные о работе, данные датчиков, статистику и т.д.
    • Можно написать свои действия на команды.
  • Самостоятельная модификация кода
    Считыватель имеет встроенный редактор кода, который позволяет расширить функционал устройства и сделать логику работы такой, как нужно именно вам.
  • Дискретный вход и выход
    Считыватель имеет один выход для подключения напрямую замка, а также вход для подключения кнопки. Это позволяет уменьшить количество используемого оборудования.
  • Управляемая индикация
    Считыватель позволяет программно управлять звуковым излучателем и RGB-светодиодом (ODNFC-LAN). Вместо одного диода можно подключить управляемую ленту длиной 40-60 светодиодов и реализовывать световые эффекты.
    ODNFC-LAN-C управляет классической светодиодной парой "красный-зелёный".
    Также можно подключить неуправляемую ленту через OUT.
  • Локальное хранение данных
    Устройство может хранить данные о пользователях локально и работать автономно или синхронизироваться с сервером по сетевому интерфейсу для запроса данных для обновления списка пользователей.
Исполнения

ODFNC-LAN (корпус Тип А) и
ODFNC-LAN-C (корпус Тип В)
У ODNFC-LAN лицевая панель покрыта тонкой защитной транспортировочной плёнкой.
Удалите её перед использованием.
Web-интерфейс
На момент написания этой заметки некоторые сборки Chrome могут блокировать часть функционала, т.к. устройство работает через http, а не https. Подробнее: https://itecnote.com/tecnote/websocket-connection-fails-on-chrome-without-ssl.
Если у вас возникает эта проблема, пожалуйста, используйте другой браузер.

Основной экран

На данном экране можно увидеть общую информацию об устройстве и сообщения из кода (отправленные из программы пользователя).


Экран настроек

Данный экран позволяет изменять основные настройки устройства.

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

Также в настройках можно закрыть паролем доступ к web-интерфейсу.

Если вы перезагружаете устройство, то надо перезагружать и странцу (примерно через 5 секунд). Потому что у вас в браузере осталась страница, которая не знает, что устройство перезагружено и она будет вести себя непредсказуемо, исходя из времени жизни кеша, открытых соединений и т.п.
  • Опции "Формат", "Тип ключа", "Ключ" - могут использоваться программистом в своей программе для упрощения настройки RFID при интеграции. Нужны, чтобы при настройке не требовалось править код.
  • "WatchDog" - функция, которая перезагрузит устройство, если что-то пойдет не так. Отключите на время разработки.
  • Опция "Тип Адреса" определяет тип подключения Ethernet/WIFI и тип получения адреса.
Далее идет блок сетевых настроек.
  • Включение MDNS позволят обращаться к устройству не зная его IP, по адресу типа odnc-[4-последние-цифры-серийного-номера].local. Например http://odnfc-ABCD.local
  • SSH включает ssh-сервер (доступен не во всех версиях).
  • Telnet - позволяет получить доступ к устройству по сети, если у вас не осталось никакого другого интерфейса для взаимодействия (он менее удобен, но гораздо легче, чем ssh).

Редактор кода

Простой редактор для модификации встроенной программы.
Позволяет изменять только в файле usercode.lua, который загружается автоматически.

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


Экран "об устройстве"

Экран для получения информации об устройстве, обновления устройства локально или через интернет.

Метки гораздо сложнее, чем это кажется на первый взгляд.
Метки Mifare позволяют не только читать их номер, но и производить чтение и запись ее встроенной памяти.

На картинке ниже содержимое начальных секторов некоторых типов карт из нашей программы ODRFIDKit, которая используется со считывателями ODRFID-M/N и может вам пригодиться для чтения-записи карт.
Считыватель позволяет легко реализовать считывание разных областей с помощью "строки форматирования".
Строка форматирования позволяет задать произвольный формат вывода данных с карты, произвести некоторые манипуляции (изменить порядок байт, добавить или вырезать данные и т.п.) ещё в считывателе и выдать уже преобразованный результат.
Подробнее о строке форматирования...
Технические характеристики
1. Чтение меток:
Mifare Classic 1K/4K/Mini: полная поддержка
Mifare Ultralight: полная поддержка
Mifare Ultralight Nano: полная поддержка
Mifare Ultralight C: ограниченная поддержка - только чтение UID
NTAG 213/215/216: полная поддержка
S50/S70: полная поддержка

2. Дальность считывания меток: до 6-10 см (сильно зависит от качества метки).
3. Габаритные размеры: 120х76х22мм ODNFC-LAN, 115х75х20мм ODNFC-LAN-C.
4. Интерфейсы: Ethernet/WiFi.
5. Индикация: RGB светодиод x2, звуковой излучатель.
6. Один входной канал (3В, подтянут к "1").
7. Один выходной канал (1А max), напряжение соответствует напряжению питания.
8. Четыре крепёжных отверстия М3.
9. Питание Passive PoE 7-24V.
Подключение
Интерфейс: Ethernet.
Разъём: IDC381-8-110, либо клеммная колодка или привычный LAN разъем 8P8C.
По-умолчанию, устройство подключается к DHCP-серверу и получает от него IP-адрес.

Питание: Passive PoE 7-24В.
Возможно подключение питания от источника постоянного тока.

Индикация сети: красный - нет линка, зелёный - есть линк.
odnfc-lan-n4-l-i
odnfc-lan-n4-l-k
odnfc-lan-n4-l-r
Назначение выводов

Основная колодка: Ethernet с Passive PoE
  • 1 и 2: используются для передачи данных (пара 1)
  • 3 и 6: используются для передачи данных (пара 2)
  • 4 и 5: используются для передачи питания (+)
  • 7 и 8: используются для передачи питания (-)
Можно подключить питание от БП подходящего тока и напряжения.

Дополнительная колодка:
  • OUT+ «+» исполнительного устройства / замка
  • OUT- «-» исполнительного устройства / замка
  • GND - «Земля»
  • IN - Сигнальный входной контакт





В некоторых сценариях может подойти также вариант с маленьким преобразователем из USB, но тут следует иметь в виду, что его мощность передачи питания по USB от ПК ограничена, и wifi, например, может не заработать.
Нужно включать от 1А зарядника (и иметь зарядник, допускающий постоянную работу).

Типы устройств
PRO версия отличается большим количеством энергонезависимой и оперативной памяти.

Дополнительные ресурсы Pro позволяют:
  • исполнять более сложные алгоритмы
  • использовать BLE
  • использовать SSH
  • использовать библиотеку CURL
  • использовать FTP
  • работать с Telegram
  • отправлять данные по почте
Варианты готовых программ
Мы предлагаем как уже запрограммированные и готовые к использованию устройства, так и демо-приложения. При этом все устройства можно модифицировать.
  • HTTP-считыватель
    Устройство передает UID поднесенной карты заданному в настройках серверу по HTTP, и в зависимости от ответа, открывает или нет.
    1
  • Автономный дверной замок
    Данный код открывает дверь при найденном в списке UID, который загружается через web-интерфейс.
    2
  • Замок с мастер-ключом
    Реализация классической схемы считывателя с мастер-ключом на добавление и удаление меток.
    3
  • Передача по сети
    Устройство передает UID поднесенной карты заданному в настройках серверу по UDP. Может пригодиться для решений типа "отметиться по приходу" или для автоматики (меток на предметах).
    4
  • Передача по MQTT
    Устройство передает UID поднесенной карты заданному в настройках серверу по MQTT. Может пригодиться для решений типа "отметиться по приходу" или для автоматики (меток на предметах).
    5
  • Ваш вариант
    Поможем вам (напишем или подскажем) реализовать ваш собственный сценарий работы.
    6
Почему Lua ?

Хотя Lua далеко не самый распространенный язык, он имеет ряд больших преимуществ:
  • предназначен для пользователей, не являющихся профессиональными программистами, вследствие чего большое внимание уделено простоте дизайна и лёгкости обучения;
  • скриптовый язык - не требует отдельной компиляции;
  • маленький размер - в контроллер умещается полная версия языка, а не урезанная;
  • простой паскалеподобный синтаксис, известный многим еще со школы;
  • минимум синтаксиса;
  • поддержка ООП;


Пример кода в устройстве
Небольшой пример, чтобы понять, как работает устройство.
Подробнее о самостоятельном программировании можно узнать на специальной странице.
Можно создать любой алгоритм, на который хватит фантазии и возможностей устройства.
Устройство передает UID (или другие данные) поднесенной карты заданному в настройках серверу по UDP
-- импорт библиотек
rfid = require("rfid")
indication = require("indication")
-- читаем настройки
wdt_on = Settings.get("sys_wdt") == "on"
format = Settings.get("rfid_format")
host, path, ssl, port = net.parseUrl(Settings.get("net_dest"))
-- определяем классы
leds = indication.Leds.new({RGB=true})
snd = indication.Sound.new()
reader = rfid.Reader({})
-- стартовая индикация
leds:start()
snd:start()
-- запускаем 
reader.process({
    timeout_ms = 200, -- таймаут в цикле; всегда должен быть больше 0
    mode = rfid.MODE_LOOP, -- вечный цикл (есть еще однократный или в режиме корутины)
    wdt = wdt_on, -- сторожевой таймер
    format = format, -- что читаем с метки
    checkfunc = function(uid) -- функция для проверки метки
        pcall(function() net.udp.sendto(uid, host, port) end) -- отправка по udp
        return true -- в этом примере проверок нет, все метки "подходят"
    end,
    okfunc = function() -- функция для обработки успешного поведения.
        leds:ok() -- индикация
        snd:ok() -- звук
    end
})
Восстановление устройства
Порядок действий, если вы "закирпичили" устройство и не можете получить к нему доступ.

  1. Выключить устройство.
  2. Замкнуть контакты HARD RESET на плате устройства.
  3. Включить устройство держа замкнутым разъём HARD RESET.
  4. Подождать несколько секунд (после контакты можно размокнуть).
  5. Устройство создаст WiFi-точку доступа вида OD-[серийный номер].
  6. Пароль сети - последние 8 цифр серийного номера.
  7. Устройство запустит Web-сервер и telnet-сервер, чтобы вы могли исправить настройки/программу и восстановить доступ к устройству.
  8. IP устройства: 192.168.4.1
Обновление устройства
Порядок действий
Открыть вкладку "Настройки" (в веб-браузере).
Если включен сторожевой таймер, то выключить его и перезагрузить устройство.

Открыть вкладку "Система" (в веб-браузере).
Обновление с сервера
1. Для проверки новой версии на сервере нажать "Онлайн" и подождать несколько секунд.
2. Если новая версия будет найдена, кнопка "Проверить" сменится на "Доступно" и кнопка "Загрузить" станет активна.
3. Нажать "Загрузить" и подождать примерно 2 минуты.
4. При успешной загрузке устройство перезагрузится.
5. После обновления нужно убедиться, что данные о сборке изменились на желаемые.

Обновление с файла
1. Нажать кнопку "Из файла", выбрать файл.
2. Нажать "Загрузить".
3. При успешной загрузке устройство перезагрузится.
4. После обновления нужно убедиться, что данные о сборке изменились на желаемые.
Актуальная версия на данный момент 1.3.2
Скачать
Дополнительные материалы
0
Строка форматирования
Как пользоваться, если выхотите читать не uid, а данные с карты.
1
Консоль
Как работать с консолью.
2
Как программировать ODNFC на Lua
Инструкции, учебники, советы, обсуждения.
3
Справочник по Lua
Русскоязычная он-лайн версия с поиском и перекрестными ссылками.