ПРЕДВАРИТЕЛЬНО
Сообщения передают события, происходящие в системе, на сервер. Сервер подтверждает получение сообщений. В настоящее время подтверждение по LoRa не реализовано, сообщение считается отправленным, если получен confirm на uplink с данными.
При отсутствии подтверждения события копятся в буфере и попытки отправки повторяются периодически. События из буфера отправляются, начиная со старейшего. Если буфер переполняется, новые события вытесняют старые. События имеют циклический порядковый номер (параметр SEQ uint16_t), что позволяет обнаруживать потерю событий.
. События передаются по мере возникновения, при невозможности отправки копятся в ограниченном FIFO буфере. Размер буфера зависит от версии программы (и транспорта).
Сообщение может передаваться:
- CAS360, CAS1/2: через LoRa инфраструктуру
- CAS360, CAS1/2: по IP-сети (WiFi, LAN) на заданный в конфигурации CoAP-сервер.
- C
AS360: по IP-сети (LTE) на заданные в конфигурации HTTPS-сервер и его контекст. Upload бинарных данных.Метод POST, ресурс <в настройках CAS360>, Content-Type: application/cbor
Сообщение в HTTP body
Подтверждение получения – HTTP response 2xx через LoRa инфраструктуру на заданный порт
Отправка через LoRa
На LoRa порт 11
Заголовок пакета такой же, как для сенсоров, далее сообщение (вместо блока сенсоров), см. Описание форматов пакетов
Подтверждение получения – не реализовано, подтверждением считается confirmation пакета с базы LoRa
Отправка через IP
По IP-сети (LTE, WiFi, LAN) на заданный в конфигурации CoAP-сервер.
Метод POST, ресурс /msg
Пример запроса: POST /msg
Content-Format:application/cbor
Сообщение в payload
Подтверждение получения – CoAP Response 2.xx
Структура сообщения
Структура сообщения – последовательность CBOR-элементов (CBOR-stream, rfc7049 section 3.1):
VERSION(int=-1), HEADER, EVENT, EVENT, ...
VERSION иденифицирует дальнейшую структуру, должен быть integer и равен -1. Иначе формат сообщения считать неизвестным.
...
Каждый HEADER и EVENT – CBOR map, то есть, набор полей key:value (key это int).
Могут приходить сообщения без EVENT, это keepalive – используются для проверки связи при отсутствии полезных данных.
События могут приходить повторно, если устройство не получило подтверждение получения из-за плохой связи.
Идентификаторы полей (key) выбираются обычно выбираем в диапазоне -24..23, чтобы занимали 1 байт в CBOR.
Элемент VERSION
Тип integer, значение определяет дальнейшее содержимое. Для нижеописанной структуры значение =-1. Чтобы отличать от сенсоров в случае чего.
Поля HEADER
Множественные Key это альтернативы, придет какой-то один.
| Name | Key | Value Type | Description |
|---|---|---|---|
CASID |
SERIAL | 1 2 | uint32 uint32 | Unique (hopefully) identifier of sending CAS360 system, generated automatically (linked to tablet PC hardware) Looks like arbitrary number |
Serial number of sending CAS1 reader | |||
| UPTIME | 3 | uint32 | optional Device Uptime at pack sending, seconds |
Поля EVENT
| Name | Key | Value Type | Description |
|---|---|---|---|
UPTIME TIME | -4 -3 | uint32 uint32 | Device Uptime of Event, seconds Время события, секунды с UNIX epoch, UTC+0 |
| SEQ |
| -2 | uint16 | Циклический сквозной порядковый номер события, для обнаружения потерь |
| KIND |
| -1 | int | Род события: 0-SYS, 1-CAS, ... |
| EVENT |
| 0 | int | Событие | |
| ... | дополнительные поля, специфичные для каждого события EVENT |
Дополнительные поля событий KIND=1 (CAS)
События CAS: (предварительно)
События SYS (KIND=0)
EVENT | Value | Description |
|---|---|---|
| Test | -123 | test event (CLI: msgtest N) |
| Reset | 0 |
Дополнительные поля события Test
Name | Key | Value Type | Description |
|---|---|---|---|
TESTCNT | -456 | uint | Счетчик тестовых событий |
События CAS (KIND=1)
EVENT |
|---|
Value | Description | |
|---|---|---|
| ZoneRed |
| 0 | Вход в Красную зону |
| ZoneYellow |
| 1 | Вход в Желтую зону |
| ZoneGreen |
| 2 | Вход в Зеленую зону |
| ZoneOut |
| 3 | Выход (пропадание метки из эфира) |
| ZonePark |
| 4 | Парковка метки (прекращение обнаружения) |
...
| ZoneUndef | 5 | Зона не определилась |
Дополнительные поля событий CAS. Множественные Key это альтернативы, придет какой-то один.
Name | Key | Value Type | Description |
|---|---|---|---|
EUI SERIAL |
CASID | 1 2 3 4 | uint64 uint32 uint32 <TBD> | Идентификатор метки. |
EUI64 (для меток не-ULUN) серийный номер (для меток ULUN, пересчитывать в EUI64) CAS_ID для систем CAS360 (при сближении с другой системой CAS360) reserved Основным идентификатором меток (по IEEE 802.12.4) является EUI64. В метках ULUN EUI64 однозначно связан с серийным номером. CAS_ID не связан с серийными номерами меток и анкеров; используется, потому что система CAS360 в целом не имеет одного меточного серийного номера. |
| DIST_CM |
| 5 |
| int16 | Дистанция до метки, см |
| BEARER |
| 6 | int (enum) | Носитель метки: 0-Generic, 1-Person, 2-Vehicle, 3-Stationary Опционально, при отсутствии =Generic |
SECTOR_DEG |
SECTOR_256 | 7 8 | array_uint16[2] array_uint8[2] | Сектор |
[ dir angle ], градусы Сектор [ dir angle ], в 1/256 круга (1.40625 градуса) dir - центральное направление сектора, angle - размах сектора Отсчет вправо от направления вперед транспортного средства |
(на |
экране CAS360 по часовой стрелке от направления вверх) Опционально, при отсутствии – сектор не определен (полный круг) |