ПРЕДВАРИТЕЛЬНО
Сообщения передают события, происходящие в системе, на сервер. Сервер подтверждает получение сообщений. В настоящее время подтверждение по LoRa не реализовано, сообщение считается отправленным, если устройство joined.
При отсутствии подтверждения события копятся в буфере и попытки отправки повторяются периодически. События из буфера отправляются, начиная со старейшего. Если буфер переполняется, новые события вытесняют старые. События имеют циклический порядковый номер (параметр SEQ uint16_t), что позволяет обнаруживать потерю событий.
Размер буфера зависит от версии программы (и транспорта).
Сообщение может передаваться:
- CAS360: по IP-сети (LTE) на заданные в конфигурации HTTPS-сервер и его контекст. Upload бинарных данных.
Метод POST, ресурс <в настройках CAS360>, Content-Type: application/cbor
Сообщение в HTTP body
Подтверждение получения – HTTP response 2xx - CAS360: через LoRa инфраструктуру на заданный порт (сервер ожидает данные на порту 11 )
Сообщение в payload
Подтверждение получения – не реализовано - CAS1/2: по IP-сети (WiFi, LAN) на заданный в конфигурации CoAP-сервер.
Метод 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 идентифицирует отправляющую систему CAS360 и несет общие параметры, EVENT несет информацию об одном событии.
Каждый 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 |
События 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 | Парковка метки (прекращение обнаружения) |
Дополнительные поля событий 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 по часовой стрелке от направления вверх) Опционально, при отсутствии – сектор не определен (полный круг) |