HTTP API
Контроллер отвечает на запросы из браузера, SCADA и своих скриптов. Достаточно обычного HTTP: прочитать JSON и записать текстовые команды. База: http://<IP>/.
Ниже — для инженера, который подключает внешнюю систему. Оператор все те же действия делает мышью в веб-интерфейсе.
Примеры рассчитаны на доступ без пароля или уже выполненную авторизацию. Подставьте адрес устройства.
Вход
Если включён пароль на просмотр, без сессии данные не отдадут.
POST /auth
Content-Type: text/plain
пароль
w
Вторая строка — роль: r просмотр, u пользователь, w администратор. Успех — cookie сессии и ответ {"result":"ok"}.
Дальше cookie нужно передавать с запросами. Менять значения и настройки могут пользователь и администратор.
Что читать: GET /json
| Запрос | Зачем |
|---|---|
/json?all | Разовая загрузка: паспорт устройства, настройки, список программ. Текущих значений нет |
/json?state | Живые значения, пользовательские аварии, состояние программы |
/json?static | Модель, версии прошивок, сколько каналов |
/json?settings | Имена и типы тегов, сеть, пароли (скрыты) |
/json?scripts | Файлы в хранилище |
/json?events&limit=200 | Журнал |
/json?chart&start=…&end=… | Точки графиков за интервал (время unix) |
Опрос с объекта:
curl -s "http://192.168.0.10/json?state"
В state смотрите массивы val (входы, выходы, регистры в привычном виде) и поле alarms — биты пользовательских аварий. Системные аварии веб показывает в шапке; сбросить их можно командой ниже. Кратко о программе — блок py (имя, работает или нет, причина останова).
Что писать: POST /conf
Тело — строки имя=значение. Так меняют и уставки, и настройки.
curl -s -d "devName=Печь-1
val-r0=650
val-do0=1
" "http://192.168.0.10/conf"
Ответ {"result":"ok"} или сообщение, какой ключ не принят.
| Ключ | Пример |
|---|---|
| Живое значение | val-r0, val-do0, val-ao0, val-doPwm0 |
| Имя и тип регистра | r0-name, r0-type, r0-web, r0-ext |
| Канал | di0-name, do0-en, ai0-type |
| Имя аварии или события | a0-name, e0-name |
| Сеть, время, Modbus, SNMP | eth-ip, time-zone, mb-addr |
| Имя устройства, язык, автозапуск | devName, webLang, pyStart |
Запись значений подчиняется тем же правам, что страница «Управление». Программа может писать теги независимо от этого.
Команды: POST /cmd?…
curl -s -X POST "http://192.168.0.10/cmd?reset=alarms"
curl -s -X POST "http://192.168.0.10/cmd?devReboot"
| Команда | Действие |
|---|---|
reset=alarms / alarmsSys | Сброс пользовательских или системных аварий |
reset=userRegs / userPins / userAlarms / userEvents | Сброс настройки соответствующего раздела |
reset=sett | Заводские настройки |
settCopy / settRestore | Копия настроек внутри устройства и откат |
devReboot | Перезагрузка |
logMetricClear / logEventClear | Очистка журналов |
pyClear | Удалить все сценарии |
Программы
| Запрос | Смысл |
|---|---|
GET /json?scripts | Список |
GET /txt?script&code=<номер> | Текст программы |
POST /script?runLast | Запустить последнюю |
POST /script?run&code=<номер> | Запустить из памяти |
POST /script?runStdin&name=имя.py | Запустить текст из тела запроса |
POST /script?stop | Остановить |
POST /script?save&code=<номер> | Сохранить тело запроса |
POST /script?build&code=<номер> | Собрать C без запуска |
Журнал и диагностика текстом
Событие в JSON — набор чисел: время, тип (0 авария, 1 конфигурация, 2 сервис, 3 управление), источник (0 — контроллер, иначе программа), код, причина, необязательные параметры.
Для человека удобнее страница Отладка. Тот же текст можно открыть запросом:
| Адрес | Что смотреть |
|---|---|
/txt?runtime | Шаги сценария, длительность, память. См. Python и C |
/txt?out | Консоль программы |
/txt?all | Полный отчёт (его же кладут в снапшот) |
Файлы и прошивка
| Запрос | Смысл |
|---|---|
GET /bin?settings | Скачать конфигурацию (как кнопка на «Сервис») |
POST /bin | Загрузить этот файл |
GET /firmware | Страница обновления |
POST /firmware?fn=<имя> | Передать файл прошивки |
GET /fwstate | Ход обновления |
Внешняя система за пять шагов
- Один раз прочитать
/json?staticи/json?settings— какие теги есть. - Циклически читать
/json?state. - Писать уставки через
/conf(val-r0=…). - Аварии — поле
alarmsи при необходимости/cmd?reset=alarms. - Не разбирать служебный поток веб-интерфейса: для SCADA достаточно JSON.
Подключение из интернета без своего VPN — через сервер, не открывая порт каждого щита.