---
metadata:
  - name: generator
    content: Diplodoc Platform v5.64.2
alternate:
  - https://yamagistrali.ru/docs/ru/pages/user/geo_tracking/geo_tracking
  - href: https://yamagistrali.ru/docs/ru/pages/user/geo_tracking/geo_tracking.md
    type: text/markdown
    title: Markdown version
  - href: https://yamagistrali.ru/docs/ru/llms.txt
    rel: describedby
style:
  - _assets/style/custom.css
csp:
  - script-src:
      - https://mc.yandex.ru
    img-src:
      - https://mc.yandex.ru
    connect-src:
      - https://mc.yandex.ru
      - wss://mc.yandex.ru
    child-src:
      - 'blob:'
      - https://mc.yandex.ru
    frame-src:
      - 'blob:'
      - https://mc.yandex.ru
    frame-ancestors:
      - 'blob:'
      - https://mc.yandex.ru
canonical: ru/pages/user/geo_tracking/geo_tracking.html
vcsPath: ru/pages/user/geo_tracking/geo_tracking.md
---
# Гео-отслеживание

## 1. Способы отслеживания

Движение транспорта можно отслеживать двумя способами:

- через **мобильное приложение водителя**;
- с помощью **датчиков мониторинга (ГЛОНАСС/GPS)**, установленных на транспорте.

**Оба способа:**

- передают на карту данные о местоположении;
- фиксируют прибытие в точки погрузки/разгрузки;
- отмечают, выполнено действие вовремя или с опозданием.

---

## 2. Мобильное приложение

**Особенности**

- используется для отслеживания через мобильный телефон водителя;
- водитель устанавливает приложение, получает заказы и фиксирует статусы внутри приложения;
- приложение транслирует на платформу данные о передвижении водителя (на основе сигнала мобильного интернета и геопозиции);
- для работы требуются обязательные разрешения на мобильном устройстве и передача данных в приложение.

[Подробнее о функциональности мобильного приложения](https://yamagistrali.ru/docs/ru/pages/user/mobile_app/mobile_app.html)

---

## 3. Датчики мониторинга

**Особенности**

- датчики ГЛОНАСС/GPS устанавливаются на транспорт поставщиками специализированных услуг;
- поставщик ретранслирует данные в "Магистрали" - на платформе появляются сведения о движении транспорта.

[Подробнее о настройке ретрансляции данных](#7-nastrojka-peredachi-telemetricheskih-dannyh-cherez-retranslyaciyu)

---

## 4. Интерфейс и данные гео-отслеживания

**В столбце "гео-отслеживание" вкладки "В рейсе" доступны:**

- **кнопка перехода в детализацию** - при нажатии открывается карта с гео-отслеживанием;
- **квадраты статуса посещения точки** - с указанием источника отслеживания (тягач, фургон, полуприцеп, мобильное приложение). Если источников несколько - отображаются все.

**При наведении курсора на квадрат статуса отображаются:**

- адрес точки прибытия (погрузка/разгрузка);
- статус посещения точки;
- время прибытия/убытия из геозоны.

**При клике на квадрат статуса открывается детализация**, где видны все въезды и выезды в геозону точки.

**Цвета квадратов статуса:**

- **зелёный** - прибыл вовремя;
- **красный** - опоздал;
- **серый** - статус неизвестен (до начала рейса или при разрыве связи).

---

## 5. Карта и детализация гео-отслеживания

**При нажатии кнопки перехода в детализацию открывается карта**, на которой:

- показан подробный маршрут движения транспорта;
- отмечены точки погрузки/разгрузки.

**На карте можно:**

- посмотреть, в какое время транспорт находился в конкретной точке;
- кликнуть на точку - увидеть координаты и время присутствия, скопировать координаты.

**Левая часть окна детализации:**

- номер открытого рейса;
- детализация посещения точек:
  - список точек погрузки/разгрузки (по времени от ранней к поздней);
  - текущий статус посещения точки («посещено вовремя», «посещено с опозданием», «не начато/статус неизвестен»);
  - плановое и фактическое время посещения (источник: водитель, прицеп, машина).

**Правая часть окна детализации (вверху):**

- выпадающий список для переключения источника данных отслеживания - позволяет выбрать один источник для детального просмотра на карте.

**Дополнительные элементы:**

- значок - открывает детализацию по водителю и транспорту, переход к текущей точке местоположения;
- правый нижний угол - информация по источникам данных отслеживания, переход к последней точке присутствия, копирование координат.

---

## 6. Статусы рейса и груза

**Статус рейса** (общий для всего рейса):

- **«Не начат»** - по грузам нет статусов, работа не начата;
- **«В пути»** - по одному из грузов проставлен статус;
- **«Завершён»** - по всем грузам проставлен завершающий статус;
- **«Отменён до начала»** - рейс отменён до исполнения;
- **«Отказ»** - рейс начат, но заказ отменён исполнителем/заказчиком.

**Статус груза в рейсе:**

- каждый груз имеет уникальный статус;
- при проставлении статуса исполнителем меняется текущий статус груза;
- чтобы посмотреть статус груза:
  - раскройте детализацию груза в таблице;
  - в столбце **«Статус груза рейса»** будет виден статус по каждому грузу;
  - в свёрнутом виде в этом столбце отображаются все уникальные статусы, актуальные на текущий момент.

---

## 7. Настройка передачи телеметрических данных через ретрансляцию

Для того, чтобы платформа начала получать данные о местоположении транспортных средств:

1. Обратитесь к оператору вашей системы мониторинга с запросом на настройку ретрансляции данных на адрес платформы и передайте ему следующие параметры:


| Параметр  | Значение                                           |
| --------- | -------------------------------------------------- |
| Адрес     | 84.201.147.74                                     |
| Порт      | 3062                                               |
| Протоколы | Wialon IPS (v1.1; v2.0), Wialon Retranslator, EGTS |

{% note info %}

Подробные спецификации протоколов приведены в соответствующих разделах ниже.

{% endnote %}

2. После настройки ретрансляции со стороны оператора впишите IMEI-номера устройств (ID) в карточки транспортных средств.

{% cut "Как внести IMEI в карточку ТС?" %}

1. Кликните на раздел **«Моя организация»** в левом меню, затем на раздел **«Транспорт»**
2. Найдите нужное транспортное средство и нажмите на кнопку редактирования, либо создайте новое по кнопке «Создать», если его еще нет в справочнике.
3. В открывшемся окне укажите информацию о ТС и в поле **«IMEI»** введите IMEI-номер GPS-устройства, установленного на данном ТС.
4. Обязательно сохраните изменения.

{% endcut %}

3. В течение часа при правильных настройках на платформу прогрузятся данные по местоположению.

{% cut "Как проверить, получает ли платформа данные после настройки?" %}

1. Перейдите в справочник Транспорта.
2. Нажмите на регистрационный номер ТС, для которой настроена ретрансляция (первый столбец таблицы).
3. Откроется карта. Если платформа получает данные по местоположению данного ТС, на карте будет отображена геометка машины. *Данные появляются на карте в течение часа после настройки ретрансляции и внесения IMEI-номера (ID).*

Если после настройки данные не появились на платформе, обратитесь к нам в [поддержку](https://yamagistrali.ru/docs/ru/pages/help.html). В обращении укажите IMEI-номера устройств и приложите логи отправки данных — их можно запросить у вашего оператора.

{% endcut %}

{% note warning %}

Если IMEI-номер (ID) был внесён после назначения ТС на рейс, геоданные в уже существующие рейсы не прогрузятся — только в новые.

Чтобы отслеживание появилось в текущем рейсе, переназначьте ТС: откройте рейс, перевыберите транспортное средство и сохраните.

{% endnote %}

---

## 7.1 Описание протокола Wialon IPS v1.1

Все пакеты передаются в текстовом формате.

**Структура пакета**

Каждый пакет имеет следующий формат:

```
#TP#msg\r\n
```


| Элемент | Описание                       |
| ------- | ------------------------------ |
| `#`     | Стартовый байт                 |
| `TP`    | Тип пакета (см. таблицу типов) |
| `#`     | Разделитель                    |
| `msg`   | Содержимое сообщения           |
| `\r\n`  | Концевик пакета                |

**Типы пакетов**


| Тип   | Описание                    | Отправитель  |
| ----- | --------------------------- | ------------ |
| `L`   | Пакет логина                | Оборудование |
| `AL`  | Ответ на пакет логина       | Сервер       |
| `D`   | Пакет с данными             | Оборудование |
| `AD`  | Ответ на пакет с данными    | Сервер       |
| `P`   | Пинговый пакет              | Оборудование |
| `AP`  | Ответ на пинговый пакет     | Сервер       |
| `SD`  | Сокращённый пакет с данными | Оборудование |
| `ASD` | Ответ на сокращённый пакет  | Сервер       |

---

### Описание пакетов

**Пакет логина (`L`)**

```
#L#imei;password\r\n
```


| Поле       | Описание                                              |
| ---------- | ----------------------------------------------------- |
| `imei`     | Уникальный ID контроллера: IMEI или серийный номер    |
| `;`        | Разделитель                                           |
| `password` | Пароль устройства; если отсутствует — передаётся `NA` |

**Ответы сервера (`AL`):**


| Код  | Значение                   |
| ---- | -------------------------- |
| `1`  | Авторизация прошла успешно |
| `0`  | Сервер отверг подключение  |
| `01` | Ошибка проверки пароля     |

**Примеры:**

```
#AL#1\r\n
#AL#0\r\n
```

**Сокращённый пакет с данными (`SD`)**

```
#SD#date;time;lat1;lat2;lon1;lon2;speed;course;height;sats\r\n
```


| Поле        | Описание                                                     |
| ----------- | ------------------------------------------------------------ |
| `date`      | Дата в формате `DDMMYY`, UTC; если отсутствует — `NA`        |
| `time`      | Время в формате `HHMMSS`, UTC; если отсутствует — `NA`       |
| `lat1;lat2` | Широта, например `5544.6025;N`; если отсутствует — `NA;NA`   |
| `lon1;lon2` | Долгота, например `03739.6834;E`; если отсутствует — `NA;NA` |
| `speed`     | Скорость, км/ч, целое число; если отсутствует — `NA`         |
| `course`    | Курс, градусы, целое число; если отсутствует — `NA`          |
| `height`    | Высота, метры, целое число; если отсутствует — `NA`          |
| `sats`      | Количество спутников, целое число; если отсутствует — `NA`   |

> Если `date` и `time` содержат `NA` — используется текущее время сервера.

**Ответы сервера (`ASD`):**


| Код  | Значение                                    |
| ---- | ------------------------------------------- |
| `1`  | Пакет успешно зафиксирован                  |
| `-1` | Ошибка структуры пакета                     |
| `0`  | Некорректное время                          |
| `10` | Ошибка получения координат                  |
| `11` | Ошибка получения скорости, курса или высоты |
| `12` | Ошибка получения количества спутников       |

**Примеры:**

```
#ASD#1\r\n
#ASD#0\r\n
#ASD#10\r\n
```

**Полный пакет с данными (`D`)**

```
#D#date;time;lat1;lat2;lon1;lon2;speed;course;height;sats;hdop;inputs;outputs;adc;ibutton;params\r\n
```


| Поле        | Описание                                                                                                                           |
| ----------- | ---------------------------------------------------------------------------------------------------------------------------------- |
| `date`      | Дата в формате `DDMMYY`, UTC; если отсутствует — `NA`                                                                              |
| `time`      | Время в формате `HHMMSS`, UTC; если отсутствует — `NA`                                                                             |
| `lat1;lat2` | Широта, например `5544.6025;N`; если отсутствует — `NA;NA`                                                                         |
| `lon1;lon2` | Долгота, например `03739.6834;E`; если отсутствует — `NA;NA`                                                                       |
| `speed`     | Скорость, км/ч, целое число; если отсутствует — `NA`                                                                               |
| `course`    | Курс, градусы, целое число; если отсутствует — `NA`                                                                                |
| `height`    | Высота, метры, целое число; если отсутствует — `NA`                                                                                |
| `sats`      | Количество спутников, целое число; если отсутствует — `NA`                                                                         |
| `hdop`      | Снижение точности (HDOP), дробное число; если отсутствует — `NA`                                                                   |
| `inputs`    | Цифровые входы: каждый бит числа соответствует одному входу (с младшего); если отсутствует — `NA`                                  |
| `outputs`   | Цифровые выходы: каждый бит числа соответствует одному выходу (с младшего); если отсутствует — `NA`                                |
| `adc`       | Аналоговые входы, дробные числа через запятую (нумерация с 1); пустая строка, если аналоговых входов нет. Пример: `14.77,0.02,3.6` |
| `ibutton`   | Код ключа водителя (iButton); если ключ отсутствует — `NA`                                                                         |
| `params`    | Дополнительные параметры через запятую в формате `NAME:TYPE:VALUE` (см. ниже)                                                      |

**Формат дополнительных параметров (`params`)**

Каждый параметр имеет формат `NAME:TYPE:VALUE`:


| Поле    | Описание                                   |
| ------- | ------------------------------------------ |
| `NAME`  | Имя параметра, строка до 15 байт           |
| `TYPE`  | Тип: `1` — int, `2` — double, `3` — string |
| `VALUE` | Значение в соответствии с типом            |

**Зарезервированные параметры:**

- `SOS:1:1` — нажатие тревожной кнопки (тип int, значение 1)
- `text:3:<сообщение>` — текстовое сообщение от водителя

**Примеры:**

```
count1:1:564,fuel:2:45.8,hw:3:V4.5
SOS:1:1
```

**Ответы сервера (`AD`):**


| Код  | Значение                                       |
| ---- | ---------------------------------------------- |
| `1`  | Пакет успешно зафиксирован                     |
| `-1` | Ошибка структуры пакета                        |
| `0`  | Некорректное время                             |
| `10` | Ошибка получения координат                     |
| `11` | Ошибка получения скорости, курса или высоты    |
| `12` | Ошибка получения количества спутников или HDOP |
| `13` | Ошибка получения inputs или outputs            |
| `14` | Ошибка получения ADC                           |
| `15` | Ошибка получения дополнительных параметров     |

**Примеры:**

```
#AD#1\r\n
#AD#0\r\n
#AD#10\r\n
#AD#11\r\n
```

**Пинговый пакет (`P`)**

```
#P#\r\n
```

Служит для поддержания активного TCP-соединения и проверки работоспособности канала.

**Ответ сервера (`AP`):**

```
#AP#\r\n
```

---

## 7.2 Описание протокола Wialon IPS v2.0

Все пакеты передаются в текстовом формате.

**Структура пакета**

Каждый пакет имеет следующий формат:

```
#TP#msg\r\n
```


| Поле   | Описание                       |
| ------ | ------------------------------ |
| `#`    | Стартовый байт                 |
| `TP`   | Тип пакета (см. таблицу типов) |
| `#`    | Разделитель                    |
| `msg`  | Непосредственно сообщение      |
| `\r\n` | Концевик пакета                |

**Типы пакетов**


| Тип   | Описание                    | Кто отправляет |
| ----- | --------------------------- | -------------- |
| `L`   | Пакет логина                | Оборудование   |
| `AL`  | Ответ на пакет логина       | Сервер         |
| `D`   | Пакет с данными             | Оборудование   |
| `AD`  | Ответ на пакет с данными    | Сервер         |
| `P`   | Пинговый пакет              | Оборудование   |
| `AP`  | Ответ на пинговый пакет     | Сервер         |
| `SD`  | Сокращённый пакет с данными | Оборудование   |
| `ASD` | Ответ на сокращённый пакет  | Сервер         |

---

### Описание пакетов

**L — Пакет логина**

Отправляется оборудованием при установке соединения с сервером.

```
#L#protocol_version;imei;password;crc16\r\n
```

**Пример:**

```
#L#2.0;imei;N/A;BB2B\r\n
```


| Поле               | Описание                                                                                                                                                                       |
| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `protocol_version` | Версия протокола. Должна содержать значение `2.0`                                                                                                                              |
| `imei`             | Уникальный ID контроллера, IMEI или серийный номер                                                                                                                             |
| `password`         | Пароль для доступа к устройству. Если отсутствует — передаётся `NA`                                                                                                            |
| `crc16`            | Контрольная сумма (см. Вычисление CRC16 ниже) |

**Ответ сервера** (`AL`):


| Код  | Описание                          |
| ---- | --------------------------------- |
| `1`  | Авторизация прошла успешно        |
| `0`  | Сервер отверг подключение         |
| `01` | Ошибка проверки пароля            |
| `10` | Ошибка проверки контрольной суммы |

```
#AL#1\r\n
#AL#0\r\n
```

---

**SD — Сокращённый пакет с данными**

```
#SD#date;time;lat1;lat2;lon1;lon2;speed;course;height;sats;crc16\r\n
```


| Поле        | Описание                                                                                                                                                                      |
| ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `date`      | Дата в формате `DDMMYY`, UTC. Если отсутствует — `NA`                                                                                                                         |
| `time`      | Время в формате `HHMMSS`, UTC. Если отсутствует — `NA`                                                                                                                        |
| `lat1;lat2` | Широта, например `5544.6025;N`. Если отсутствует — `NA;NA`                                                                                                                    |
| `lon1;lon2` | Долгота, например `03739.6834;E`. Если отсутствует — `NA;NA`                                                                                                                  |
| `speed`     | Скорость, целое число, км/ч. Если отсутствует — `NA`                                                                                                                          |
| `course`    | Курс, целое число, градусы. Если отсутствует — `NA`                                                                                                                           |
| `height`    | Высота, целое число, метры. Если отсутствует — `NA`                                                                                                                           |
| `sats`      | Количество спутников, целое число. Если отсутствует — `NA`                                                                                                                    |
| `crc16`     | Контрольная сумма (см. Вычисление CRC16 ниже) |

> Если поля `date` и `time` содержат значение `NA` — берётся текущее время сервера.

**Ответ сервера** (`ASD`):


| Код  | Описание                                    |
| ---- | ------------------------------------------- |
| `-1` | Ошибка структуры пакета                     |
| `0`  | Некорректное время                          |
| `1`  | Пакет успешно зафиксирован                  |
| `10` | Ошибка получения координат                  |
| `11` | Ошибка получения скорости, курса или высоты |
| `12` | Ошибка получения количества спутников       |
| `13` | Ошибка проверки контрольной суммы           |

```
#ASD#1\r\n
#ASD#0\r\n
#ASD#10\r\n
```

---

**D — Пакет с данными**

```
#D#date;time;lat1;lat2;lon1;lon2;speed;course;height;sats;hdop;inputs;outputs;adc;ibutton;params;crc16\r\n
```


| Поле        | Описание                                                                                                                                                                      |
| ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `date`      | Дата в формате `DDMMYY`, UTC. Если отсутствует — `NA`                                                                                                                         |
| `time`      | Время в формате `HHMMSS`, UTC. Если отсутствует — `NA`                                                                                                                        |
| `lat1;lat2` | Широта, например `5544.6025;N`. Если отсутствует — `NA;NA`                                                                                                                    |
| `lon1;lon2` | Долгота, например `03739.6834;E`. Если отсутствует — `NA;NA`                                                                                                                  |
| `speed`     | Скорость, целое число, км/ч. Если отсутствует — `NA`                                                                                                                          |
| `course`    | Курс, целое число, градусы. Если отсутствует — `NA`                                                                                                                           |
| `height`    | Высота, целое число, метры. Если отсутствует — `NA`                                                                                                                           |
| `sats`      | Количество спутников, целое число. Если отсутствует — `NA`                                                                                                                    |
| `hdop`      | Снижение точности (HDOP), дробное число. Если отсутствует — `NA`                                                                                                              |
| `inputs`    | Цифровые входы. Каждый бит числа соответствует одному входу, начиная с младшего. Целое число. Если отсутствует — `NA`                                                         |
| `outputs`   | Цифровые выходы. Каждый бит числа соответствует одному выходу, начиная с младшего. Целое число. Если отсутствует — `NA`                                                       |
| `adc`       | Аналоговые входы — дробные числа через запятую. Нумерация с единицы. Если нет — пустая строка. Пример: `14.77,0.02,3.6`                                                       |
| `ibutton`   | Код ключа водителя, строка произвольной длины. Если отсутствует — `NA`                                                                                                        |
| `params`    | Дополнительные параметры через запятую в формате `NAME:TYPE:VALUE` (см. ниже)                                                                                                 |
| `crc16`     | Контрольная сумма (см. Вычисление CRC16 ниже) |

**Формат поля `params`:**

Каждый параметр имеет вид `NAME:TYPE:VALUE`, где:


| Поле    | Описание                                             |
| ------- | ---------------------------------------------------- |
| `NAME`  | Произвольная строка, не более 15 байт                |
| `TYPE`  | Тип: `1` — int/long long, `2` — double, `3` — string |
| `VALUE` | Значение в зависимости от типа                       |

**Специальные параметры:**

- **Тревожная кнопка SOS**: параметр типа `1` с именем `SOS`, значение `1` означает нажатие.
- **Текстовое сообщение от водителя**: параметр типа `3` с именем `text`.

**Примеры `params`:**

```
count1:1:564,fuel:2:45.8,hw:3:V4.5
SOS:1:1
```

> Если поля `date` и `time` содержат значение `NA` — берётся текущее время сервера.

**Ответ сервера** (`AD`):


| Код  | Описание                                       |
| ---- | ---------------------------------------------- |
| `-1` | Ошибка структуры пакета                        |
| `0`  | Некорректное время                             |
| `1`  | Пакет успешно зафиксирован                     |
| `10` | Ошибка получения координат                     |
| `11` | Ошибка получения скорости, курса или высоты    |
| `12` | Ошибка получения количества спутников или HDOP |
| `13` | Ошибка получения inputs или outputs            |
| `14` | Ошибка получения adc                           |
| `15` | Ошибка получения дополнительных параметров     |
| `16` | Ошибка проверки контрольной суммы              |

```
#AD#1\r\n
#AD#0\r\n
#AD#10\r\n
```

---

**P — Пинговый пакет**

Служит для поддержания активного TCP-соединения с сервером, а также для проверки работоспособности канала.

```
#P#\r\n
```

**Ответ сервера** (`AP`):

```
#AP#\r\n
```

---

### Вычисление CRC16

Поле `crc16` содержит контрольную сумму в **шестнадцатеричном** формате, big-endian, без ведущих нулей.

**Пример:** `AA13BB` (десятичное: 11146171)

**Что входит в расчёт**


| Тип пакета               | Данные для расчёта CRC16                  |
| ------------------------ | ----------------------------------------- |
| `L`, `SD`, `D`, `B`, `M` | Часть пакета между `#TP#` и полем `crc16` |
| `I`, `US`, `UC`, `T`     | Поле `BIN`                                |

**Пример для `#SD#`:**

```
#SD#date;time;lat1;lat2;lon1;lon2;speed;course;height;sats;crc16\r\n
```

CRC16 рассчитывается для:

```
date;time;lat1;lat2;lon1;lon2;speed;course;height;sats;
```

---

## 7.3 Описание протокола Wialon Retranslator v1.0

Все данные передаются в **бинарном формате** по протоколу **TCP**.

### Входящие данные

**Cтруктура пакета**

Каждый входящий пакет имеет следующую структуру:

| Размер (байт) | Тип поля    | Описание |
|---------------|-------------|----------|
| 4             | Integer     | Размер пакета |
| -             | Text        | Идентификатор контроллера (IMEI или серийный номер). Размер не фиксирован. Конец строки — байт `0x00` |
| 4             | Integer     | Время в секундах (UTC) |
| 4             | Integer     | Битовые флаги сообщения (см. таблицу флагов) |
| -             | -           | Набор блоков данных в пакете. Следуют последовательно |

---

**Битовые флаги сообщения**

| Флаг   | Описание |
|--------|----------|
| `0×1`  | Информация о местоположении |
| `0×2`  | Информация о цифровых входах |
| `0×4`  | Информация о цифровых выходах |
| `0×10` | Бит тревоги (alert) |
| `0×20` | Информация об идентификаторе водителя |

Остальные биты зарезервированы или предназначены для внутреннего использования Wialon.

---

**Структура блока данных**

Набор блоков данных следует сразу за полями заголовка пакета. Блоки идут последовательно без разделителей.

| Размер (байт) | Тип поля    | Описание |
|---------------|-------------|----------|
| 2             | Integer     | Тип блока |
| 4             | Integer     | Размер блока |
| 1             | Integer     | Атрибут безопасности: `1` — параметр скрыт, `0` — параметр отображается |
| 1             | Integer     | Тип данных блока (см. таблицу типов) |
| -             | Text        | Имя блока (строка, конец — байт `0x00`) |
| -             | -           | Значение блока |

**Типы данных блока**

| Код    | Описание |
|--------|----------|
| `0x1`  | Текст (string) |
| `0x2`  | Бинарные данные |
| `0x3`  | Целое число (int, 4 байта) |
| `0x4`  | Дробное число (double) |
| `0x5`  | Целое число (long, 8 байт) |

**Стандартные имена блоков**

| Имя блока       | Описание |
|-----------------|----------|
| `posinfo`       | Блок с координатами (бинарный, см. структуру ниже) |
| `pwr_ext`       | Напряжение питания |
| `avl_inputs`    | Значение цифровых входов |
| `avl_outputs`   | Значение цифровых выходов |
| `adc1`, `adc2`, ... | Значения аналоговых датчиков |
| `gsm`           | Уровень GSM-сигнала |
| `ign`           | Зажигание |
| `can1`, `can2`, ... | Значения с CAN-шины |

> Если значения первых трёх параметров блока `posinfo` (lon, lat, altitude) отсутствуют — весь блок не включается в пакет.

---

**Структура блока `posinfo`**

Блок `posinfo` передаётся в бинарном формате как значение поля «Block value»:

| Размер (байт) | Тип поля        | Описание |
|---------------|-----------------|----------|
| 8             | Fractional (double) | `lon` — долгота |
| 8             | Fractional (double) | `lat` — широта |
| 8             | Fractional (double) | `altitude` — высота |
| 2             | Integer         | `speed` — скорость |
| 2             | Integer         | `course` — курс |
| 1             | Integer         | `sats` — количество спутников |

---

### Исходящие данные

После приёма каждого входящего пакета оборудование должно отправить на сервер **байт подтверждения** `0x11`.

--- 

### Пример разбора пакета

Исходный пакет (HEX)

```
74000000333533393736303133343435343835004B0BFB70000000030BBB00000027
0102706F73696E666F00A027AFDF5D9848403AC7253383DD4B400000000000805A40
003601460B0BBB000000120004707772 5F657874002B8716D9CE973B400BBB000000
11010361766C5F696E707574730000000001
```

**Разбор заголовка**

| Поле HEX              | Расшифровка |
|-----------------------|-------------|
| `74000000`            | Размер пакета: 116 байт |
| `33353339373630313334343534383500` | Идентификатор контроллера: `353976013445485` |
| `4B0BFB70`            | Время UTC: `1259076464` → 2009/11/24 17:27:44 |
| `00000003`            | Флаги: `3` (местоположение + цифровые входы) |

**Блок 1 — `posinfo`**

| Поле HEX                  | Расшифровка |
|---------------------------|-------------|
| `0BBB`                    | Тип блока: 3003 |
| `00000027`                | Размер блока: 39 байт |
| `01`                      | Атрибут безопасности: скрыт |
| `02`                      | Тип данных: бинарный |
| `706F73696E666F00`        | Имя блока: `posinfo` |
| `A027AFDF5D984840`        | Долгота: `49.1903648` |
| `3AC7253383DD4B40`        | Широта: `55.7305664` |
| `0000000000805A40`        | Высота: `106.0` |
| `0036`                    | Скорость: `54` |
| `0146`                    | Курс: `326` |
| `0B`                      | Количество спутников: `11` |

**Блок 2 — `pwr_ext`**

| Поле HEX                  | Расшифровка |
|---------------------------|-------------|
| `0BBB`                    | Тип блока: 3003 |
| `00000012`                | Размер блока: 18 байт |
| `00`                      | Атрибут безопасности: отображается |
| `04`                      | Тип данных: дробное число (double) |
| `7077725F65787400`        | Имя блока: `pwr_ext` |
| `2B8716D9CE973B40`        | Значение: `27.593` В |

**Блок 3 — `avl_inputs`**

| Поле HEX                  | Расшифровка |
|---------------------------|-------------|
| `0BBB`                    | Тип блока: 3003 |
| `00000011`                | Размер блока: 17 байт |
| `01`                      | Атрибут безопасности: скрыт |
| `03`                      | Тип данных: целое число (int) |
| `61766C5F696E70757473 00` | Имя блока: `avl_inputs` |
| `00000001`                | Значение: `1` |

---

## 7.4 Описание протокола EGTS

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

- Все числовые типы (USHORT, UINT, ULONG, FLOAT, DOUBLE) передаются в порядке **little-endian** (младший байт вперед).
- Строки (STRING) — в кодировке **CP-1251**, оканчиваются байтом `0x00`.
- Тип BINARY — массив байт без фиксированной длины.
- Поля помечены как **M** (Mandatory — обязательное) или **O** (Optional — необязательное).
- Контрольная сумма заголовка — **CRC-8**, тела пакета — **CRC-16 CCITT**.

**Используемые типы данных**

| Тип           | Размер (байт) | Диапазон значений |
|---------------|---------------|-------------------|
| `BOOLEAN`     | 1             | TRUE (1) / FALSE (0) |
| `BYTE`        | 1             | 0...255 |
| `USHORT`      | 2             | 0...65535 |
| `UINT`        | 4             | 0...4 294 967 295 |
| `ULONG`       | 8             | 0...18 446 744 073 709 551 615 |
| `SHORT`       | 2             | −32 768...32 767 |
| `INT`         | 4             | −2 147 483 648...2 147 483 647 |
| `FLOAT`       | 4             | −1.2E-38...3.4E+38 |
| `DOUBLE`      | 8             | −2.2E-308...1.7E+308 |
| `STRING`      | переменный    | Строка CP-1251, конец — байт `0x00` |
| `BINARY`      | переменный    | Массив байт |

---

### Структура пакета транспортного уровня

Каждый пакет состоит из **заголовка** и опциональной **области данных** (SFRD).

| Поле   | Аббр. | Обяз. | Тип    | Размер (байт) | Описание |
|--------|-------|-------|--------|---------------|----------|
| Версия протокола | `PRV` | M | BYTE | 1 | Версия протокола. Значение: `0x01` |
| Идентификатор ключа | `SKID` | M | BYTE | 1 | Идентификатор ключа шифрования |
| Флаги | `PRF/RTE/ENA/CMP/PR` | M | BYTE | 1 | Флаги (битовое поле, см. ниже) |
| Длина заголовка | `HL` | M | BYTE | 1 | Длина заголовка до поля HCS включительно |
| Кодировка заголовка | `HE` | M | BYTE | 1 | Способ кодирования заголовка |
| Длина данных | `FDL` | M | USHORT | 2 | Длина поля SFRD в байтах |
| Идентификатор пакета | `PID` | M | USHORT | 2 | Уникальный номер пакета. Начинается с 1, при достижении 65535 обнуляется |
| Тип пакета | `PT` | M | BYTE | 1 | Тип пакета (см. таблицу типов) |
| Адрес отправителя | `PRA` | O | USHORT | 2 | Используется только при маршрутизации (RTE=1) |
| Адрес получателя | `RCA` | O | USHORT | 2 | Используется только при маршрутизации (RTE=1) |
| Время жизни | `TTL` | O | BYTE | 1 | Максимальное число узлов маршрутизации. При TTL=0 пакет уничтожается |
| Контрольная сумма заголовка | `HCS` | M | BYTE | 1 | CRC-8 от PRV до TTL |
| Область данных | `SFRD` | O | BINARY | 0...65517 | Данные сервисов |
| Контрольная сумма данных | `SFRCS` | O | USHORT | 0 или 2 | CRC-16 от SFRD; присутствует только если SFRD не пустое |

**Битовые флаги заголовка (PRF-байт)**

| Биты | Флаг  | Описание |
|------|-------|----------|
| 7–6  | `PRF` | Префикс. Всегда `00` |
| 5    | `RTE` | Route — маршрутизация. При `1` в заголовке присутствуют PRA, RCA, TTL |
| 4–3  | `ENA` | Encryption Algorithm — алгоритм шифрования SFRD. `00` — нет шифрования |
| 2    | `CMP` | Compressed — признак сжатия SFRD |
| 1–0  | `PR`  | Priority — приоритет: `00` — наивысший, `01` — высокий, `10` — средний, `11` — низший |

**Типы пакетов (PT)**

| Код | Тип | Описание |
|-----|-----|----------|
| `0` | `EGTS_PT_RESPONSE` | Ответ на пакет |
| `1` | `EGTS_PT_APPDATA` | Пакет с данными приложения |
| `2` | `EGTS_PT_SIGNED_APPDATA` | Пакет с подписанными данными приложения |

---

### Структура области данных (SFRD)

**EGTS_PT_APPDATA**

SFRD для пакетов типа `EGTS_PT_APPDATA` содержит один или несколько **записей сервисного уровня (SDR)**:

| Поле | Размер (байт) | Описание |
|------|---------------|----------|
| SDR 1 | 9...65517 | Запись сервисного уровня №1 |
| SDR 2 | 9...65517 | Запись сервисного уровня №2 |
| ... | ... | ... |
| SDR n | 9...65517 | Запись сервисного уровня №n |

**EGTS_PT_RESPONSE**

SFRD для ответных пакетов содержит:

| Поле  | Аббр.  | Обяз. | Тип    | Размер (байт) | Описание |
|-------|--------|-------|--------|---------------|----------|
| ID пакета-источника | `RPID` | M | USHORT | 2 | PID пакета, на который формируется ответ |
| Результат обработки | `PR`   | M | BYTE   | 1 | Код результата (см. таблицу кодов ответа) |
| SDR 1...n | — | O | BINARY | 9...65517 | Записи сервисного уровня (опционально) |

**EGTS_PT_SIGNED_APPDATA**

| Поле | Аббр. | Обяз. | Тип | Размер (байт) | Описание |
|------|-------|-------|-----|---------------|----------|
| Длина подписи | `SIGL` | M | SHORT | 2 | Длина поля SIGD |
| Данные подписи | `SIGD` | O | BINARY | 0...512 | Цифровая подпись |
| SDR 1...n | — | O | BINARY | 9...65515 | Записи сервисного уровня |

---

### Структура записи сервисного уровня (SDR)

Каждая запись (SDR) имеет фиксированный заголовок и поле данных:

| Поле | Аббр. | Обяз. | Тип | Размер (байт) | Описание |
|------|-------|-------|-----|---------------|----------|
| Длина записи | `RL` | M | USHORT | 2 | Длина поля RD в байтах |
| Номер записи | `RN` | M | USHORT | 2 | Уникальный номер. Начинается с 0, при 65535 обнуляется |
| Флаги записи | `RFL` | M | BYTE | 1 | Битовые флаги (SSOD, RSOD, GRP, RPP, TMFE, EVFE, OBFE) |
| ID объекта | `OID` | O | UINT | 4 | Идентификатор объекта (при OBFE=1) |
| ID события | `EVID` | O | UINT | 4 | Идентификатор события (при EVFE=1) |
| Время | `TM` | O | UINT | 4 | Время UTC (при TMFE=1); отсчёт от 00:00:00 01.01.2010 |
| Тип исходного сервиса | `SST` | M | BYTE | 1 | Тип сервиса-отправителя |
| Тип сервиса-получателя | `RST` | M | BYTE | 1 | Тип сервиса-получателя |
| Данные записи | `RD` | M | BINARY | 3...65498 | Набор подзаписей |

**Флаги записи (RFL)**

| Флаг | Описание |
|------|----------|
| `SSOD` | Source Service On Device: `1` — исходный сервис на устройстве |
| `RSOD` | Recipient Service On Device: `1` — сервис-получатель на устройстве |
| `GRP`  | Group: `1` — запись адресована группе (OID = ID группы) |
| `RPP`  | Record Processing Priority: `00` — наивысший, `01` — высокий, `10` — средний, `11` — низший |
| `TMFE` | Time Field Exists: `1` — поле TM присутствует |
| `EVFE` | Event ID Field Exists: `1` — поле EVID присутствует |
| `OBFE` | Object ID Field Exists: `1` — поле OID присутствует |

**Структура подзаписи (Subrecord)**

| Поле | Аббр. | Обяз. | Тип | Размер (байт) | Описание |
|------|-------|-------|-----|---------------|----------|
| Тип подзаписи | `SRT` | M | BYTE | 1 | Тип подзаписи (0 — зарезервирован) |
| Длина подзаписи | `SRL` | M | USHORT | 2 | Длина поля SRD |
| Данные подзаписи | `SRD` | O | BINARY | 0...65495 | Данные |

---

### Сервисы протокола

**Перечень сервисов**

| Тип | Название | Описание |
|-----|----------|----------|
| `EGTS_AUTH_SERVICE` | Сервис авторизации | Идентификация и аутентификация терминала |
| `EGTS_TELEDATA_SERVICE` | Телематический сервис | Передача навигационных и телеметрических данных |
| `EGTS_COMMANDS_SERVICE` | Сервис команд | Управление терминалом по GPRS |
| `EGTS_FIRMWARE_SERVICE` | Сервис прошивки | Обновление ПО терминала |
| `EGTS_ECALL_SERVICE` | Сервис экстренного вызова | Поддержка ЭРА-ГЛОНАСС |

---

**EGTS_AUTH_SERVICE — Сервис авторизации**

**Типы подзаписей**

| Код | Название | Описание |
|-----|----------|----------|
| `1`  | `EGTS_SR_TERM_IDENTITY` | Идентификация терминала |
| `2`  | `EGTS_SR_MODULE_DATA` | Данные о модуле |
| `3`  | `EGTS_SR_VEHICLE_DATA` | Данные о транспортном средстве |
| `5`  | `EGTS_SR_DISPATCHER_IDENTITY` | Идентификация диспетчера |
| `6`  | `EGTS_SR_AUTH_PARAMS` | Параметры аутентификации |
| `7`  | `EGTS_SR_AUTH_INFO` | Данные аутентификации |
| `8`  | `EGTS_SR_SERVICE_INFO` | Информация о сервисе |
| `9`  | `EGTS_SR_RESULT_CODE` | Код результата авторизации |

**EGTS_SR_TERM_IDENTITY — Идентификация терминала**

| Поле | Аббр. | Обяз. | Тип | Размер (байт) | Описание |
|------|-------|-------|-----|---------------|----------|
| ID терминала | `TID` | M | UINT | 4 | Уникальный идентификатор терминала |
| Флаги | — | M | BYTE | 1 | HDIDE, IMEIE, IMSIE, LNGCE, SSRA, BSE, NIDE, MNE |
| ID диспетчера | `HDID` | O | USHORT | 2 | (при HDIDE=1) |
| IMEI | `IMEI` | O | STRING | 15 | (при IMEIE=1) |
| IMSI | `IMSI` | O | STRING | 16 | (при IMSIE=1) |
| Код языка | `LNGC` | O | STRING | 3 | Например: `rus` (при LNGCE=1) |
| ID сети | `NID` | O | BINARY | 3 | MCC + MNC (при NIDE=1) |
| Размер буфера | `BS` | O | USHORT | 2 | Рекомендуемые значения: 800, 1000, 1024, 2048, 4096 (при BSE=1) |
| Номер MSISDN | `MSISDN` | O | STRING | 15 | (при MNE=1) |

**EGTS_SR_MODULE_DATA — Данные о модуле**

| Поле | Аббр. | Обяз. | Тип | Размер (байт) | Описание |
|------|-------|-------|-----|---------------|----------|
| Тип модуля | `MT` | M | BYTE | 1 | 1 — трекер, 2 — блок навигации, 3 — коммуникационный, 4 — другое |
| ID производителя | `VID` | M | UINT | 4 | |
| Версия прошивки | `FWV` | M | USHORT | 2 | Major.Minor, например 2.34 = `0x0222` |
| Версия ПО | `SWV` | M | USHORT | 2 | |
| Модификация | `MD` | M | BYTE | 1 | |
| Состояние | `ST` | M | BYTE | 1 | 1 — активен, 0 — неактивен, 127 — неопределён |
| Серийный номер | `SRN` | O | STRING | 0...32 | Конец строки — `0x00` |
| Описание | `DSCR` | O | STRING | 0...32 | |

**EGTS_SR_AUTH_INFO — Данные аутентификации**

| Поле | Аббр. | Обяз. | Тип | Размер (байт) | Описание |
|------|-------|-------|-----|---------------|----------|
| Имя пользователя | `UNM` | M | STRING | 0...32 | |
| Разделитель | `D` | M | BYTE | 1 | `0x00` |
| Пароль | `UPSW` | M | STRING | 0...32 | |
| Разделитель | `D` | M | BYTE | 1 | `0x00` |
| Серверная последовательность | `SS` | O | STRING | 0...255 | |

**EGTS_SR_RESULT_CODE — Код результата**

Единственное поле: `RCD` (BYTE) — код результата авторизации (см. таблицу кодов ответа).

**EGTS_SR_DISPATCHER_IDENTITY — Идентификация диспетчера**

| Поле | Аббр. | Обяз. | Тип | Размер (байт) | Описание |
|------|-------|-------|-----|---------------|----------|
| Тип диспетчера | `DT` | M | BYTE | 1 | |
| ID диспетчера | `DID` | M | UINT | 4 | |
| Описание | `DSCR` | O | STRING | 0...255 | |

**EGTS_SR_SERVICE_INFO — Информация о сервисе**

| Поле | Аббр. | Обяз. | Тип | Размер (байт) | Описание |
|------|-------|-------|-----|---------------|----------|
| Тип сервиса | `ST` | M | BYTE | 1 | |
| Состояние сервиса | `SST` | M | BYTE | 1 | |
| Параметры | `SRVP` | M | BYTE | 1 | SRVA (0 — виртуальный, 1 — реальный), SRVRP (приоритет маршрутизации) |

---

**EGTS_TELEDATA_SERVICE — Телематический сервис**

**Типы подзаписей**

| Код | Название | Описание |
|-----|----------|----------|
| `0`  | `EGTS_SR_RECORD_RESPONSE` | Подтверждение записи |
| `16` | `EGTS_SR_POS_DATA` | Основные навигационные данные |
| `17` | `EGTS_SR_EXT_POS_DATA` | Расширенные навигационные данные |
| `18` | `EGTS_SR_AD_SENSORS_DATA` | Данные аналоговых и цифровых датчиков |
| `19` | `EGTS_SR_COUNTERS_DATA` | Данные счётчиков |
| `20` | `EGTS_SR_STATE_DATA` | Данные о состоянии устройства |
| `22` | `EGTS_SR_LOOPIN_DATA` | Данные шлейфов |
| `23` | `EGTS_SR_ABS_DIG_SENS_DATA` | Данные абсолютного цифрового датчика |
| `24` | `EGTS_SR_ABS_AN_SENS_DATA` | Данные абсолютного аналогового датчика |
| `25` | `EGTS_SR_ABS_CNTR_DATA` | Данные абсолютного счётчика |
| `26` | `EGTS_SR_ABS_LOOPIN_DATA` | Данные абсолютного шлейфа |
| `27` | `EGTS_SR_LIQUID_LEVEL_SENSOR` | Данные датчика уровня жидкости |
| `28` | `EGTS_SR_PASSENGERS_COUNTERS` | Данные счётчиков пассажиров |

**EGTS_SR_RECORD_RESPONSE — Подтверждение записи**

| Поле | Аббр. | Обяз. | Тип | Размер (байт) | Описание |
|------|-------|-------|-----|---------------|----------|
| Номер подтверждаемой записи | `CRN` | M | USHORT | 2 | Значение поля RN из подтверждаемой записи |
| Статус записи | `RST` | M | BYTE | 1 | Код результата обработки |

**EGTS_SR_POS_DATA — Основные навигационные данные**

| Поле | Аббр. | Обяз. | Тип | Размер (байт) | Описание |
|------|-------|-------|-----|---------------|----------|
| Навигационное время | `NTM` | M | UINT | 4 | Секунды UTC от 00:00:00 01.01.2010 |
| Широта | `LAT` | M | UINT | 4 | Значение × (90 / 0xFFFFFFFF) в градусах |
| Долгота | `LONG` | M | UINT | 4 | Значение × (180 / 0xFFFFFFFF) в градусах |
| Флаги | `FLG` | M | BYTE | 1 | ALTE, LOHS, LAHS, MV, BB, CS, FIX, VLD |
| Скорость | `SPD` | M | USHORT | 2 | 0,1 км/ч; биты 14–0 — значение, бит 15 — ALTS |
| Направление | `DIR` | M | BYTE | 1 | Направление 0–255 (расширяется DIRH из SPD) |
| Пробег | `ODM` | M | BINARY | 3 | 0,1 км |
| Цифровые входы | `DIN` | M | BYTE | 1 | Биты 0–7 соответствуют входам 1–8 |
| Источник данных | `SRC` | M | BYTE | 1 | Тип источника навигационных данных |
| Высота | `ALT` | O | BINARY | 3 | В метрах (при ALTE=1) |
| Данные источника | `SRCD` | O | SHORT | 2 | Дополнительные данные источника (при SRC≠0) |

**Флаги FLG:**

| Флаг | Описание |
|------|----------|
| `VLD` | Данные валидны: `1` — достоверные |
| `FIX` | Тип фиксации: `0` — 2D fix, `1` — 3D fix |
| `CS`  | Система координат: `0` — WGS-84, `1` — ПЗ-90.02 |
| `BB`  | Из чёрного ящика: `0` — реальное время, `1` — из архива |
| `MV`  | Движение: `1` — объект движется |
| `LAHS` | Знак широты: `0` — северная, `1` — южная |
| `LOHS` | Знак долготы: `0` — восточная, `1` — западная |
| `ALTE` | Наличие поля ALT: `1` — поле присутствует |

**EGTS_SR_EXT_POS_DATA — Расширенные навигационные данные**

| Поле | Аббр. | Обяз. | Тип | Размер (байт) | Описание |
|------|-------|-------|-----|---------------|----------|
| Флаги | — | M | BYTE | 1 | NSFE, SFE, PFE, HFE, VFE |
| VDOP | `VDOP` | O | USHORT | 2 | Вертикальный DOP × 100 (при VFE=1) |
| HDOP | `HDOP` | O | USHORT | 2 | Горизонтальный DOP × 100 (при HFE=1) |
| PDOP | `PDOP` | O | USHORT | 2 | Позиционный DOP × 100 (при PFE=1) |
| Спутники | `SAT` | O | BYTE | 1 | Количество спутников (при SFE=1) |
| Навигационная система | `NS` | O | USHORT | 2 | Битовое поле: 0 — неизвестно, 1 — ГЛОНАСС, 2 — GPS, 4 — Galileo, 8 — Compass, 16 — Beidou, 32 — DORIS, 64 — IRNSS, 128 — QZSS (при NSFE=1) |

**EGTS_SR_AD_SENSORS_DATA — Аналоговые и цифровые датчики**

| Поле | Аббр. | Обяз. | Тип | Размер (байт) | Описание |
|------|-------|-------|-----|---------------|----------|
| Цифровые входы (маска) | `DIOE1–DIOE8` | M | BYTE | 1 | По одному биту на каждый октет цифровых входов |
| Цифровые выходы | `DOUT` | M | BYTE | 1 | Биты 0–7 — выходы 1–8 |
| Аналоговые датчики (маска) | `ASFE1–ASFE8` | M | BYTE | 1 | `1` — поле ANSn присутствует |
| Доп. цифровые входы | `ADIO1–ADIO8` | O | BYTE | 1 каждый | Октеты 1–8 (при DIOE=1) |
| Аналоговые датчики | `ANS1–ANS8` | O | BINARY | 3 каждый | Значения датчиков 1–8 (при ASFEn=1) |

**EGTS_SR_COUNTERS_DATA — Данные счётчиков**

| Поле | Аббр. | Обяз. | Тип | Размер (байт) | Описание |
|------|-------|-------|-----|---------------|----------|
| Маска счётчиков | `CFE1–CFE8` | M | BYTE | 1 | `1` — поле CNn присутствует |
| Счётчики | `CN1–CN8` | O | BINARY | 3 каждый | Значения счётчиков 1–8 |

**EGTS_SR_ACCEL_DATA — Данные акселерометра**

| Поле | Аббр. | Обяз. | Тип | Размер (байт) | Описание |
|------|-------|-------|-----|---------------|----------|
| Количество структур | `SA` | M | BYTE | 1 | Число структур ADS |
| Абсолютное время | `ATM` | M | UINT | 4 | Секунды UTC от 00:00:00 01.01.2010 |
| Структуры ADS1...ADS255 | — | M/O | BINARY | 8 каждая | Данные ускорений |

Каждая структура ADS:

| Поле | Аббр. | Тип | Размер (байт) | Описание |
|------|-------|-----|---------------|----------|
| Относительное время | `RTM` | USHORT | 2 | Смещение от ATM в 10 мс |
| Ускорение по X | `XAAV` | SHORT | 2 | × 0,1 (единица 0,01G) |
| Ускорение по Y | `YAAV` | SHORT | 2 | × 0,1 (единица 0,01G) |
| Ускорение по Z | `ZAAV` | SHORT | 2 | × 0,1 (единица 0,01G) |

**EGTS_SR_STATE_DATA — Состояние устройства**

| Поле | Аббр. | Обяз. | Тип | Размер (байт) | Описание |
|------|-------|-------|-----|---------------|----------|
| Состояние | `ST` | M | BYTE | 1 | Битовое поле состояния |
| Напряжение основного питания | `MPSV` | M | BYTE | 1 | В × 0,1 |
| Напряжение резервной батареи | `BBV` | M | BYTE | 1 | В × 0,1 |
| Напряжение внутренней батареи | `IBV` | M | BYTE | 1 | В × 0,1 |
| Флаги | — | M | BYTE | 1 | NMS (навигационный модуль), IBU (внутр. батарея исп.), BBU (резерв. батарея исп.) |

**EGTS_SR_LOOPIN_DATA — Данные шлейфов**

| Поле | Аббр. | Обяз. | Тип | Размер (байт) | Описание |
|------|-------|-------|-----|---------------|----------|
| Маска шлейфов | `LIFE1–LIFE8` | M | BYTE | 1 | `1` — данные шлейфа n присутствуют |
| Состояния шлейфов | `LIS n` | O | BYTE | 0,5 | По 4 бита на шлейф: `0000` — нормально, `0001` — обрыв, `0010` — КЗ, `0100` — тест, `1000` — неизвестно |

**EGTS_SR_ABS_DIG_SENS_DATA — Абсолютный цифровой датчик**

| Поле | Аббр. | Тип | Размер (байт) | Описание |
|------|-------|-----|---------------|----------|
| DSN + DSST | — | SHORT | 2 | Биты 15–6: номер датчика (DSN), биты 5–0: состояние (DSST) |

**EGTS_SR_ABS_AN_SENS_DATA — Абсолютный аналоговый датчик**

| Поле | Аббр. | Обяз. | Тип | Размер (байт) | Описание |
|------|-------|-------|-----|---------------|----------|
| Номер датчика | `ASN` | M | BYTE | 1 | |
| Значение | `ASV` | M | BINARY | 3 | |

**EGTS_SR_ABS_CNTR_DATA — Абсолютный счётчик**

| Поле | Аббр. | Обяз. | Тип | Размер (байт) | Описание |
|------|-------|-------|-----|---------------|----------|
| Номер счётчика | `CN` | M | BYTE | 1 | |
| Значение | `CNV` | M | BINARY | 3 | |

**EGTS_SR_LIQUID_LEVEL_SENSOR — Датчик уровня жидкости**

| Поле | Аббр. | Обяз. | Тип | Размер (байт) | Описание |
|------|-------|-------|-----|---------------|----------|
| Флаги | — | M | BYTE | 1 | LLSEF, LLSVU (единицы: 00 — мм, 01 — литры, 10 — 0,1%), RDF, LLSN |
| Адрес модуля | `MADDR` | M | USHORT | 2 | |
| Данные датчика | `LLSD` | M | BINARY | 4...512 | Сырые данные (при RDF=1) или нормализованное значение (при RDF=0) |

**EGTS_SR_PASSENGERS_COUNTERS — Счётчики пассажиров**

| Поле | Аббр. | Обяз. | Тип | Размер (байт) | Описание |
|------|-------|-------|-----|---------------|----------|
| Флаги | — | M | BYTE | 1 | RDF, DPR |
| Двери (открытые) | `DPR` | M | BYTE | 1 | Битовое поле: бит = 1 — дверь открыта |
| Двери (разрешённые) | `DRL` | M | BYTE | 1 | Битовое поле разрешённых дверей |
| Адрес модуля | `MADDR` | M | USHORT | 2 | |
| Данные счётчиков | `PCD` | M | BINARY | 2...512 | |

---

**EGTS_COMMANDS_SERVICE — Сервис команд**

**EGTS_SR_COMMAND_DATA — Данные команды**

| Поле | Аббр. | Обяз. | Тип | Размер (байт) | Описание |
|------|-------|-------|-----|---------------|----------|
| Адрес | `ADR` | M | USHORT | 2 | Адрес источника команды |
| Размер | `SZ` | — | — | — | Зависит от значения ACT |
| Действие | `ACT` | M | BYTE | 1 | Тип действия команды (см. ниже) |
| Код команды | `CCD` | M | USHORT | 2 | |
| Данные | `DT` | O | BINARY | 0...65200 | Данные команды |

**Значения ACT:**

| Код | Описание |
|-----|----------|
| `0` | Запрос — наличие CCD |
| `1` | Запуск — наличие CCD |
| `2` | Останов — наличие CCD |
| `3` | Установка — наличие CCD + SZ + DT |
| `4` | Получение — наличие CCD + SZ + DT |

---

### Параметры соединения

| Параметр | Тип | Значение по умолчанию | Описание |
|----------|-----|----------------------|----------|
| `TL_RESPONSE_TO` | BYTE | 5 с | Таймаут ожидания ответа |
| `TL_RESEND_ATTEMPTS` | BYTE | 3 | Число попыток повторной отправки |
| `TL_RECONNECT_TO` | BYTE | 30 с | Таймаут переподключения |

---

### Коды результата обработки

| Код | Константа | Описание |
|-----|-----------|----------|
| `0`   | `EGTS_PC_OK` | Успешно |
| `1`   | `EGTS_PC_IN_PROGRESS` | Обработка |
| `128` | `EGTS_PC_UNS_PROTOCOL` | Неподдерживаемый протокол |
| `129` | `EGTS_PC_DECRYPT_ERROR` | Ошибка расшифрования |
| `130` | `EGTS_PC_PROC_DENIED` | Обработка запрещена |
| `131` | `EGTS_PC_INC_HEADERFORM` | Некорректный заголовок |
| `132` | `EGTS_PC_INC_DATAFORM` | Некорректные данные |
| `133` | `EGTS_PC_UNS_TYPE` | Неподдерживаемый тип |
| `134` | `EGTS_PC_NOTEN_PARAMS` | Недостаточно параметров |
| `135` | `EGTS_PC_DBL_PROC` | Дублирующая обработка |
| `136` | `EGTS_PC_PROC_SRC_DENIED` | Источник запрещён |
| `137` | `EGTS_PC_HEADER_CRC_ERROR` | Ошибка CRC заголовка |
| `138` | `EGTS_PC_DATA_CRC_ERROR` | Ошибка CRC данных |
| `139` | `EGTS_PC_INV_DATALEN` | Некорректная длина данных |
| `140` | `EGTS_PC_ROUTE_NFOUND` | Маршрут не найден |
| `141` | `EGTS_PC_ROUTE_CLOSED` | Маршрут закрыт |
| `142` | `EGTS_PC_ROUTE_DENIED` | Маршрут запрещён |
| `143` | `EGTS_PC_INV_ADDR` | Некорректный адрес |
| `144` | `EGTS_PC_TTL_EXPIRED` | TTL истёк |
| `145` | `EGTS_PC_NO_ACK` | Нет подтверждения |
| `146` | `EGTS_PC_OBJ_NFOUND` | Объект не найден |
| `147` | `EGTS_PC_EVNT_NFOUND` | Событие не найдено |
| `148` | `EGTS_PC_SRVC_NFOUND` | Сервис не найден |
| `149` | `EGTS_PC_SRVC_DENIED` | Сервис запрещён |
| `150` | `EGTS_PC_SRVC_UNKN` | Неизвестный сервис |
| `151` | `EGTS_PC_AUTH_DENIED` | Авторизация запрещена |
| `152` | `EGTS_PC_ALREADY_EXISTS` | Уже существует |
| `153` | `EGTS_PC_ID_NFOUND` | ID не найден |
| `154` | `EGTS_PC_INC_DATETIME` | Некорректная дата/время |
| `155` | `EGTS_PC_IO_ERROR` | Ошибка ввода/вывода |
| `156` | `EGTS_PC_NO_RES_AVAIL` | Ресурсы недоступны |
| `157` | `EGTS_PC_MODULE_FAULT` | Неисправность модуля |
| `158` | `EGTS_PC_MODULE_PWR_FLT` | Ошибка питания модуля |
| `159` | `EGTS_PC_MODULE_PROC_FLT` | Ошибка процессора модуля |
| `160` | `EGTS_PC_MODULE_SW_FLT` | Ошибка ПО модуля |
| `161` | `EGTS_PC_MODULE_FW_FLT` | Ошибка прошивки модуля |
| `162` | `EGTS_PC_MODULE_IO_FLT` | Ошибка ввода/вывода модуля |
| `163` | `EGTS_PC_MODULE_MEM_FLT` | Ошибка памяти модуля |
| `164` | `EGTS_PC_TEST_FAILED` | Тест не пройден |

### Вычисление CRC-8 и CRC-16

**CRC-8 (заголовок пакета)**

- Полином: `0x31` (x⁸ + x⁵ + x⁴ + 1)
- Init: `0xFF`, Revert: false, XorOut: `0x00`
- Контрольное значение для `123456789`: `0xF7`

```c
unsigned char CRC8(unsigned char *lpBlock, unsigned char len) {
    unsigned char crc = 0xFF;
    while (len--)
        crc = CRC8Table[crc ^ *lpBlock++];
    return crc;
}
```

**CRC-16 CCITT (данные пакета — SFRD)**

- Полином: `0x1021` (x¹⁶ + x¹² + x⁵ + 1)
- Init: `0xFFFF`, Revert: false, XorOut: `0x0000`
- Контрольное значение для `123456789`: `0x29B1`

```c
unsigned short Crc16(unsigned char *pcBlock, unsigned short len) {
    unsigned short crc = 0xFFFF;
    while (len--)
        crc = (crc << 8) ^ Crc16Table[(crc >> 8) ^ *pcBlock++];
    return crc;
}
```
