Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

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
languagejson
{
  "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_iterator
previous_occupancy_status_duration_min": {parsed["
parking
previous_occupancy_
session_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)
  • ;

  • previous_status_duration_min - duration of previous sensor status;

  • voltage_V - device’s voltage

User Registration

code
Code Block
languagejson
{
  "device_id": "
{device_id}
10000",
  "position":{
      "network_id": "
{network_id}
908db095-e113-4248-998b-694c33850bbe",
      "custom_id": "
{custom_id}
B03",
      "latitude": 
{latitude}
1.01,
      "longitude": 
{longitude}
-3.732,
      "group_inner_id": 
{group_inner_id}
1,
      "group":{
          "id": 
{group_id}
1,
          "name": "
{group_name}
Group Name",
          "zone_id": 
{zone_id}
1
      }
  },
  "message_type": "
user
status_
registration
change",
  "occupied": 
"{
"occupied",
if
  
parsed[
"
occupation
previous_occupancy_status_duration_min"
]
: 
is
15,
True
 
else
 "
free"}",
voltage_V": 3.1
}

User Registration

Code Block
languagejson
{
  "
voltage
device_
V
id": "{
parsed["voltage_V"]}
device_id}",
  "
auth_ble_tag
position":{
 
{
     "
tag
network_id": "{
parsed["user_ID"]
network_id}",
      "
event
custom_
time
id": "{
message
custom_
time
id}",
      "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

    • tag_id - an ID of Bluetooth tag which was used for authorization;

    • event_time - message reception time.

Heartbeat

Code Block
languagejson
{ "device_id": "{device_id}", "position":{
,
      "longitude": {longitude},
      "group_inner_id": {group_inner_id},
      "group":{
          "id": {group_id},
          "name": "{group_name}",
          "
network
zone_id": 
"
{
network
zone_id}
",

      }
  },
  "
custom
message_
id
type": "
{custom
user_
id}
registration",
  
"
latitude
occupied": 
{latitude}, "longitude": {longitude}, "group_inner_id": {group_inner_id
"{"occupied" if parsed["occupation_status"] is True else "free"}",
  "voltage_V": {parsed["voltage_V"]},
  
"group
"auth_ble_tag": {

    "tag_id": "{
group_id},
parsed["user_ID"]}",
    
"name
"event_time": "{
group
message_
name
time}"
,

  
"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 Availability

RabbitMQ version

Code Block
languagejson
{ "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

    • tag_id - an ID of Bluetooth tag which was used for authorization;

    • event_time - message reception time.

Code Block
languagejson
{
  "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
languagejson
{
  "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
languagejson
{
  "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 Availability

RabbitMQ version

Code Block
languagejson
{
   "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": 
1
2,
            "network_id":"00000000-0000-0000-0000-
000000000001
000000000002",
            "custom_id": "Custom ID 
1
2",
            "group_inner_id": 
1
2,
            "lat": 52.
406063006389
406022747069,
            "lon": -1.
5157277658969
5157359155385
         },
         "occupation_status":"occupied"
      },
      {
         "position":{
            "id": 
2
3,
            "network_id":"00000000-0000-0000-0000-
000000000002
000000000003",
            "custom_id": "Custom ID 
2
3",
            "group_inner_id": 
2
3,
            "lat": 52.
406022747069
406101689254,
            "lon": -1.
5157359155385
515721405201
         },
         "occupation_status":
"occupied
"n/a"
      }
,

   ],
   "summary":{
      "total": 3,
 
"position":{
     "occupied": 2,
      "
id
available": 
3
0,
      "undefined": 1
   }
"network_id":"00000000-0000-0000-0000-000000000003", "custom_id": "Custom ID 3",
}

Parking Session

RabbitMQ version

Code Block
languagejson
{
   "parking_session_uuid": "d8f7d4b3-a26c-4921-a488-489de273bcf6",
   "involved_devices":[
      {
         "
group_inner
device_id":
3,
 
"lat": 52.406101689254,
"100AA",
         "
lon
hardware_type":
-1.515721405201
 "Sparkit Surface V3.9",
         "position":{
 
},
           "
occupation
network_
status
id":"
n/a"
00000000-0000-0000-0000-0000000100aa",
      
}
    
],
  
"
summary
custom_id":
{
 null,
     
"total": 3,
       "
occupied
latitude": 
2
52.40602,

    
"available":
 
0,
       "
undefined
longitude": -1
.5157359,
  
}
 
}

Parking Session

RabbitMQ version

Code Block
languagejson
{
    
"parking_session_uuid":
 
"d8f7d4b3-a26c-4921-a488-489de273bcf6",
    "
involved_devices
group":
[
{
     
{
          "
device_
id": 
"100AA",
1,
               "
hardware_
type": 
"Sparkit Surface V3.9",
"marked_spaces",
               "
position
name":
{
 "Group Name 1",
               "
network
custom_id":
"00000000-0000-0000-0000-0000000100aa",
 "Group Custom ID",
               "
custom
zone_id": 
null
1,
               "
latitude
level_id": 
52.40602
null,
               "
longitude
floor_number": 
-1.5157359,
null,
               "
group
zone":{
                  "id": 1,
                 
"type":
 "
marked
project_
spaces",
id": 1
      
"name":
 
"Group
 
Name
 
1",
      }
         
"custom_id":
 
"Group
 
Custom
 
ID"
},
            
"zone
"group_inner_id":1
   
1,
      }
      }
  
"level_id": null
 ],
   "correction_counter": 0,
   "session_start":{
      "
floor
event_
number": null
time":"2021-01-01T00:00:00.000000+00:00",
      
"delta_time_sec": 0,
      "
zone
message_trace_ids":
{
[
         
"id": 1,
"d8cd1146-21f7-3906-21e4-8f55534f6573"
      ]
   },
  "partial_end":{
        "
project
event_
id
time": 
1
"string" // timestamptz, 
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_inner
network_id":
1
 "string", // unexpectedly released position
    
}
    
} ],
"custom_id": "string"
   
"correction_counter": 0
 },
   "session_
start
end": {
      "event_time": "2021-01-
01T00
01T01:00:00.000000+00:00",
      "delta_time_sec": 0,
      "message_trace_ids": [
          "
d8cd1146
71bfb22e-
21f7
3569-
3906
d7c1-
21e4
26fd-
8f55534f6573
a2a0d0febb7a"
      ],
    },
    "
session
auth_ble_
end
tag": {
        "
event_time": "2021-01-01T01:00:00.000000+00:00",
tag_id": "string",
        "
delta
event_time
_sec
":
0,
 "string"
    },
    "
message
auth_
trace_ids
mobile": 
[
{
        
"71bfb22e-3569-d7c1-26fd-a2a0d0febb7a"
"session_id": "string",
        
],
"event_time": "string"
    }
}