...
Smart message types have a pre-defined template body that cannot be changed. These messages are the results of the Nwave Parking Analytics system. They support the following features:
Automatic parking session correction and parking session integrity in the event of message loss
Occupancy event deduplication in the event of two occupancies (unmarked bays only)
Filtering of extremely short parking sessions (open unmarked bays only)
Advanced handling of unmarked bay occupanciesAutomatic parking session correction in the event of message loss
Easy transition to RabbitMQ protocols (RTA & Parking Sessions) due to identical structure
Info |
---|
Smart message types are recommended for payment applications |
Category | Message Type | Description |
---|
Direct | Status Change | status change message is sent from a sensor when its value has been changed (occupancy state for parking sensor or number of detected cars for car counters |
Heartbeat | heartbeat message is sent after every constant time period of unchanging sensor state |
User Registration | user registration message is sent when a user is authorized on the sensor using a Bluetooth-tag |
Smart | Group Occupancy | status change message in a group format with group summary |
Parking Sessions | smart parking session messages formed by Nwave’s backend, with auto-correction for lost messages |
Preset Templates for Direct Message Types (Editable format)
These are template bodies of the template presets available at your console. You can create custom templates for each directmessage typeand the templates below can be used as a starting point.
Message Type | Template Body |
---|
Status Change | Code Block |
---|
| {
"device_id": "{device_id}",
"position":{
"network_id": "{network_id}",
"custom_id": "{custom_id}",
"latitude": {latitude},
"longitude": {longitude},
"group_inner_id": {group_inner_id},
"group":{
"id": {group_id},
"name": "{group_name}",
"zone_id": {zone_id}
}
},
"message_type": "status_change",
"occupied": "{"occupied" if parsed["occupation_status"] is True else "free"}",
" |
|
parking_session_iteratorprevious_occupancy_status_duration_min": {parsed[" |
|
parkingsession_iterator"]},
"previous_occupancy_status_duration_min": {parsed["previous_occupancy_status_duration_min"status_duration_min"]},
"voltage_V": {parsed["voltage_V"]}
} |
|
message_type - message type; message_trace_id - system message-id; occupied - parking occupancy status ("occupied" or "free"
|
);parking_session_iterator - short serial number of parking session. Iterator (number is incrementing when new parking session starts (0-7)User Registration | code Code Block |
---|
| {
"device_id": " |
|
{device_id}10000",
"position":{
"network_id": " |
|
{network_id}908db095-e113-4248-998b-694c33850bbe",
"custom_id": " |
|
{custom_id}{latitude}{longitude}-3.732,
"group_inner_id": |
|
{group_inner_id}{group_id}{group_name}{zone_id}userregistration"{ifparsed[occupationprevious_occupancy_status_duration_min" |
|
]isTrueelsefree"}",voltageVparsed["voltage_V"]}auth_ble_tag{tagparsed["user_ID"]eventtimemessagetimeid}",
"latitude": {latitude} |
|
}message_type - message type; message_trace_id - system message-id; parking_session_iterator - short serial number of parking session. Iterator (number) is incrementing when new parking session starts (0-7); occupied- parking occupancy status ("occupied" or "free"); voltage_V - device’s voltage; auth_ble_tag
|
Heartbeat | Code Block |
---|
|
{
"device_id": "{device_id}",
"position":{,
"longitude": {longitude},
"group_inner_id": {group_inner_id},
"group":{
"id": {group_id},
"name": "{group_name}",
" |
|
network"network",
customid{customid} latitude{latitude},
"longitude": {longitude},
"group_inner_id": {group_inner_id"{"occupied" if parsed["occupation_status"] is True else "free"}",
"voltage_V": {parsed["voltage_V"]},
|
|
"group
group_id},
"namegroupname, "zone_id": {zone_id}
}
},
"message_type": "heartbeat",
"parking_session_iterator": {parsed["parking_session_iterator"]},
"occupied": "{"occupied" if parsed["occupation_status"] is True else "free"}",
"heartbeat_message_counter": {parsed["heartbeat_message_counter"]},
"voltage_V": {parsed["voltage_V"]}
}message_type - message type; message_trace_id - system message-id; parking_session_iterator - short number of parking session. Iterator is incrementing when parking session starts (0-7); occupied - parking occupancy status ("occupied" or "free"); heartbeat_message_counter - the value increases for every following heartbeat during single occupancy state (0-11); voltage_V - device’s voltage
|
Preset Templates for Smart Message Types (Fixed format)
These are examples of HTTP request bodies produced by smart templates. They cannot be modified but you can use the example requests as reference.
Message Type | Example Request Body |
---|
Group AvailabilityRabbitMQ version | Code Block |
---|
|
{
"timestamp": "2021-01-01T00:00:00.000000+00:00",
"group_id": 1,
"project_id": 1,
"group_custom_id": "Group Custom ID",
"level_id": null,
"floor_number": null,
"positions_availability":[ |
message_type - message type; message_trace_id - system message-id; parking_session_iterator - short serial number of parking session. Iterator (number) is incrementing when new parking session starts (0-7); occupied- parking occupancy status ("occupied" or "free"); voltage_V - device’s voltage; auth_ble_tag
Code Block |
---|
| {
"device_id": "10000",
"position":{
"network_id": "908db095-e113-4248-998b-694c33850bbe",
"custom_id": "B03",
"latitude": 1.01,
"longitude": -3.732,
"group_inner_id": 1,
"group":{
"id": 1,
"name": "Group Name",
"zone_id": 1
}
},
"message_type": "user_registration",
"occupied": "occupied",
"voltage_V": 3.1,
"auth_ble_tag": {
"tag_id": "123ABC00",
"event_time": "2021-01-01T00:00:00.000000+00:00"
}
} |
|
Heartbeat | Code Block |
---|
| {
"device_id": "{device_id}",
"position":{
"network_id": "{network_id}",
"custom_id": "{custom_id}",
"latitude": {latitude},
"longitude": {longitude},
"group_inner_id": {group_inner_id},
"group":{
"id": {group_id},
"name": "{group_name}",
"zone_id": {zone_id}
}
},
"message_type": "heartbeat",
"occupied": "{"occupied" if parsed["occupation_status"] is True else "free"}",
"heartbeat_message_counter": {parsed["heartbeat_message_counter"]},
"voltage_V": {parsed["voltage_V"]}
} |
|
message_type - message type; message_trace_id - system message-id; occupied - parking occupancy status ("occupied" or "free"); heartbeat_message_counter - the value increases for every following heartbeat during single occupancy state (0-11); voltage_V - device’s voltage
Code Block |
---|
| {
"device_id": "10000",
"position":{
"network_id": "908db095-e113-4248-998b-694c33850bbe",
"custom_id": "B03",
"latitude": 1.01,
"longitude": -3.732,
"group_inner_id": 1,
"group":{
"id": 1,
"name": "Group Name",
"zone_id": 1
}
},
"message_type": "heartbeat",
"occupied": occupied",
"heartbeat_message_counter": 2,
"voltage_V": 3.1
} |
|
Preset Templates for Smart Message Types (Fixed format)
These are examples of HTTP request bodies produced by smart templates. They cannot be modified but you can use the example requests as reference.
Message Type | Example Request Body |
---|
Group AvailabilityRabbitMQ version | Code Block |
---|
| {
"timestamp": "2021-01-01T00:00:00.000000+00:00",
"group_id": 1,
"project_id": 1,
"group_custom_id": "Group Custom ID",
"level_id": null,
"floor_number": null,
"positions_availability":[
{
"position":{
"id": 1,
"network_id":"00000000-0000-0000-0000-000000000001",
"custom_id": "Custom ID 1",
"group_inner_id": 1,
"lat": 52.406063006389,
"lon": -1.5157277658969
},
"occupation_status":"occupied"
},
{
"position":{
"id": |
|
12,
"network_id":"00000000-0000-0000-0000- |
|
000000000001000000000002",
"custom_id": "Custom ID |
|
1140606300638951572776589695157359155385
},
"occupation_status":"occupied"
},
{
"position":{
"id": |
|
23,
"network_id":"00000000-0000-0000-0000- |
|
000000000002000000000003",
"custom_id": "Custom ID |
|
224060227470695157359155385515721405201
},
"occupation_status": |
|
"occupied,
],
"summary":{
"total": 3,
|
|
"position":{id3"network_id":"00000000-0000-0000-0000-000000000003",
"custom_id": "Custom ID 3",
|
Parking Session RabbitMQ version | Code Block |
---|
| {
"parking_session_uuid": "d8f7d4b3-a26c-4921-a488-489de273bcf6",
"involved_devices":[
{
" |
|
group_inner 3,
"lat": 52.406101689254,
lon -1.515721405201 "Sparkit Surface V3.9",
"position":{
|
|
},occupationstatusn/a"00000000-0000-0000-0000-0000000100aa",
|
|
}], summary{"total": 3,occupied2
"available":0,undefined
}}Parking Session RabbitMQ version | Code Block |
---|
|
{"parking_session_uuid":"d8f7d4b3-a26c-4921-a488-489de273bcf6",involved_devices[
{device_"100AA",hardware_"Sparkit Surface V3.9",position{network"00000000-0000-0000-0000-0000000100aa",customnulllatitude52.40602longitude-1.5157359,group"type":markedspaces",
"name":"GroupName1","custom_id":"GroupCustomID" "zone1,"level_id": null ],
"correction_counter": 0,
"session_start":{
" |
|
floornumber": nulltime":"2021-01-01T00:00:00.000000+00:00",
|
|
zone{ "id": 1,"d8cd1146-21f7-3906-21e4-8f55534f6573"
]
},
"partial_end":{
" |
|
projectid1 yyyy-MM-dd'T'HH:mm:ss.SSSXXX (2019-06-13T16:16:51.000+00:00)
|
|
}
"delta_time_sec": "integer",
|
|
},
"message_trace_ids":["strings"],
" |
|
group_inner1 "string", // unexpectedly released position
|
|
} }
],"correction_counter": 0startend": {
"event_time": "2021-01- |
|
01T0001T01:00:00.000000+00:00",
"delta_time_sec": 0,
"message_trace_ids": [
" |
|
d8cd114621f7390621e48f55534f6573sessionendevent_time": "2021-01-01T01:00:00.000000+00:00",delta_sec 0,messagetrace_ids[ "71bfb22e-3569-d7c1-26fd-a2a0d0febb7a"],"event_time": "string"
}
} |
|