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 (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_session_iterator
previous_occupancy_status_duration_min"]},
  "
previous_occupancy_status_duration_min": {parsed["previous_occupancy_status_duration_min"]}, "voltage
voltage_V": {parsed["voltage_V"]}
}
  • message_type - message type;

  • message_trace_id - system message-id;

  • occupied - parking occupancy status ("occupied" or "free");

parking
  • previous_status_

session
  • duration_

iterator
  • min -

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
    • duration of previous sensor status;

    • voltage_V - device’s voltage

    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},
          "longitude": 
    }
    • 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},
          "group_inner_id": {group_inner_id},
          "group":{
              "id": {group_id},
              "
    network_id
    name": "{
    network
    group_
    id
    name}",
              "
    custom
    zone_id": 
    "
    {
    custom
    zone_id}
    ",
    
         
    "latitude":
     
    {latitude
    }
    ,
    
      
    },
      "
    longitude
    message_type": 
    {longitude},
    "user_registration",
      "
    group_inner_id
    occupied": 
    {group_inner_id}, "group":{
    "{"occupied" if parsed["occupation_status"] is True else "free"}",
      "
    id
    voltage_V": {
    group_id
    parsed["voltage_V"]},
      "auth_ble_tag": {
        
    "
    name
    tag_id": "{
    group_name
    parsed["user_ID"]}",
    
        
    "
    zone
    event_
    id
    time": "{
    zone
    message_
    id}
    time}"
      }
    
    }
    , "
    • message_

    type": "heartbeat", "parking_session_iterator": {parsed["
    • type - message type;

    • message_trace_id - system message-id;

    • 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":[
    • - 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"
        }
    }