/
majkl
/
RFIDConfig
Обзор
Документация
Войти
/
majkl
/
RFIDConfig
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
webapi_help_v1.6.html
1 399 строк
61 KB
majkl84
Обновленно до HTTP GET API v1.6
12 мар 2026, 22:13
12 мар 2026, 22:13
6c796ef
Код
Авторство
О чём код?
<!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Документация HTTP GET API v1.6 для RFID-считывателей SAUK</title> <style> :root { --primary-color: #2c3e50; --secondary-color: #3498db; --accent-color: #e74c3c; --light-bg: #f9f9f9; --border-color: #ddd; --code-bg: #f5f5f5; --hover-color: #ecf0f1; } body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; line-height: 1.6; color: #333; max-width: 1200px; margin: 0 auto; padding: 20px; background-color: #fff; } h1, h2, h3, h4 { color: var(--primary-color); margin-top: 1.5em; margin-bottom: 0.5em; } h1 { text-align: center; padding-bottom: 20px; border-bottom: 3px solid var(--secondary-color); } h2 { border-left: 5px solid var(--secondary-color); padding-left: 15px; margin-top: 2em; } h3 { color: var(--secondary-color); background-color: var(--light-bg); padding: 10px; border-radius: 5px; margin-top: 1.5em; } .endpoint-card { background-color: var(--code-bg); border: 1px solid var(--border-color); border-radius: 8px; padding: 20px; margin: 20px 0; box-shadow: 0 2px 5px rgba(0,0,0,0.1); transition: transform 0.2s ease-in-out; } .endpoint-card:hover { transform: translateY(-2px); box-shadow: 0 4px 8px rgba(0,0,0,0.15); } .endpoint-url { font-family: 'Courier New', Courier, monospace; font-size: 1.1em; font-weight: bold; color: #d35400; background-color: #fff8e1; padding: 5px 10px; border-radius: 4px; display: inline-block; margin-bottom: 10px; } .parameter-table { width: 100%; border-collapse: collapse; margin: 15px 0; font-size: 0.95em; } .parameter-table th, .parameter-table td { border: 1px solid var(--border-color); padding: 12px; text-align: left; } .parameter-table th { background-color: var(--secondary-color); color: white; font-weight: bold; } .parameter-table tr:nth-child(even) { background-color: var(--light-bg); } .parameter-table tr:hover { background-color: var(--hover-color); } .example-box { background-color: #e8f4fd; border-left: 4px solid var(--secondary-color); padding: 15px; margin: 15px 0; border-radius: 0 4px 4px 0; } .code-block { background-color: var(--code-bg); padding: 15px; border-radius: 5px; overflow-x: auto; font-family: 'Courier New', Courier, monospace; margin: 15px 0; border: 1px solid var(--border-color); } .note { background-color: #fff3cd; border-left: 4px solid #ffc107; padding: 15px; margin: 15px 0; border-radius: 0 4px 4px 0; } .warning { background-color: #f8d7da; border-left: 4px solid #dc3545; padding: 15px; margin: 15px 0; border-radius: 0 4px 4px 0; } .success { background-color: #d4edda; border-left: 4px solid #28a745; padding: 15px; margin: 15px 0; border-radius: 0 4px 4px 0; } .toc { background-color: var(--light-bg); padding: 20px; border-radius: 8px; margin: 30px 0; border: 1px solid var(--border-color); } .toc ul { list-style-type: none; padding-left: 0; } .toc li { margin: 10px 0; } .toc a { text-decoration: none; color: var(--secondary-color); font-weight: 500; transition: color 0.2s ease-in-out; } .toc a:hover { color: var(--accent-color); text-decoration: underline; } .search-container { text-align: center; margin: 30px 0; } #searchInput { width: 50%; padding: 10px; font-size: 16px; border: 2px solid var(--secondary-color); border-radius: 25px; outline: none; transition: all 0.3s ease; } #searchInput:focus { box-shadow: 0 0 10px rgba(52, 152, 219, 0.5); width: 60%; } .category-tag { display: inline-block; background-color: var(--secondary-color); color: white; padding: 3px 8px; border-radius: 12px; font-size: 0.8em; margin-right: 5px; margin-bottom: 5px; } footer { text-align: center; margin-top: 50px; padding: 20px; border-top: 1px solid var(--border-color); color: #777; } @media (max-width: 768px) { body { padding: 10px; } #searchInput { width: 80%; } .endpoint-card { padding: 15px; } } </style> </head> <body> <h1>Документация HTTP GET API для RFID-считывателей на SAUK</h1> <div class="search-container"> <input type="text" id="searchInput" placeholder="Поиск по документации..."> </div> <div class="toc"> <h2>Содержание</h2> <ul> <li><a href="#system">1. Системные и Сервисные Запросы</a></li> <li><a href="#network">2. Управление Сетью (Wi-Fi/Ethernet)</a></li> <li><a href="#access">3. Управление Доступом и Аутентификацией</a></li> <li><a href="#rfid">4. Управление RFID-Модулем и Инвентаризацией</a></li> <li><a href="#time">5. Управление Временем и Системой</a></li> <li><a href="#accesstable">6. Работа с Таблицей Доступа (EEPROM)</a></li> <li><a href="#encode">7. Кодирование RFID-меток</a></li> <li><a href="#periphery">8. Управление Периферией (Реле)</a></li> <li><a href="#notify_example">9. Уведомления, отправляемые на хост</a></li> <li><a href="#notes">Примечания</a></li> </ul> </div> <h2 id="system">1. Системные и Сервисные Запросы</h2> <div class="endpoint-card"> <div class="endpoint-url">GET /restart_rfid</div> <p><strong>Описание:</strong> Программно перезагружает RFID-модуль (сбрасывает его и инициализирует заново).</p> <p><strong>Параметры:</strong> Нет.</p> <p><strong>Ответ:</strong> <code>200 OK</code> - в теле ответа строка "OK".</p> </div> <div class="endpoint-card"> <div class="endpoint-url">GET /logout</div> <p><strong>Описание:</strong> Завершает текущую сессию аутентификации. При следующем запросе к защищенному ресурсу браузер запросит логин и пароль.</p> <p><strong>Параметры:</strong> Нет.</p> <p><strong>Ответ:</strong> <code>401 Unauthorized</code>.</p> </div> <div class="endpoint-card"> <div class="endpoint-url">GET /reboot</div> <p><strong>Описание:</strong> Перезагружает RFID-считыватель.</p> <p><strong>Параметры:</strong> Нет.</p> <p><strong>Ответ:</strong> <code>200 OK</code> - в теле ответа строка "OK".</p> </div> <div class="endpoint-card"> <div class="endpoint-url">GET /beepdevice</div> <p><strong>Описание:</strong> Инициирует звуковой и световой сигнал (два коротких сигнала) на устройстве для его идентификации.</p> <p><strong>Параметры:</strong> Нет.</p> <p><strong>Ответ:</strong> <code>200 OK</code> - в теле ответа строка "OK".</p> </div> <div class="endpoint-card"> <div class="endpoint-url">GET /version</div> <p><strong>Описание:</strong> Возвращает информацию о версиях прошивки, оборудования, чипа RFID и т.д.</p> <p><strong>Параметры:</strong> Нет.</p> <p><strong>Ответ:</strong> <code>200</code> - JSON объект с ключами: <code>serial</code>, <code>chip_version</code>, <code>firmware</code>, <code>hardware</code>, <code>hardware_e</code>, <code>webapi</code>, <code>build</code>, <code>options</code>, <code>buffsize</code>.</p> <div class="example-box"> <p><strong>Пример ответа:</strong></p> <div class="code-block"> { "serial": "AC:67:B2:34:56:78", "chip_version": "SAUK VS4.2.2", "firmware": "3.7", "hardware": "4.0", "hardware_e": "4.0", "webapi": "1.0", "build": "SAUK-M04", "options": "W2,R4,H1,NTP,MBT,SD", "buffsize": 100 } </div> </div> </div> <div class="endpoint-card"> <div class="endpoint-url">GET /messagelog</div> <p><strong>Описание:</strong> Возвращает журнал системных событий и сообщений.</p> <p><strong>Параметры:</strong> Нет.</p> <p><strong>Ответ:</strong> <code>200</code> - JSON массив объектов, каждый из которых содержит метку времени (<code>RTC</code>), тип (<code>type</code>), источник (<code>source</code>) и само сообщение (<code>message</code>).</p> </div> <h2 id="network">2. Управление Сетью (Wi-Fi/Ethernet)</h2> <div class="endpoint-card"> <div class="endpoint-url">GET /netinfo</div> <p><strong>Описание:</strong> Возвращает текущую конфигурацию сетевых интерфейсов (Wi-Fi STA, Wi-Fi AP, Ethernet) или позволяет ее изменить.</p> <p><strong>Параметры (для изменения):</strong></p> <table class="parameter-table"> <tr> <th>Параметр</th> <th>Тип</th> <th>Описание</th> <th>Обязательный</th> </tr> <tr> <td>sta_enable</td> <td>bool</td> <td>Включить/выключить подключение к внешней Wi-Fi сети</td> <td>Нет</td> </tr> <tr> <td>ap_enable</td> <td>bool</td> <td>Включить/выключить точку доступа (AP). <em>Примечание: В коде AP нельзя выключить.</em></td> <td>Нет</td> </tr> <tr> <td>reduce_power</td> <td>bool</td> <td>Включить/выключить режим пониженной мощности Wi-Fi</td> <td>Нет</td> </tr> <tr> <td>ap_ip</td> <td>string</td> <td>Установить IP-адрес для точки доступа</td> <td>Нет</td> </tr> <tr> <td>ap_pass1</td> <td>string</td> <td>Новый пароль для точки доступа</td> <td>Нет</td> </tr> <tr> <td>ap_pass2</td> <td>string</td> <td>Подтверждение нового пароля (должен совпадать с <code>ap_pass1</code>)</td> <td>Нет</td> </tr> <tr> <td>eth_enable</td> <td>bool</td> <td>Включить/выключить интерфейс Ethernet</td> <td>Нет</td> </tr> <tr> <td>eth_static</td> <td>bool</td> <td>Использовать статический IP для Ethernet</td> <td>Нет</td> </tr> <tr> <td>eth_ipv4</td> <td>string</td> <td>Статический IP-адрес для Ethernet</td> <td>Нет</td> </tr> <tr> <td>eth_mask</td> <td>string</td> <td>Маска подсети для Ethernet</td> <td>Нет</td> </tr> <tr> <td>eth_gate</td> <td>string</td> <td>Шлюз по умолчанию для Ethernet</td> <td>Нет</td> </tr> </table> <p><strong>Ответ:</strong> <code>200</code> - JSON объект с полной текущей конфигурацией сети.</p> </div> <div class="endpoint-card"> <div class="endpoint-url">GET /wificonnect</div> <p><strong>Описание:</strong> Инициирует подключение к указанной Wi-Fi сети.</p> <p><strong>Параметры:</strong></p> <table class="parameter-table"> <tr> <th>Параметр</th> <th>Тип</th> <th>Описание</th> <th>Обязательный</th> </tr> <tr> <td>ssid</td> <td>string</td> <td>Имя сети (SSID)</td> <td>Да</td> </tr> <tr> <td>pass</td> <td>string</td> <td>Пароль сети</td> <td>Да</td> </tr> <tr> <td>safe</td> <td>bool</td> <td>Если <code>true</code>, текущая конфигурация будет сохранена в файловую систему</td> <td>Нет</td> </tr> </table> <p><strong>Ответ:</strong> <code>200 OK</code> - в теле ответа строка "OK".</p> </div> <div class="endpoint-card"> <div class="endpoint-url">GET /ntp</div> <p><strong>Описание:</strong> Возвращает или настраивает параметры NTP-клиента для синхронизации времени.</p> <p><strong>Параметры (для настройки):</strong></p> <table class="parameter-table"> <tr> <th>Параметр</th> <th>Тип</th> <th>Описание</th> <th>Обязательный</th> </tr> <tr> <td>enable</td> <td>bool</td> <td>Включить/выключить NTP-синхронизацию</td> <td>Нет</td> </tr> <tr> <td>server</td> <td>string</td> <td>Адрес основного NTP-сервера</td> <td>Нет</td> </tr> <tr> <td>server2</td> <td>string</td> <td>Адрес резервного NTP-сервера</td> <td>Нет</td> </tr> <tr> <td>zone</td> <td>int</td> <td>Часовой пояс (смещение от GMT в часах)</td> <td>Нет</td> </tr> <tr> <td>period_hours</td> <td>int</td> <td>Период автоматической синхронизации в часах</td> <td>Нет</td> </tr> </table> <p><strong>Ответ:</strong> <code>200</code> - JSON объект с текущими настройками NTP.</p> </div> <h2 id="access">3. Управление Доступом и Аутентификацией</h2> <div class="endpoint-card"> <div class="endpoint-url">GET /webaccess</div> <p><strong>Описание:</strong> Изменяет логин и пароль для доступа к веб-интерфейсу. Требует текущей аутентификации.</p> <p><strong>Параметры:</strong></p> <table class="parameter-table"> <tr> <th>Параметр</th> <th>Тип</th> <th>Описание</th> <th>Обязательный</th> </tr> <tr> <td>login</td> <td>string</td> <td>Новый логин (макс. 9 символов)</td> <td>Да</td> </tr> <tr> <td>password</td> <td>string</td> <td>Новый пароль (макс. 9 символов)</td> <td>Да</td> </tr> </table> <p><strong>Ответ:</strong> <code>200 OK</code> - в теле ответа строка "OK".</p> </div> <div class="endpoint-card"> <div class="endpoint-url">GET /tableaccess</div> <p><strong>Описание:</strong> Изменяет логин и пароль для оператора таблицы доступа. Требует текущей аутентификации.</p> <p><strong>Параметры:</strong></p> <table class="parameter-table"> <tr> <th>Параметр</th> <th>Тип</th> <th>Описание</th> <th>Обязательный</th> </tr> <tr> <td>tlogin</td> <td>string</td> <td>Новый логин оператора таблицы (макс. 9 символов)</td> <td>Да</td> </tr> <tr> <td>tpassword</td> <td>string</td> <td>Новый пароль оператора таблицы (макс. 9 символов)</td> <td>Да</td> </tr> </table> <p><strong>Ответ:</strong> <code>200 OK</code> - в теле ответа строка "OK".</p> </div> <div class="endpoint-card"> <div class="endpoint-url">GET /wifiaccess</div> <p><strong>Описание:</strong> Изменяет пароль для встроенной точки доступа Wi-Fi. Требует текущей аутентификации.</p> <p><strong>Параметры:</strong></p> <table class="parameter-table"> <tr> <th>Параметр</th> <th>Тип</th> <th>Описание</th> <th>Обязательный</th> </tr> <tr> <td>password</td> <td>string</td> <td>Новый пароль для Wi-Fi AP (макс. 10 символов)</td> <td>Да</td> </tr> </table> <p><strong>Ответ:</strong> <code>200 OK</code> - в теле ответа строка "OK".</p> </div> <h2 id="rfid">4. Управление RFID-Модулем и Инвентаризацией</h2> <div class="endpoint-card"> <div class="endpoint-url">GET /inventory_once</div> <p><strong>Описание:</strong> Запускает однократный цикл инвентаризации RFID-меток (если непрерывное сканирование отключено).</p> <p><strong>Параметры:</strong> Нет.</p> <p><strong>Ответ:</strong> <code>200 OK</code> - в теле ответа строка "OK".</p> </div> <div class="endpoint-card"> <div class="endpoint-url">GET /rfidconfig</div> <p><strong>Описание:</strong> Возвращает текущую конфигурацию RFID-модуля или позволяет ее изменить.</p> <p><strong>Параметры (для изменения, примеры):</strong></p> <table class="parameter-table"> <tr> <th>Параметр</th> <th>Тип</th> <th>Описание</th> <th>Обязательный</th> </tr> <tr> <td>infiniteinventory</td> <td>bool</td> <td>Включить/выключить непрерывную инвентаризацию</td> <td>Нет</td> </tr> <tr> <td>pwrant1, pwrant2, pwrant3, pwrant4</td> <td>int</td> <td>Установить мощность для антенн 1-4</td> <td>Нет</td> </tr> <tr> <td>enant1, enant2, enant3, enant4</td> <td>bool</td> <td>Включить/выключить антенны 1-4 для инвентаризации</td> <td>Нет</td> </tr> <tr> <td>activ1, activ2, activ3, activ4</td> <td>bool</td> <td>Включить/выключить физическую активность антенн 1-4</td> <td>Нет</td> </tr> <tr> <td>txtant1, txtant2, txtant3, txtant4</td> <td>string</td> <td>Установить текстовые псевдонимы для антенн 1-4</td> <td>Нет</td> </tr> <tr> <td>entrig1, entrig2</td> <td>bool</td> <td>Включить/выключить триггеры HOLD 1 и 2</td> <td>Нет</td> </tr> <tr> <td>no_trig1, no_trig2</td> <td>bool</td> <td>Установить тип триггера HOLD 1 и 2 (NO/NC)</td> <td>Нет</td> </tr> <tr> <td>triggered1, triggered2, triggered3, triggered4</td> <td>int</td> <td>Настроить, какие антенны активируются триггерами HOLD (1, 2, 3)</td> <td>Нет</td> </tr> <tr> <td>rf_session</td> <td>int</td> <td>Установить номер сессии RFID</td> <td>Нет</td> </tr> <tr> <td>repeattime</td> <td>int</td> <td>Установить количество циклов сканирования за одну инвентаризацию</td> <td>Нет</td> </tr> <tr> <td>min_hold_ms</td> <td>int</td> <td>Установить минимальное время активации от HOLD-триггера</td> <td>Нет</td> </tr> <tr> <td>freq_start, freq_space, freq_quan</td> <td>int</td> <td>Настроить частотный план</td> <td>Нет</td> </tr> <tr> <td>freq_error</td> <td>float</td> <td>Установить компенсацию частотной ошибки</td> <td>Нет</td> </tr> <tr> <td>diagnostics</td> <td>-</td> <td>Запустить диагностику подключения антенн</td> <td>Нет</td> </tr> </table> <p><strong>Ответ:</strong> <code>200</code> - JSON объект с полной текущей конфигурацией RFID-модуля.</p> </div> <div class="endpoint-card"> <div class="endpoint-url">GET /tagidentity</div> <p><strong>Описание:</strong> Возвращает или настраивает параметры идентификации и фильтрации RFID-меток.</p> <p><strong>Параметры (для настройки, примеры):</strong></p> <table class="parameter-table"> <tr> <th>Параметр</th> <th>Тип</th> <th>Описание</th> <th>Обязательный</th> </tr> <tr> <td>validtime_ms</td> <td>long</td> <td>Время "сна" метки перед повторной инвентаризацией</td> <td>Нет</td> </tr> <tr> <td>hold_time_ms</td> <td>uint32</td> <td>Время удержания метки в списке инвентаризации</td> <td>Нет</td> </tr> <tr> <td>beep_on_tag</td> <td>bool</td> <td>Включить/выключить звуковой сигнал при обнаружении метки</td> <td>Нет</td> </tr> <tr> <td>rssi_filter_enable</td> <td>bool</td> <td>Включить/выключить фильтр по уровню RSSI</td> <td>Нет</td> </tr> <tr> <td>rssi_filter_value</td> <td>int</td> <td>Установить пороговое значение RSSI для фильтра</td> <td>Нет</td> </tr> <tr> <td>epc_filter_enable1-4</td> <td>bool</td> <td>Включить/выключить EPC-фильтры 1-4</td> <td>Нет</td> </tr> <tr> <td>epc_filter_value1-4</td> <td>string</td> <td>Установить значения EPC-фильтров 1-4</td> <td>Нет</td> </tr> <tr> <td>epc_access_password</td> <td>string</td> <td>Установить пароль доступа к меткам</td> <td>Нет</td> </tr> <tr> <td>extra_mem_read</td> <td>bool</td> <td>Включить/выключить чтение дополнительного банка памяти (TID/USER)</td> <td>Нет</td> </tr> <tr> <td>extra_mem_bank</td> <td>uint8</td> <td>Выбрать банк памяти для чтения (2=TID, 3=USER)</td> <td>Нет</td> </tr> <tr> <td>data_start_words</td> <td>uint8</td> <td>Установить начальное смещение для чтения данных (в словах)</td> <td>Нет</td> </tr> <tr> <td>data_len_words</td> <td>uint8</td> <td>Установить длину читаемых данных (в словах, макс. 6)</td> <td>Нет</td> </tr> <tr> <td>accesstable</td> <td>bool</td> <td>Включить/выключить проверку меток по таблице доступа</td> <td>Нет</td> </tr> <tr> <td>notify_enable</td> <td>bool</td> <td>Включить/выключить уведомления по Socket</td> <td>Нет</td> </tr> <tr> <td>notify_ip</td> <td>string</td> <td>Установить IP-адрес для уведомлений по Socket</td> <td>Нет</td> </tr> <tr> <td>notify_port</td> <td>uint32</td> <td>Установить порт для уведомлений по Socket</td> <td>Нет</td> </tr> <tr> <td>notify_time_lim_ms</td> <td>uint32</td> <td>Установить таймаут соединения для уведомлений</td> <td>Нет</td> </tr> <tr> <td>http_enable</td> <td>bool</td> <td>Разрешить отправку уведомлений в формате HTTP GET</td> <td>Нет</td> </tr> <tr> <td>http_wait</td> <td>bool</td> <td>Ждать ответа от HTTP-сервера перед локальным управлением реле</td> <td>Нет</td> </tr> <tr> <td>modbus_rtu</td> <td>bool</td> <td>Включить/выключить протокол MODBUS RTU (отключает другие UART-уведомления)</td> <td>Нет</td> </tr> <tr> <td>notify_uart</td> <td>bool</td> <td>Включить/выключить уведомления по UART</td> <td>Нет</td> </tr> <tr> <td>notify_uart_json</td> <td>uint8</td> <td>Установить формат UART-уведомлений (0-байтовый, 1-JSON, 2-ASCII, 3-настраиваемый байтовый)</td> <td>Нет</td> </tr> <tr> <td>add_prefix, add_suffix</td> <td>string</td> <td>Добавить префикс/суффикс к UART-уведомлениям</td> <td>Нет</td> </tr> <tr> <td>add_epcl, add_epc, add_tidl, add_tid, add_ant, add_rssi, add_crlf</td> <td>bool</td> <td>Включить/выключить добавление соответствующих полей в UART-уведомления</td> <td>Нет</td> </tr> <tr> <td>notify_uart_alive</td> <td>bool</td> <td>Включить/выключить отправку KeepAlive сообщений по UART</td> <td>Нет</td> </tr> <tr> <td>notify_uart_speed</td> <td>int</td> <td>Установить скорость UART</td> <td>Нет</td> </tr> <tr> <td>ble_keyb</td> <td>bool</td> <td>Включить/выключить эмуляцию BLE-клавиатуры</td> <td>Нет</td> </tr> <tr> <td>antenna_stay</td> <td>bool</td> <td>Включить фильтр по удержанию антенны</td> <td>Нет</td> </tr> <tr> <td>antenna_rssi</td> <td>bool</td> <td>Включить фильтр по RSSI для удержания антенны</td> <td>Нет</td> </tr> </table> <p><strong>Ответ:</strong> <code>200</code> - JSON объект с текущими параметрами идентификации. Если параметр <code>taglist=true</code>, в ответ также включается таблица обнаруженных меток.</p> </div> <div class="endpoint-card"> <div class="endpoint-url">GET /peripheryconfig</div> <p><strong>Описание:</strong> Возвращает или настраивает параметры управления периферией (Wiegand, реле, пищалка, рампа).</p> <p><strong>Параметры (для настройки, примеры):</strong></p> <table class="parameter-table"> <tr> <th>Параметр</th> <th>Тип</th> <th>Описание</th> <th>Обязательный</th> </tr> <tr> <td>w_pullup</td> <td>bool</td> <td>Включить/выключить подтяжку линий Wiegand</td> <td>Нет</td> </tr> <tr> <td>wiegand1_enable, wiegand2_enable</td> <td>bool</td> <td>Включить/выключить интерфейсы Wiegand 1 и 2</td> <td>Нет</td> </tr> <tr> <td>wiegand1_type, wiegand2_type</td> <td>int</td> <td>Установить тип Wiegand (26, 34, 48 и т.д.)</td> <td>Нет</td> </tr> <tr> <td>wiegand1_shift_bytes, wiegand2_shift_bytes</td> <td>int</td> <td>Установить смещение для данных Wiegand</td> <td>Нет</td> </tr> <tr> <td>wiegand1_source, wiegand2_source</td> <td>int</td> <td>Выбрать источник данных для Wiegand (1=EPC, иначе DATA)</td> <td>Нет</td> </tr> <tr> <td>wiegand1_depends, wiegand2_depends</td> <td>int</td> <td>Настроить зависимость Wiegand от антенн (битовая маска)</td> <td>Нет</td> </tr> <tr> <td>timeout_logical_0</td> <td>uint16</td> <td>Установить ширину импульса Wiegand</td> <td>Нет</td> </tr> <tr> <td>timeout_next_bit</td> <td>uint16</td> <td>Установить период следования импульсов Wiegand</td> <td>Нет</td> </tr> <tr> <td>parity_enable</td> <td>bool</td> <td>Включить/выключить биты четности для Wiegand</td> <td>Нет</td> </tr> <tr> <td>beep_on_start</td> <td>bool</td> <td>Включить/выключить звуковой сигнал при старте устройства</td> <td>Нет</td> </tr> <tr> <td>smartboard_enable</td> <td>bool</td> <td>Включить/выключить управление платой SmartBoard</td> <td>Нет</td> </tr> <tr> <td>smartboard_port1_enable, smartboard_port2_enable...</td> <td>bool</td> <td>Включить/выключить порты SmartBoard</td> <td>Нет</td> </tr> <tr> <td>smartboard_port1_timer, smartboard_port2_timer...</td> <td>uint32</td> <td>Установить время удержания для портов SmartBoard</td> <td>Нет</td> </tr> <tr> <td>smartboard_port1_ants, smartboard_port2_ants...</td> <td>uint32</td> <td>Настроить зависимость портов SmartBoard от антенн</td> <td>Нет</td> </tr> <tr> <td>ramp_link, ramp_enable, ramp_renable</td> <td>bool</td> <td>Настроить взаимодействие с контроллером рампы</td> <td>Нет</td> </tr> <tr> <td>ramp_timeout, ramp_ltimeout, ramp_senable, ramp_stype, ramp_address</td> <td>uint32</td> <td>Настроить параметры работы с рампой</td> <td>Нет</td> </tr> <tr> <td>wdog_enable, rwdog_enable</td> <td>bool</td> <td>Включить/выключить системный и RFID watchdog</td> <td>Нет</td> </tr> <tr> <td>rwdog_timeout</td> <td>uint32</td> <td>Установить таймаут RFID watchdog</td> <td>Нет</td> </tr> <tr> <td>wd_hour, wd_min, wd_sec</td> <td>uint8</td> <td>Установить время для ежедневной перезагрузки</td> <td>Нет</td> </tr> </table> <p><strong>Ответ:</strong> <code>200</code> - JSON объект с текущей конфигурацией периферии.</p> </div> <div class="endpoint-card"> <div class="endpoint-url">GET /checkwiegand</div> <p><strong>Описание:</strong> Проверяет работу интерфейсов Wiegand, подавая на линии D0 и D1 короткий импульс HIGH.</p> <p><strong>Параметры:</strong> Нет.</p> <p><strong>Ответ:</strong> <code>200 OK</code> - в теле ответа строка "OK".</p> </div> <div class="endpoint-card"> <div class="endpoint-url">GET /simulatewiegand</div> <p><strong>Описание:</strong> Отправляет тестовые данные по интерфейсу Wiegand для проверки его работы.</p> <p><strong>Параметры:</strong> Нет.</p> <p><strong>Ответ:</strong> <code>200 OK</code> - в теле ответа строка "OK".</p> </div> <div class="endpoint-card"> <div class="endpoint-url">GET /lasttag</div> <p><strong>Описание:</strong> Возвращает данные о последней обнаруженной RFID-метке на указанной антенне. Если инвентаризация не запущена, запускает ее.</p> <p><strong>Параметры:</strong></p> <table class="parameter-table"> <tr> <th>Параметр</th> <th>Тип</th> <th>Описание</th> <th>Обязательный</th> </tr> <tr> <td>antenna</td> <td>int</td> <td>Номер антенны (1-4). По умолчанию 1</td> <td>Нет</td> </tr> </table> <p><strong>Ответ:</strong> <code>200</code> - JSON объект с данными о последней метке (EPC, RSSI, антенна и т.д.).</p> </div> <div class="endpoint-card"> <div class="endpoint-url">GET /taglist</div> <p><strong>Описание:</strong> Возвращает список всех RFID-меток, находящихся в данный момент в зоне действия считывателя и прошедших фильтрацию.</p> <p><strong>Параметры:</strong></p> <table class="parameter-table"> <tr> <th>Параметр</th> <th>Тип</th> <th>Описание</th> <th>Обязательный</th> </tr> <tr> <td>limit</td> <td>int</td> <td>Максимальное количество меток в ответе (по умолчанию 50, макс. 150)</td> <td>Нет</td> </tr> </table> <p><strong>Ответ:</strong> <code>200</code> - JSON объект, содержащий массив <code>list</code> с данными о метках.</p> </div> <div class="endpoint-card"> <div class="endpoint-url">GET /taglist_clear</div> <p><strong>Описание:</strong> Очищает список обнаруженных RFID-меток.</p> <p><strong>Параметры:</strong> Нет.</p> <p><strong>Ответ:</strong> <code>200 OK</code> - в теле ответа строка "OK".</p> </div> <h2 id="time">5. Управление Временем и Системой</h2> <div class="endpoint-card"> <div class="endpoint-url">GET /datetime</div> <p><strong>Описание:</strong> Возвращает текущее системное время и статус устройства или позволяет установить новое системное время.</p> <p><strong>Параметры (для установки времени):</strong></p> <table class="parameter-table"> <tr> <th>Параметр</th> <th>Тип</th> <th>Описание</th> <th>Обязательный</th> </tr> <tr> <td>day, month, year, hour, minute, second</td> <td>int</td> <td>Компоненты даты и времени</td> <td>Да (все вместе)</td> </tr> <tr> <td>wday</td> <td>int</td> <td>День недели (1-7, где 1 - воскресенье)</td> <td>Да</td> </tr> </table> <p><strong>Параметры (для получения времени):</strong></p> <table class="parameter-table"> <tr> <th>Параметр</th> <th>Тип</th> <th>Описание</th> <th>Обязательный</th> </tr> <tr> <td>taglist</td> <td>bool</td> <td>Если <code>true</code>, в ответ также включается таблица <code>list</code> с текущими метками</td> <td>Нет</td> </tr> </table> <p><strong>Ответ:</strong></p> <ul> <li>При установке времени: <code>200 OK</code> - в теле ответа строка "OK".</li> <li>При запросе времени: <code>200</code> - JSON объект с текущим временем, статусом Wi-Fi, цветом LED, количеством меток и другой диагностической информацией.</li> </ul> </div> <div class="endpoint-card"> <div class="endpoint-url">GET /uart</div> <p><strong>Описание:</strong> Запускает диагностику UART-порта. Отправляет тестовую последовательность байт <code>A0 00 FF 01 02 0D 0A</code> и ожидает ответ.</p> <p><strong>Параметры:</strong> Нет.</p> <p><strong>Ответ:</strong> <code>200 OK</code> - в теле ответа строка "OK".</p> </div> <h2 id="accesstable">6. Работа с Таблицей Доступа (EEPROM)</h2> <div class="endpoint-card"> <div class="endpoint-url">GET /accesstable_size</div> <p><strong>Описание:</strong> Возвращает текущее количество записей в таблице доступа, хранящейся в EEPROM.</p> <p><strong>Параметры:</strong> Нет.</p> <p><strong>Ответ:</strong> <code>200</code> - число (количество записей).</p> </div> <div class="endpoint-card"> <div class="endpoint-url">GET /accesstable_capacity</div> <p><strong>Описание:</strong> Возвращает максимальную емкость таблицы доступа в EEPROM.</p> <p><strong>Параметры:</strong> Нет.</p> <p><strong>Ответ:</strong> <code>200</code> - число (максимальное количество записей).</p> </div> <div class="endpoint-card"> <div class="endpoint-url">GET /accesstable_format</div> <p><strong>Описание:</strong> Форматирует (очищает) таблицу доступа в EEPROM, создавая новый заголовок.</p> <p><strong>Параметры:</strong> Нет.</p> <p><strong>Ответ:</strong> <code>200 OK</code> - в теле ответа строка "OK".</p> </div> <div class="endpoint-card"> <div class="endpoint-url">GET /accesstable_part</div> <p><strong>Описание:</strong> Возвращает часть записей из таблицы доступа EEPROM.</p> <p><strong>Параметры:</strong></p> <table class="parameter-table"> <tr> <th>Параметр</th> <th>Тип</th> <th>Описание</th> <th>Обязательный</th> </tr> <tr> <td>s</td> <td>uint16</td> <td>Начальный индекс записи (включительно)</td> <td>Да</td> </tr> <tr> <td>f</td> <td>uint16</td> <td>Конечный индекс записи (включительно)</td> <td>Да</td> </tr> </table> <p><strong>Ответ:</strong> <code>200</code> - JSON массив объектов, представляющих записи таблицы доступа.</p> </div> <div class="endpoint-card"> <div class="endpoint-url">GET /accesstable_save</div> <p><strong>Описание:</strong> Сохраняет (перезаписывает) часть записей в таблицу доступа EEPROM.</p> <p><strong>Параметры:</strong></p> <table class="parameter-table"> <tr> <th>Параметр</th> <th>Тип</th> <th>Описание</th> <th>Обязательный</th> </tr> <tr> <td>s</td> <td>uint16</td> <td>Начальный индекс записи для сохранения</td> <td>Да</td> </tr> <tr> <td>f</td> <td>uint16</td> <td>Конечный индекс записи для сохранения</td> <td>Да</td> </tr> <tr> <td>data</td> <td>string</td> <td>JSON-массив с данными записей для сохранения</td> <td>Да</td> </tr> </table> <p><strong>Ответ:</strong> <code>200 OK</code> - в теле ответа строка "OK".</p> </div> <h2 id="encode">7. Кодирование RFID-меток (Требуется ENCODE_ENABLE)</h2> <div class="endpoint-card"> <div class="endpoint-url">GET /copy_tid</div> <p><strong>Описание:</strong> Запускает процесс кодирования RFID-метки по алгоритму "COPY TID": читает TID, формирует новый EPC на его основе и записывает его в метку, а также устанавливает новый пароль и блокирует память.</p> <p><strong>Параметры:</strong></p> <table class="parameter-table"> <tr> <th>Параметр</th> <th>Тип</th> <th>Описание</th> <th>Обязательный</th> </tr> <tr> <td>pass</td> <td>string</td> <td>Текущий пароль метки (8 hex-символов)</td> <td>Да</td> </tr> <tr> <td>npass</td> <td>string</td> <td>Новый пароль для метки (8 hex-символов)</td> <td>Да</td> </tr> <tr> <td>filter</td> <td>string</td> <td>Новый фильтр (4 hex-символа) для EPC</td> <td>Да</td> </tr> <tr> <td>serial</td> <td>string</td> <td>Новая серийная часть (12 hex-символов) для EPC</td> <td>Да</td> </tr> <tr> <td>beep</td> <td>bool</td> <td>Подать звуковой сигнал при успешном кодировании</td> <td>Нет</td> </tr> </table> <p><strong>Ответ:</strong> <code>200</code> - JSON объект с результатом операции (успех или код ошибки) и деталями закодированной метки.</p> </div> <div class="endpoint-card"> <div class="endpoint-url">GET /write</div> <p><strong>Описание:</strong> Записывает произвольные данные в указанный банк памяти RFID-метки. Требует аутентификации.</p> <p><strong>Параметры:</strong></p> <table class="parameter-table"> <tr> <th>Параметр</th> <th>Тип</th> <th>Описание</th> <th>Обязательный</th> </tr> <tr> <td>antenna</td> <td>uint8</td> <td>Номер антенны для кодирования</td> <td>Да</td> </tr> <tr> <td>select</td> <td>string</td> <td>EPC метки для выбора (если не указан, будет выбрана первая попавшаяся)</td> <td>Нет</td> </tr> <tr> <td>pass</td> <td>string</td> <td>Пароль доступа к метке (8 hex-символов)</td> <td>Да</td> </tr> <tr> <td>bank</td> <td>uint8</td> <td>Банк памяти (0=Reserved, 1=EPC, 2=TID, 3=USER)</td> <td>Да</td> </tr> <tr> <td>shift_w</td> <td>uint8</td> <td>Смещение в словах (по 2 байта)</td> <td>Да</td> </tr> <tr> <td>datalen_w</td> <td>uint8</td> <td>Длина данных для записи в словах (макс. 6)</td> <td>Да</td> </tr> <tr> <td>data</td> <td>string</td> <td>Данные для записи (в hex-формате, длина зависит от <code>datalen_w</code>)</td> <td>Да</td> </tr> <tr> <td>beep</td> <td>bool</td> <td>Подать звуковой сигнал при успешном кодировании</td> <td>Нет</td> </tr> </table> <p><strong>Ответ:</strong> <code>200</code> - JSON объект с результатом операции (успех или код ошибки).</p> </div> <h2 id="periphery">8. Управление Периферией (Реле)</h2> <div class="endpoint-card"> <div class="endpoint-url">GET /relay1</div> <p><strong>Описание:</strong> Кратковременно включает реле №1 (или порт SmartBoard №1). Требует аутентификации.</p> <p><strong>Параметры:</strong> Нет.</p> <p><strong>Ответ:</strong> <code>200 OK</code> - в теле ответа строка "OK".</p> </div> <div class="endpoint-card"> <div class="endpoint-url">GET /relay2</div> <p><strong>Описание:</strong> Кратковременно включает реле №2 (или порт SmartBoard №2). Требует аутентификации.</p> <p><strong>Параметры:</strong> Нет.</p> <p><strong>Ответ:</strong> <code>200 OK</code> - в теле ответа строка "OK".</p> </div> <div class="endpoint-card"> <div class="endpoint-url">GET /ssr1</div> <p><strong>Описание:</strong> Кратковременно включает SSR реле №1 (или порт SmartBoard №3). Требует аутентификации.</p> <p><strong>Параметры:</strong> Нет.</p> <p><strong>Ответ:</strong> <code>200 OK</code> - в теле ответа строка "OK".</p> </div> <div class="endpoint-card"> <div class="endpoint-url">GET /ssr2</div> <p><strong>Описание:</strong> Кратковременно включает SSR реле №2 (или порт SmartBoard №4). Требует аутентификации.</p> <p><strong>Параметры:</strong> Нет.</p> <p><strong>Ответ:</strong> <code>200 OK</code> - в теле ответа строка "OK".</p> </div> <div class="endpoint-card"> <div class="endpoint-url">GET /beepontag</div> <p><strong>Описание:</strong> Инициирует звуковой сигнал, имитируя обнаружение RFID-метки.</p> <p><strong>Параметры:</strong> Нет.</p> <p><strong>Ответ:</strong> <code>200 OK</code> - в теле ответа строка "OK".</p> </div> <h2 id="notify_example">9. Уведомления, отправляемые на хост</h2> <div class="endpoint-card"> <div class="endpoint-url">Если параметр <strong>notify_enable</strong> имеет значение true</div> <p> Если параметр notify_enable имеет значение true, то при возникновении события (чтение RFID-метки, которая удовлетворяет критериям Свой-Чужой) на хост будет отправлено уведомление: Байтовая посылка, текстовая строка в формате ASCII или Текстовая строка в формате JSON. <br/> <p> <strong>Пример уведомление в виде текстовой строки JSON:</strong> <em> <p>{</p> <p>"READER": ”Серийный номер считывателя”,</p> <p>"EPC": ”Уникальный номер метки, закодированный в память EPC”,</p> <p>"DATA": ”Дополнительные данные из памяти RFID-метки, например, TID-номер”,</p> <p>"DB": ”Номер банка памяти из которого прочитаны дополнительные данные”,</p> <p>"RSSI": “Сила сигнала -90 самый слабый, 30 самый сильный”,</p> <p>"ANT": "Номер RFID-антенны, которая обнаружила метку"</p> <p>}</p> </em> </p> </p> </div> <h2 id="notes">Примечания</h2> <div class="note"> <p><strong>Аутентификация:</strong> Большинство критически важных запросов (изменение настроек, управление реле, доступ к файлам) требуют HTTP Basic Authentication. По умолчанию используются логин <code>admin</code> и пароль <code>admin</code>, которые можно изменить через <code>/webaccess</code>.</p> </div> <div class="note"> <p><strong>Формат ответа:</strong> Большинство запросов возвращают данные в формате JSON. Некоторые служебные запросы возвращают простой текст "OK" или сообщения об ошибках.</p> </div> <div class="note"> <p><strong>Статусы HTTP:</strong> Основные статусы: <code>200 OK</code> (успех), <code>401 Unauthorized</code> (требуется аутентификация), <code>403 Forbidden</code> (доступ запрещен, например, для <code>/copy_tid</code> если функция не поддерживается), <code>404 Not Found</code> (запрашиваемый ресурс не существует), <code>500 Internal Server Error</code> (внутренняя ошибка сервера).</p> </div> <div class="note"> <p><strong>Зависимости:</strong> Некоторые функции (например, работа с SD-картой, BLE-клавиатура) доступны только если они были включены при компиляции прошивки (определены соответствующие препроцессорные директивы, такие как <code>SD_CARD_SUPPORT</code>, <code>KEYBOARD_SUPPORT</code>, <code>MQTT_SUPPORT</code>).</p> </div> <footer> <p>Документация по HTTP GET API для RFID-считывателей SAUK© 2025</p> </footer> <script> document.getElementById('searchInput').addEventListener('keyup', function() { const searchTerm = this.value.toLowerCase(); const sections = document.querySelectorAll('.endpoint-card, h2'); sections.forEach(section => { if (section.classList.contains('endpoint-card')) { const text = section.textContent.toLowerCase(); if (text.includes(searchTerm)) { section.style.display = 'block'; } else { section.style.display = 'none'; } } else if (section.tagName === 'H2') { const text = section.textContent.toLowerCase(); if (text.includes(searchTerm)) { section.style.display = 'block'; } else { section.style.display = 'none'; } } }); }); </script> </body> </html>