HTTP API страницы настроек
Здесь описан программный интерфейс (HTTP API) контроллера UVATRON: как получить доступ и какие маршруты для чего нужны. Раздел нужен интеграторам, которые управляют контроллером из внешней системы или из программы U-Logic (редактор программы управления), и службам ИТ и информационной безопасности заказчика, которые проверяют, как с контроллером можно работать по сети.
Это тот же интерфейс, через который работает страница настроек («Панель управления» контроллера): всё, что можно сделать кнопками на странице (перезагрузить контроллер, задать сеть и 802.1X, загрузить сертификат, обновить прошивку), можно сделать и запросом из своей программы. Описание относится к прошивке версии 2.2.1 и к обоим устройствам: контроллеру «UVATRON» и сенсорной панели с контроллером «UV4PRO-T10». Различия между устройствами отмечены в тексте.
Примечание
Здесь описан только API страницы настроек. Интерфейсы UI-Designer (порт 8000) и UI-Panel (порт 5001) служат их собственным страницам. Они не предназначены для внешних программ, не документируются и могут меняться без предупреждения.
Порты и условия их открытия подробно описаны в разделе Сетевые порты, режим шифрования — в разделе Режим HTTPS, пароль и вход — в разделе Начало работы.
Адреса и сертификат
Адрес |
Когда доступен |
Для API |
|---|---|---|
|
Всегда |
Да, основной адрес |
|
Всегда |
Нет: этот адрес только перенаправляет (код 308) на |
Здесь и далее <IP> — адрес контроллера. Во всех примерах ниже используется https://<IP>:8443.
У устройства есть встроенный сертификат на имя uvatron.local. Сертификат свой у каждого устройства: создаётся на устройстве один раз, обновления прошивки его не меняют. Он самоподписанный: пока вы не загрузили сертификат своей организации, клиент должен либо иметь этот сертификат в списке доверенных, либо отключить проверку сертификата сервера (в curl это ключ -k). Если вы загрузили свой сертификат, проверку можно оставить включённой при условии, что адрес запроса совпадает с именем в сертификате.
Авторизация
Все маршруты, кроме /authorize, требуют токен. Порядок такой:
Отправьте
POST /authorizeс логином и паролем страницы настроек (по умолчаниюadmin/admin).В ответе возьмите
token.Передавайте его в каждом следующем запросе в заголовке
Authorization: Bearer <token>.
Запрос на вход:
curl -k -X POST https://<IP>:8443/authorize \
-H "Content-Type: application/json" \
-d '{"login":"admin","password":"admin"}'
Ответ при верных данных:
{"is_authorized": true, "token": "eyJhbGciOi..."}
При неверном логине или пароле контроллер отвечает кодом 200, а не 401, поэтому проверяйте поле is_authorized:
{"is_authorized": false, "token": null}
Пример запроса с токеном:
TOKEN=$(curl -sk -X POST https://<IP>:8443/authorize \
-H "Content-Type: application/json" \
-d '{"login":"admin","password":"admin"}' | jq -r .token)
curl -k https://<IP>:8443/system_info -H "Authorization: Bearer $TOKEN"
Примечание
Запросы с JSON-телом всегда отправляйте с заголовком Content-Type: application/json: без него контроллер отклоняет запрос (/authorize, например, ответит кодом 415) или не видит тело.
Срок действия токена
Токен действует 8 часов с момента выдачи. После этого любой запрос вернёт 401: по истечении срока получите новый токен вызовом
/authorize.Токен подписан секретом конкретного контроллера: токен, выданный одним контроллером, другим не принимается.
Смена пароля и заводской сброс отзывают все выданные токены. Сразу после смены пароля (или сброса, после которого пароль снова
admin) любой токен, полученный раньше, получает ответ 401: и у программ, и у открытой страницы настроек, и у UI-Designer. Войдите заново с действующим паролем.Перезагрузка контроллера и обновление прошивки токены не сбрасывают.
Если токена нет или он неверный
Любой маршрут, кроме /authorize, при отсутствующем, просроченном или неверном токене отвечает кодом 401:
{"error": "Unauthorized", "message": "Invalid or missing token"}
(у /change_credentials тело короче: {"error": "Unauthorized"}).
Примечание
Перед подключением контроллера к сети смените заводской пароль (маршрут /change_credentials, см. ниже).
Ответы и ошибки
Единой схемы ответа нет, но правила такие:
Ситуация |
Ответ |
|---|---|
Успех |
Код 200, 201 (создано, загружено) или 202 (принято в работу), тело описано у каждого маршрута |
Нет токена или он неверный |
401 |
Неверный запрос (нет обязательного поля, неверное значение) |
Чаще 400, тело |
Сбой при выполнении |
500, тело |
Сетевые настройки и сертификаты 802.1X |
Контролируемые ошибки (неверное значение, не удалось применить) приходят с кодом 200 и признаком |
Настройки времени |
Неверное значение (например, часовой пояс вне диапазона от -12 до 12 или недопустимое имя сервера) приходит с кодом 500 и текстом ошибки |
Тело ответа сетевого маршрута (/settings/<интерфейс>, /settings/<интерфейс>/certs):
{
"success": true,
"applied": ["..."],
"warnings": [{"code": "...", "message": "...", "stage": "..."}],
"errors": [{"code": "...", "message": "...", "stage": "..."}],
"details": {}
}
Даже при success: true просмотрите warnings: например, настройки могли быть сохранены, но связь на интерфейсе не поднялась.
Маршруты
Во всех примерах ниже заголовок Authorization: Bearer $TOKEN опущен для краткости, если не сказано иное. Для JSON-запросов нужен также Content-Type: application/json.
Сведения о контроллере и журналы
Маршрут |
Что делает |
|---|---|
|
Возвращает сведения о контроллере и текущее время |
|
Скачивает журналы контроллера одним зашифрованным файлом |
|
Возвращает параметры контроллера и MAC-адреса сетевых портов |
GET /system_info: в ответе серийный номер, дата и время контроллера, часовой пояс и другие сведения об устройстве; состав сведений зависит от модели.
{
"SerialNumber": "...",
"current_date": "2026-10-14",
"current_time": "12:34:56",
"current_utc": "+03:00",
"current_iso": "2026-10-14T12:34:56+03:00",
"timezone": "..."
}
Если на устройстве есть часы реального времени, добавляется поле rtc_time.
GET /get_logs: журналы шифруются для передачи в службу поддержки производителя; расшифровать файл logs.enc самостоятельно нельзя. При ошибке возвращается код 400.
GET /get_config: в ответе описание конфигурации контроллера и MAC-адреса. У контроллера с одним сетевым портом MAC в поле eth0, у контроллера с двумя портами в полях eth0_mac и eth1_mac. Если файла конфигурации нет, ответ 404.
Перезагрузка и перезапуск
Маршрут |
Что делает |
|---|---|
|
Перезагружает контроллер целиком |
|
Перезапускает U-Logic, программа запускается снова как есть |
|
Блокирует программу: выключает все вкладки U-Logic и перезапускает его |
|
Показывает и переключает UI-Designer (включён или выключен) |
POST /restart_plc (кнопка «Перезагрузить контроллер»). Тело не нужно. Ответ приходит сразу, а перезагрузка начинается примерно через 5 секунд:
curl -k -X POST https://<IP>:8443/restart_plc -H "Authorization: Bearer $TOKEN"
{"success": true}
На время перезагрузки контроллер недоступен по сети, проект U-Logic останавливается и запускается снова вместе с контроллером в том состоянии, в котором был. Чтобы узнать, что контроллер снова готов, повторяйте /authorize или GET /system_info, пока он не ответит.
POST /restart_node-red (кнопка «Перезапустить U-Logic»). Тело не нужно, ответ {"success": true}. U-Logic останавливается и через несколько секунд запускается снова с той же программой: вкладки, которые были включены, остаются включёнными. На время перезапуска связь программы с оборудованием прерывается.
POST /block_program (кнопка «Заблокировать программу»). Тело не нужно, ответ {"success": true}.
Предупреждение
Это аварийный маршрут: он выключает все вкладки программы в U-Logic и затем перезапускает U-Logic. U-Logic поднимается за секунды, но программа после этого не работает, пока вы вручную не включите нужные вкладки в редакторе U-Logic. Используйте его, когда программа зависает или роняет U-Logic и редактор не открывается.
GET /gui_config возвращает {"state": true}, если UI-Designer сейчас включён, и {"state": false}, если выключен.
POST /gui_config переключает UI-Designer. Значение state задаёт прежнее состояние, а действие обратное: {"state": true} выключает UI-Designer, {"state": false} включает его (так устроена кнопка на странице). Если поле state не передано, считается true, то есть UI-Designer выключается. Ответ: {"state": <переданное значение>}, при сбое код 400 и {"status": "error", "error": "..."}. По умолчанию UI-Designer выключен; выключайте его по окончании работы над интерфейсом (см. Доступ к интерфейсам).
Время
Маршрут |
Что делает |
|---|---|
|
Показывает часовой пояс, сервер времени и состояние раздачи времени |
|
Включает синхронизацию с сервером времени и задаёт часовой пояс |
|
Показывает и включает/выключает раздачу времени контроллером другим устройствам |
|
Устанавливает дату и время вручную |
GET /set_time_ntp:
{"gmtOffset": 3, "ntpIp": "pool.ntp.org", "serverEnabled": true}
POST /set_time_ntp: gmtOffset (целое число часов от -12 до 12 относительно UTC, например 3 для UTC+3) и ntpIp (имя или адрес сервера времени). Если поле не передано, подставляется значение по умолчанию (3 и pool.ntp.org), поэтому передавайте оба. Ответ: {"success": true, "gmtOffset": 3, "ntpIp": "..."}.
Если часовой пояс меняется, контроллер перезапускает U-Logic (так же, как POST /restart_node-red): программа запускается снова с новым поясом, иначе она продолжала бы считать местное время по старому. При сохранении того же пояса перезапуска нет. Это относится и к POST /set_time_manual.
curl -k -X POST https://<IP>:8443/set_time_ntp \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{"gmtOffset":3,"ntpIp":"ntp.example.local"}'
POST /ntp_server: {"enabled": true} включает раздачу времени, {"enabled": false} выключает. Ответ: {"serverEnabled": true}. Включайте раздачу только на одном контроллере в сети, иначе в сети будут два источника времени.
POST /set_time_manual: gmtOffset (как выше) и time — дата и время в формате ISO, например "2026-10-14T12:00:00". Если в time указан часовой пояс (например, Z или +03:00), время пересчитывается в пояс gmtOffset. Ответ: {"gmtOffset": 3, "time": "2026-10-14T12:00:00"}; если поля не переданы, код 400 и {"error": "Invalid data"}.
Примечание
Ручная установка времени отключает синхронизацию с сервером времени: контроллер продолжает идти по установленным часам и раздавать их, но сам время уже не уточняет. Чтобы вернуть синхронизацию, вызовите POST /set_time_ntp.
Сеть и 802.1X
Маршрут |
Что делает |
|---|---|
|
Показывает текущие настройки сети и 802.1X интерфейса |
|
Задаёт IP-адрес и настройки 802.1X интерфейса |
|
Показывает загруженные файлы сертификатов и ключей |
|
Загружает сертификаты и ключи для 802.1X |
Допустимые имена интерфейса: eth0 и eth1. На контроллере с одним сетевым портом работает только eth0. Другое имя вернёт ошибку (для /settings/<интерфейс> код 500, для /certs код 400).
Чтение. GET /settings/eth0 возвращает mac, mode (dhcp или manual), ip, mask, gateway, dns1, dns2, dhcp и текущие параметры 802.1X: eap_method, identity, ca_cert, domain_suffix_match, client_cert, private_key, phase2_auth, phase2_autheap, phase2_ca_cert, phase2_client_cert, phase2_private_key, optional, auth_timeout_sec, dhcp_timeout_sec, auth_retries. Пароли в ответ не попадают. Поле success в ответе всегда true.
Запись. POST /settings/<интерфейс> каждый раз задаёт настройки целиком: передавайте все нужные поля, не только изменяемые.
Поле |
Значение |
|---|---|
|
|
|
Адрес и маска, обязательны при |
|
Необязательны |
|
|
|
|
|
Имя пользователя (обязательно при 802.1X) |
|
Имена файлов, ранее загруженных через |
|
Необязательно. Домен, на который должен быть выдан сертификат сервера RADIUS, например |
|
Пароль закрытого ключа, если он защищён |
|
Пароль пользователя (для |
|
Внутренний метод проверки для |
|
Для внутреннего метода |
|
|
|
|
Поля optional, auth_timeout_sec, dhcp_timeout_sec и auth_retries действуют только на контроллере «UVATRON». Панель «UV4PRO-T10» их принимает и всегда показывает значения по умолчанию (false, 60, 90, 0): адрес она получает независимо от проверки 802.1X, а проверку повторяет без ограничения, примерно раз в 30 секунд.
ca_cert необязателен для всех методов. Чтобы контроллер проверял сервер RADIUS, загрузите сертификат CA и по возможности указывайте domain_suffix_match.
Метод tls требует client_cert и private_key, метод peap требует phase2_auth, метод ttls требует phase2_auth или phase2_autheap.
Предупреждение
Если вы меняете адрес интерфейса, через который идёт запрос, соединение оборвётся: ответ придёт уже с нового адреса или не придёт вовсе. Дальше работайте с новым IP-адресом.
Установка сертификата 802.1X через API
Сертификаты загружаются отдельным запросом, а затем на них ссылаются по имени в настройках интерфейса.
Шаг 1. Загрузите файлы (форма multipart/form-data). Поля формы: ca_cert, client_cert, private_key, а для внутреннего метода tls ещё phase2_ca_cert, phase2_client_cert, phase2_private_key. Можно передать только нужные. Допустимые расширения: для сертификатов .pem, .crt, .cer, .der, для ключей .pem, .key, .p12, .pfx. Файлы сохраняются под фиксированными именами (ca.pem, client.pem, private.pem, phase2_ca.pem, phase2_client.pem, phase2_private.pem). Загруженный ранее файл заменяется, о чём приходит предупреждение cert_overwritten.
curl -k -X POST https://<IP>:8443/settings/eth0/certs \
-H "Authorization: Bearer $TOKEN" \
-F ca_cert=@ca.pem -F client_cert=@client.pem -F private_key=@client.key
Ответ (код 201): {"success": true, "applied": ["certs.ca_cert", "certs.client_cert", "certs.private_key"], "ca_cert": "ca.pem", "client_cert": "client.pem", "private_key": "private.pem", ...}. При недопустимом расширении код 400 и success: false.
Шаг 2. Включите 802.1X, сославшись на имена из ответа. Пример для EAP-TLS со статическим адресом:
curl -k -X POST https://<IP>:8443/settings/eth0 \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{"mode":"manual","ip":"192.168.10.20","mask":"255.255.255.0","gateway":"192.168.10.1",
"eap_method":"tls","identity":"controller-01",
"ca_cert":"ca.pem","client_cert":"client.pem","private_key":"private.pem",
"private_key_password":""}'
Пример для PEAP с паролем и адресом по DHCP:
{"mode": "dhcp", "eap_method": "peap", "identity": "controller-01",
"phase2_auth": "mschapv2", "password": "...", "ca_cert": "ca.pem"}
Шаг 3. Проверьте ответ: должно быть "success": true и пустой список warnings. Если в warnings есть сообщение о том, что соединение не поднялось, настройки сохранены, но проверка 802.1X не пройдена (проверьте сертификаты, имя и настройки порта на коммутаторе).
Чтобы отключить 802.1X, отправьте те же настройки сети с "enabled": false и без eap_method, например {"mode":"dhcp","enabled":false}.
То же самое делается на странице настроек: раздел «Сетевой интерфейс Ethernet».
HTTPS и сертификат устройства
Маршрут |
Что делает |
|---|---|
|
Показывает, включён ли режим HTTPS, и данные используемого сертификата |
|
Включает или выключает режим HTTPS |
|
Загружает сертификат организации вместо встроенного |
GET /settings/https:
{"enabled": false,
"cert": {"subject": "CN=uvatron.local", "issuer": "CN=uvatron.local",
"not_after": "2036-01-01T00:00:00+00:00", "uploaded": false}}
uploaded: true означает, что используется загруженный вами сертификат.
POST /settings/https с телом {"enabled": true} или {"enabled": false} (должно быть именно true или false, иначе код 400). Ответ {"enabled": true} приходит сразу, а через 2 секунды перезапускаются UI-Panel, UI-Designer, U-Logic, видео, служебный обмен и сам сервер этого API; на панели UV4PRO-T10 перезапускается и собственный экран. Проект U-Logic при этом перезапускается (см. Режим HTTPS). Выданные токены остаются действительными. Через несколько секунд API снова отвечает.
POST /settings/https/cert: форма multipart/form-data с двумя файлами cert и key в формате PEM. Ключ должен быть без пароля и соответствовать сертификату, размер запроса не более 1 МБ. Контроллер сначала проверяет пару и только потом заменяет сертификат.
curl -k -X POST https://<IP>:8443/settings/https/cert \
-H "Authorization: Bearer $TOKEN" \
-F cert=@device.crt -F key=@device.key
Ответ (код 201): {"cert": {...}} с данными нового сертификата. Ошибки (код 400): cert_and_key_required (не передан один из файлов), too_large (больше 1 МБ), invalid_certificate (файлы не образуют пару или ключ защищён паролем; причина в поле message). После успешной загрузки те же службы перезапускаются, как при переключении режима. Встроенный сертификат сохраняется на устройстве и возвращается сбросом IP-адреса кнопкой и заводским сбросом. Подробнее о сертификате — Режим HTTPS.
Экран панели (только UV4PRO-T10)
Маршруты задают страницу, которую показывает собственный экран сенсорной панели UV4PRO-T10, и сертификаты, которым этот экран доверяет. Раздел страницы настроек: «Стартовая страница киоска».
Маршрут |
Что делает |
|---|---|
|
Показывает адрес, признак «не проверять сертификаты» и доверенные сертификаты |
|
Сохраняет адрес и/или признак; действует после перезапуска экрана |
|
Добавляет доверенные сертификаты к уже имеющимся (форма, поле |
|
Удаляет все доверенные сертификаты, в том числе полученные от контроллеров |
|
Отдаёт загруженную картинку «нет связи»; код 404, если её нет и экран показывает встроенный баннер |
|
Заменяет картинку «нет связи» (форма, поле |
|
Удаляет картинку, экран снова показывает встроенный баннер |
|
Немедленно перезапускает экран панели с новыми настройками |
GET /settings/kiosk_url:
{"url": "https://192.168.1.20:5001/", "ignore_cert_errors": false, "offline_image": false,
"trusted": [{"subject": "CN=...", "not_after": "..."}]}
POST /settings/kiosk_url: тело {"url": "https://192.168.1.20:5001/interfaces/1", "ignore_cert_errors": false}; можно передать одно из двух полей. Адрес должен начинаться с http:// или https://, не длиннее 2048 символов. Ошибки: 400 (invalid_url), 500 (write_failed). Ответ содержит новое состояние и "applied_on_next_kiosk_start": true. Если адрес начинается с https:// и указывает на другой контроллер, панель при сохранении получает его сертификат и добавляет в доверенные: поле controller_cert равно true, или false, если контроллер не ответил за 5 секунд (адрес при этом сохраняется). Поле равно null для адреса http://, для страницы самой панели (127.0.0.1 или localhost) и для запроса, в котором передан только ignore_cert_errors. POST .../apply отвечает {"url": "...", "restarted": true}. На контроллере «UVATRON», у которого нет собственного экрана, apply возвращает код 404 (kiosk_unsupported).
Доступ к интерфейсу UI-Panel
Маршрут |
Что делает |
|---|---|
|
Показывает, ограничен ли доступ к UI-Panel, и список пропусков |
|
Включает или выключает ограничение, задаёт пароль интерфейса и пропуска |
Подробно о паролях и пропусках — в разделе Доступ к интерфейсам.
GET /settings/ui_access:
{"restricted": false, "password_set": false,
"passes": [{"name": "Планшет склада", "key": "k3m9x2w7p4qa", "link": "/interfaces/3", "ip": "192.168.1.55"}]}
POST /settings/ui_access:
{"restricted": true, "password": "новый пароль интерфейса",
"passes": [{"name": "Планшет склада", "key": "k3m9x2w7p4qa", "link": "/interfaces/3", "ip": "192.168.1.55"}]}
restrictedобязателен (trueилиfalse), иначе код 400 (invalid_request).passwordнеобязателен: если не передан или пуст, текущий пароль интерфейса сохраняется. В ответе пароля нет, только признакpassword_set.Список
passesзаменяется целиком: чтобы сохранить существующий пропуск, передайте его снова вместе с егоkey. Пропуск без известногоkeyполучает новый ключ. Всего не более 200 пропусков.Для пропуска обязательно
name(1-64 символа). Необязательныlink(вид/interfaces/<номер>, можно со значением?immersiveдля полного экрана; допустим и полный адрес из браузера, лишнее отбрасывается) иip(адрес устройства). Неверное значение даёт код 400 (invalid_pass) и пояснение вmessage.Ответ (код 200) имеет тот же вид, что и ответ
GET.
Примечание
Ответ GET /settings/ui_access содержит ключи пропусков. Токен API даёт права администратора: храните его так же, как пароль.
Проект
Маршруты работают с проектом UI-Designer (интерфейсы и изображения); проекты U-Logic скачиваются и загружаются в самом U-Logic.
Маршрут |
Что делает |
|---|---|
|
Скачивает опубликованный проект UI-Designer файлом |
|
Заменяет проект целиком проектом из файла |
|
Добавляет содержимое файла к текущему проекту |
curl -k https://<IP>:8443/get_project -H "Authorization: Bearer $TOKEN" -o project.uidp
curl -k -X POST https://<IP>:8443/upload_project -H "Authorization: Bearer $TOKEN" -F project=@project.uidp
GET /get_projectотдаёт последний опубликованный проект, а не несохранённые правки в UI-Designer. Если проекта нет, код 404.POST /upload_project: файл в поле формыproject. Текущий проект удаляется и заменяется проектом из файла, затем перезапускается U-Logic. Ответ: код 201 и{"message": "File uploaded successfully"}; при ошибке код 400 и{"error": "...", "details": "..."}.POST /merge_project: файл в поле формыproject. Текущий проект сохраняется, из файла добавляется новое. Ответ: код 200 и{"status": "ok", "results": {...}}; при ошибке код 500 и{"error": "merge failed", "details": "..."}.
Если поле project не передано или файл пуст, оба маршрута отвечают кодом 400 (No file part или No selected file).
Обновление прошивки
Файл обновления вы получаете от производителя. Размер загружаемого файла ограничен 10 ГБ.
Маршрут |
Что делает |
|---|---|
|
Загружает пакет обновления и запускает установку |
|
Фоновая установка обновления; пакетами версии 2.2.1 не используется |
POST /upload_firmware: файл в форме multipart/form-data (имя поля любое).
curl -k -X POST https://<IP>:8443/upload_firmware \
-H "Authorization: Bearer $TOKEN" -F file=@update.zip
Запрос длится, пока идёт установка: обычно 2–4 минуты, поэтому не ограничивайте время ожидания ответа. Затем приходит код 201 и {"message": "File uploaded successfully"}, и примерно через 5 секунд устройство само перезагружается; через 1–2 минуты API снова отвечает. Не отключайте питание до конца установки.
Ошибки: 400 (файл не передан), 500 (пакет не принят, например он предназначен для другого устройства), тело {"error": "...", "message": "File uploaded error"}. При ошибке устройство продолжает работать на прежней версии.
Маршруты /ota_status, /ota_rollback и /ota_clear служат фоновой установке, которую пакеты обновления версии 2.2.1 не используют: на обоих устройствах GET /ota_status отвечает {"stage": "idle"}.
Заводской сброс
POST /factory_reset возвращает контроллер в заводское состояние (кнопка «Сбросить до заводских настроек»). Состав сброса описан в разделе Начало работы. Для подтверждения нужен текущий пароль в теле запроса:
curl -k -X POST https://<IP>:8443/factory_reset \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{"password":"текущий пароль"}'
Ответ: код 201 и {"message": "successful"}. Если пароль неверный, код 400 и {"error": "Invalid password", "message": "error credential"}; при сбое код 500.
Предупреждение
Сброс необратим: удаляются проект, потоки U-Logic, пользовательские файлы, журналы и сертификаты, а пароль становится admin. Адрес порта eth0 меняется на заводской 192.168.1.250, и через несколько секунд контроллер перезагружается. После этого обращайтесь к нему по новому адресу. Все токены, выданные раньше, перестают действовать.
Пароль
POST /change_credentials меняет пароль страницы настроек. Тот же пароль используется для входа в U-Logic и UI-Designer. Логин (admin) не меняется.
curl -k -X POST https://<IP>:8443/change_credentials \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{"old_password":"admin","new_password":"новый пароль"}'
Ответ: код 201 и {"message": "Password changed"}. Если не переданы оба поля, код 400 (Missing old_password or new_password); если старый пароль неверный, код 400 (Invalid old password).
После смены пароля U-Logic перезапускается (вкладки программы при этом остаются включёнными), а все выданные ранее токены сразу перестают действовать, в том числе токен, с которым вы меняли пароль: войдите заново с новым паролем. Программы, которые входят с прежним паролем, нужно обновить.
Управление из программы U-Logic
Программа U-Logic на самом контроллере может вызывать этот API сама, например перезагрузить контроллер по команде от системы управления. Для этого нужны два узла http request (Node-RED; узел — блок программы U-Logic): первый получает токен, второй вызывает нужный маршрут.
flowchart LR
A["Команда<br/>(inject, MQTT, HTTP)"] --> B["http request<br/>POST /authorize"]
B --> C["function:<br/>заголовок Authorization"]
C --> D["http request<br/>POST /restart_plc"]
D --> E["debug / ответ"]
Адрес для вызова с самого контроллера: https://127.0.0.1:8443.
Настройка узлов
Создайте узел конфигурации TLS (в узле
http requestвключите Use TLS и выберите Add new tls-config). В нём снимите флажок «Verify server certificate». Встроенный сертификат самоподписанный и выпущен на имяuvatron.local, а не на адрес127.0.0.1, поэтому проверка сертификата не пройдёт. Вызов идёт внутри самого контроллера, по сети он не выходит.Первый
http request(вход): методPOST, URLhttps://127.0.0.1:8443/authorize, TLS-конфигурация из п. 1, возврат a parsed JSON object. Перед ним поставьте узелfunction, который подготавливает тело:msg.payload = { login: "admin", password: "ВАШ_ПАРОЛЬ" }; return msg;
Между двумя запросами поставьте узел
function, который берёт токен и формирует заголовок:if (!msg.payload.is_authorized) { node.error("Контроллер не принял пароль"); return null; } msg.headers = { "Authorization": "Bearer " + msg.payload.token }; msg.payload = {}; return msg;
Второй
http request: методPOST, URL с нужным маршрутом, та же TLS-конфигурация, возврат a parsed JSON object. Для перезагрузки контроллера URL:https://127.0.0.1:8443/restart_plc. Ответ{"success": true}придёт на выход узла, а перезагрузка начнётся примерно через 5 секунд.
Если маршрут требует тело (например, /set_time_ntp), задайте msg.payload в узле из п. 3 нужным объектом вместо {}.
Токен действует 8 часов. Для редких команд проще получать новый токен перед каждой командой, как показано выше.
Перезагрузка контроллера и перезапуск проекта
Перезагрузка контроллера: маршрут
POST /restart_plc(как выше). Программа остановится вместе с контроллером и запустится снова после загрузки.Перезапуск проекта: маршрут
POST /restart_node-red, URLhttps://127.0.0.1:8443/restart_node-red. U-Logic перезапускается вместе с программой, которая его вызвала, и через несколько секунд программа запускается снова с теми же включёнными вкладками. Ответ на запрос может не успеть прийти: программа останавливается раньше.
Примечание
Пароль администратора задаётся в узле function программы. После смены пароля (в том числе через /change_credentials) обновите его там же, иначе узел /authorize будет отвечать "is_authorized": false, и команды перестанут выполняться.
Краткая сводка маршрутов
Маршрут |
Назначение |
|---|---|
|
Вход, получение токена (без токена) |
|
Смена пароля |
|
Сведения, журналы, параметры |
|
Перезагрузка, перезапуск U-Logic, блокировка программы, UI-Designer |
|
Время |
|
Сеть и 802.1X |
|
Режим HTTPS и сертификат |
|
Экран панели UV4PRO-T10 |
|
Доступ к UI-Panel |
|
Проект UI-Designer |
|
Обновление прошивки |
|
Заводской сброс |