﻿SSVC0059_V2 UART API version 1.5

Документация к формату сообщений.

Общая структура сообщения.

Сообщения передаются в формате JSON в одной строке, заканчивающейся символом \n. 
Каждое сообщение содержит поле `type`, которое определяет тип сообщения, а также дополнительные поля, которые зависят от типа сообщения.


Типы сообщений и их поля

Дежурный режим (type: "waiting")
Состоит из общей для всех сообщений части "common"
Общая часть "common"
Сообщение содержит следующие поля:
- mmhg: int — Давление в мм рт. ст.
- tp1: float — Температура ТД1.
- tp2: float — Температура ТД2.
- relay: int — Состояние реле (0 или 1).
- signal: int — Состояние сигнала (0 или 1).
- cfg_chgd: boolean - флаг для запроса настроек GET_SETTINGS. Присутствует только если true.
	Флаг cfg_chgd необходим для запроса настроек в случае если были внесены изменения на 
	контроллере при помощи кнопок управления. Флаг сбрасывается после запроса GET_SETTINGS. 
- tts: int — время до сохранения настроек в энергонезависимую память, с. При отсутствии поля "tts" - несохраненных даных нет. 

Пример:
json
{
  "type": "waiting",
  "common": {
    "mmhg": 750,
    "tp1": 30.31,
    "tp2": 30.81,
    "relay": 1,
    "signal": 0,
    "cfg_chgd": true
  }
}

Экраны настроек ректификации (type: "settings")
Состоит из общей для всех сообщений части "common"


Ожидание достижения температуры 1 (type: "tp1_waiting")
Дополнительное поле к общей части:
- pid: int - уникальный идентификатор ректификации;
- tp1_target: float — Целевая Температура ТД1.
Пример:
json
{
  "pid": 99,
  "type": "tp1_waiting",
  "common": {
    "mmhg": 750,
    "tp1": 30.31,
    "tp2": 30.81,
    "relay": 1,
    "signal": 0
  },
  "tp1_target": 60
}

Отсроченный старт (type: "delayed_start")
Дополнительное поле к общей части:
- pid: int - уникальный идентификатор ректификации;
- countdown: string — Обратный отсчет времени в формате "ч:мм:сс".
Пример:
{
  "pid": 99,
  "type": "delayed_start",
  "common": {
    "mmhg": 750,
    "tp1": 30.75,
    "tp2": 31.44,
    "relay": 1,
    "signal": 0
  },
  "countdown": "0:09:59"
}

Отбор голов и подголовников (type: "heads" - головы, type: "late_heads" - подголовники в firmware 2.3.*)
Дополнительные поля к общей части:
- pid: int - уникальный идентификатор ректификации;
- countdown: string — Обратный отсчет времени в формате "ч:мм:сс".
- release: string — Обратный отсчет времени сброса в формате "ч:мм:сс". Актуально на отборе голов, при наличии опции "Сброс".
- time: string — Время в формате "ч:мм:сс".
- open: float — Открытие клапана в секундах.
- period: int — Период работы клапана в секундах.
- tank_mmhg: int — Давление в кубе.
- tp1_sap: float — Пересчитанная к нормальному атмосферному давлению температура ТД1.
- tp2_sap: float — Пересчитанная к нормальному атмосферному давлению температура ТД2.
- v1: int — Суммарное время открытия клапана 1 в секундах.
- v2: int — Суммарное время открытия клапана 2 в секундах.
- v3: int — Суммарное время открытия клапана 3 в секундах.
- alc: float — Спиртуозность.
Пример:
{
  "pid": 99,
  "type": "heads",
  "common": {
    "mmhg": 750,
    "tp1": 31.19,
    "tp2": 32.06,
    "relay": 1,
    "signal": 1
  },
  "countdown": "0:14:58",
  "time": "0:00:02",
  "open": 30.10,
  "period": 359,
  "tank_mmhg": 756,
  "tp1_sap": 31.53,
  "tp2_sap": 33.10,
  "v1": 0,
  "v2": 0,
  "v3": 0,
  "alc": 0.0
}

Отбор тела (type: "hearts")
Дополнительные поля к общей части:
- pid: int - уникальный идентификатор ректификации;
- countdown: string — Обратный отсчет времени до фиксации температуры отбора, в формате "ч:мм:сс".
- time: string — Время в формате "ч:мм:сс".
- tp1_target: float — Температура отбора.
- open: float — Открытие клапана в секундах.
- period: int — Период работы клапана в секундах.
- hysteresis: float — Гистерезис.
- tank_mmhg: int — Давление в кубе.
- tp1_sap: float — Пересчитанная к нормальному атмосферному давлению температура ТД1.
- tp2_sap: float — Пересчитанная к нормальному атмосферному давлению температура ТД2.
- v1: int — Суммарное время открытия клапана 1 в секундах.
- v2: int — Суммарное время открытия клапана 2 в секундах.
- v3: int — Суммарное время открытия клапана 3 в секундах.
- alc: float — Спиртуозность.
- stop: int — Признак остановки (0 или 1).
- stops: int — Количество остановок.
Пример:
{
  "pid": 99,
  "type": "hearts",
  "common": {
    "mmhg": 750,
    "tp1": 31.38,
    "tp2": 32.25,
    "relay": 1,
    "signal": 1
  },
  "countdown": "0:06:58",
  "time": "0:01:04",
  "tp1_target": 100.00,
  "open": 2.10,
  "period": 4,
  "hysteresis": 0.25,
  "tank_mmhg": 756,
  "tp1_sap": 31.72,
  "tp2_sap": 33.29,
  "v1": 0,
  "v2": 0,
  "v3": 0,
  "alc": 0.0,
  "stop": 0,
  "stops": 0
}


Отбор хвостов (type: "tails"). Актуально для firmware 2.2.*
Дополнительные поля к общей части:
- pid: int - уникальный идентификатор ректификации;
- time: string — Время в формате "ч:мм:сс".
- tp2_target: float — Целевая Температура ТД2.
- open: float — Открытие клапана в секундах.
- period: int — Период работы клапана в секундах.
- tank_mmhg: int — Давление в кубе.
- tp1_sap: float — Пересчитанная к нормальному атмосферному давлению температура ТД1.
- tp2_sap: float — Пересчитанная к нормальному атмосферному давлению температура ТД2.
- v1: int — Суммарное время открытия клапана 1 в секундах.
- v2: int — Суммарное время открытия клапана 2 в секундах.
- v3: int — Суммарное время открытия клапана 3 в секундах.
- alc: float — Спиртуозность.
Пример:
{
  "pid": 99,
  "type": "tails",
  "common": {
    "mmhg": 748,
    "tp1": 33.81,
    "tp2": 35.75,
    "relay": 1,
    "signal": 1
  },
  "time": "0:01:20",
  "tp2_target": 95.00,
  "open": 2.00,
  "period": 4,
  "tank_mmhg": 748,
  "tp1_sap": 34.22,
  "tp2_sap": 36.16,
  "v1": 0,
  "v2": 8,
  "v3": 0,
  "alc": 0.0
}
Сообщения могут содержать поле event, оповещающее о событиях. 
Поле event присутствует в телеметрии при отсутствии нажатий на кнопки контроллера.
Перечень событий и их описание:
- heads_finished: завершен этап Головы
- hearts_finished: завершен этап Тело (ректификация завершена для firmware 2.3.*)
- tails_finished: завершен этап Хвосты (ректификация завершена для firmware 2.2.*)
- ds_error: ошибка датчика температуры
- ds_error_stop: выключение оборудования (реле) из-за ошибки датчика. Срабатывает через 180 секунд, если ошибка текущего датчика не исчезнет.
- stabilization_limit: превышен лимит времени стабилизации
- manually_closed: включено ручное управление клапаном текущего этапа, клапан закрыт
- manually_opened: включено ручное управление клапаном текущего этапа, клапан открыт


Примечания

1. Каждое сообщение передается одной строкой, заканчивающейся символом \n
2. Все температуры (tp1, tp2, tp1_sap, tp2_sap, tp1_target, tp2_target) указываются в градусах Цельсия и могут содержать десятичную часть.
3. Время (time, countdown) указывается в формате "ч:мм:сс".
4. Значения состояния реле (relay) и сигнала (signal) могут быть либо 0 (выключено), либо 1 (включено).
5. Давление (mmhg, tank_mmhg) указывается в мм рт. ст.
