1

Wialon Combine

Тема: Wialon Combine

Бинарный протокол Wialon Combine.

Представляем вашему вниманию бинарный протокол Wialon Combine.

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

  • Работа по UDP
  • Работа по TCP
  • Возможность передачи произвольных параметров
  • Возможность передачи файлов
  • Возможность передачи фотографий

Ознакомиться с протоколом можно: здесь

Протокол находится в стадии тестирования. Текущая версия: 1.0.4

В перспективе:

  • Будет добавлен эмулятор протокола.
  • Отправка команд на устройство.


Если у вас есть пожелания, вы хотите что-то добавить или наоборот убрать, пишите в этой теме.
Best regards,
Evgeny Shatilo
Gurtam HW Development Team Lead
2

Wialon Combine

Re: Wialon Combine

Пока в протоколе не предусмотрена возможность передачи сообщений от сервера к прибору. Будет что то меняться в этом направлении или останется только односторонний обмен?

3

Wialon Combine

Re: Wialon Combine

Обязательно будет. Возможно у вас уже есть предпочтения по формату команд?

Best regards,
Evgeny Shatilo
Gurtam HW Development Team Lead
4

Wialon Combine

Re: Wialon Combine

По сути нужен контейнер произвольного размера, В IPS, аналог сообщения для водителя. Дальше разбор на уровне железа. Для отдельных форматов слишком много вариантов  сообщений. Это и настройки оборудования и передача настроек, управляющих команд, и сообщений внешним устройствам... и много чего еще не придумали но кому нибудь очень нужно smile

5

Wialon Combine

Re: Wialon Combine

Внесены поправки и доработки в протокол:
-Изменен формат ответа на сообщения
-Добавлены команды

Виталий Дмитренко
Gurtam
6

Wialon Combine

Re: Wialon Combine

Правильно ли я понимаю из формата протокола, что все подпакеты для пакета дата равноправны и могут содержаться в любой комбинации? Как сервер будет поступать с данными без подпакета gps к какому времени и координатам привязывать значения датчиков?

7

Wialon Combine

Re: Wialon Combine

BITREK пишет:

Правильно ли я понимаю из формата протокола, что все подпакеты для пакета дата равноправны и могут содержаться в любой комбинации? Как сервер будет поступать с данными без подпакета gps к какому времени и координатам привязывать значения датчиков?

Верно, все подпакеты для пакета Data равноправны и могут содержаться в любой комбинации.
Время в пакете Data - это обязательное поле, которое является общим для всех подпакетов.
Сервер привязывает значение датчиков ко времени, а не к координатам. Передавать подпакет GPS не обязательно, так же как и другие подпакеты.

8

Wialon Combine

Re: Wialon Combine

beal пишет:

Время в пакете Data - это обязательное поле, которое является общим для всех подпакетов.
Сервер привязывает значение датчиков ко времени, а не к координатам.

На сколько понимаю, у Вас в протоколе время является уникальным идентификатором события?
И в протоколе не указано как время из 4 байт вычислять, видимо точность регистрации событий 1 сек, считая от ???, но не суть.

Думаю что это не самая лучшая идея, учитывая тот факт, что часы в терминалах имеют свойство иногда сбиваться, скачкообразно подстраиваться по внешним источникам, что усложнит последующую обработку событий.

9

Wialon Combine

Re: Wialon Combine

terminator пишет:
beal пишет:

Время в пакете Data - это обязательное поле, которое является общим для всех подпакетов.
Сервер привязывает значение датчиков ко времени, а не к координатам.

На сколько понимаю, у Вас в протоколе время является уникальным идентификатором события?
И в протоколе не указано как время из 4 байт вычислять, видимо точность регистрации событий 1 сек, считая от ???, но не суть.

Думаю что это не самая лучшая идея, учитывая тот факт, что часы в терминалах имеют свойство иногда сбиваться, скачкообразно подстраиваться по внешним источникам, что усложнит последующую обработку событий.

В Виалоне время не совсем является уникальным идентификатором события. Если на сервер придёт сообщение с другими координатами но, с тем же временем, оно будет зарегистрировано. Проще говоря, если хотя бы один параметр отличается от предыдущего сообщения с таким же временем, то оно будет зарегистрировано. То есть, прибору ничего не мешает отправлять несколько сообщений в секунду.
Минимальный шаг событий 1 секунда, всё верно. Формат времени UTC, следовательно отсчёт с 01.01.1970. (этот момент будет добавлен в протокол).

Best regards,
Evgeny Shatilo
Gurtam HW Development Team Lead
10

Wialon Combine

Re: Wialon Combine

shev пишет:

В Виалоне время не совсем является уникальным идентификатором события. Если на сервер придёт сообщение с другими координатами но, с тем же временем, оно будет зарегистрировано. Проще говоря, если хотя бы один параметр отличается от предыдущего сообщения с таким же временем, то оно будет зарегистрировано. То есть, прибору ничего не мешает отправлять несколько сообщений в секунду.
Минимальный шаг событий 1 секунда, всё верно. Формат времени UTC, следовательно отсчёт с 01.01.1970. (этот момент будет добавлен в протокол).

Давайте рассмотрим две реальные ситуации, одна из них совсем жизненная.

1.

shev пишет:

Если на сервер придёт сообщение с другими координатами но, с тем же временем, оно будет зарегистрировано.

Вот терминал зарегистрировал три точки с координатами, мы хотим отобразить клиенту трек не из точек, а из  линий, как нам связать эти три точки на плоскости карты? Выборка из базы может произойти не в хронологическом порядке.
Хотя с этим можно бороться, регистрируя на сервере уникальный последовательный идентификатор события, раз этого нет в протоколе.

2.

shev пишет:

То есть, прибору ничего не мешает отправлять несколько сообщений в секунду.

работает терминал, выключили у него питание, села батарейка часов, часы сбились, после включения время ушло в далёкое или не очень прошлое. Что будет с такими данными? две разные точки в одно и то же время, как будет строиться такой трек? что увидит пользователь?
Имея же уникальный, нарастающий идентификатор, у пользователя будет возможность восстановить порядок событий, даже не имея точного времени.

11

Wialon Combine

Re: Wialon Combine

terminator пишет:
shev пишет:

В Виалоне время не совсем является уникальным идентификатором события. Если на сервер придёт сообщение с другими координатами но, с тем же временем, оно будет зарегистрировано. Проще говоря, если хотя бы один параметр отличается от предыдущего сообщения с таким же временем, то оно будет зарегистрировано. То есть, прибору ничего не мешает отправлять несколько сообщений в секунду.
Минимальный шаг событий 1 секунда, всё верно. Формат времени UTC, следовательно отсчёт с 01.01.1970. (этот момент будет добавлен в протокол).

Давайте рассмотрим две реальные ситуации, одна из них совсем жизненная.

1.

shev пишет:

Если на сервер придёт сообщение с другими координатами но, с тем же временем, оно будет зарегистрировано.

Вот терминал зарегистрировал три точки с координатами, мы хотим отобразить клиенту трек не из точек, а из  линий, как нам связать эти три точки на плоскости карты? Выборка из базы может произойти не в хронологическом порядке.
Хотя с этим можно бороться, регистрируя на сервере уникальный последовательный идентификатор события, раз этого нет в протоколе.

2.

shev пишет:

То есть, прибору ничего не мешает отправлять несколько сообщений в секунду.

работает терминал, выключили у него питание, села батарейка часов, часы сбились, после включения время ушло в далёкое или не очень прошлое. Что будет с такими данными? две разные точки в одно и то же время, как будет строиться такой трек? что увидит пользователь?
Имея же уникальный, нарастающий идентификатор, у пользователя будет возможность восстановить порядок событий, даже не имея точного времени.

Уважаемый, terminator.

Описанная вами ситуация действительно может иметь место.

Единственно верный способ, который позволит построить все сообщения в хронологическом порядке, это если устройство будет хранить номер уникального сообщения у себя в памяти. Соответственно после перезагрузки трекера, либо отключения батареи этот порядок сообщений не должен сбиваться. На уровне протокола, возможность передачи порядкового номера сообщения уже реализована: Seq — Порядковый номер (циклический 0 — 65535). Зарегистрировать этот параметр на Виалоне не составит труда, вопрос лишь в устройстве.

Любой другой способ нумерации сообщений не будет успешен.

Если устройство будет считать порядковый номер сообщения в рамках сессии, в этом случае мы не застрахованы от перезагрузки устройства. А если считать сообщения только усилиями сервера, то эти данные вообще не будут иметь никакого смысла, т.к неизвестно в каком порядке действительно трекер отправил сообщение.

Best regards,
Evgeny Shatilo
Gurtam HW Development Team Lead
12

Wialon Combine

Re: Wialon Combine

Новый протокол бинарный уже поддерживается в предыдущих сборках локальных? С чем связан вопрос - устройство для работы с Wialon, сейчас занимаемся ним, можно ли в устройстве реализовывать один бинарный протокол? Ну, чтобы завтра устройство вышло на связь на сборку например 1401 Pro?

1-wire, RS485 RFID считыватели, идентификация прицепов и водительского персонала. Разработка и производство.
www.montel-rek.com
Документация и ПО считывателей MR-91T
МОНТЕЛ-РЕК Google + , подписываемся Twitter https://twitter.com/Montel_rek_Ltd
13

Wialon Combine

Re: Wialon Combine

Fagot73
Протокол у нас реализован и готов к использованию. Но т.к. реальных устройств до сих пор  никто  еще не  изготовил, полная проверка не проведена, и, следовательно, его нет в списке устройств в Wialon.
Если Вы хотите внедрить протокол в свое устройство,  для тестирования в процессе разработки мы сообщим доступ в специальную учетку.
При появлении  готовых  устройств  -- оборудование сразу станет доступным на хостинг/локал.
Технически на Wialon PRO 1401 новый протокол также может быть доступен. Но т.к. Wialon PRO больше не поддерживается, об условиях предоставления скрипта Вам необходимо связаться с отделом продаж Gurtam (или своим дилером решений Wialon).

Viktor Yarovenko
Business Analyst
Wialon
14

Wialon Combine

Re: Wialon Combine

yavi
only IPS v2.0 )
спасибо.

1-wire, RS485 RFID считыватели, идентификация прицепов и водительского персонала. Разработка и производство.
www.montel-rek.com
Документация и ПО считывателей MR-91T
МОНТЕЛ-РЕК Google + , подписываемся Twitter https://twitter.com/Montel_rek_Ltd
15

Wialon Combine

(06/04/2016 17:06:40 отредактировано was71)

Re: Wialon Combine

Возможно ли подключиться к какому то тестовому серверу  Wialon - протестировать протокол ?. Какой тип устройства для данного протокола?

16

Wialon Combine

Re: Wialon Combine

Описание протокола по ссылке не доступно - https://docs.gurtam.net/index.php/s/MYUbNnL497vg0m1

17

Wialon Combine

Re: Wialon Combine

Изменили ссылку в шапке на http://gurtam.com/files/Wialon_Combine_v1.0.3.pdf

Viktor Yarovenko
Business Analyst
Wialon
18

Wialon Combine

Re: Wialon Combine

Хочу в свое устройство добавить бинарный протокол для Wialon. Куда можно подключиться для тестов?
Текстовый протокол пытался отлаживать на orange - получалось.

19

Wialon Combine

Re: Wialon Combine

alex2103 пишет:

Хочу в свое устройство добавить бинарный протокол для Wialon. Куда можно подключиться для тестов?
Текстовый протокол пытался отлаживать на orange - получалось.

Бинарный протокол интегрирован как Wialon IPS. Новый протокол можно так же тестировать на orange. По любым возникающим в процессе вопросам обращайтесь на hw@gurtam.com.

Вы так же можете направить данные на наш тестовый сервер, с которого мы имеем возможность предоставить исходные данные и оказать помощь в интеграции. Для этого нужно отправить запрос на указанный выше адрес.

Виталий Дмитренко
Gurtam
20

Wialon Combine

Re: Wialon Combine

Здравствуйте, коллеги. В процессе просмотра спецификации на протокол, появился вопрос по расширяемым полям. Указано, что поля могут расширяться с 1 до 2х байт и с 2х до 4х. При этом, указателем на необходимость дочитать нужное количество данных, является старший бит. Но старший бит уже будет выставлен для значений байта, больших 127. В таком случае, как выравнивать биты для значений, не требующих установленного старшего бита?
Возьмем для примера поле Type (расширяемое, 1 - 2 байта).  Допустим мне необходимо записать в него значение 256 (0x100). Как будет выглядеть правильно выравненное значение в бинарном представлении?

21

Wialon Combine

Re: Wialon Combine

armit пишет:

Здравствуйте, коллеги. В процессе просмотра спецификации на протокол, появился вопрос по расширяемым полям. Указано, что поля могут расширяться с 1 до 2х байт и с 2х до 4х. При этом, указателем на необходимость дочитать нужное количество данных, является старший бит. Но старший бит уже будет выставлен для значений байта, больших 127. В таком случае, как выравнивать биты для значений, не требующих установленного старшего бита?
Возьмем для примера поле Type (расширяемое, 1 - 2 байта).  Допустим мне необходимо записать в него значение 256 (0x100). Как будет выглядеть правильно выравненное значение в бинарном представлении?

Добрый день.
Для значений более 127, необходимо использовать 2 байта.
Для Вашего примера необходимо передавать 33024 (0x8100). Мы, в свою очередь, определяем по первому (старшему) байту из потока наличие дополнительного байта. Этот дополнительный байт будет младшим для двухбайтового числа.

Данные необходимо передавать в Big-Endian.

22

Wialon Combine

Re: Wialon Combine

Как правильно передать на сервер накопившиеся данные при отсутствии связи?
Если передавать по одному пакету и ожидать подтверждение его регистрации, то все работает, но получается достаточно долго т.к. по GPRS пакет из 50 байт идет столько же времени что и 500 байт.
Если в одном TCP пакете отослать пачку сообщений, то сервер подтверждает только первое из них. Если отослать еще одну пачку, то подтверждает второе сообщение из первой пачки и т.д.

23

Wialon Combine

Re: Wialon Combine

alex2103 пишет:

Как правильно передать на сервер накопившиеся данные при отсутствии связи?
Если передавать по одному пакету и ожидать подтверждение его регистрации, то все работает, но получается достаточно долго т.к. по GPRS пакет из 50 байт идет столько же времени что и 500 байт.
Если в одном TCP пакете отослать пачку сообщений, то сервер подтверждает только первое из них. Если отослать еще одну пачку, то подтверждает второе сообщение из первой пачки и т.д.

Вы можете передавать несколько сообщений в одном пакете с данными (тип Data). Например:
head type seq len data crc16, где в data может быть несколько сообщений со своими временами и подзаписями.

24

Wialon Combine

(07/03/2018 14:13:30 отредактировано alex2103)

Re: Wialon Combine

Обычная регулярная передача выглядит так:
head type seq len data crc16 , где в data в минимальном варианте есть время и подзапись POSITION_DATA
seq - инкрементируется при создании каждого нового сообщения. Seq уникальна и сохраняется между сессиями и/или выключениями питания.
Т.е. внутри устройства (да и сервера думаю тоже) уникальный ключ это seq + time.
Если передавать пачку сообщений, то получается последовательность:
head type seq len data_1 data_2 data_3 data_n crc16
Получается к одному seq привязана уже кучка сообщений что противоречит самой задумке уникальной seq.
Или я неправильно понял и надо так:
head type seq_1 len_1 data_1 seq_2 len_2 data_2 seq_n len_n data_n crc16

Я передавал так:
head type seq len data crc16 head type seq1 len1 data1 crc16 head type seq2 len2 data2 crc16

25

Wialon Combine

Re: Wialon Combine

alex2103 пишет:

Обычная регулярная передача выглядит так:
head type seq len data crc16 , где в data в минимальном варианте есть время и подзапись POSITION_DATA
seq - инкрементируется при создании каждого нового сообщения. Seq уникальна и сохраняется между сессиями и/или выключениями питания.
Т.е. внутри устройства (да и сервера думаю тоже) уникальный ключ это seq + time.
Если передавать пачку сообщений, то получается последовательность:
head type seq len data_1 data_2 data_3 data_n crc16
Получается к одному seq привязана уже кучка сообщений что противоречит самой задумке уникальной seq.
Или я неправильно понял и надо так:
head type seq_1 len_1 data_1 seq_2 len_2 data_2 seq_n len_n data_n crc16

Я передавал так:
head type seq len data crc16 head type seq1 len1 data1 crc16 head type seq2 len2 data2 crc16

Ваш вариант тоже должен работать.
Судя по тому, что Вы сказали:

alex2103 пишет:

Если в одном TCP пакете отослать пачку сообщений, то сервер подтверждает только первое из них. Если отослать еще одну пачку, то подтверждает второе сообщение из первой пачки и т.д.

Вы вычитываете из буфера не всю информацию после первой пачки сообщений, а лишь один ответ. После второй пачки - вычитываете второй ответ, остальные в это время накапливаются в буфере.

По протоколу Виалон отвечает на каждый пакет.