ПРЕДВАРИТЕЛЬНО
Сообщения передают события, происходящие в системе, на сервер. Сервер подтверждает получение сообщений. В настоящее время подтверждение по LoRa не реализовано, сообщение считается отправленным, если получен confirm на uplink с данными.
При отсутствии подтверждения события копятся в буфере и попытки отправки повторяются периодически. События из буфера отправляются, начиная со старейшего. Если буфер переполняется, новые события вытесняют старые. События имеют циклический порядковый номер (параметр SEQ uint16_t), что позволяет обнаруживать потерю событий.
. События передаются по мере возникновения, при невозможности отправки копятся в ограниченном FIFO буфере. Размер буфера зависит от версии программы (и транспорта).
Сообщение может передаваться:
- CAS360, CAS1/2: через LoRa инфраструктуру
- CAS360, CAS1/2: по IP-сети (WiFi, LAN) на заданный в конфигурации CoAP-сервер.
- C
AS360: по IP-сети (LTE) на заданные в конфигурации HTTPS-сервер и его контекст. Upload Upload бинарных данных с типом .Метод POST, ресурс <в настройках CAS360>, Content-Type: application/cbor
Сообщение в HTTP body
Подтверждение получения – HTTP response 2xx
Отправка через
...
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 CAS_ID | 1 2 | uint32 uint32 | Unique (hopefully) identifier of sending CAS360 system, generated automatically (linked to tablet PC hardware) Looks like arbitrary number (advised is HEX representation to user – to match CAS360 software UI and logs) 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 | ||||
| SEQ1 | -2 | uint16 | Циклический сквозной порядковый номер события, для обнаружения потерь | TIME | 2 | uint32 | Время события, секунды с UNIX epoch. |
| KIND3 | -1 | int | Род события: 0-SYS, 1-CAS, ... | ||||
| EVENT | 40 | 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)
EVENTName | Value | Description |
|---|---|---|
| ZoneRed | 10 | Вход в Красную зону |
| ZoneYellow | 21 | Вход в Желтую зону |
| ZoneGreen | 32 | Вход в Зеленую зону |
| ZoneOut | 43 | Выход (пропадание метки из эфира) |
| ZonePark | 54 | Парковка метки (прекращение обнаружения) |
...
| ZoneUndef | 5 | Зона не определилась |
Дополнительные поля событий CAS. Множественные Key это альтернативы, придет какой-то один.
Name | Key | Value Type | Description |
|---|---|---|---|
EUI SERIAL CAS_IDCASID | 1 2 3 4 | uint64 uint32 uint32 <TBD> | Идентификатор метки. (uint64)=EUI64 (для меток не-ULUN) серийный номер (для меток ULUN, пересчитывать в EUI64) CAS_ID для систем CAS360 (при сближении с другой системой CAS360) reserved Основным идентификатором меток (по IEEE 802.12.4) является EUI64. В метках ULUN EUI64 однозначно связан с серийным номером. CAS_ID не связан с серийными номерами меток и анкеров; используется, потому что система CAS360 в целом не имеет одного меточного серийного номера. |
| DIST_CM | 45 | intint16 | Дистанция до метки, см |
| BEARER | 56 | int (enum) | Носитель метки: 0-Generic, 1-Person, 2-Vehicle, 3-Stationary Опционально, при отсутствии =Generic |
SECTOR_DEG SECTOR_256 | 7 86 | array_uint16[2] array_uint8[2] | Сектор [ dir angle ], градусы Сектор [ dir angle ], в 1/256 круга (1.40625 градуса) dir - центральное направление сектора, angle - размах сектора Отсчет, градусы [ from to ] , отсчет вправо от направления вперед транспортного средства . 0..359 градусов (на картинке экране CAS360 по часовой стрелке от направления вверх) Опционально, при отсутствии – сектор не определен (полный круг) |