Перейти до вмісту

HTTP API

HTTP API для взаємодії з пристроєм TR-100E. Усі шляхи запитів починаються з /api/. Підтримуються методи GET і POST.


  • API приймає та повертає JSON (Content-Type: application/json), крім бінарних фрагментів OTA й відповідей експорту.
  • Фрагменти OTA передаються з Content-Type: application/octet-stream.
  • Кінцеві точки експорту CSV повертають Content-Type: text/csv.
  • Кінцеві точки експорту звичайного тексту повертають Content-Type: text/plain.
  • Успішні відповіді мають статус 200 OK.
  • У разі помилки повертаються відповідний статус HTTP і JSON: { "error": "ERROR_CODE", "message": "Human readable text" }.
  • Підтримується постійне з’єднання HTTP (keep-alive).
  • Максимальний розмір заголовка HTTP: 1380 байтів.
  • Максимальний розмір тіла HTTP: 4096 байтів.
  • Максимальний загальний розмір HTTP-запиту: 5476 байтів.
РівеньОпис
🟩 guestНеавтентифікований клієнт
🟨 userЗвичайний користувач
🟥 powerUserКористувач із розширеними правами
  • guest має доступ лише до GET /api/auth/status/, GET /api/auth/salt/, GET /api/version/ і POST /api/auth/login/.
  • user має доступ до стандартних кінцевих точок, а також до service/time/sync.
  • powerUser має повний доступ до всіх кінцевих точок.

Усі запити POST /api/debug/*, крім /api/debug/display/start/ і /api/debug/display/stop/, додатково потребують діагностичного режиму, який активується під час запуску одночасним натисканням кнопок «Вгору» та «Вниз». У звичайному режимі ці запити повертають 403 Forbidden. Це обмеження не застосовується до запитів GET /api/debug/*.

  1. Отримати salt — GET /api/auth/salt/.
  2. Увійти — POST /api/auth/login/, передавши SHA256(username + password + salt).
  3. Усі подальші запити мають містити заголовок Authorization: Bearer <token>.
  4. Вийти — POST /api/auth/logout/.

Для Web-авторизації використовуються два незалежні паролі: один для рівня user, інший — для рівня powerUser. Отримання та зміну налаштувань доступу описано в settings-get.md і settings-set.md.

  • Абсолютні позначки часу передаються лише в UTC+0 у форматі ISO 8601: 2026-04-16T12:34:56Z.
  • Інтервали та затримки задаються цілими числами в секундах або хвилинах.

Часткове оновлення налаштувань

Section titled “Часткове оновлення налаштувань”

POST /api/settings/set/ використовує семантику злиття:

  • зберігаються лише передані поля;
  • відсутнє поле означає «не змінювати»;
  • масиви замінюються повністю;
  • невідомі ключі → 400 ERROR_INVALID_VALUE.

ШляхПризначенняДоступ
/api/version/Ідентифікація пристрою та версія прошивки🟩 guest
/api/auth/status/Поточний рівень доступу для запиту🟩 guest
/api/auth/salt/Отримання salt для хешування пароля🟩 guest
/api/state/get/?...Знімок поточного стану за групою (device, network, relays, leds, protection, recorder, channels, log, ntp, httpd, modbus, wireguard)🟨 user
/api/settings/get/?...Отримання налаштувань за групою🟨 user
/api/reference/sensor-types/Список підтримуваних типів датчиків🟨 user
/api/history/temperature/info/Метадані вікна оперативної історії🟨 user
/api/history/temperature/samples/?...Оперативна історія температури для всіх каналів🟨 user
/api/recorder/info/Метадані реєстратора температури🟨 user
/api/recorder/records/?...Архівні записи реєстратора температури🟨 user
/api/recorder/export.csv/Експорт даних реєстратора температури у форматі CSV🟨 user
/api/log/info/Зведені відомості про журнал подій🟨 user
/api/log/events/?...Події журналу🟨 user
/api/log/export.log/Експорт журналу в текстовому форматі🟨 user
/api/debug/tasks/Знімок завдань RTOS🟥 powerUser
/api/debug/heap/Стан купи FreeRTOS/lwIP🟥 powerUser
/api/debug/system/Системна діагностика🟥 powerUser
/api/debug/settings/Стан банків постійних налаштувань🟥 powerUser
/api/debug/adc/Необроблені дані АЦП і вимірювань🟥 powerUser
/api/debug/external-storage/Відомості про зовнішнє сховище🟥 powerUser
/api/debug/external-storage/dump/Повний дамп зовнішнього сховища🟥 powerUser + діагностичний режим
/api/debug/network/Діагностика мережевого стека🟥 powerUser
/api/debug/lwip-stats/Лічильники lwIP (пули proto + memp)🟥 powerUser
/api/debug/menu/Стан меню інтерфейсу користувача🟥 powerUser
/api/debug/keyget/Стан фізичних кнопок🟥 powerUser
/api/service/firmware/upload/status/Стан сеансу завантаження OTA🟥 powerUser
/api/service/identity/get/Поточний стан ідентифікаційних даних і стан апаратного блокування🟥 powerUser
/api/service/challenge/status/Стан перевірки фізичного доступу OvervisWireGuard + 🟨 user
/api/service/calibration/report/Останній збережений звіт про калібрування; апаратний ключ не потрібен🟥 powerUser
/api/service/calibration/status/Стан і контроль активності поточного сеансу калібрування🟥 powerUser + апаратний ключ

ШляхПризначенняДоступ
/api/auth/login/Автентифікація користувача🟩 guest
/api/auth/logout/Завершення сеансу🟨 user
/api/settings/set/Часткове оновлення налаштувань🟥 powerUser
/api/log/acknowledge/Підтвердження перегляду подій🟨 user
/api/recorder/clear/Очищення реєстратора температури🟥 powerUser
/api/log/clear/Очищення журналу подій🟥 powerUser
/api/service/settings/reset/Відновлення заводських налаштувань🟥 powerUser
/api/service/reboot/Планування перезапуску🟥 powerUser
/api/service/time/set/Установлення системного часу🟥 powerUser
/api/service/time/sync/Примусова синхронізація SNTP🟨 user
/api/service/identity/set/Оновлення та збереження ідентифікаційних полів🟥 powerUser
/api/service/challenge/set/Установлення, заміна або скидання запиту підтвердження OvervisWireGuard + 🟨 user
/api/service/calibration/begin/Початок сеансу калібрування🟥 powerUser + апаратний ключ
/api/service/calibration/range/Вибір діапазону й точки🟥 powerUser + апаратний ключ
/api/service/calibration/capture/Зчитування чотирьох необроблених значень АЦП і початок перевірки🟥 powerUser + апаратний ключ
/api/service/calibration/commit/Збереження точок і чотирьох знімків показників якості🟥 powerUser + апаратний ключ
/api/service/calibration/finish/Завершення сеансу та звільнення вимірювального тракту🟥 powerUser + апаратний ключ
/api/service/firmware/upload/begin/Початок завантаження образу OTA🟥 powerUser
/api/service/firmware/upload/chunk/?offset=Запис фрагмента образу OTA🟥 powerUser
/api/service/firmware/upload/finish/Завершення завантаження та перевірки🟥 powerUser
/api/service/firmware/upload/discard/Видалення завантаженого образу OTA та скидання сеансу завантаження🟥 powerUser
/api/service/firmware/apply/Застосування оновлення OTA🟥 powerUser
/api/debug/relay/start/Перевірка реле — початок🟥 powerUser
/api/debug/relay/stop/Перевірка реле — завершення🟥 powerUser
/api/debug/led/start/Перевірка світлодіодів — початок🟥 powerUser
/api/debug/led/stop/Перевірка світлодіодів — завершення🟥 powerUser
/api/debug/display/start/Перевірка дисплея — увімкнення примусового керування🟥 powerUser
/api/debug/display/stop/Перевірка дисплея — вимкнення примусового керування🟥 powerUser
/api/debug/keypress/Імітація натискання кнопки🟥 powerUser

HTTPerrorПризначення
400ERROR_INVALID_ARGUMENT, ERROR_INVALID_VALUE, ERROR_API_PARSINGНекоректний запит
401ERROR_UNAUTHORIZEDНемає чинної авторизації
403ERROR_NO_ACCESS, ERROR_WRITE_PROTECTНедостатньо прав
404ERROR_NOT_FOUNDРесурс не знайдено
408ERROR_TIMEOUTПеревищено час очікування операції
429ERROR_LOCKEDБлокування після невдалих спроб входу
500ERROR, ERROR_IOВнутрішня помилка
503ERROR_NOT_READYПідсистема не готова
507ERROR_NO_MEMORYНедостатньо пам’яті

Документацію оновлено: 2026-07-30