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:

  • Occupancy events deduplicationAutomatic 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 occupancies

  • Automatic 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_
status_duration_min"
: {parsed["previous_occupancy_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 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 True else "free"}"
    : 15,
      "voltage_V":
    {parsed["voltage_V"]},
     3.1
    }

    User Registration

    Code Block
    languagejson
    {
      "
    auth_ble_tag": {
    device_id": "{device_id}",
      "position":{
          "
    tag
    network_id": "{
    parsed["user_ID"]
    network_id}",
          "
    event
    custom_
    time
    id": "{
    message
    custom_
    time
    id}",
        
    } }
    • 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":{
      "latitude": {latitude},
          "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},
    "{"occupied" if parsed["occupation_status"] is True else "free"}",
      "
    group
    voltage_
    inner_id
    V": {
    group_inner_id
    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", "
    • type - message type;

    • message_trace_id - system message-id;

    • 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":[ {
    • - 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": 2,
                "network_id":"00000000-0000-0000-0000-000000000002",
                "custom_id": "Custom ID 2",
                "group_inner_id": 2,
                "
    position
    lat":
    {
     52.406022747069,
                "
    id
    lon": 
    1,
    -1.5157359155385
             },
             "
    network
    occupation_
    id
    status":"
    00000000-0000-0000-0000-000000000001",
    occupied"
          
    "custom_id": "Custom ID 1",
    },
          {
             "
    group_inner_id
    position":{
    
    1,
                "
    lat
    id": 
    52.406063006389
    3,
                "
    lon
    network_id":
    -1.5157277658969
    "00000000-0000-0000-0000-000000000003",
      
    },
              "
    occupation
    custom_
    status
    id": "
    occupied"
    Custom ID 3",
           
    },
         "group_inner_id": 3,
    
    {
                "
    position
    lat":
    {
     52.406101689254,
                "
    id
    lon": 
    2,
    -1.515721405201
             },
             "
    network
    occupation_
    id
    status":"
    00000000-0000-0000-0000-000000000002",
    n/a"
          }
       ],
       "
    custom_id
    summary":{
    
    "Custom
     
    ID
     
    2",
        
    "total": 3,
          "
    group_inner_id
    occupied": 2,
          "available": 0,
          "
    lat
    undefined": 
    52.406022747069,
    1
       
    }
    }

    Parking Session

    RabbitMQ version

    Code Block
    languagejson
    {
       "
    lon
    parking_session_uuid": 
    -1.5157359155385
    "d8f7d4b3-a26c-4921-a488-489de273bcf6",
       "involved_devices":[
         
    },
     {
             "
    occupation
    device_
    status
    id": "
    occupied" },
    100AA",
      
    {
           
    "position
    "hardware_type":
    {
     "Sparkit Surface V3.9",
             "
    id
    position":
    3,
    {
                "network_id":"00000000-0000-0000-0000-
    000000000003
    0000000100aa",
                "custom_id": 
    "Custom ID 3"
    null,
                "
    group_inner_id
    latitude": 
    3
    52.40602,
                "
    lat
    longitude": 
    52
    -1.
    406101689254
    5157359,
                "
    lon
    group":
    -1.515721405201
    {
                   "id": 1,
         
    },
              "
    occupation_status
    type":
    "n/a"
     "marked_spaces",
           
    }
        
    ],
        "
    summary
    name":
    {
     "Group Name 1",
           
    "total":
     
    3,
           "
    occupied
    custom_id":
    2,
     "Group Custom ID",
           
    "available":
     
    0,
           "
    undefined
    zone_id": 1,
         
    }
     
    }

    Parking Session

    RabbitMQ version

    Code Block
    languagejson
    {
        
    "parking_session_uuid":
     
    "d8f7d4b3-a26c-4921-a488-489de273bcf6",
        "
    involved
    level_
    devices
    id":
    [
     null,
         
    {
              "
    device
    floor_
    id
    number": 
    "100AA"
    null,
    
            
    "hardware_type":
     
    "Sparkit
     
    Surface
     
    V3.9",
        "zone":{
         
    "position":{
                 "
    network_
    id":
    "00000000-0000-0000-0000-0000000100aa"
     1,
                
    "custom
          "project_id": 
    null,
    1
                
    "latitude":
     
    52.40602,
      }
              
    "longitude": -1.5157359
      },
                "group_inner_id":
    {
    1
             }
          }
      
    "id":
     
    1
    ],
       "correction_counter": 0,
       "session_start":{
          
    "type": "marked_spaces",
    "event_time":"2021-01-01T00:00:00.000000+00:00",
          
    "
    name
    delta_time_sec": 
    "Group Name 1"
    0,
          "message_trace_ids":[
            
    "custom_id": "Group Custom ID",
     "d8cd1146-21f7-3906-21e4-8f55534f6573"
          ]
       
    },
      "
    zone
    partial_
    id
    end":
    1,
    {
            
    "
    level
    event_
    id
    time": 
    null,
    "string" // timestamptz, yyyy-MM-dd'T'HH:mm:ss.SSSXXX (2019-06-13T16:16:51.000+00:00)
            "
    floor
    delta_time_
    number
    sec": 
    null
    "integer",
            
    "zone":{
    "message_trace_ids":["strings"],
            "network_id": 
    1
    "string", 
    // unexpectedly released position
            "
    project
    custom_id": 
    1
    "string"
        },
       "session_end": {
         
    }
     "event_time": "2021-01-01T01:00:00.000000+00:00",
          
    },
    "delta_time_sec": 0,
          "
    group
    message_
    inner
    trace_
    id
    ids":
    1
     [
            
    }
      
    "71bfb22e-3569-d7c1-26fd-a2a0d0febb7a"
       
    }
       
    ],
       
    "correction_counter": 0,
     },
        "
    session
    auth_ble_
    start
    tag": {
            "
    event
    tag_
    time":"2021-01-01T00:00:00.000000+00:00",
    id": "string",
            "
    delta
    event_time
    _sec
    ":
    0,
     "string"
        },
        "
    message
    auth_
    trace_ids
    mobile":
    [
     {
            "
    d8cd1146-21f7-3906-21e4-8f55534f6573"
    session_id": "string",
            
    ]
    "event_time": "string"
        }
    }