Выжимка формата передачи данных (приказ Росприроднадзора)

  • Михаил
  • 8 мин. на прочтение
  • 11
  • 19 Apr 2026
  • 19 Apr 2026

Общие принципы

  • Протокол: HTTP, метод – стандартный запрос (вероятно POST).
  • Формат данных: JSON.
  • Подпись: каждая передаваемая структура подписывается электронной подписью (поле signature в заголовке HTTP).
  • Идентификаторы: UUID для АСИ, датчиков, источников, показаний – назначаются при вводе в эксплуатацию и не меняются.
  • Временные метки: Unix-time (целое число). Для усреднённых данных указываются timestamp_start и timestamp_end, для мгновенных – равны друг другу.
  • Передача: данные могут передаваться массивами (несколько источников, датчиков, параметров, значений) в одном JSON.

Структура запроса от АСИ в ПТО УОНВОС (передача измерений)

Путь запроса
/devices/{device_uuid}/sources/

Заголовки HTTP

  • onv – уникальный идентификатор объекта в реестре (строка)
  • signature – электронная подпись (строка)

Тело запроса (JSON) – содержит следующие элементы:

 

ПолеТипОписание
timestampintegerОтметка времени отправки запроса АСИ
sourcesarrayМассив источников выбросов/сбросов
source_uuidstringУникальный идентификатор источника
pnivintegerПорядковый номер источника
sensorsarrayМассив датчиков, относящихся к источнику
sensor_uuidstringУникальный идентификатор датчика
statestringСостояние датчика: OK, ERROR, MAINTENANCE
parametersarrayМассив типов показаний (например, концентрация, расход)
parameter_uuidstringУникальный идентификатор показания
codestringКод показания (см. таблицу кодов)
unitstringЕдиница измерения (например, kgPH, mgPdm3, State)
typestringТип данных: float, string
valuesarrayМассив конкретных значений за интервалы
value_uuidstringУникальный идентификатор значения
timestamp_startintegerНачало интервала усреднения
timestamp_endintegerКонец интервала усреднения
valuefloat / stringСамо значение (число или строка)

Коды показателей (примеры)

  • Выбросы: HClkgPerHour, SO2kgPerHour, NOxkgPerHour, COxkgPerHour, SuspendedParticulateskgPerHour, ElectronicSealState и др.
  • Сбросы: Volumem3PerHour, TemperatureC, PH, OxygenConsumptionmgPerdm3, SuspendedParticulatesmgPerdm3, NO3mgPerdm3, NH4mgPerdm3, PO43mgPerdm3.

Структура ответа от ПТО УОНВОС к АСИ

Заголовки HTTP

  • signature – электронная подпись *

Тело ответа (JSON)

 

ПолеТипОписание
codeintegerHTTP код состояния (200, 403 и т.д.)
messagestringСообщение к коду
commandsarray(опционально) Массив команд для АСИ
command_uuidstringУникальный идентификатор команды
commandstringКоманда: TimeSyncNTP или Maintenance
argumentsstringАргумент (URL NTP-сервера или сервера обслуживания)
errorsarray(опционально) Массив ошибок
uuidstringИдентификатор элемента, к которому относится ошибка
error_messagestringКод ошибки: BadDS (неверная подпись), BadData (неверные данные)

Структура отчёта о выполнении команды (от АСИ к ПТО)

Путь запроса – такой же: /devices/{device_uuid}/sources/

Заголовкиonv, signature

Тело JSON

  • command_uuid – идентификатор полученной команды
  • resultOK или ERROR

Полный JSON (пример успешной передачи одного показателя)

Ниже приведён пример из документа (Пример I) – передача данных о выбросе хлористого водорода и состоянии электронной пломбы.

HTTP-запрос (метод POST)

Путь
/devices/296cba51-6936-463d-9d83-911ef06355d0/sources/

Заголовки

onv: "12-3456-789012-П"
signature: "HVWKW1CrcBoYb7TMJzO1HZqfF4vTjZ2X"
Content-Type: application/json

Тело (JSON)

{
 "timestamp": 1559315491,
 "sources": [
   {
     "source_uuid": "1659c3c8-e887-4b73-bee7-b1cabf2cc8e9",
     "pniv": 1,
     "sensors": [
       {
         "sensor_uuid": "bbc5c3fe-0368-466f-8d7f-efffed500fa2",
         "state": "OK",
         "parameters": [
           {
             "parameter_uuid": "1e95b92e-16e4-42d9-b739-ecf6d827285c",
             "code": "HClkgPerHour",
             "unit": "kgPH",
             "type": "float",
             "values": [
               {
                 "value_uuid": "4885a599-bb6d-4af0-89cd-1f2be320b56f",
                 "timestamp_start": 1559313898,
                 "timestamp_end": 1559315098,
                 "value": 1.35
               }
             ]
           },
           {
             "parameter_uuid": "c1e754ee-3aee-45dc-a34c-0fc25c55147b",
             "code": "ElectronicSealState",
             "unit": "State",
             "type": "string",
             "values": [
               {
                 "value_uuid": "26f37de7-9ae5-45c6-9f81-46cff9bf556a",
                 "timestamp_start": 1559313898,
                 "timestamp_end": 1559315098,
                 "value": "OK"
               }
             ]
           }
         ]
       }
     ]
   }
 ]
}

Пояснения к полям примера

 

ПолеЗначениеПояснение
timestamp1559315491Время отправки запроса (Unix-time, соответствует 31.05.2019 ~19:11)
source_uuid1659c3c8-...Идентификатор источника выброса (закреплён при вводе)
pniv1Порядковый номер источника в документации
sensor_uuidbbc5c3fe-...Идентификатор датчика
state"OK"Датчик работает исправно
parameter_uuid1e95b92e-...Идентификатор конкретного типа показания (выброс HCl)
code"HClkgPerHour"Тип показания – хлористый водород в кг/ч
unit"kgPH"Единица измерения (кг в час)
type"float"Числовое значение
values[0].value_uuid4885a599-...Идентификатор именно этого значения
timestamp_start1559313898Начало интервала усреднения (31.05.2019 18:44:58)
timestamp_end1559315098Конец интервала усреднения (31.05.2019 19:04:58)
value1.35Усреднённый выброс HCl = 1.35 кг/ч
Второй parameterElectronicSealStateПоказание состояния электронной пломбы
value"OK"Пломба не нарушена

Ответ ПТО УОНВОС (успешный)

Заголовки

signature: "ZLTU8pcgpY+9qg+KMnvgrKqWdKzHqK28"

Тело

{
 "code": 200,
 "message": "OK"
}

Ключевые требования

Все UUID должны быть неизменны в течение эксплуатации.

Для усреднённых данных интервал задаётся timestamp_start и timestamp_end.

Каждый блок values может содержать несколько записей за разные интервалы (см. Пример IV – 8 значений за сутки).

Электронная подпись обязательна в каждом запросе и ответе.

При ошибках ПТО возвращает код 403 и команды/сообщения об ошибках.

* Подпись в данном формате — это усиленная квалифицированная электронная подпись (КЭП)-. При передаче данных через API шифруется и подписывается весь HTTP-запрос целиком. Вот из чего складывается её механика и каким нормативным требованиям она отвечает:

📑 Где и как передается подпись?

Согласно приложению к Приказу № 382, подпись и данные для её проверки передаются в трёх местах--28:

В пути HTTP-запроса: обязательно указывается device_uuid — уникальный идентификатор автоматического средства измерения (АСИ)-.

В заголовке (HTTP-хедер): передаются ключевые элементы:

signature — сама электронная подпись-.

serial — уникальный номер сертификата ключа проверки электронной подписи--10. По этому номеру ПТО УОНВОС находит публичный ключ организации и проверяет подпись-27.

onv — уникальный идентификатор объекта в реестре ОНВОС-.

В теле (JSON-структура): содержится timestamp — точное время отправки запроса с указанием часового пояса-.

⚙️ Как формируется и проверяется подпись?

Формирование и проверка подписи опираются на государственные стандарты и инфраструктуру:

Технология и стандарты: используется инфраструктура открытых ключей (PKI), а криптографические алгоритмы строго регламентированы (например, ГОСТ Р 34.10-2012).

Юридическая сила: КЭП приравнивается к собственноручной подписи с печатью, а данные, подписанные ею, служат юридически значимыми доказательствами при проверках.

Порядок проверки: ПТО УОНВОС, получив запрос, по номеру serial находит в государственной системе публичный ключ отправителя и проверяет цифровую подпись signature. Если данные были изменены даже на один байт, проверка не будет пройдена.

Кто выдает: сертификат для такой подписи должен быть получен в аккредитованном Минцифры России удостоверяющем центре-.

Пример в документе: В Примере I показан корректный заголовок запроса от АСИ, где присутствуют поля onv и signature-.

🚨 Контроль и обработка ошибок

Для контроля подписи в формате предусмотрена специальная система:

Обязательная проверка: ПТО УОНВОС проверяет каждую подпись. При её отсутствии или неверности возвращается ответ с кодом 403 Forbidden.

Код ошибки BadDS: это служебный маркер в JSON-ответе системы (см. Пример II), который однозначно сигнализирует о проблемах с электронной подписью-10.