Download OpenAPI specification:Download
The ZeroKey Spatial Intelligence Platform (ZSIP) API is the main manner in which modules, applications, and tools interact with ZeroKey's Spatial Intelligence Platform. Through this API core functions of the underlying Quantum RTLS hardware are accessible, providing direct control of devices and system operation.
The Spatial Intelligence Platform relies on a SignalR based Event Hub system to relay real-time information from the Quantum RTLS hardware to ZSIP and then to connected modules and applications. End-users may establish a direct read-only SignalR connection to the Event Hub by requesting a connection ID through this API. Each connection to the Event Hub must specify a filter chain, which ultimately determines which messages transmitting through the Event Hub will be relayed to the client. Several pre-defined templates are available to handle a number of common use-cases.
LOCATION_FILTER_UPDATE
per device. It will collect the latest position for each device, then at the interval for the rate specified, will produce a LOCATION_FILTER_UPDATE
with the devices last known position. LOCATION_RAW_UPDATES
for all devices, then at the specified rate interval will output one LOCATION_BATCH_UPDATE
containing a list of LOCATION_RAW_UPDATE
messages.LOCATION_UPDATE
is deprecated. It is replaced with LOCATION_RAW_UPDATE
BATCH_LOCATION_UPDATE
is deprecated. It is replaced with LOCATION_BATCH_UPDATE
ASP.NET SignalR is a library for ASP.NET developers that simplifies the process of adding real-time web functionality to applications. This option offers the best solution for capturing and processing data as it happens. It enables you to access the most current and accurate information from our devices. This option can be beneficial for applications that need quick and reliable feedback, such as monitoring, analytics, or decision making.
Two authentication paradigms are available, OAuth2 (Client Credentials) and API keys. The OAuth method allows the greatest flexibility and security in allowing end-client applications to make API calls directly to the platform.
Three access paradigms are supported, with the first option being the preferred authentication flow:
auth_token
using its Client Credentials.The following sequence diagram illustrates the recommended approach (option 1):
This API uses OAuth 2 authentication flows with the client_credentials
grant_type
for accessing all operations.
See the Authentication section for more detailed process information.
clientCredentials
/auth/token
observer
- Grants read-only observer access (currently not available)
user
- Grants user-level access (currently not available)
admin
- Grants admin-level access
You need to find the Event Hub/API hosting IP address before starting the coding steps. There are two ways to do so:
QuantumRTLS
and the password is zerokeypilotkit
. The hosting IP address by default is 10.42.0.1
To establish a connection to the SignalR Event Hub endpoint, it is first required to obtain an EndpointID by using the Connection Management API operation. After the new Event Hub connection request has been created, we are ready to connect to the Event Hub. Follow these steps to create a project that can connect to the Event Hub:
.razor
file under "Pages" folder and name it "ConnectionTest.razor" 127.0.0.1
. Replace {YOUR USERNAME}} and {YOUR PASSWORD} with your own credential info.@using System.Text;
@using Microsoft.AspNetCore.SignalR.Client;
@using Newtonsoft.Json;
@page "/connectionTest"
<PageTitle>Connection Test</PageTitle>
<h1>Connection Test</h1>
@foreach (var item in m_receivedData)
{
<p>@item</p>
}
@code {
List<string> m_receivedData = new List<string>();
//Declaring some C# classes to store the results
private class AuthResponseData
{
public string access_token { get; set; }
public string token_type { get; set; }
public int expires_in { get; set; }
public string scope { get; set; }
public AuthResponseUserData User { get; set; }
}
private class AuthResponseUserData
{
public string auth_id { get; set; }
public string AccessLevel { get; set; }
}
private class ApiKeyData
{
public string ApiKey { get; set; }
}
private class ConnectionData
{
public string EndpointURI { get; set; }
public string EndpointID { get; set; }
public HubInfo HubInfo { get; set; }
}
private class HubInfo
{
public string HubName { get; set; }
public string HubTypeID { get; set; }
public string HubInstanceID { get; set; }
}
protected override async Task OnInitializedAsync()
{
await StartConnectionAsync();
}
public async Task StartConnectionAsync()
{
var httpClient = new HttpClient();
var authDataJson = "{\"grant_type\":\"client_credentials\",\"auth_id\":\"{YOUR USERNAME}\",\"auth_secret\":\"{YOUR PASSWORD}\"}";
// Request OAuth token
var oauthTokenResponse = await httpClient.PostAsync("http://{API Host Here}:5000/v3/auth/token", new StringContent(authDataJson, Encoding.UTF8, "application/json"));
var oauthTokenJson = await oauthTokenResponse.Content.ReadAsStringAsync();
var oauthToken = JsonConvert.DeserializeObject<AuthResponseData>(oauthTokenJson);
// Register API Key
httpClient.DefaultRequestHeaders.Add("Authorization", $"Bearer {oauthToken.access_token}");
var apiKeyResponse = await httpClient.PostAsync("http://{API Host Here}:5000/v3/auth/registerApiKey", new StringContent(string.Empty));
var apiKeyJson = await apiKeyResponse.Content.ReadAsStringAsync();
var apiKey = JsonConvert.DeserializeObject<ApiKeyData>(apiKeyJson);
httpClient.DefaultRequestHeaders.Remove("Authorization");
//Default filter to only receive position events
var filterJson = "{\"Filters\":[{\"FilterTemplate\":\"position_events\"}]}";
//Request connection info
httpClient.DefaultRequestHeaders.Add("X-API-KEY", apiKey.ApiKey);
var connectionInfoResponse = await httpClient.PostAsync("http://{API Host Here}:5000/v3/events/connections", new StringContent(filterJson, Encoding.UTF8, "application/json"));
var connectionInfoJson = await connectionInfoResponse.Content.ReadAsStringAsync();
var connectionInfo = JsonConvert.DeserializeObject<ConnectionData>(connectionInfoJson);
//Build connection and handling of events
var eventHubConnection = new HubConnectionBuilder().WithUrl("http://{API Host Here}:33001/hubs/eventHub", //EndpointURI obtained from last step
(opts) =>
{
opts.AccessTokenProvider = () => Task.FromResult(connectionInfo.EndpointID); //EndpointID obtained from last step
}).Build();
var eventHubMessageSubscription = eventHubConnection.On<string>("Event", async (message) =>
{
//Handle the event here
m_receivedData.Add(message);
await InvokeAsync(StateHasChanged);
});
//Start the connection
await eventHubConnection.StartAsync();
}
}
Shared/NavMenu.razor
file, insert the following code:<div class="nav-item px-3">
<NavLink class="nav-link" href="connectionTest">
<span class="oi oi-list-rich" aria-hidden="true"></span> Connection Test
</NavLink>
</div>
https
to http
To establish a connection to the SignalR Event Hub Endpoint, it is first required to obtain an EndpointID by using the Connection Management API operation. After the new Event Hub connection request has been created, we're ready to connect to the Event Hub. Follow these steps to create a project that can connect to the Event Hub:
.html
file containing the following code: 127.0.0.1
. Replace {YOUR USERNAME}} and {YOUR PASSWORD} with your own credential info.<script src="https://code.jquery.com/jquery-3.6.3.js" integrity="sha256-nQLuAZGRRcILA+6dMBOvcRh5Pe310sBpanc6+QBmyVM="
crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/microsoft-signalr/6.0.1/signalr.js"></script>
<body>
<div id="container">
</div>
</body>
<script>
const eventHubUrl = "http://{API Host Here}:33001/hubs/eventHub"; // url of event hub signalR
const apiUrl = "http://{API Host Here}:5000/v3/"; // url of the EventHub API
$(document).ready(async function () {
var endpointID = await getEndpointID();
const connection = new signalR.HubConnectionBuilder()
.withUrl(eventHubUrl,
{
accessTokenFactory: () => {
return endpointID;
}
})
.configureLogging(signalR.LogLevel.Information)
.build();
connection.on("Event", data => {
// TODO: do something with data
var node = document.getElementById("container");
var newNode = document.createElement("p");
newNode.appendChild(document.createTextNode(data));
node.appendChild(newNode);
});
connection.onclose(async () => {
//TODO: do something for close event
});
await connection.start();
});
async function getEndpointID() {
var accessToken;
var endpointID;
try {
// Get the Bearer Token
await fetch(
apiUrl + "auth/token",
{
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({
grant_type: "client_credentials",
auth_id: "{YOUR USERNAME}",
auth_secret: "{YOUR PASSWORD}"
})
})
.then(response => response.json())
.then(result => {
accessToken = result["access_token"];
})
.catch(error => {
});
// Initiate connection details
await fetch(
apiUrl + "events/connections",
{
method: "POST",
headers: {
"Content-Type": "application/json",
"Authorization": `Bearer ${accessToken}`
},
body: JSON.stringify({
"Mode": "read",
"Filters": [{ "FilterTemplate": "position_events" }]
})
})
.then(response => response.json())
.then(result => {
endpointID = result["EndpointID"];
})
.catch(error => {
});
} catch (e) {
console.log(e);
}
return endpointID;
}
</script>
To establish a connection to the SignalR Event Hub endpoint, it is first required to obtain an EndpointID by using the Connection Management API operation. After the new Event Hub connection request has been created, we're ready to connect to the Event Hub. Follow these steps to create a project that can connect to the Event Hub:
pip
in your terminal:pip install signalrcore
.py
file containing the following code:import requests
import json
from signalrcore.hub_connection_builder import HubConnectionBuilder
eventHubUrl = "http://{API Host Here}:33001/hubs/eventHub" # Url of event hub signalR
apiUrl = "http://{API Host Here}:5000/v3/" # Url of the EventHub API
def main():
hub_connection = HubConnectionBuilder()\
.with_url(eventHubUrl,
options={
"access_token_factory": authenticateConnection
})\
.build()
hub_connection.on_open(lambda: print(
"connection opened and handshake received ready to send messages"))
hub_connection.on_close(lambda: print("connection closed"))
hub_connection.on("Event", print)
hub_connection.start()
def authenticateConnection():
# Get Bearer token
headers = {
"Content-Type": "application/json"
}
body = json.dumps({
"grant_type": "client_credentials",
"auth_id": "{YOUR USERNAME}",
"auth_secret": "{YOUR PASSWORD}"
})
authTokenResponse = requests.post(
apiUrl + "auth/token", headers=headers, data=body)
authToken = authTokenResponse.json()["access_token"]
# Initiate connection details to obtain EndpointID
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer " + authToken
}
body = json.dumps({
"QualityOfService": {
"MaxUpdateRate": 20,
"MaxThroughput": 10240,
"AutotuneConnectionParameters": False
},
"Mode": "read",
"Filters": [{"FilterTemplate": "position_events"}]
})
endpointIDResponse = requests.post(
apiUrl + "events/connections", headers=headers, data=body)
endpointID = endpointIDResponse.json()["EndpointID"]
return endpointID
if __name__ == "__main__":
main()
127.0.0.1
. Replace {YOUR USERNAME}} and {YOUR PASSWORD} with your own credential info..py
file created by the terminal command:python -i ./FILE_NAME_CREATED.py
To establish a connection to the SignalR Event Hub endpoint, it is first required to obtain an EndpointID by using the Connection Management API operation. After the new Event Hub connection request has been created, we're ready to connect to the Event Hub. Follow these steps to create a project that can connect to the Event Hub:
build.gradle
file, insert the following dependency under the dependencies
section:implementation 'org.slf4j:slf4j-jdk14:1.7.25'
implementation 'com.squareup.okhttp3:okhttp:4.9.0'
implementation 'org.apache.commons:commons-text:1.6'
implementation 'org.json:json:20231013'
SampleClass.java
in the same directory of the App.java
. And copy paste the code below:package javadoc;
import java.io.IOException;
import java.util.concurrent.CountDownLatch;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import com.microsoft.signalr.HubConnection;
import com.microsoft.signalr.HubConnectionBuilder;
import io.reactivex.rxjava3.annotations.NonNull;
import io.reactivex.rxjava3.core.Single;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
public class SampleClass {
private String eventHubUrl = "http://{API Host Here}/hubs/eventHub";
private String apiUrl = "http://{API Host Here}:5000/v3";
private String username = "{YOUR USERNAME}";
private String password = "{YOUR PASSWORD}";
public void init() throws Exception {
String token = getToken();
String eventHubApiKey = registerApikey(token);
HubConnection hubConnection = GetEventHubConnection(eventHubApiKey);
hubConnection.on("Event", (event) -> {
System.out.println(event);
}, String.class);
hubConnection.start();
}
public String getToken() throws Exception {
JSONObject jsonObject = new JSONObject();
jsonObject.put("grant_type", "client_credentials");
jsonObject.put("auth_id", username);
jsonObject.put("auth_secret", password);
OkHttpClient client = new OkHttpClient.Builder().build();
MediaType mediaType = MediaType.parse("application/json; charset=utf-8");
Request request = new Request.Builder()
.url(apiUrl + "/auth/token")
.post(RequestBody.create(mediaType, jsonObject.toString()))
.build();
final String[] result = { null };
CountDownLatch latch = new CountDownLatch(1);
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(@NonNull Call call, @NonNull IOException e) {
latch.countDown();
}
@Override
public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
JSONObject j_response;
String responseString = "";
try {
responseString = response.body().string();
} catch (Exception e) {
e.printStackTrace();
}
if (!response.isSuccessful()) {
latch.countDown();
return;
} else {
try {
j_response = new JSONObject(responseString);
result[0] = j_response.getString("access_token");
} catch (Exception e) {
e.printStackTrace();
}
}
latch.countDown();
}
});
latch.await();
return result[0];
}
public String registerApikey(String apiToken) throws Exception {
JSONObject jsonObject = new JSONObject();
jsonObject.put("grant_type", "client_credentials");
jsonObject.put("auth_id", username);
jsonObject.put("auth_secret", password);
OkHttpClient client = new OkHttpClient.Builder().build();
MediaType mediaType = MediaType.parse("application/json; charset=utf-8");
Request request = new Request.Builder()
.url(apiUrl + "/auth/registerApiKey")
.addHeader("Authorization", "Bearer " + apiToken)
.post(RequestBody.create(mediaType, jsonObject.toString()))
.build();
final String[] result = { null };
CountDownLatch latch = new CountDownLatch(1);
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(@NonNull Call call, @NonNull IOException e) {
latch.countDown();
}
@Override
public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
JSONObject j_response;
String responseString = "";
try {
responseString = response.body().string();
} catch (Exception e) {
e.printStackTrace();
}
if (!response.isSuccessful()) {
latch.countDown();
return;
} else {
try {
j_response = new JSONObject(responseString);
result[0] = j_response.getString("ApiKey");
} catch (Exception e) {
e.printStackTrace();
}
}
latch.countDown();
}
});
latch.await();
return result[0];
}
public HubConnection GetEventHubConnection(String eventHubApiKey) throws Exception {
String connectionId = GetConnectionID(eventHubApiKey);
HubConnection hubConnection = HubConnectionBuilder.create(eventHubUrl)
.withAccessTokenProvider(Single.defer(() -> {
return Single.just(connectionId);
})).build();
return hubConnection;
}
public String GetConnectionID(String eventHubApiKey) throws Exception {
JSONObject jsonObject = new JSONObject();
JSONArray filters = new JSONArray();
JSONObject filter = new JSONObject();
filter.put("FilterTemplate", "position_events");
filters.put(filter);
jsonObject.put("Filters", filters);
OkHttpClient client = new OkHttpClient.Builder().build();
MediaType mediaType = MediaType.parse("application/json;");
Request request = new Request.Builder()
.url(apiUrl + "/events/connections")
.post(RequestBody.create(mediaType, jsonObject.toString()))
.addHeader("X-API-KEY", eventHubApiKey)
.addHeader("Content-Type", "application/json")
.build();
final String[] result = { null };
CountDownLatch latch = new CountDownLatch(1);
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(@NonNull Call call, @NonNull IOException e) {
latch.countDown();
}
@Override
public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
if (response.isSuccessful()) {
try {
JSONObject j_response = new JSONObject(response.body().string());
result[0] = j_response.getString("EndpointID");
} catch (JSONException e) {
e.printStackTrace();
}
}
latch.countDown();
}
});
latch.await();
return result[0];
}
}
App.java
: SampleClass sample = new SampleClass();
String token = sample.getToken();
String eventHubApiKey = sample.registerApikey(token);
HubConnection hubConnection = sample.GetEventHubConnection(eventHubApiKey);
hubConnection.on("Event", (event) -> {
System.out.println(event);
}, String.class);
hubConnection.start();
127.0.0.1
. Replace {YOUR USERNAME}} and {YOUR PASSWORD} with your own credential info.Within the Spatial Intelligence Platform, data is primarily routed between various logical components of the platform through a specialized Event Hub backed by .NET Core's SignalR protocol. SignalR is a highly efficient and scalable protocol for distribution of real-time data. The ZSIP implementation of SignalR as an Event Hub extends the standard functionality with the concept of a per-connection FilterChain, which matches against messages traversing the hub to select and relay only the relevant messages for a particular connection. This architecture enables a highly efficient communication backbone capable of exchanging high volume, low latency data, without saturating all client links with miscellaneous data unrelated to their particular function.
To establish a connection to the SignalR Event Hub endpoint, it is first required to obtain an EndpointID by using the Connection Management API operation. The EndpointID from the response must be presented as a Bearer token
within the Authorization
header of the SignalR connection request.
$(document).ready(function(){
const oauth_token = "{TOKEN HERE}";
const ZSIP_API = "https://{API Host Here}/v3/";
const NewConnection_OperationID = "events/connections";
$.ajax({
url: ZSIP_API + NewConnection_OperationID,
type: 'POST',
beforeSend: function (xhr) {
xhr.setRequestHeader('Authorization', 'Bearer ' + oauth_token);
},
contentType: 'application/json',
data: JSON.stringify({
Mode: 'read',
Filters: [
{
FilterTemplate: "dashboard"
}
]
}),
success: function(data) {
connectToEventHub(data.EndpointURI, data.EndpointID);
},
error: function() {
console.log("API request failure");
}
});
});
Response success
{- "EndpointID": "3F2504E0-4F89-11D3-9A0C-0305E82C3301",
- "HubInfo": {
- "HubName": "EventMessageHub",
- "HubTypeID": "bc645ac7-5453-48f3-ab4a-449bcae9a719",
- "HubInstanceID": "2fac08c3-b910-4a6f-9f89-5d1a50c520c7"
}
}
After the new Event Hub connection request has been created, we are ready to connect to the Event Hub.
function connectToEventHub(endpoint, id)
{
var connection = new signalR.HubConnectionBuilder()
.withUrl(endpoint,
{
accessTokenFactory: () => {
return id;
}
})
.build();
connection.on("Event", function (message) {
console.log(message);
});
connection.start().then(function () {
console.log("Connected to Event Hub!");
}).catch(function (err) {
return console.error(err.toString());
});
}
Several Quality of Service options are available to assist with managing low-bandwidth and/or high-latency links. The MaxUpdateRate
indicates the maximum number of packets per second sent to a client. The Event Hub uses a sliding window algorithm to determine if this threshold has been exceeded, and once it has, it begins to batch messages together to avoid exceeding the limit. The MaxThroughput
property monitors the total bandwidth (not including protocol overhead) and if exceeded, a notice message is forwarded to the client and excess data is truncated.
An experimental auto-tune feature is enabled by setting the AutotuneConnectionParameters
property to true
. When this feature is enabled, the Event Hub will attempt to adjust the parameters in real-time to achieve the best available performance.
Array of objects (FilterChain) All filters in this array are compared with a logical |
{- "Filters": [
- {
- "FilterTemplate": "dashboard",
- "Selector": "Source.MAC",
- "Type": "regex",
- "Match": "^00:11:22:33:44:55$",
- "Invert": false,
- "Children": { }
}
]
}
Once a connection is established, the client must handle a basic RPC method to receive messages from the server.
Method | Arguments | Description |
---|---|---|
Event |
<JSON Object> |
Primary RPC for receiving messages from the Event Hub |
Messages routed through the Event Hub are serialized JSON objects and follow this schema definition, with event specific data being contained as a JSON object within the Content
property.
Event Hub object schema
ModuleID | string ID of the module that generated the message. | ||||||||||||||
object | |||||||||||||||
Category | string Category of the Event, common categories are:
| ||||||||||||||
Type | string Sub-category that further identifies the purpose of the event and is specific to each category. | ||||||||||||||
Timestamp | string An ISO 8601 style timestamp with 1ms precision of the format | ||||||||||||||
object Event-specific JSON object data. |
{- "ModuleID": "cae534a0-cb29-4d22-a16c-70f764aedbcb",
- "Source": {
- "SiteID": 741,
- "MAC": "00:11:22:33:44:55",
- "GatewayURI": "ZK://501::3F2504E0-4F89-11D3-9A0C-0305E82C3301::UDP::10.0.0.220:10000"
}, - "Category": "HARDWARE",
- "Type": "BATTERY_LEVEL",
- "Timestamp": "",
- "Content": {
- "BatteryLevel": 0.57
}
}
Events are classified into a Category
and Type
, the latter indicating a sub-category specific to the particular Category
. Event messages adhere to a common outer-schema with a event-specific Content
property. Minimal validation of message content is done aside from schema validation, allowing for flexible and complex functionality between an expansive list of modules, integrations, and end-user solutions. As an example, just because a message may have the Category
of POSITION
, it is not always the case that this message originated from the Quantum RTLS hardware and may have originated from a simulator module.
Type |
Description |
---|---|
LOCATION_RAW_UPDATE |
A position update from a mobile device containing the last known X,Y,Z coordinates in metres and the orientation as a quaternion |
object |
{- "Content": {
- "Position": [
- -2.1234,
- 200.1212,
- 50.0012
], - "Orientation": [
- -0.1234,
- 0.8422,
- 0.1234,
- 0.3444
], - "Sequence": 6123,
- "Flag": 1,
- "InsState": 3,
- "UsState": 3
}
}
Type |
Description |
---|---|
LOCATION_FILTER_UPDATE |
A position update from a mobile device containing the last known X,Y,Z coordinates in metres and the orientation as a quaternion. |
object |
{- "Content": {
- "Position": [
- -2.1234,
- 200.1212,
- 50.0012
], - "Orientation": [
- -0.1234,
- 0.8422,
- 0.1234,
- 0.3444
], - "Sequence": 6123,
- "Flag": 1,
- "InsState": 3,
- "UsState": 3
}
}
Type |
Description |
---|---|
LOCATION_BATCH_UPDATE |
A batched position update from multiple mobile devices containing the last known X,Y,Z coordinates in metres and the orientation as a quaternion |
object |
[- {
- "Content": {
- "Positions": [
- {
- "Content": {
- "Position": [
- -2.1234,
- 200.1212,
- 50.0012
], - "Orientation": [
- -0.1234,
- 0.8422,
- 0.1234,
- 0.3444
], - "Sequence": 6123,
- "Flag": 1,
- "InsState": 3,
- "UsState": 3
}
}
]
}
}
]
Type |
Description |
---|---|
RAW_MESSAGE |
Raw messages received as output directly to the Gateway Module |
object |
{- "Content": {
- "RawMessage": "|I| serial_response: Success! Serial command LOGD have been received and executed."
}
}
Type |
Description |
---|---|
ZONE_ENTRY |
Indicates a device has entered a Zone |
object |
{- "Content": {
- "ZoneID": "ffe434a0-cb29-4d22-a16c-70f764aedbcb",
- "ZoneName": "Keep-out zone",
- "AlertLevel": 5,
- "CollisionID": "7a65726f-6b65-7900-0000-e3c287f886df"
}
}
Type |
Description |
---|---|
ZONE_EXIT |
Indicates a device has exited a Zone |
object |
{- "Content": {
- "ZoneID": "ffe434a0-cb29-4d22-a16c-70f764aedbcb",
- "ZoneName": "Keep-out zone",
- "AlertLevel": 5,
- "CollisionID": "7a65726f-6b65-7900-0000-e3c287f886df"
}
}
Type |
Description |
---|---|
ZONE_NOTIFY |
Notifies a state change has occured to the following zone with its update definition |
object |
{- "Content": {
- "Zone": {
- "SiteID": 501,
- "ZoneID": "3F2504E0-4F89-11D3-9A0C-0305E82C3301",
- "Name": "Keep-out zone",
- "GeometryType": "sphere",
- "GeometryData": [
- [
- 1.1234,
- 5.6789,
- -0.1234
], - [
- -5.6789,
- 0.1234,
- 5.6789
]
], - "MobileOriginSource": "00:11:22:33:44:55",
- "CollidingDevices": [
- {
- "CollisionID": "38f4d02c-7d71-4728-b60d-e4f77c66921b",
- "MAC": "00:AA:BB:CC:DD:EE",
- "EntryTime": "2019-08-24T14:15:22Z"
}
], - "AlertLevel": 3,
- "Active": true,
- "InclusionPolicy": "all",
- "DeviceList": [
- "99:AA:BB:CC:DD:EE",
- "FF:00:11:22:33:DD"
], - "ZoneActions": [
- {
- "type": "info-event",
}
], - "IsGeometryLocked": false,
- "IsTimed": false,
- "StartTime": "2019-08-24T14:15:22Z",
- "StopTime": "2019-08-24T14:15:22Z"
}, - "StateChange": "Add"
}
}
Type |
Description |
---|---|
BATTERY_LEVEL |
A period update about a device's battery level |
object |
{- "Content": {
- "BatteryLevel": 0.57
}
}
Type |
Description |
---|---|
BUTTON_PRESS |
A message indicating one of a device's buttons was pressed |
object |
{- "Content": {
- "ButtonState": [
- true
]
}
}
Type |
Description |
---|---|
ALERT_STATE |
Indicates a change in alert state of a device |
object |
{- "Content": {
- "AlertState": "active"
}
}
Type |
Description |
---|---|
DEVICE_STATE |
Indicates a change in device state |
object |
{- "Content": {
- "DeviceState": "off"
}
}
Type |
Description |
---|---|
RESTART |
Action task to restart the Quantum RTLS system |
SHUTDOWN |
Action task to stop the Quantum RTLS system |
START |
Action task to start the Quantum RTLS system |
Type |
Description |
---|---|
ERROR |
Critical system error message |
WARNING |
System-level warning |
object |
{- "Content": {
- "Message": "These aren't the droids you're looking for."
}
}
Type |
Description |
---|---|
REQUEST |
An API request encapsulated in an event |
RESPONSE |
An API response encapsulated in an event |
Type |
Description |
---|---|
REQUEST_COMPLETED |
Indicates that a requested export task has been completed |
API operations related to authentication operations, see the Authentication Process section for a detailed description of the authentication flows available.
Response success
Malformed request.
Unauthorized access, invalid credentials were used.
Access forbidden. Current token does not have the necessary authority for the operation.
Invalid data was sent.
{- "grant_type": "client_credentials",
- "auth_id": "admin",
- "auth_secret": "password"
}
{- "access_token": "MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3",
- "token_type": "bearer",
- "expires_in": 3600,
- "scope": "observer",
- "User": {
- "auth_id": "jsmith",
- "AccessLevel": "observer"
}
}
Response success
Unauthorized access, invalid credentials were used.
Access forbidden. Current token does not have the necessary authority for the operation.
{- "ApiKey": "string"
}
Response success
Malformed request.
Unauthorized access, invalid credentials were used.
Access forbidden. Current token does not have the necessary authority for the operation.
Invalid data was sent.
{- "ApiKey": "string"
}
{- "status": 200,
- "success": true
}
Global system settings relating to the core functions of the platform. These are usually configured at the time of initial system setup.
Response success
Unauthorized access, invalid credentials were used.
{- "settings": {
- "SiteID": 501,
- "Name": "San Francisco distribution center"
}, - "devices": [
- {
- "DeviceID": "00:AA:BB:CC:DD:EE",
- "Position": [
- 10.2112,
- 1.1234,
- -5.3209
], - "Orientation": [
- -0.1234,
- 0.4312,
- 0,
- 0.5432
], - "DeviceFlags": 3,
- "AlertState": "active",
- "FirmwareHash": "ec95199c",
- "FirmwareVersion": "0.10.0",
- "DeviceType": "anchor",
- "LastUpdateTime": "2019-08-24T14:15:22Z",
- "BatteryLevel": 0.85,
- "LastGatewaySource": "ZK://501::3F2504E0-4F89-11D3-9A0C-0305E82C3301::UDP::10.0.0.220:10000"
}
], - "modules": [
- {
- "ModuleID": "3F2504E0-4F89-11D3-9A0C-0305E82C3301",
- "Name": "Process analytics engine",
- "Version": "0.1.0",
- "Description": "Monitors output data to provide real-time data analytics and insights.",
- "ModuleFilename": "ZSIPAnalyticsModule.spi",
- "Active": true,
- "Running": true
}
], - "zones": [
- {
- "SiteID": 501,
- "ZoneID": "3F2504E0-4F89-11D3-9A0C-0305E82C3301",
- "Name": "Keep-out zone",
- "GeometryType": "sphere",
- "GeometryData": [
- [
- 1.1234,
- 5.6789,
- -0.1234
], - [
- -5.6789,
- 0.1234,
- 5.6789
]
], - "MobileOriginSource": "00:11:22:33:44:55",
- "CollidingDevices": [
- {
- "CollisionID": "38f4d02c-7d71-4728-b60d-e4f77c66921b",
- "MAC": "00:AA:BB:CC:DD:EE",
- "EntryTime": "2019-08-24T14:15:22Z"
}
], - "AlertLevel": 3,
- "Active": true,
- "InclusionPolicy": "all",
- "DeviceList": [
- "99:AA:BB:CC:DD:EE",
- "FF:00:11:22:33:DD"
], - "ZoneActions": [
- {
- "type": "info-event",
}
], - "IsGeometryLocked": false,
- "IsTimed": false,
- "StartTime": "2019-08-24T14:15:22Z",
- "StopTime": "2019-08-24T14:15:22Z"
}
]
}
Response success
Malformed request.
Unauthorized access, invalid credentials were used.
Access forbidden. Current token does not have the necessary authority for the operation.
Invalid data was sent.
{- "Rate": 1,
- "Batch": false
}
{- "status": 200,
- "success": true
}
Response success
Malformed request.
Unauthorized access, invalid credentials were used.
Access forbidden. Current token does not have the necessary authority for the operation.
Invalid data was sent.
[- {
- "UserID": "1800ac5a-f146-45f3-aedc-d62845570b86",
- "FullName": "Zero Key",
- "Username": "Zerokey",
- "Authority": "observer",
- "CreatedTimestamp": "2016-05-16T00:00:00.0000Z",
- "ModifiedTimestamp": "2016-05-16T00:00:00.0000Z"
}
]
Response success
Malformed request.
Unauthorized access, invalid credentials were used.
Access forbidden. Current token does not have the necessary authority for the operation.
Invalid data was sent.
{- "FullName": "Zero Key",
- "Username": "Zerokey",
- "Authority": "observer",
- "Password": "string"
}
[- {
- "UserID": "1800ac5a-f146-45f3-aedc-d62845570b86",
- "FullName": "Zero Key",
- "Username": "Zerokey",
- "Authority": "observer",
- "CreatedTimestamp": "2016-05-16T00:00:00.0000Z",
- "ModifiedTimestamp": "2016-05-16T00:00:00.0000Z"
}
]
Set updated info of the target user
Response success
Malformed request.
Unauthorized access, invalid credentials were used.
Access forbidden. Current token does not have the necessary authority for the operation.
Invalid data was sent.
{- "FullName": "Zero Key",
- "Username": "Zerokey",
- "Authority": "observer",
- "Password": "string",
- "NewPassword": "string"
}
{- "UserID": "1800ac5a-f146-45f3-aedc-d62845570b86",
- "FullName": "Zero Key",
- "Username": "Zerokey",
- "Authority": "observer",
- "CreatedTimestamp": "2016-05-16T00:00:00.0000Z",
- "ModifiedTimestamp": "2016-05-16T00:00:00.0000Z"
}
Response success
Unauthorized access, invalid credentials were used.
Access forbidden. Current token does not have the necessary authority for the operation.
Resource was not found.
{- "status": 200,
- "success": true
}
Initiate a new SignalR connection to the event hub
Array of objects (FilterChain) All filters in this array are compared with a logical |
Response success
Malformed request.
Unauthorized access, invalid credentials were used.
Access forbidden. Current token does not have the necessary authority for the operation.
Invalid data was sent.
{- "Filters": [
- {
- "FilterTemplate": "dashboard",
- "Selector": "Source.MAC",
- "Type": "regex",
- "Match": "^00:11:22:33:44:55$",
- "Invert": false,
- "Children": { }
}
]
}
{- "EndpointID": "3F2504E0-4F89-11D3-9A0C-0305E82C3301",
- "HubInfo": {
- "HubName": "EventMessageHub",
- "HubTypeID": "bc645ac7-5453-48f3-ab4a-449bcae9a719",
- "HubInstanceID": "2fac08c3-b910-4a6f-9f89-5d1a50c520c7"
}
}
Update connection properties of a SignalR connection
Array of objects (FilterChain) All filters in this array are compared with a logical |
Response success
Malformed request.
Unauthorized access, invalid credentials were used.
Access forbidden. Current token does not have the necessary authority for the operation.
Invalid data was sent.
{- "Filters": [
- {
- "FilterTemplate": "dashboard",
- "Selector": "Source.MAC",
- "Type": "regex",
- "Match": "^00:11:22:33:44:55$",
- "Invert": false,
- "Children": { }
}
]
}
{- "EndpointID": "3F2504E0-4F89-11D3-9A0C-0305E82C3301",
- "HubInfo": {
- "HubName": "EventMessageHub",
- "HubTypeID": "bc645ac7-5453-48f3-ab4a-449bcae9a719",
- "HubInstanceID": "2fac08c3-b910-4a6f-9f89-5d1a50c520c7"
}
}
Post a message to the event hub
object (Event) Event Hub object schema |
Response success
Malformed request.
Unauthorized access, invalid credentials were used.
Access forbidden. Current token does not have the necessary authority for the operation.
Invalid data was sent.
{- "EventData": {
- "ModuleID": "cae534a0-cb29-4d22-a16c-70f764aedbcb",
- "Source": {
- "SiteID": 741,
- "MAC": "00:11:22:33:44:55",
- "GatewayURI": "ZK://501::3F2504E0-4F89-11D3-9A0C-0305E82C3301::UDP::10.0.0.220:10000"
}, - "Category": "HARDWARE",
- "Type": "BATTERY_LEVEL",
- "Timestamp": "",
- "Content": {
- "BatteryLevel": 0.57
}
}
}
{- "status": 200,
- "success": true
}
Operations in the Device Information group will provide the last known properties of a given device, even if that device is not currently connected to the network.
Warning: Do not use this for time sensitive retrieval.
The device information is currently snapshotted on an interval
Response success
Unauthorized access, invalid credentials were used.
[- {
- "DeviceID": "00:AA:BB:CC:DD:EE",
- "Position": [
- 10.2112,
- 1.1234,
- -5.3209
], - "Orientation": [
- -0.1234,
- 0.4312,
- 0,
- 0.5432
], - "DeviceFlags": 3,
- "AlertState": "active",
- "FirmwareHash": "ec95199c",
- "FirmwareVersion": "0.10.0",
- "DeviceType": "anchor",
- "LastUpdateTime": "2019-08-24T14:15:22Z",
- "BatteryLevel": 0.85,
- "LastGatewaySource": "ZK://501::3F2504E0-4F89-11D3-9A0C-0305E82C3301::UDP::10.0.0.220:10000"
}
]
Warning: Do not use this for time sensitive retrieval.
The device information is currently snapshotted on an interval
Response success
Unauthorized access, invalid credentials were used.
Resource was not found.
{- "DeviceID": "00:AA:BB:CC:DD:EE",
- "Position": [
- 10.2112,
- 1.1234,
- -5.3209
], - "Orientation": [
- -0.1234,
- 0.4312,
- 0,
- 0.5432
], - "DeviceFlags": 3,
- "AlertState": "active",
- "FirmwareHash": "ec95199c",
- "FirmwareVersion": "0.10.0",
- "DeviceType": "anchor",
- "LastUpdateTime": "2019-08-24T14:15:22Z",
- "BatteryLevel": 0.85,
- "LastGatewaySource": "ZK://501::3F2504E0-4F89-11D3-9A0C-0305E82C3301::UDP::10.0.0.220:10000"
}
The device control operations provide a hardware abstraction layer to enable directly addressing and controlling end-devices, without regard to their specific model or type.
Update device settings.
Response success
Malformed request.
Unauthorized access, invalid credentials were used.
Access forbidden. Current token does not have the necessary authority for the operation.
Resource was not found.
Invalid data was sent.
{- "AlertState": "active"
}
{- "status": 200,
- "success": true
}
Set the alert state of a device
Response success
Malformed request.
Unauthorized access, invalid credentials were used.
Access forbidden. Current token does not have the necessary authority for the operation.
Resource was not found.
Invalid data was sent.
{- "AlertState": "active"
}
{- "status": 200,
- "success": true
}
The module interface allows hot-plugging of add-on functionality as may be needed for a given use-case. These API operations provide administrative functions for installing, licensing, and configuring modules.
Response success
Unauthorized access, invalid credentials were used.
[- {
- "ModuleID": "3F2504E0-4F89-11D3-9A0C-0305E82C3301",
- "Name": "Process analytics engine",
- "Version": "0.1.0",
- "Description": "Monitors output data to provide real-time data analytics and insights.",
- "ModuleFilename": "ZSIPAnalyticsModule.spi",
- "Active": true,
- "Running": true
}
]
The Historian module provides logging and log exporting functionality for both positional and collision data.
Requests position updates events based on the requested filter conditions
Response success
Malformed request.
Unauthorized access, invalid credentials were used.
Access forbidden. Current token does not have the necessary authority for the operation.
Invalid data was sent.
[- {
- "StartTime": "2019-08-24T14:15:22Z",
- "EndTime": "2019-08-24T14:15:22Z",
- "DeviceID": "00:AA:BB:CC:DD:EE"
}
]
{- "TaskID": "string"
}
Requests zone collisions events based on the requested filter conditions
Response success
Malformed request.
Unauthorized access, invalid credentials were used.
Access forbidden. Current token does not have the necessary authority for the operation.
Invalid data was sent.
{- "ZoneIDs": [
- "7237c212-aec8-4e86-8087-e4726eaaf0a1"
], - "Devices": [
- {
- "StartTime": "2019-08-24T14:15:22Z",
- "EndTime": "2019-08-24T14:15:22Z",
- "DeviceID": "00:AA:BB:CC:DD:EE"
}
], - "IncludePositionalData": false
}
{- "TaskID": "string"
}
Response success.
Unauthorized access, invalid credentials were used.
Resource was not found.
{- "AttachedFile": "string"
}
Response success.
Unauthorized access, invalid credentials were used.
Resource was not found.
[- {
- "ConnectionID": "0b214de7-8958-4956-8eed-28f9ba2c47c6",
- "host": "10.20.0.1",
- "port": 8883,
- "TLS": true,
- "CertificateProfileID": "MyCertificateProfileID",
- "username": "string",
- "topics": [
- {
- "topic": "string",
- "FilterChain": [
- {
- "FilterTemplate": "dashboard",
- "Selector": "Source.MAC",
- "Type": "regex",
- "Match": "^00:11:22:33:44:55$",
- "Invert": false,
- "Children": { }
}
]
}
]
}
]
Establish a new MQTT connection
Response success
Malformed request.
Unauthorized access, invalid credentials were used.
Access forbidden. Current token does not have the necessary authority for the operation.
Invalid data was sent.
{- "host": "10.20.0.1",
- "port": 8883,
- "TLS": true,
- "CertificateProfileID": "MyCertificateProfileID",
- "username": "string",
- "password": "string",
- "topics": [
- {
- "topic": "string",
- "FilterChain": [
- {
- "FilterTemplate": "dashboard",
- "Selector": "Source.MAC",
- "Type": "regex",
- "Match": "^00:11:22:33:44:55$",
- "Invert": false,
- "Children": { }
}
]
}
]
}
{- "ConnectionID": "0b214de7-8958-4956-8eed-28f9ba2c47c6",
- "host": "10.20.0.1",
- "port": 8883,
- "TLS": true,
- "CertificateProfileID": "MyCertificateProfileID",
- "username": "string",
- "topics": [
- {
- "topic": "string",
- "FilterChain": [
- {
- "FilterTemplate": "dashboard",
- "Selector": "Source.MAC",
- "Type": "regex",
- "Match": "^00:11:22:33:44:55$",
- "Invert": false,
- "Children": { }
}
]
}
]
}
Response success.
Unauthorized access, invalid credentials were used.
Resource was not found.
[- {
- "ConnectionID": "0b214de7-8958-4956-8eed-28f9ba2c47c6",
- "host": "10.20.0.1",
- "port": 8883,
- "TLS": true,
- "CertificateProfileID": "MyCertificateProfileID",
- "username": "string",
- "topics": [
- {
- "topic": "string",
- "FilterChain": [
- {
- "FilterTemplate": "dashboard",
- "Selector": "Source.MAC",
- "Type": "regex",
- "Match": "^00:11:22:33:44:55$",
- "Invert": false,
- "Children": { }
}
]
}
]
}
]
Change the settings of a MQTT connection
Response success
Malformed request.
Unauthorized access, invalid credentials were used.
Access forbidden. Current token does not have the necessary authority for the operation.
Resource was not found.
Invalid data was sent.
{- "host": "10.20.0.1",
- "port": 8883,
- "TLS": true,
- "CertificateProfileID": "MyCertificateProfileID",
- "username": "string",
- "password": "string",
- "topics": [
- {
- "topic": "string",
- "FilterChain": [
- {
- "FilterTemplate": "dashboard",
- "Selector": "Source.MAC",
- "Type": "regex",
- "Match": "^00:11:22:33:44:55$",
- "Invert": false,
- "Children": { }
}
]
}
]
}
{- "ConnectionID": "0b214de7-8958-4956-8eed-28f9ba2c47c6",
- "host": "10.20.0.1",
- "port": 8883,
- "TLS": true,
- "CertificateProfileID": "MyCertificateProfileID",
- "username": "string",
- "topics": [
- {
- "topic": "string",
- "FilterChain": [
- {
- "FilterTemplate": "dashboard",
- "Selector": "Source.MAC",
- "Type": "regex",
- "Match": "^00:11:22:33:44:55$",
- "Invert": false,
- "Children": { }
}
]
}
]
}
Success response.
Unauthorized access, invalid credentials were used.
Access forbidden. Current token does not have the necessary authority for the operation.
Resource was not found.
{- "status": 200,
- "success": true
}
Response success.
Unauthorized access, invalid credentials were used.
Resource was not found.
[- {
- "ID": "38ddf769-72a6-45c4-a782-efdda66a9a1b",
- "name": "Sample Certificate Name"
}
]
Response success
Malformed request.
Unauthorized access, invalid credentials were used.
Access forbidden. Current token does not have the necessary authority for the operation.
Invalid data was sent.
{- "name": "Sample Certificate Name",
- "ca": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUVBekNDQXV1Z0F3SUJBZ0lVQlkxaGxDR3ZkajROaEJYa1ovdUxVWk5JTEF3d0RRWUpLb1pJaHZjTkFRRUwKQlFBd2daQXhDekFKQmdOVkJBWVRBa2RDTVJjd0ZRWURWUVFJREE1VmJtbDBaV1FnUzJsdVoyUnZiVEVPTUF3RwpBMVVFQnd3RlJHVnlZbmt4RWpBUUJnTlZCQW9NQ1UxdmMzRjFhWFIwYnpFTE1Ba0dBMVVFQ3d3Q1EwRXhGakFVCkJnTlZCQU1NRFcxdmMzRjFhWFIwYnk1dmNtY3hIekFkQmdrcWhraUc5dzBCQ1FFV0VISnZaMlZ5UUdGMFkyaHYKYnk1dmNtY3dIaGNOTWpBd05qQTVNVEV3TmpNNVdoY05NekF3TmpBM01URXdOak01V2pDQmtERUxNQWtHQTFVRQpCaE1DUjBJeEZ6QVZCZ05WQkFnTURsVnVhWFJsWkNCTGFXNW5aRzl0TVE0d0RBWURWUVFIREFWRVpYSmllVEVTCk1CQUdBMVVFQ2d3SlRXOXpjWFZwZEhSdk1Rc3dDUVlEVlFRTERBSkRRVEVXTUJRR0ExVUVBd3dOYlc5emNYVnAKZEhSdkxtOXlaekVmTUIwR0NTcUdTSWIzRFFFSkFSWVFjbTluWlhKQVlYUmphRzl2TG05eVp6Q0NBU0l3RFFZSgpLb1pJaHZjTkFRRUJCUUFEZ2dFUEFEQ0NBUW9DZ2dFQkFNRTBIS21JemZUT3drS0xUM1RISGUrT2JkaXphbVBnClVabUQ2NFRmM3pKZE5lWUdZbjRDRVhieVA2ZnkzdFdjOFMyYm9XNmR6ckg4U2RGZjl1bzMyMEdKQTlCN1UxRlcKVGUzeGRhL0xtM0pGZmFIamtXdzdqQndjYXVRWmpwR0lOSGFwSFJscGlDWnNxdUF0aE9neFc5U2dEZ1lsR3pFQQpzMDZwa0VGaU13K3FEZkxvL3N4RktCNnZRbEZla01lQ3ltakxDYk53UEp5cXloRm1QV3dpby9QRE1ydUJUelBICjNjaW9CbnJKV0tYYzNPalhkTEdGSk9majdwUDBqL2RyMkxINzJlU3Z2M1BRUUZsOTBDWlBGaHJDVWNSSFNTeG8KRTZ5akdPZG56N2Y2UHZlTElCNTc0a1FPUnd0OGVQbjB5aWRyVEMxaWN0aWtFRDNuSFloTVVPVUNBd0VBQWFOVApNRkV3SFFZRFZSME9CQllFRlBWVjZ4QlVGUGlHS0R5bzVWMytIYmg0TjlZU01COEdBMVVkSXdRWU1CYUFGUFZWCjZ4QlVGUGlHS0R5bzVWMytIYmg0TjlZU01BOEdBMVVkRXdFQi93UUZNQU1CQWY4d0RRWUpLb1pJaHZjTkFRRUwKQlFBRGdnRUJBR2E5a1MyMU43MFRoTTYvSGo5RDdtYlZ4S0xCalZXZTJUUHNHZmJsM3JFRGZaK09LUloyajZBQwo2cjdqYjRUWk8zZHpGMnA2ZGdicmxVNzFZLzRLMFRkeklqUmozY1EzS1NtNDFKdlVRMGhaL2MwNGlHRGcveFdmCitwcDU4bmZQQVl3dWVycnVQTldtbFN0V0FYZjBVVHFSdGc0aFFEV0J1VUZESlR1V3V1QnZFWHVkejc0ZWgvd0sKc013ZnUxSEZ2ank1WjBpTURVOFBVRGVwalZvbE9DdWU5YXNobFM0RUI1SUVDZFNSMlRJdG5BSWlJd2lteDgzOQpMZFVkUnVkYWZNdTVUNVhtYTE4Mk9DMC91L3hSbEVtK3R2S0dHbWZGY04wcGlxVmw4T3JTUEJnSWxiKzFJS0pFCm0vWHJpV3IvQ3E0aC9KZkI3TlRzZXpWc2xna0Jhb1U9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K",
- "client": "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",
- "password": "userpassword"
}
{- "ID": "38ddf769-72a6-45c4-a782-efdda66a9a1b",
- "name": "Sample Certificate Name"
}
Update the settings of a MQTT certificate profile
Response success
Malformed request.
Unauthorized access, invalid credentials were used.
Access forbidden. Current token does not have the necessary authority for the operation.
Resource was not found.
Invalid data was sent.
{- "name": "Sample Certificate Name",
- "ca": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUVBekNDQXV1Z0F3SUJBZ0lVQlkxaGxDR3ZkajROaEJYa1ovdUxVWk5JTEF3d0RRWUpLb1pJaHZjTkFRRUwKQlFBd2daQXhDekFKQmdOVkJBWVRBa2RDTVJjd0ZRWURWUVFJREE1VmJtbDBaV1FnUzJsdVoyUnZiVEVPTUF3RwpBMVVFQnd3RlJHVnlZbmt4RWpBUUJnTlZCQW9NQ1UxdmMzRjFhWFIwYnpFTE1Ba0dBMVVFQ3d3Q1EwRXhGakFVCkJnTlZCQU1NRFcxdmMzRjFhWFIwYnk1dmNtY3hIekFkQmdrcWhraUc5dzBCQ1FFV0VISnZaMlZ5UUdGMFkyaHYKYnk1dmNtY3dIaGNOTWpBd05qQTVNVEV3TmpNNVdoY05NekF3TmpBM01URXdOak01V2pDQmtERUxNQWtHQTFVRQpCaE1DUjBJeEZ6QVZCZ05WQkFnTURsVnVhWFJsWkNCTGFXNW5aRzl0TVE0d0RBWURWUVFIREFWRVpYSmllVEVTCk1CQUdBMVVFQ2d3SlRXOXpjWFZwZEhSdk1Rc3dDUVlEVlFRTERBSkRRVEVXTUJRR0ExVUVBd3dOYlc5emNYVnAKZEhSdkxtOXlaekVmTUIwR0NTcUdTSWIzRFFFSkFSWVFjbTluWlhKQVlYUmphRzl2TG05eVp6Q0NBU0l3RFFZSgpLb1pJaHZjTkFRRUJCUUFEZ2dFUEFEQ0NBUW9DZ2dFQkFNRTBIS21JemZUT3drS0xUM1RISGUrT2JkaXphbVBnClVabUQ2NFRmM3pKZE5lWUdZbjRDRVhieVA2ZnkzdFdjOFMyYm9XNmR6ckg4U2RGZjl1bzMyMEdKQTlCN1UxRlcKVGUzeGRhL0xtM0pGZmFIamtXdzdqQndjYXVRWmpwR0lOSGFwSFJscGlDWnNxdUF0aE9neFc5U2dEZ1lsR3pFQQpzMDZwa0VGaU13K3FEZkxvL3N4RktCNnZRbEZla01lQ3ltakxDYk53UEp5cXloRm1QV3dpby9QRE1ydUJUelBICjNjaW9CbnJKV0tYYzNPalhkTEdGSk9majdwUDBqL2RyMkxINzJlU3Z2M1BRUUZsOTBDWlBGaHJDVWNSSFNTeG8KRTZ5akdPZG56N2Y2UHZlTElCNTc0a1FPUnd0OGVQbjB5aWRyVEMxaWN0aWtFRDNuSFloTVVPVUNBd0VBQWFOVApNRkV3SFFZRFZSME9CQllFRlBWVjZ4QlVGUGlHS0R5bzVWMytIYmg0TjlZU01COEdBMVVkSXdRWU1CYUFGUFZWCjZ4QlVGUGlHS0R5bzVWMytIYmg0TjlZU01BOEdBMVVkRXdFQi93UUZNQU1CQWY4d0RRWUpLb1pJaHZjTkFRRUwKQlFBRGdnRUJBR2E5a1MyMU43MFRoTTYvSGo5RDdtYlZ4S0xCalZXZTJUUHNHZmJsM3JFRGZaK09LUloyajZBQwo2cjdqYjRUWk8zZHpGMnA2ZGdicmxVNzFZLzRLMFRkeklqUmozY1EzS1NtNDFKdlVRMGhaL2MwNGlHRGcveFdmCitwcDU4bmZQQVl3dWVycnVQTldtbFN0V0FYZjBVVHFSdGc0aFFEV0J1VUZESlR1V3V1QnZFWHVkejc0ZWgvd0sKc013ZnUxSEZ2ank1WjBpTURVOFBVRGVwalZvbE9DdWU5YXNobFM0RUI1SUVDZFNSMlRJdG5BSWlJd2lteDgzOQpMZFVkUnVkYWZNdTVUNVhtYTE4Mk9DMC91L3hSbEVtK3R2S0dHbWZGY04wcGlxVmw4T3JTUEJnSWxiKzFJS0pFCm0vWHJpV3IvQ3E0aC9KZkI3TlRzZXpWc2xna0Jhb1U9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K",
- "client": "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",
- "password": "userpassword"
}
{- "ID": "38ddf769-72a6-45c4-a782-efdda66a9a1b",
- "name": "Sample Certificate Name"
}
Success response.
Unauthorized access, invalid credentials were used.
Access forbidden. Current token does not have the necessary authority for the operation.
Resource was not found.
{- "status": 200,
- "success": true
}
The Zone module provides the ability to set certain zones within the 3D space of the Quantum RTLS system, which can conditionally trigger a series of actions from generating a log message, trigger an alarm on the device, or sending a request to a URI.
Response success
Unauthorized access, invalid credentials were used.
[- {
- "SiteID": 501,
- "ZoneID": "3F2504E0-4F89-11D3-9A0C-0305E82C3301",
- "Name": "Keep-out zone",
- "GeometryType": "sphere",
- "GeometryData": [
- [
- 1.1234,
- 5.6789,
- -0.1234
], - [
- -5.6789,
- 0.1234,
- 5.6789
]
], - "MobileOriginSource": "00:11:22:33:44:55",
- "CollidingDevices": [
- {
- "CollisionID": "38f4d02c-7d71-4728-b60d-e4f77c66921b",
- "MAC": "00:AA:BB:CC:DD:EE",
- "EntryTime": "2019-08-24T14:15:22Z"
}
], - "AlertLevel": 3,
- "Active": true,
- "InclusionPolicy": "all",
- "DeviceList": [
- "99:AA:BB:CC:DD:EE",
- "FF:00:11:22:33:DD"
], - "ZoneActions": [
- {
- "type": "info-event",
}
], - "IsGeometryLocked": false,
- "IsTimed": false,
- "StartTime": "2019-08-24T14:15:22Z",
- "StopTime": "2019-08-24T14:15:22Z"
}
]
Create a new zone
Response success
Malformed request.
Unauthorized access, invalid credentials were used.
Access forbidden. Current token does not have the necessary authority for the operation.
Invalid data was sent.
{- "Name": "Keep-out zone",
- "GeometryType": "sphere",
- "GeometryData": [
- [
- 1.1234,
- 5.6789,
- -0.1234
], - [
- -5.6789,
- 0.1234,
- 5.6789
]
], - "MobileOriginSource": "00:11:22:33:44:55",
- "AlertLevel": 3,
- "Active": true,
- "InclusionPolicy": "all",
- "DeviceList": [
- "99:AA:BB:CC:DD:EE",
- "FF:00:11:22:33:DD"
], - "ZoneActions": [
- {
- "type": "info-event",
}
], - "IsTimed": false,
- "StartTime": "2019-08-24T14:15:22Z",
- "StopTime": "2019-08-24T14:15:22Z"
}
{- "SiteID": 501,
- "ZoneID": "3F2504E0-4F89-11D3-9A0C-0305E82C3301",
- "Name": "Keep-out zone",
- "GeometryType": "sphere",
- "GeometryData": [
- [
- 1.1234,
- 5.6789,
- -0.1234
], - [
- -5.6789,
- 0.1234,
- 5.6789
]
], - "MobileOriginSource": "00:11:22:33:44:55",
- "CollidingDevices": [
- {
- "CollisionID": "38f4d02c-7d71-4728-b60d-e4f77c66921b",
- "MAC": "00:AA:BB:CC:DD:EE",
- "EntryTime": "2019-08-24T14:15:22Z"
}
], - "AlertLevel": 3,
- "Active": true,
- "InclusionPolicy": "all",
- "DeviceList": [
- "99:AA:BB:CC:DD:EE",
- "FF:00:11:22:33:DD"
], - "ZoneActions": [
- {
- "type": "info-event",
}
], - "IsGeometryLocked": false,
- "IsTimed": false,
- "StartTime": "2019-08-24T14:15:22Z",
- "StopTime": "2019-08-24T14:15:22Z"
}
Response success
Unauthorized access, invalid credentials were used.
Resource was not found.
{- "SiteID": 501,
- "ZoneID": "3F2504E0-4F89-11D3-9A0C-0305E82C3301",
- "Name": "Keep-out zone",
- "GeometryType": "sphere",
- "GeometryData": [
- [
- 1.1234,
- 5.6789,
- -0.1234
], - [
- -5.6789,
- 0.1234,
- 5.6789
]
], - "MobileOriginSource": "00:11:22:33:44:55",
- "CollidingDevices": [
- {
- "CollisionID": "38f4d02c-7d71-4728-b60d-e4f77c66921b",
- "MAC": "00:AA:BB:CC:DD:EE",
- "EntryTime": "2019-08-24T14:15:22Z"
}
], - "AlertLevel": 3,
- "Active": true,
- "InclusionPolicy": "all",
- "DeviceList": [
- "99:AA:BB:CC:DD:EE",
- "FF:00:11:22:33:DD"
], - "ZoneActions": [
- {
- "type": "info-event",
}
], - "IsGeometryLocked": false,
- "IsTimed": false,
- "StartTime": "2019-08-24T14:15:22Z",
- "StopTime": "2019-08-24T14:15:22Z"
}
Response success
Unauthorized access, invalid credentials were used.
Access forbidden. Current token does not have the necessary authority for the operation.
Resource was not found.
{- "status": 200,
- "success": true
}
Update a zone's settings
Name | string Friendly-name for a specific zone definition. Any JSON string is valid. | ||||||||||||||
GeometryType | string Specifies the shape of the Zone, which also dictates how the GeometryData is interpreted. 2D shapes extend infinitely to all positive and negative Z-coordinate values. | ||||||||||||||
GeometryData | Array of integers non-empty The schema for
| ||||||||||||||
MobileOriginSource | string The MAC address of the device to attach this zone's centre to, allowing the zone to become a moving centroid with latest device position as its centre. | ||||||||||||||
AlertLevel | integer Indicates the numeric alert level of the zone from the lowest priority (0) to the highest priority (+inf). This value determines what types of actions are taken on triggering, ranging from a site-wide alarm, device-level alarm, or a logged-only alarm. | ||||||||||||||
Active | boolean Default: true Indicates whether the Zone is active or inactive. If a Zone is inactive, it will not cause any alarms even if devices enter the zone. | ||||||||||||||
InclusionPolicy | string Default: "all" Specifies the default inclusion policy for devices which may trigger this zone. If set to | ||||||||||||||
DeviceList | Array of strings If | ||||||||||||||
Array of objects (ZoneAction) | |||||||||||||||
IsTimed | boolean Default: false Indicates if the zone is a timed zone. If set, the | ||||||||||||||
StartTime | string <date-time> The date and time indicating the start of the timed zone active timeframe. Only used when the | ||||||||||||||
StopTime | string <date-time> The date and time indicating the end of the timed zone active timeframe. Only used when the |
Response success
Malformed request.
Unauthorized access, invalid credentials were used.
Access forbidden. Current token does not have the necessary authority for the operation.
Resource was not found.
Invalid data was sent.
{- "Name": "Keep-out zone",
- "GeometryType": "sphere",
- "GeometryData": [
- [
- 1.1234,
- 5.6789,
- -0.1234
], - [
- -5.6789,
- 0.1234,
- 5.6789
]
], - "MobileOriginSource": "00:11:22:33:44:55",
- "AlertLevel": 3,
- "Active": true,
- "InclusionPolicy": "all",
- "DeviceList": [
- "99:AA:BB:CC:DD:EE",
- "FF:00:11:22:33:DD"
], - "ZoneActions": [
- {
- "type": "info-event",
}
], - "IsTimed": false,
- "StartTime": "2019-08-24T14:15:22Z",
- "StopTime": "2019-08-24T14:15:22Z"
}
{- "status": 200,
- "success": true
}
Create all listed zones
Name | string Friendly-name for a specific zone definition. Any JSON string is valid. | ||||||||||||||
GeometryType | string Specifies the shape of the Zone, which also dictates how the GeometryData is interpreted. 2D shapes extend infinitely to all positive and negative Z-coordinate values. | ||||||||||||||
GeometryData | Array of integers non-empty The schema for
| ||||||||||||||
MobileOriginSource | string The MAC address of the device to attach this zone's centre to, allowing the zone to become a moving centroid with latest device position as its centre. | ||||||||||||||
AlertLevel | integer Indicates the numeric alert level of the zone from the lowest priority (0) to the highest priority (+inf). This value determines what types of actions are taken on triggering, ranging from a site-wide alarm, device-level alarm, or a logged-only alarm. | ||||||||||||||
Active | boolean Default: true Indicates whether the Zone is active or inactive. If a Zone is inactive, it will not cause any alarms even if devices enter the zone. | ||||||||||||||
InclusionPolicy | string Default: "all" Specifies the default inclusion policy for devices which may trigger this zone. If set to | ||||||||||||||
DeviceList | Array of strings If | ||||||||||||||
Array of objects (ZoneAction) | |||||||||||||||
IsTimed | boolean Default: false Indicates if the zone is a timed zone. If set, the | ||||||||||||||
StartTime | string <date-time> The date and time indicating the start of the timed zone active timeframe. Only used when the | ||||||||||||||
StopTime | string <date-time> The date and time indicating the end of the timed zone active timeframe. Only used when the |
Response success
Malformed request.
Unauthorized access, invalid credentials were used.
Access forbidden. Current token does not have the necessary authority for the operation.
Invalid data was sent.
[- {
- "Name": "Keep-out zone",
- "GeometryType": "sphere",
- "GeometryData": [
- [
- 1.1234,
- 5.6789,
- -0.1234
], - [
- -5.6789,
- 0.1234,
- 5.6789
]
], - "MobileOriginSource": "00:11:22:33:44:55",
- "AlertLevel": 3,
- "Active": true,
- "InclusionPolicy": "all",
- "DeviceList": [
- "99:AA:BB:CC:DD:EE",
- "FF:00:11:22:33:DD"
], - "ZoneActions": [
- {
- "type": "info-event",
}
], - "IsTimed": false,
- "StartTime": "2019-08-24T14:15:22Z",
- "StopTime": "2019-08-24T14:15:22Z"
}
]
[- {
- "SiteID": 501,
- "ZoneID": "3F2504E0-4F89-11D3-9A0C-0305E82C3301",
- "Name": "Keep-out zone",
- "GeometryType": "sphere",
- "GeometryData": [
- [
- 1.1234,
- 5.6789,
- -0.1234
], - [
- -5.6789,
- 0.1234,
- 5.6789
]
], - "MobileOriginSource": "00:11:22:33:44:55",
- "CollidingDevices": [
- {
- "CollisionID": "38f4d02c-7d71-4728-b60d-e4f77c66921b",
- "MAC": "00:AA:BB:CC:DD:EE",
- "EntryTime": "2019-08-24T14:15:22Z"
}
], - "AlertLevel": 3,
- "Active": true,
- "InclusionPolicy": "all",
- "DeviceList": [
- "99:AA:BB:CC:DD:EE",
- "FF:00:11:22:33:DD"
], - "ZoneActions": [
- {
- "type": "info-event",
}
], - "IsGeometryLocked": false,
- "IsTimed": false,
- "StartTime": "2019-08-24T14:15:22Z",
- "StopTime": "2019-08-24T14:15:22Z"
}
]
List of updated zone's settings
Name | string Friendly-name for a specific zone definition. Any JSON string is valid. | ||||||||||||||
GeometryType | string Specifies the shape of the Zone, which also dictates how the GeometryData is interpreted. 2D shapes extend infinitely to all positive and negative Z-coordinate values. | ||||||||||||||
GeometryData | Array of integers non-empty The schema for
| ||||||||||||||
MobileOriginSource | string The MAC address of the device to attach this zone's centre to, allowing the zone to become a moving centroid with latest device position as its centre. | ||||||||||||||
AlertLevel | integer Indicates the numeric alert level of the zone from the lowest priority (0) to the highest priority (+inf). This value determines what types of actions are taken on triggering, ranging from a site-wide alarm, device-level alarm, or a logged-only alarm. | ||||||||||||||
Active | boolean Default: true Indicates whether the Zone is active or inactive. If a Zone is inactive, it will not cause any alarms even if devices enter the zone. | ||||||||||||||
InclusionPolicy | string Default: "all" Specifies the default inclusion policy for devices which may trigger this zone. If set to | ||||||||||||||
DeviceList | Array of strings If | ||||||||||||||
Array of objects (ZoneAction) | |||||||||||||||
IsTimed | boolean Default: false Indicates if the zone is a timed zone. If set, the | ||||||||||||||
StartTime | string <date-time> The date and time indicating the start of the timed zone active timeframe. Only used when the | ||||||||||||||
StopTime | string <date-time> The date and time indicating the end of the timed zone active timeframe. Only used when the |
Response success
Malformed request.
Unauthorized access, invalid credentials were used.
Access forbidden. Current token does not have the necessary authority for the operation.
Resource was not found.
Invalid data was sent.
[- {
- "Name": "Keep-out zone",
- "GeometryType": "sphere",
- "GeometryData": [
- [
- 1.1234,
- 5.6789,
- -0.1234
], - [
- -5.6789,
- 0.1234,
- 5.6789
]
], - "MobileOriginSource": "00:11:22:33:44:55",
- "AlertLevel": 3,
- "Active": true,
- "InclusionPolicy": "all",
- "DeviceList": [
- "99:AA:BB:CC:DD:EE",
- "FF:00:11:22:33:DD"
], - "ZoneActions": [
- {
- "type": "info-event",
}
], - "IsTimed": false,
- "StartTime": "2019-08-24T14:15:22Z",
- "StopTime": "2019-08-24T14:15:22Z"
}
]
{- "status": 200,
- "success": true
}
Remove all zones that have the same zone IDs contained in the list
Zone ID
Response success
Malformed request.
Unauthorized access, invalid credentials were used.
Access forbidden. Current token does not have the necessary authority for the operation.
Resource was not found.
Invalid data was sent.
[- "0bf650c2-3b03-447b-8b1a-4eacb09b04cb",
- "2bcaef97-f6c7-4017-ba3b-a6b677d4b806"
]
{- "status": 200,
- "success": true
}
Activate zones in the request body
Zone ID
Response success
Unauthorized access, invalid credentials were used.
Access forbidden. Current token does not have the necessary authority for the operation.
Resource was not found.
[- "0bf650c2-3b03-447b-8b1a-4eacb09b04cb",
- "2bcaef97-f6c7-4017-ba3b-a6b677d4b806"
]
{- "status": 200,
- "success": true
}
Deactivate zones in the request body
Zone ID
Response success
Unauthorized access, invalid credentials were used.
Access forbidden. Current token does not have the necessary authority for the operation.
Resource was not found.
[- "0bf650c2-3b03-447b-8b1a-4eacb09b04cb",
- "2bcaef97-f6c7-4017-ba3b-a6b677d4b806"
]
{- "status": 200,
- "success": true
}
Response success
Malformed request.
Unauthorized access, invalid credentials were used.
Access forbidden. Current token does not have the necessary authority for the operation.
Resource was not found.
Invalid data was sent.
[- "00:11:22:33:44:55",
- "66:77:88:99:00:AA"
]
{- "status": 200,
- "success": true
}
Response success
Malformed request.
Unauthorized access, invalid credentials were used.
Access forbidden. Current token does not have the necessary authority for the operation.
Resource was not found.
Invalid data was sent.
[- "00:11:22:33:44:55",
- "66:77:88:99:00:AA"
]
{- "status": 200,
- "success": true
}
Response success
Unauthorized access, invalid credentials were used.
[- {
- "SettingName": "SafetyBuffer",
- "SettingValue": "0.15",
- "Description": "Enabling this will create a buffer zone to alert an employee to an at risk zone entry",
- "DisplayName": "Global Safety Buffer",
- "IsActive": true
}
]
Response success
Unauthorized access, invalid credentials were used.
Access forbidden. Current token does not have the necessary authority for the operation.
Resource was not found.
{- "SettingName": "SafetyBuffer",
- "SettingValue": "0.15",
- "Description": "Enabling this will create a buffer zone to alert an employee to an at risk zone entry",
- "DisplayName": "Global Safety Buffer",
- "IsActive": true
}
{- "status": 200,
- "success": true
}
Response success
Unauthorized access, invalid credentials were used.
Access forbidden. Current token does not have the necessary authority for the operation.
Resource was not found.
{- "00:AA:BB:CC:DD:EE": 0.1
}
{- "status": 200,
- "success": true
}
Response success
Unauthorized access, invalid credentials were used.
Access forbidden. Current token does not have the necessary authority for the operation.
Resource was not found.
{- "status": 200,
- "success": true
}
Problem:
Uncertain about the URI used to connect to the Event Hub.
Solution:
Ensure that the ECD is properly connected to the local network
Plug a monitor onto the available ports on the ECD
Boot up the ECD
When fully started, the ECD base URI will be displayed on screen under the ZeroKey logo
Knowing the base URI, the full Event Hub URI can be constructed following the following formats:
Problem:
Uncertain about the base URI used to construct all API calls.
Solution:
Ensure that the ECD is properly connected to the local network
Plug a monitor onto the available ports on the ECD
Boot up the ECD
When fully started, the ECD base URI will be displayed on screen under the ZeroKey logo
Knowing the base URI, the full all API endpoints can be constructed following the following formats:
Note: The specific API endpoints are case-sensitive, so please ensure that your URI fully matches what is provide in the API document.
Problem:
The QRTLS only accepts JSON formatted API request bodies. If a request is made without, or not using, JSON MIME types, the calls will be rejected.
Solution:
Ensure that your API request specifies JSON MIME type
Ensure that the data contains properly formatted JSON data string
Problem:
When an Event Hub connection is established without an Endpoint ID from the API connection call, or with a bad message filter, you will not receive any event messages from the Event Hub.
Solution:
Obtain a valid OAuth2 token, or API key from QRTLS
Initiate/update SignalR connection with the proper filters
Ensure that you have started and is subscribed to the Event Hub events
function connectToEventHub(endpoint, id)
{
var connection = new signalR.HubConnectionBuilder()
.withUrl(eventHubUri, // Refer to the '1.1 Event Hub URI' section of this guide
{
accessTokenFactory: () => {
return endpointId; // Returned from the API call in Step 2
}
})
.build();
// The event subscription, note that the string 'Event' is case sensitive
connection.on("Event", function (message) {
console.log(message);
});
// Start the connection
connection.start().then(function () {
console.log("Connected to Event Hub!");
}).catch(function (err) {
return console.error(err.toString());
});
}
Problem:
If the Event Hub connection filtered used does not include positional data, you will not receive any positional event messages.
Solution:
dashboard
, and position_events
filter will contain positional event messagesFilterTemplate
options, or alternatively use the custom filter options. When a template is selected, the custom filter options will be ignored. Simply leave the FilterTemplate
field empty, or set it to none
to enable the custom filter options.Problem:
If the QRTLS has not been calibrated, or has a poor spatial calibration, the system will not be able to calculate valid positional data.
Solution:
Problem:
The ZeroKey Gateway device is the key component in relaying data from the Anchor and Mobiles in the network. If it is not physically connected to the ECD, QRTLS will not have any data to generate the positional messages.
Solution:
Find the USB to Micro B cable packaged with the kit
Plug the Micro B end of the cable into the Gateway device
Plug the USB end of the cable into the ECD
Ensure that the built-in LED on the Gateway device lights up
Problem:
If either the Mobile or the Anchor devices are not turned on, there will not be sufficient data for the QRTLS to generate the positional messages.
Solution: