aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--build.gradle19
-rw-r--r--pom.xml30
-rw-r--r--src/main/proto/OmnicommMessage.proto464
3 files changed, 508 insertions, 5 deletions
diff --git a/build.gradle b/build.gradle
index 0842a6a0f..6229a96c3 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,12 +1,21 @@
plugins {
id "java"
id "checkstyle"
+ id "com.google.protobuf" version "0.8.10"
}
repositories {
mavenCentral()
}
+ext {
+ guiceVersion = "4.2.2"
+ jettyVersion = "9.4.20.v20190813"
+ jerseyVersion = "2.29"
+ jacksonVersion = "2.9.9" // same version as jersey-media-json-jackson dependency
+ protobufVersion = "3.11.0"
+}
+
sourceCompatibility = "1.8"
compileJava.options.encoding = "UTF-8"
@@ -15,11 +24,10 @@ checkstyle {
checkstyleTest.enabled = false
}
-ext {
- guiceVersion = "4.2.2"
- jettyVersion = "9.4.20.v20190813"
- jerseyVersion = "2.29"
- jacksonVersion = "2.9.9" // same version as jersey-media-json-jackson dependency
+protobuf {
+ protoc {
+ artifact = "com.google.protobuf:protoc:$protobufVersion"
+ }
}
dependencies {
@@ -59,6 +67,7 @@ dependencies {
implementation "com.fizzed:ch-smpp:6.0.0-netty4-beta-3"
implementation "net.java.dev.jna:jna-platform:5.4.0"
implementation "com.github.jnr:jnr-posix:3.0.50"
+ implementation "com.google.protobuf:protobuf-java:$protobufVersion"
implementation "javax.xml.bind:jaxb-api:2.3.1"
implementation "com.sun.xml.bind:jaxb-core:2.3.0.1"
implementation "com.sun.xml.bind:jaxb-impl:2.3.2"
diff --git a/pom.xml b/pom.xml
index 3562ef149..d12c0ec70 100644
--- a/pom.xml
+++ b/pom.xml
@@ -15,6 +15,7 @@
<jetty.version>9.4.20.v20190813</jetty.version>
<jersey.version>2.29</jersey.version>
<jackson.version>2.9.9</jackson.version> <!-- same version as jersey-media-json-jackson dependency -->
+ <protobuf.version>3.11.0</protobuf.version>
</properties>
<dependencies>
@@ -211,6 +212,11 @@
<version>3.0.50</version>
</dependency>
<dependency>
+ <groupId>com.google.protobuf</groupId>
+ <artifactId>protobuf-java</artifactId>
+ <version>${protobuf.version}</version>
+ </dependency>
+ <dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
@@ -344,6 +350,30 @@
</dependencies>
</plugin>
<plugin>
+ <groupId>com.github.os72</groupId>
+ <artifactId>protoc-jar-maven-plugin</artifactId>
+ <version>3.8.0</version>
+ <executions>
+ <execution>
+ <phase>generate-sources</phase>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ <configuration>
+ <protocArtifact>com.google.protobuf:protoc:${protobuf.version}</protocArtifact>
+ <inputDirectories>
+ <include>src/main/proto</include>
+ </inputDirectories>
+ <outputTargets>
+ <outputTarget>
+ <type>java</type>
+ </outputTarget>
+ </outputTargets>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
<artifactId>maven-site-plugin</artifactId>
<version>3.7.1</version>
</plugin>
diff --git a/src/main/proto/OmnicommMessage.proto b/src/main/proto/OmnicommMessage.proto
new file mode 100644
index 000000000..a3b5b6138
--- /dev/null
+++ b/src/main/proto/OmnicommMessage.proto
@@ -0,0 +1,464 @@
+syntax = "proto2";
+
+package org.traccar.protobuf;
+
+message OmnicommMessage {
+
+ repeated uint32 mID = 1 [packed=true]; // идентификатор события (возможно несколько событий в одном сообщении.)
+
+ optional group General = 2 { // Основные параметры
+ optional uint32 Time = 1;//[4] Время/дата события (в OmnicommTime)
+ optional uint32 IDFAS = 2;//[4] Идентификатор бортового оборудования
+ optional bytes IDDrv = 3;//[8] ID iButton (8 байт)
+ optional uint32 FLG = 4;//[1] Общие флаги состояния
+ /* Битовая маска:
+ 0 бит = Положение ключа зажигания
+ 0 – зажигание выключено,
+ 1 – зажигание включено.
+ 1 бит = Наличие связи GSM
+ 0 – Нет связи,
+ 1 – Есть связь.
+ 2 бит = Корректность данных GPS
+ 0 – Данные некорректны,
+ 1 – Данные корректны.
+ 3 бит = Нахождение в роуминге
+ 0 – В домашней сети,
+ 1 – В роуминге.
+ 4 бит = Состояние питания
+ 0 – Внешнее питание,
+ 1 – Резервное питание.
+ 5 бит = Тревожная кнопка (текущее состояние кнопки)
+ 0 – Кнопка отжата,
+ 1 – Кнопка нажата.
+ 6 бит = Вскрытие устройства
+ 0 – Устройство закрыто,
+ 1 – Устройство открыто.
+ 7 бит = Состояние дискретного выхода
+ 0 – Выключен,
+ 1 – Включен.
+ 8 бит = Кнопка голосового вызова
+ 0 - Кнопка отжата
+ 1 - Кнопка нажата
+ 9 бит = глушение GPS
+ 0 – Выключен,
+ 1 – Включен.
+ 10 бит = глушение GSM
+ 0 – Выключен,
+ 1 – Включен.
+ 11 бит = неисправность аккумулятора
+ 0 – Нет,
+ 1 – Да.
+ */
+ optional uint32 Mileage = 5;//[4] Пробег (1LSB = 0.1 метр)
+ optional uint32 VImp = 6;//[2] Скорость по датчику (1LSB = 1км/ч)
+ optional uint32 TImp = 7;//[2] Обороты по датчику (1LSB = 1об./мин.)
+ optional uint32 Uboard = 8;//[4] Напряжение питания (1LSB = 0.1В)
+ optional uint32 BatLife =9;//[4] Уровень заряда аккумулятора (1LSB = 1%)
+ optional sint32 SumAcc = 10;//[4] Корень суммы квадратов ускорений осей x,y,z (1LSB = 0.01g)
+ optional bytes Phone = 11;//[6] Номер вызывающего или вызываемого абонента
+ optional sint32 AmtrX = 12;//[4] Ускорение по оси X
+ optional sint32 AmtrY = 13;//[4] Ускорение по оси Y
+ optional sint32 AmtrZ = 14;//[4] Ускорение по оси Z
+ optional bytes TachoCardID = 15;//[16] ID карты тахографа (16 байт)
+ optional uint32 AccelStatus = 16;//[1] Статус калибровки акселерометра: 0 - не используется, 1 - калибруется, 2 - откалиброван, 3 - Ошибка определения осей
+ optional uint32 HoursKoef = 17;// Моточасы с использование коэффициента
+ optional uint32 GsmSignalQuality = 18;// Уровень сигнала GSM, усл.ед.: 0 - нет сигнала, 1 - плохой, 2 - слабый, 3 - удовлетворительный, 4 - хороший, 5 - отличный
+ optional uint32 WifiSignalQuality = 19;// Уровень сигнала Wi-Fi, усл.ед? 0 - нет сигнала, 1 - плохой, 2 - слабый, 3 - удовлетворительный, 4 - хороший, 5 - отличный
+ }
+
+ optional group Photo = 4 { // Описание блока передачи части изображения
+ optional uint32 POSBLK=1;//[4] Позиция текущего блока (в байтах от начала фотографии)
+ optional uint32 SZPHOTO=2; //[4] Размер всей фотографии (в байтах)
+ optional uint32 SIZEBLK=3;//[4] Размер текущего блока фотографии (в байтах)
+ optional bytes IMGDAT=4;//[2048] Буфер фотографии (данные фотографии)
+ optional uint32 IDPH=5;//[4] Идентификатор фотографии
+ optional uint32 IMGSTAT=6;//[1] Статус изображения, см. Таблицу "Коды состояния фотокамеры".
+ }
+
+ optional group NAV = 5 { // Навигация
+ required sint32 LAT=1;//[4] Широта (1LSB = 0,0000001гр.)
+ required sint32 LON=2;//[4] Долгота (1LSB = 0,0000001гр.)
+ required uint32 GPSVel=3;//[2] Скорость по GPS (1LSB = 0.1км/ч)
+ required uint32 GPSDir=4;//[2] Направление (1LSB = 1гр.)
+ required uint32 GPSNSat=5;//[1] Количество спутников
+ required sint32 GPSAlt=6;//[2] Высота над уровнем моря (1LSB = 0.1м)
+ optional uint32 GPSTime = 7;//[4] Время/дата события по GPS (в OmnicommTime)
+ }
+
+ optional group UniDt = 6 { // Универсальные входы
+ optional sint32 UniVal0 = 1;//[4] Данные универсального входа 1
+ optional sint32 UniVal1 = 2;//[4] Данные универсального входа 2
+ optional sint32 UniVal2 = 3;//[4] Данные универсального входа 3
+ optional sint32 UniVal3 = 4;//[4] Данные универсального входа 4
+ optional sint32 UniVal4 = 5;//[4] Данные универсального входа 5
+ optional sint32 UniVal5 = 6;//[4] Данные универсального входа 6
+ }
+
+ optional group CanDt_J1939 = 7 { // Данные шины CAN (протокол J1939)
+ optional uint32 SPN70 = 70;//[1] Cостояние парковочного тормоза
+ /* Возможные значения
+ 00 - Parking brake not set
+ 01 - Parking brake set
+ 10 - Error
+ 11 - Not available
+ */
+ optional uint32 SPN91 = 91;//[1] Пположение педали акселерометра (0.4%)
+ /* Ошибки:
+ 254 = Error
+ 255 = Not available
+ */
+ optional uint32 SPN96 = 96; // Уровень топлива 1 бак.(0.4 %) Если есть SPN38, то первый бак, если нет, общий уровень
+ /* Ошибки:
+ 251=Error
+ 252= Not available
+ */
+
+ optional uint32 SPN100 = 100;//[1] Давление масла двигателя (1 LSB=4 kPa)
+ /* Ошибки:
+ 254 = Error
+ 255 = Not available
+ */
+ optional uint32 SPN110 = 110;//[1] температура ОЖ двигателя. Cмещение -40 (диапазон данных от -40 до 210°C)
+ /* Ошибки:
+ 254 = Error
+ 255 = Not available
+ */
+ optional uint32 SPN174 = 174;//[1] температура топлива. Cмещение -40 (диапазон данных от -40 до 210°C)
+ /* Ошибки:
+ 254=Error
+ 255= Not available
+ */
+ optional uint32 SPN175 = 175;//[2] температура масла двигателя. Cмещение - 273 (диапазон данных от -273 до 1735 deg C)
+ optional uint32 SPN182 = 182;//[4] суточный расход топлива (0.5 L)
+ /* Ошибки:
+ 4 261 412 864 .. 4 278 190 079 =Error
+ 4 278 190 080 .. 4 294 967 294 = Not available
+ */
+ optional uint32 SPN184 = 184;//[2] мгновенная экономичность (1/512 km/L)
+ /* Ошибки:
+ 65 024 .. 65 279 =Error
+ 65 280 .. 65 535 = Not available
+ */
+ optional uint32 SPN190 = 190;//[2] обороты двигателя (0.125 rpm)
+ /* Ошибки:
+ 65 024 .. 65 279 =Error
+ 65 280 .. 65 535 = Not available
+ */
+ optional uint32 SPN244 = 244;//[4] суточный пробег (0.125 km)
+ /* Ошибки:
+ 4 261 412 864 .. 4 278 190 079 =Error
+ 4 278 190 080 .. 4 294 967 294 = Not available
+ */
+ optional uint32 SPN245 = 245;//[4] общий пробег (0.125 km)
+ /* Ошибки:
+ 4 261 412 864 .. 4 278 190 079 =Error
+ 4 278 190 080 .. 4 294 967 294 = Not available
+ */
+ optional uint32 SPN247 = 247;//[4] общее время работы двигателя (0.05 hr)
+ /* Ошибки:
+ 4 261 412 864 .. 4 278 190 079 =Error
+ 4 278 190 080 .. 4 294 967 294 = Not available
+ */
+ optional uint32 SPN250 = 250;//[4] общий расход топлива за все время (0.5 L)
+ /* Ошибки:
+ 4 261 412 864 .. 4 278 190 079 =Error
+ 4 278 190 080 .. 4 294 967 294 = Not available
+ */
+ optional uint32 SPN521 = 521;//[1] положение педали рабочего тормоза (0.4 %)
+ /* Ошибки:
+ 254=Error
+ 255= Not available
+ */
+ optional uint32 SPN522 = 522;//[1] положение педали сцепления (0.4 %)
+ /* Ошибки:
+ 254=Error
+ 255= Not available
+ */
+ optional uint32 SPN527 = 527;//[1] состояние круиз-контроля
+ /* Возможные значения:
+ 0 = Off/Disabled
+ 1 = Hold
+ 2 = Accelerate
+ 3 = Decelerate
+ 4 = Resume
+ 5 = Set
+ 6 = Accelerator Override
+ 7 = Not available
+ */
+ repeated uint32 SPN582 = 582 [packed=true]; /*PGN 65258 */ //[2*8] Нагрузка на ось
+ optional uint32 SPN597 = 597;//[1] состояние педали рабочего тормоза
+ /* Возможные значения:
+ 0 = Brake pedal released
+ 1 = Brake pedal depressed
+ 2 = Error
+ 3 = Not Available
+ */
+ optional uint32 SPN598 = 598;//[1] состояние педали сцепления
+ /* Возможные значения:
+ 0 = Clutch pedal released
+ 1 = Clutch pedal depressed
+ 2 = Error
+ 3 = Not Available
+ */
+ optional uint32 SPN914 = 914;//[2] пробег до следующего ТО. Cмещение -160635 km (5 km)
+ /* Ошибки:
+ 65 024 .. 65 279 =Error
+ 65 280 .. 65 535 = Not available
+ */
+ optional uint32 SPN916 = 916;//[1] время работы двигателя до следующего ТО. Cмещение -32127 hr (1 hr)
+ /* Ошибки:
+ 65 024 .. 65 279 =Error
+ 65 280 .. 65 535 = Not available
+ */
+ repeated uint32 SPN928 = 928 [packed=true]; /*PGN 65258 */ //[1*8] индекс оси
+ optional uint32 SPN1624 = 1624;//[2] мгновенная скорость (1/256 km/h)
+ // (по CAN это SPN 84, номер не менял чтобы конфликтов с предыдущими прошивками не возникло)
+ /* Ошибки:
+ 65 024 .. 65 279 =Error
+ 65 280 .. 65 535 = Not available
+ */
+ optional uint32 SPN1821 = 1821;//[1] состояние дверей
+ /* Возможные значения:
+ 0 = At least 1 door is open
+ 1 = Closing last door
+ 2 = All doors closed
+ 3..13 = Not defined
+ 14 = Error
+ 15 = Not available
+ */
+ optional uint32 SPN1856 = 1856;//[1] состояние ремней безопасности
+ /* Возможные значения:
+ 0 = NOT Buckled
+ 1 = OK - Seat Belt is buckled
+ 2 = Error - Switch state cannot be determined
+ 3 = Not Available
+ */
+ }
+
+ optional group LLSDt = 8 { // Топливные датчики LLS/LLS-AF
+ optional sint32 TLLS1 = 1; //[1] температура (1LSB = 1гр.C)
+ optional uint32 CLLS1 = 2; //[2] уровень
+ optional sint32 FLLS1 = 3; //[1] код состояния см. Таблицу "Коды состояния LLS".
+
+ optional sint32 TLLS2 = 4; //[1] температура (1LSB = 1гр.C)
+ optional uint32 CLLS2 = 5; //[4] уровень
+ optional sint32 FLLS2 = 6; //[1] код состояния см. Таблицу "Коды состояния LLS".
+
+ optional sint32 TLLS3 = 7; //[1] температура (1LSB = 1гр.C)
+ optional uint32 CLLS3 = 8; //[4] уровень
+ optional sint32 FLLS3 = 9; //[1] код состояния см. Таблицу "Коды состояния LLS".
+
+ optional sint32 TLLS4 = 10; //[1] температура (1LSB = 1гр.C)
+ optional uint32 CLLS4 = 11; //[4] уровень
+ optional sint32 FLLS4 = 12; //[1] код состояния см. Таблицу "Коды состояния LLS".
+
+ optional sint32 TLLS5 = 13; //[1] температура (1LSB = 1гр.C)
+ optional uint32 CLLS5 = 14; //[4] уровень
+ optional sint32 FLLS5 = 15; //[1] код состояния см. "Коды состояния LLS".
+
+ optional sint32 TLLS6 = 16; //[1] температура (1LSB = 1гр.C)
+ optional uint32 CLLS6 = 17; //[4] уровень
+ optional sint32 FLLS6 = 18; //[1] код состояния см. "Коды состояния LLS".
+
+ optional sint32 TLLS7 = 19; //[1] температура (1LSB = 1гр.C)
+ optional uint32 CLLS7 = 20; //[4] уровень
+ optional sint32 FLLS7 = 21; //[1] код состояния см. "Коды состояния LLS".
+
+ optional sint32 TLLS8 = 22; //[1] температура (1LSB = 1гр.C)
+ optional uint32 CLLS8 = 23; //[4] уровень
+ optional sint32 FLLS8 = 24; //[1] код состояния см. "Коды состояния LLS".
+
+ repeated uint32 LLSRefKoef= 25 [packed=true]; //[8] набор из восьми поправочных коэффициентов ДУТ (поз. 0 - ДУТ1, поз. 1 - ДУТ2, ...)
+ }
+
+ optional group Other = 9 { // прочее оборудование
+ optional group OneWire = 1 {
+ // Температурные датчики 1-wire Присутствуют только температуры с настроенных датчиков
+ optional sint32 OneWire1 = 1; //[1] температура c датчика 1
+ optional sint32 OneWire2 = 2; //[1] температура c датчика 2
+ optional sint32 OneWire3 = 3; //[1] температура c датчика 3
+ optional sint32 OneWire4 = 4; //[1] температура c датчика 4
+ optional sint32 OneWire5 = 5; //[1] температура c датчика 5
+ optional sint32 OneWire6 = 6; //[1] температура c датчика 6
+ optional sint32 OneWire7 = 7; //[1] температура c датчика 7
+ optional sint32 OneWire8 = 8; //[1] температура c датчика 8
+ }
+ optional group Pherip = 2 { // Периферия кладется в архив только при данные с только подключенных и настроенных устройств
+ optional uint32 PassengerIn= 1; //[1] Количество вошедших пассажиров
+ optional uint32 PassengerOut= 2; //[1] Количество вышедших пассажиров
+ optional uint32 DoorMask= 3; //[1] маска дверей датчика пасажиропотока
+ optional uint32 DriverStatus= 4; //[1] Статус водителя
+ optional bytes TPMS = 5; //[92] Система контроля давления воздуха в шинах, всего возможно 46 датчика. Массив из 46 структур по 2 байта.
+ optional bytes iQFreeze = 6; //[512] Система контроля рефрижераторами iQFreeze.json - http://wiki.omnicomm.ru/pages/viewpage.action?pageId=11567726
+ }
+ optional group ExCAN = 3 { // Расширенные парметры CAN
+ repeated uint32 SPNid = 1; //[24] Коды SPN
+ repeated uint32 SPNval = 2; //[24] Зачения SPN
+ optional uint64 Adr64TEREX = 10;
+ optional uint64 Adr65TEREX = 11;
+ optional uint64 Adr66TEREX = 12;
+ optional uint64 Adr67TEREX = 13;
+ repeated uint64 Adr11TEREX = 14; //[10] Коды ошибок
+ optional uint64 Adr69TEREX = 15;
+ }
+ optional group Taho_DDD = 4 { // Описание блока передачи части DDD-файла
+ optional uint32 BLKPOS=1;// Позиция текущего блока (в байтах от начала файла)
+ optional bytes FILEDATA=2;//[1024] Данные блока
+ optional bytes CARDID=3;//[16] Идентификатор карты водителя
+ optional uint32 STATUS_DATA=4; // параметр равен 1 если данный блок последний в файле, 2 - если ошибка чтения данных, 0 – если обычный блок данных
+ }
+ optional group APC = 5 { // Данные от ДПП IRMA.
+ optional uint32 APCStatus1 = 1; //[1] Статус ДПП IRMA #1: 0 – ок, 1 – «саботаж», 2 – «дефект», 3 – «датчик не отвечает»
+ optional uint32 APCStatus2 = 2; //[1] Статус ДПП IRMA #2: 0 – ок, 1 – «саботаж», 2 – «дефект», 3 – «датчик не отвечает»
+ optional uint32 APCStatus3 = 3; //[1] Статус ДПП IRMA #3: 0 – ок, 1 – «саботаж», 2 – «дефект», 3 – «датчик не отвечает»
+ optional uint32 APCStatus4 = 4; //[1] Статус ДПП IRMA #4: 0 – ок, 1 – «саботаж», 2 – «дефект», 3 – «датчик не отвечает»
+ optional uint32 APCNumberIn1 = 5; //[2] Количество вошедших пассажиров подсчитанное на ДПП IRMA #1
+ optional uint32 APCNumberOut1 = 6; //[2] Количество вышедших пассажиров подсчитанное на ДПП IRMA #1
+ optional uint32 APCNumberIn2 = 7; //[2] Количество вошедших пассажиров подсчитанное на ДПП IRMA #2
+ optional uint32 APCNumberOut2 = 8; //[2] Количество вышедших пассажиров подсчитанное на ДПП IRMA #2
+ optional uint32 APCNumberIn3 = 9; //[2] Количество вошедших пассажиров подсчитанное на ДПП IRMA #3
+ optional uint32 APCNumberOut31 = 10; //[2] Количество вышедших пассажиров подсчитанное на ДПП IRMA #3
+ optional uint32 APCNumberIn4 = 11; //[2] Количество вошедших пассажиров подсчитанное на ДПП IRMA #4
+ optional uint32 APCNumberOut4 = 12; //[2] Количество вышедших пассажиров подсчитанное на ДПП IRMA #4
+ }
+ optional group MobileEye = 6 { // Данные от MobileEye
+ optional uint32 MobileEyeStatus = 1; //[1] Статус MobileEye (битовая маска событий)
+ repeated bytes CAN700 = 2; // Данные с MobileEye адресс кэн 700
+ repeated bytes CAN727 = 3; // Данные с MobileEye адресс кэн 727
+ repeated bytes CAN760 = 4; // Данные с MobileEye адресс кэн 760
+ }
+ optional group SafeDriving = 7 { // Данные о безопасном вождении
+ optional uint32 EventMask = 1; //[4] Инициатор посылки события (Битовая маска) 0 – Скорость, 1 – Обороты, 2 – Ускорение, 3 – Боковое ускорение, 4 - Ускорение торможения, 5 - Вертикальное ускорение
+ optional uint32 SpeedThreshold = 2; //[4] Порог Скорости, поле присутствует если EventMask/Бит 0 = 1
+ optional uint32 RPMThreshold = 3; //[4] Порог Оборотов, поле присутствует если EventMask/Бит 1 = 1
+ repeated float AccelDangThs = 4 [packed=true]; //[4]
+ }
+ optional group GenComm= 8{ // Данные о GenComm генераторе
+ optional uint32 GEN_OILPRESS1 = 1;
+ optional sint32 GEN_TEMP1 = 2;
+ optional float GEN_VOLT1 = 3;
+ optional uint32 GEN_RPM1 = 4;
+ optional float GEN_UL1_1 = 5;
+ optional float GEN_UL2_1 = 6;
+ optional float GEN_UL3_1 = 7;
+ optional float GEN_IL1_1 = 8;
+ optional float GEN_IL2_1 = 9;
+ optional float GEN_IL3_1 = 10;
+ optional uint32 GEN_STATUS1 = 11;
+ optional uint32 GEN_HOURS1 = 12;
+ repeated bytes GEN_ALARM1 = 13; //[28]
+
+ optional uint32 GEN_OILPRESS2 = 14;
+ optional sint32 GEN_TEMP2 = 15;
+ optional float GEN_VOLT2 = 16;
+ optional uint32 GEN_RPM2 = 17;
+ optional float GEN_UL1_2 = 18;
+ optional float GEN_UL2_2 = 19;
+ optional float GEN_UL3_2 = 20;
+ optional float GEN_IL1_2 = 21;
+ optional float GEN_IL2_2 = 22;
+ optional float GEN_IL3_2 = 23;
+ optional uint32 GEN_STATUS2 = 24;
+ optional uint32 GEN_HOURS2 = 25;
+ repeated bytes GEN_ALARM2 = 26; //[28]
+
+ optional uint32 GEN_OILPRESS3 = 27;
+ optional sint32 GEN_TEMP3 = 28;
+ optional float GEN_VOLT3 = 29;
+ optional uint32 GEN_RPM3 = 30;
+ optional float GEN_UL1_3 = 31;
+ optional float GEN_UL2_3 = 32;
+ optional float GEN_UL3_3 = 33;
+ optional float GEN_IL1_3 = 34;
+ optional float GEN_IL2_3 = 35;
+ optional float GEN_IL3_3 = 36;
+ optional uint32 GEN_STATUS3 = 37;
+ optional uint32 GEN_HOURS3 = 38;
+ repeated bytes GEN_ALARM3 = 39; //[28]
+ optional float GEN_UC = 40; // величина напряжения зарядного генератора
+ optional uint32 GEN_IC = 41; // ток заряда стартерных АКБ
+ optional float GEN_FREQ = 42; // частота выдаваемого напряжения
+ optional float GEN_UL1L2 = 43; // напряжения линейные
+ optional float GEN_UL2L3 = 44; // --
+ optional float GEN_UL1L3 = 45; // --
+ optional uint32 POW_ACT_L1 = 46; // активная мощность
+ optional uint32 POW_ACT_L2 = 47; // --
+ optional uint32 POW_ACT_L3 = 48; // --
+ optional uint32 POW_FULL_L1 = 49; // полная мощность
+ optional uint32 POW_FULL_L2 = 50; // --
+ optional uint32 POW_FULL_L3 = 51; // --
+ optional uint32 POW_REACT_L1 = 52; // реактивная мощность
+ optional uint32 POW_REACT_L2 = 53; // --
+ optional uint32 POW_REACT_L3 = 54; // --
+ optional float POW_KOEF = 55; // коэффициент мощности
+ optional uint32 POW_GEN_TOTAL = 56; // общая выработка электроэнергии
+ optional uint32 FUEL_LEVEL = 57; // текущий объём топлива
+
+ optional uint32 SMS_REGS_0 = 60; // состояние регистра состояния 0 для SMS-оповещений (для отладки)
+ optional uint32 SMS_REGS_1 = 61; // состояние регистра состояния 1 для SMS-оповещений (для отладки)
+ optional uint32 SMS_REGS_2 = 62; // состояние регистра состояния 2 для SMS-оповещений (для отладки)
+ optional uint32 SMS_REGS_3 = 63; // состояние регистра состояния 3 для SMS-оповещений (для отладки)
+ optional uint32 SMS_REGS_4 = 64; // состояние регистра состояния 4 для SMS-оповещений (для отладки)
+ }
+ optional group FuelSensorModbus= 9 { // Данные о сторонних датчиках уровня топлива
+ optional float FuelLevel = 1;
+ optional float MedianLevel = 2;
+ optional uint32 LevelPercent = 3;
+ optional float FuelVolume = 4;
+ optional sint32 FuelTemp = 5;
+ optional float FuelWeight = 6;
+ optional float FuelDensity = 7;
+ optional sint32 VaporTemp = 8;
+ optional float VaporWeight = 9;
+ optional float LiquidWeight = 10;
+ repeated sint32 PointTemp = 11;
+ }
+ optional group WeightControl= 10 { // Данные о весовом контроле
+ repeated float AxelWeight = 1;
+ repeated float AxelLimit = 2;
+ optional float TotalWeight = 3;
+ optional float TotalWeightLimit = 4;
+ }
+ }
+
+ optional group ICONDt = 10 { // данные ICON
+ optional bytes VehicleStatus = 1; //[24] строка статуса ТС. Сейчас от ICON передаётся 20 символов+NULL. [Hex2ASCII]
+ optional uint32 VehicleStatusID = 2; //[1] ID статуса ТС. [Hex2Dec]
+ optional uint32 VehicleStatusGroupID = 3; //[1] ID группы статусов ТС. Резерв. [Hex2Dec]
+ optional uint64 MsgID = 4; //[8] UID сообщения
+ optional uint32 MsgStatus = 5; //[4] флаг статуса сообщения, см CMDPBF.proto
+ optional uint32 StatDate = 6; //[4] Время/дата изменения статуса сообщения (в OmnicommTime)
+ optional bytes VehicleStatusPrev = 7; //[24] строка предыдущего статуса ТС. Сейчас от ICON передаётся 20 символов+NULL. [Hex2ASCII]
+ optional uint32 VehicleStatusFlags = 8; // флаг активности текущего статуса ТС (0x1 - активен, 0x0 - завершен)
+ }
+ optional group OBDDt_J1979 = 11 { // Данные шины CAN (протокол J1979)
+ // в формулах расчёта значений OBD используются обозначения A, B, C, D
+ // uint32 data = [D | C | B | A], где А - младший байт, D - старший байт
+ optional uint32 SID_0x01_PID_0x0D = 1;// Скорость ТС = A (km/h) - Vehicle Speed Sensor
+ optional uint32 SID_0x01_PID_0x31 = 2;// Пробег после сброса ошибок = (256 * A + B), (km) - Distance travelled since DTCs cleared
+ optional uint32 SID_0x01_PID_0x4E = 3;// Время работы двинателя после сброса ошибок = (A*256)+B (минуты) - Engine Run Time since diagnostic trouble codes cleare
+ optional uint32 SID_0x01_PID_0x42 = 4;// Напряжение борта, В = ((A*256) + B)/1000 (В) - Control module voltage
+ optional uint32 SID_0x01_PID_0x0C = 5;// Обороты = (256 * A + B) / 4 (rpm) - Engine RPM
+ optional uint32 SID_0x01_PID_0x2F = 6;// Объема топлива = (100 * A / 255) (%) - Fuel Level Input
+ optional uint32 SID_0x01_PID_0x5E = 7;// Среднее значение мгновенного расхода = (256 * A + B) *0,05 (L/h) - Engine Fuel Rate
+ // Терминал получает несколько значений мгновенного расхода по OBD, рассчитывает и отправляет среднее
+ optional uint32 SID_0x01_PID_0x5C = 8;// Температура масла = (A - 40) (°C)- Engine Oil Temperature
+ optional uint32 SID_0x01_PID_0x05 = 9;// Температура ОЖ = (A - 40) (°C) - Engine Coolant Temperature
+ optional uint32 SID_0x01_PID_0x01 = 10;// Статус неисправности Check Engine - Monitor status since DTCs cleared
+ /* Malfunction Indicator Lamp (MIL) Status:
+ Если A/бит 7 = 0, то ошибки нет
+ Если A/бит 7 = 1, то ошибка есть
+ */
+ optional bytes SID_0x09_PID_0x02 = 11;// [18] VIN ТС = ASCII null-terminated string. Идут значащие символы, потом нулевой байт. Если перый байт нулувой, то строка пустая.
+ optional uint32 SID_0x01_PID_0x5E_quantity = 12; // Кол-во успешно полученных ответов при расчёте среднего значения мгновенного расхода (optional uint32 SID_0x01_PID_0x5E = 7)
+ }
+ optional group LOG = 16 {
+ repeated string Debug = 1; //[1024] Отладочный лог
+ optional uint32 LLSRefNum= 2; // признак наличия подключенных датчиков REF к терминалу – битовая маска. бит 0 соответсвует подключенному 1-ому датчику и т.д.
+ repeated uint32 LLSRefLevelBef= 3 [packed=true];
+ repeated uint32 LLSRefLevelAfter= 4 [packed=true];
+ repeated uint32 LLSRefKoef= 5 [packed=true];
+ repeated uint32 LLSRefSens= 6 [packed=true];
+ repeated uint32 LLSRefTemp= 7 [packed=true];
+ }
+} \ No newline at end of file