Link Search Menu Expand Document

Quuppa Telemetry Interface

Jun 14 2023 at 12:00 AM

  1. Introduction
  2. Aim
  3. Approach
    1. Device Functionality Overview
      1. Applications
      2. Cloud
      3. Edge
      4. Network
      5. Devices
      6. Tools
      7. Capability
      8. Protocol Information
    2. Integrations Plan
      1. Design Specifications
      2. Device Configuration Options
      3. Device Configuration Definitions
      4. QuuppaOptions (Additional JSON Configuration File)
  4. Usage
    1. Steps On How To Deploy And Configure The Driver
    2. Device Configuration Example And Walkthrough
  5. Routing Logic
    1. SocialEvents Device
    2. Quuppa Device
    3. Zoning Device
    4. TagGrouping Device
  6. External References
  7. Release Notes

Introduction

Quuppa is the Real-Life Search Engine that keeps track of all your assets. Accurate and reliable location data enables streamlined operations, optimised processes, and improved safety. You will save time, effort, materials, and even lives. Quuppa Indoor Positioning offers a cutting-edge solution for companies in various industries. With highly accurate positioning, low maintenance and limitless expandability, our technology can help streamline operations, improve safety and enhance the customer experience. Quuppa solutions include:

  • Industry
  • Smart Office
  • Logistics
  • Healthcare
  • Retail
  • Safety and Security
  • Sports
  • Museums and Events

Quuppa

Figure 1 - Quuppa Logo (Source: https://www.quuppa.com)

For more information on Quuppa, visit their website by clicking on this link.

Aim

The original purpose of the driver was to monitor social distance between tag bearers during the Covid Pandemic. The driver would be configured to a certain distance and if tags would be closer than the specified distance, it would cause a warning event to be triggered. Since the original implementation, the purpose of the driver expanded to Asset tracking as well as “Zone Tracking”, which have the purpose to monitor the movements of tags within a specified environment. Quuppa currently supports:

  • Asset Tracking
  • Distance Monitoring
  • Environment Monitoring

Approach

Quuppa uses locators and trackers (also known as tags) to monitor an environment which is given a unique identifier called the CoordinateSystemId. The Tags relay their information to the locators which is then passed on to a Quuppa API (also known as the QPE: Quuppa Positioning Engine). From here we can pull the Data using predefined Quuppa API calls. The data that is periodically captured from the Quuppa API is stored within internal caches that are periodically cleaned to support new data. The data caches are used to report data to the Commander platform.

Device Functionality Overview

The Quuppa Intelligent Locating System™ is a complete technology platform for location-based services and applications. It provides accurate real-time tracking for tags, devices and sensors.

At its core, the Quuppa system uses Locators to receive signals from Tags, and the Positioning Engine calculates the locations and relays the data. In addition, the system provides a comprehensive toolkit for planning, testing, configuring, installation, management, and integration with other systems.

The system features and functions are presented at different layers as shown in Figure 2.

Quuppa

Figure 2 - System Features and Functions Layers (Source: https://www.quuppa.com/products/)

Applications

  • Applications can range from simple tracking and monitoring solutions to complex systems that integrate with other IoT devices and platforms.

  • Using the Quuppa system as a foundation, Partners can offer their customers state-of-the-art technology solutions to enhance their operations and drive their business forward.

Cloud

  • Quuppa Site Manager (QSM) is an essential tool for Enterprise users who want to control all their Quuppa systems from a single web-based interface.

  • Quuppa Mobile Deployment Tool (QMD) simplifies system deployment and reduces the time and resources required for installation.

  • Quuppa Rules Engine allows users to create custom rules and actions based on data received from tags and sensors.

  • Quuppa Customer Portal is a web-based platform designed for Quuppa customers to manage their Quuppa systems and access various resources and support services.

Edge

  • Quuppa Positioning Engine (QPE) is the core software of the Quuppa Intelligent Locating System™. It receives data from the Locators, runs it through advanced positioning algorithms and provides a standard JSON / REST – push / pull API that allows seamless integration with other systems.

  • Quuppa Controller is an edge device preconfigured with the Quuppa Positioning Engine software and designed to connect to the Quuppa Site Manager. This enables secure, real-time, full-duplex communication between the Controller and the Site Manager.

  • Quuppa Lite is the perfect solution for use cases where precise location throughout the facility is not mandatory, but where reliable real-time presence detection is still required.

  • Data Gateway allows the Quuppa System to collect and transmit additional sensor data alongside location. This data can include information such as temperature, humidity, air quality and machinery status.

Network

  • Quuppa Locators act as the receiving units for the Quuppa Intelligent Locating System™. They receive signals from tags or other Bluetooth-enabled devices and send the data to the Quuppa Positioning Engine, which uses advanced proprietary algorithms to calculate the locations.

  • Quuppa Q-Port is a passive, Power over Ethernet (PoE) powered device that acts as a cable concentration unit for the Quuppa Locators. It allows for creating a star topology arrangement for the Locator network, which in turn simplifies infrastructure installation and management, significantly reduces cabling and lowers deployment costs, especially in larger areas.

  • Quuppa Q-Link is a wireless bridge that allows the Quuppa Locators to be connected to the network via the built-in Bluetooth connectivity option. This is particularly useful for extending the Quuppa system to areas where pulling Ethernet cables is not practical or possible, such as outdoors or other hard-to-reach locations.

Devices

  • The Quuppa system is compatible with various Bluetooth tags, devices and sensors.

  • The all-purpose tags, the QT1-1 and QT3-1, are small, lightweight tags with a button and LED, ideal for tracking assets or people. The QT1-1 has a battery life of up to three years, while the QT3-1 offers a battery life of up to ten years and is only slightly larger than the QT1-1.

Tools

  • Quuppa Site Planner (QSP) is a software tool that allows users to design, plan, deploy and configure their Quuppa systems. It helps users optimise Locator placement, achieve optimal coverage and accuracy, and evaluate the performance of their deployment.

  • Quuppa System Simulator (QSS) is a powerful tool that allows users to simulate and test their Quuppa systems in a virtual environment. It generates data equivalent to the data from the physical installation, allowing users to evaluate and optimise system performance and develop end-user applications in the early stages of the deployment process.

  • Quuppa Data Player (QDP) is a powerful tool for replaying recorded data and analysing system performance. The visualisation tools offered by the software, such as heat maps and spaghetti diagrams, allow users to gain valuable insight into tag or device movement, identify areas of high or low traffic, optimise Locator placement and evaluate system performance under different scenarios. By using these visualisation tools, users can improve the accuracy and coverage of their systems and better understand the behaviour of tags or devices within the system’s coverage area.

Quuppa

Figure 3 - Quuppa Data Player

Capability

The Quuppa Tracking system consists of Locators that track any tags within their operational range. A Quuppa integration consists of:

  • Locators
  • Tags
  • Quuppa API - To store data accumulated by the Locators

Some integrations include:

  • Asset Tracking
  • People Tracking
  • Social Distancing

Protocol Information

The Quuppa API keeps track of different data which is then cached on the V-Raptor driver. The cached data is pulled via different API calls, namely:

  • getProjectInfo -> gets any data associated with the Coordinate System project. This involves mainly the floor plan integration. All the other calls are dependent on this API call to gather the relevant data per project.
  • getTagData -> Gets any data relating to the Quuppa tags within the CoordinateSystem.
  • getTagPosition -> Gets any data relating to the Tag Positions within the CoordinateSystem.

This driver implements the HTTP protocol.

When using the HTTP API calls, the following responses can be expected from the Quuppa API:

Project Info Response

{
    "message": "ProjectData",
    "responseTS": 1234567890,
    "status": "Ok",
    "coordinateSystems": [
        {
            "id": "4****l-be0f-1234-9c56-**********7",
            "name": "*********",
            "backgroundImages": [
                {
                    "visible": true,
                    "metersPerPixelX": 0.04697139521958503,
                    "yMeter": -3.5306553911205074,
                    "otherCoordSys": "",
                    "origoY": 1184.8604017784367,
                    "metersPerPixelY": 0.04698794609880264,
                    "origoX": 106.4477641472148,
                    "xMeter": -5,
                    "id": "Identification***",
                    "base64": "data:image/png;base64",
                    "heightMeter": 59.20481208449133,
                    "rotation": 0,
                    "alpha": 1,
                    "widthMeter": 83.84394046695928
                }
            ],
            "zones": [
                {
                    "locationLocked": false,
                    "id": "c*****73-b123-****-*678-90*******8",
                    "visible": true,
                    "color": "#ffffc800",
                    "name": "Testing Lab",
                    "polygonData": "25.13,15.04|25.09,10.28|32.49,10.26|32.49,15.00|25.13,15.04",
                    "polygonHoles": []
                }
            ],
            "polygons": [
                {
                    "locationLocked": false,
                    "id": "5*3*****-w****7-4ea4-9**3-*******gh",
                    "visible": true,
                    "color": "#ff0000ff",
                    "name": "345ggggggg",
                    "trackingAreas": [
                        {
                            "minZ": 1.2000000476837158,
                            "track3d": false,
                            "id": "*****be**-y**9-****-8**8-f******23",
                            "name": "office"
                        }
                    ],
                    "polygonData": "-5.00,-3.56|78.85,-3.53|78.83,55.67|-5.00,55.67|-5.00,-3.56",
                    "polygonHoles": []
                }
            ],
            "locators": [
                {
                    "orientation": [
                        0.1588,
                        0,
                        0
                    ],
                    "visible": true,
                    "location": [
                        41.7,
                        18.39,
                        3
                    ],
                    "isOrientationSetManually": true,
                    "id": "****fgh****",
                    "locationLocked": true,
                    "associatedAreas": [
                        "********-***-0865-****-*******"
                    ],
                    "locationLockedY": true,
                    "color": "#ff0000ff",
                    "locationLockedZ": true,
                    "locatorChannel": "Proprietary",
                    "name": "L001",
                    "locationLockedX": true,
                    "locatorType": "LD6L",
                    "notes": ""
                }
            ]
        }
    ],
    "command": "http://123.**.*.**:0000/qpe/getProjectInfo?version=2",
    "code": 0,
    "version": "2.0"
}

Sample Tag Data Response

{
    "tags": [
        {
            "tagId": "00001234567",
            "tagName": null,
            "color": "#FF0000",
            "tagGroupName": "Named Tags",
            "locationType": "position",
            "locationRadius": 0.53,
            "location": [
                "58.26",
                "33.54",
                "1.20"
            ],
            "locationMovementStatus": "moving",
            "locationTs": 168605381576400,
            "locationCoordSysId": "******-***f-****-9**9-********",
            "locationCoordSysName": "********",
            "locationZoneIds": [
                "*******-0****-****-****e-********"
            ],
            "locationZoneNames": [
                "Charlie"
            ],
            "batteryAlarm": "ok",
            "button1LastPressTs": null,
            "button1State": "notPushed",
            "lastPacketTs": 168605381675600,
            "rssi": 27.0,
            "rssiLocatorCount": 11
        },
        {
            "tagId": "01******",
            "tagName": null,
            "color": "#FF0000",
            "tagGroupName": "Named Tags",
            "locationType": "position",
            "locationRadius": 0.4,
            "location": [
                "67.18",
                "34.75",
                "1.20"
            ],
            "locationMovementStatus": "moving",
            "locationTs": 1234567890123,
            "locationCoordSysId": "******-****-****-****-**********",
            "locationCoordSysName": "CoordSys001",
            "locationZoneIds": [
                "92*****f-0**d-4***-9***e-******",
                "****e-***4-***c-****d-90******8"
            ],
            "locationZoneNames": [
                "Charlie",
                "Bravo"
            ],
            "batteryAlarm": "ok",
            "button1LastPressTs": null,
            "button1State": "notPushed",
            "lastPacketTs": 168605381702800,
            "rssi": 30.0,
            "rssiLocatorCount": 11
        }
    ],
    "Code": 0,
    "Status": "Ok",
    "Message": "Tag data",
    "Version": "1.0",
    "ResponseTs": 168605381705900
}

Sample Tag Position Response

{
  "message": "TagPosition",
  "tags": [
    {
      "position": [
        55.41,
        18.48,
        1.2
      ],
      "id": "b*******a",
      "covarianceMatrix": [
        0.24,
        0.04,
        0.04,
        0.2
      ],
      "areaName": "office",
      "color": "#FF0000",
      "smoothedPosition": [
        55.41,
        18.48,
        1.2
      ],
      "name": null,
      "smoothedPositionAccuracy": 0.16,
      "coordinateSystemName": "C******",
      "zones": [
        {
          "id": "*******-****-****-****-********",
          "name": "Sales Area"
        },
        {
          "id": "*******-****-****-****-***********",
          "name": "Letitia's desk"
        }
      ],
      "positionTS": 1591620430711,
      "coordinateSystemId": "*******-****-****-****-**********",
      "areaId": "*******-****-****-****-*********",
      "positionAccuracy": 0.15
    },
    {
      "position": [
        43.4,
        18.33,
        1.2
      ],
      "id": "a*********h",
      "covarianceMatrix": [
        0.42,
        -0.06,
        -0.06,
        0.23
      ],
      "areaName": "office",
      "color": "#FF0000",
      "smoothedPosition": [
        43.4,
        18.33,
        1.2
      ],
      "name": null,
      "smoothedPositionAccuracy": 0.2,
      "coordinateSystemName": "C********",
      "zones": [
        {
          "id": "*******-****-****-****-********",
          "name": "IT Administration"
        }
      ],
      "positionTS": 1591620429887,
      "coordinateSystemId": "*******-****-****-****-**********",
      "areaId": "*******-****-****-****-*********",
      "positionAccuracy": 0.2
    }
  ],
  "responseTS": 1591620437080,
  "status": "Ok",
  "command": "http://100.**.2.**:*****/qpe/getTagPosition?version=2",
  "code": 0,
  "version": "2.1"
}

Integrations Plan

Design Specifications

The Quuppa driver only uses HTTP API Calls to retrieve telemetry that is stored on the Quuppa API. The Data from the API calls is stored in a local cache that periodically updates to the latest telemetry that is retrieved from the Quuppa API. There are 4 different device types that are supported for this driver namely:

  1. Quuppa - Relays the location information of the tags.
  2. SocialEvents - Keeps track of the distance between tags.
  3. Zoning - Relays overall tag data per endpoint, endpoint device name being the TagId of the specific tag.
  4. ZoneGrouping - Relays tag location and movement status per group name in and RFID type object. Endpoint device name will be associated with the array of Group Names.

Here is a run down of the drivers device configuration

Device Configuration Options

Quuppa Device

{
  "Devices": {
    "IoTOffice": {
      "Enabled": false,
      "DeviceType": "Quuppa",
      "GatewayId": "**********",
      "GroupName": "Office",
      "CoordinateSystemId": "********-****-****-****-**********",
      "ImagePath": "$data$/BackgroundImages/IoT.nxt_Office_1stFloor_Monitored.png",
      "ImageWidth": 1920,
      "ImageHeight": 1080,
      "BackgroundLeft": 574,
      "BackgroundTop": 486,
      "BackgroundRight": 1398,
      "BackgroundBottom": 993,
      "LeftWhitespaceWidth": 220,
      "RightWhitespaceWidth": 220,
      "TopWhitespaceWidth": 75,
      "BottomWhitespaceWidth": 75,
      "Debug": true
    }
  }
}

SocialEvents Device

{
  "Devices": {
    "SocialEvents": {
      "Enabled": false,
      "DeviceType": "SocialEvents",
      "GatewayId": "******-****-****-****-**********",
      "GroupName": "Office",
      "CoordinateSystemId": "******-****-****-****-**********"
    }
  }
}

Zoning Device

{
  "Devices": {
    "ZoningEvents": {
      "Enabled": true,
      "DeviceType": "Zoning",
      "GatewayId": "******-****-****-****-**********",
      "GroupName": "Workshop",
      "CoordinateSystemId": "******-****-****-****-**********",
      "ActionDelay": 5000,
      "ImagePath": "$data$/BackgroundImages/IoT.nxt_Office_1stFloor_Monitored.png",
      "ImageWidth": 1920,
      "ImageHeight": 1080,
      "BackgroundLeft": 574,
      "BackgroundTop": 486,
      "BackgroundRight": 1398,
      "BackgroundBottom": 993,
      "LeftWhitespaceWidth": 220,
      "RightWhitespaceWidth": 220,
      "TopWhitespaceWidth": 75,
      "BottomWhitespaceWidth": 75,
      "Debug": true
    }
  }
}

ZoneGrouping Device

{
  "Devices": {
    "TagGroupingDevice": {
      "Enabled": true,
      "DeviceType": "ZoneGrouping",
      "GatewayId": "******-****-****-****-**********",
      "GroupName": "Workshop",
      "CoordinateSystemId": "******-****-****-****-**********",
      "ActionDelay": 5000,
      "TagGroupNames": ["Named Tags"],
      "ImagePath": "$data$/BackgroundImages/IoT.nxt_Office_1stFloor_Monitored.png",
      "ImageWidth": 1920,
      "ImageHeight": 1080,
      "BackgroundLeft": 574,
      "BackgroundTop": 486,
      "BackgroundRight": 1398,
      "BackgroundBottom": 993,
      "LeftWhitespaceWidth": 220,
      "RightWhitespaceWidth": 220,
      "TopWhitespaceWidth": 75,
      "BottomWhitespaceWidth": 75,
      "Debug": true
    }
  }
}

Device Configuration Definitions

Quuppa Device

Property NameDescriptionTypeDefault
QuuppaDeviceThe device name for this device. This has to be specified.string-
DeviceTypeThe value for this device is “Quuppa”string-
EnabledWhether this device is enabled. If set to False then the device will not be executed. Defaults to false.boolfalse
GatewayIdThe gateway identifier. If this is left blank, then the Gateway ID of the Collector Service will be used.string-
GroupNameThe group name of the device.string-
ActionDelayTime delay between each execution. Set this to zero (0) to use the general time delay defined in Task Scheduler Options.int-
DebugSets whether debug logging is captured (Debug logs).boolfalse
CoordinateSystemIdThe coordinate system id to track.string-
MapToImageWhether the tag information should be mapped to a different image than the standard background image provided by Quuppa.boolfalse
BackgroundTopThe top most Y pixel coordinate of where the display image is on the background image. Note: Do not count whitespace in your calculations.int-
BackgroundLeftThe left most Y pixel coordinate of where the display image is on the background image. Note: Do not count whitespace in your calculations.int-
BackgroundRightThe right most Y pixel coordinate of where the display image is on the background image. Note: Do not count whitespace in your calculations.int-
BackgroundBottomThe bottom most Y pixel coordinate of where the display image is on the background image. Note: Do not count whitespace in your calculations.int-
ImagePathThe full path to the display image. This is used when QuuppaOptions.DebugExportImages property value is set to true.string-
ImageWidthThe total width, in pixels, of the display image, including whitespace.int-
ImageHeightThe height, in pixels, of the display image, including whitespace.int-
LeftWhitespaceWidthThe width of the left most whitespace.int-
RightWhitespaceWidthThe width of the right most whitespace.int-
TopWhitespaceWidthThe width of the top most whitespace.int-
BottomWhitespaceWidthThe width of the bottom most whitespace.int-

Social Events Device

PropertyDescriptionTypeDefaults
SocialEventsDeviceThe device name for this device. This has to be specified.string-
EnabledGets or sets whether this device is enabled.boolfalse????
DeviceTypeGets or sets the type of this device. To use the Social Events device, this has to be set to Social Events for this specific device to workstring-
GatewayIdGets or sets the gateway identifier.stringLeave this blank or null to use the collector’s service identifier.
GroupNameGets or sets the group name, if required.string-
CoordinateSystemIdThe identifier that is used to map the acquired data from the Quuppa API to [Required]string-

Zoning Device

PropertyDescriptionTypeDefaults
ZoningEventsThe device name for this device. This has to be specifiedstring-
EnabledGets or sets whether this device is enabled.boolfalse????
DeviceTypeGets or sets the type of this device. To use the Zoning device, this has to be set to Zoning for this specific device to workstring-
DebugGets or sets whether debug information is written to console/log file for this specific deviceboolfalse
GatewayIdGets or sets the gateway identifier.stringLeave this blank or null to use the collector’s service identifier.
GroupNameGets or sets the group name, if required.string-
CoordinateSystemIdThe identifier that is used to map the acquired data from the Quuppa API to [Required]string-
MapToImageWhether the tag information should be mapped to a different image than the standard background image provided by Quuppa.boolfalse
BackgroundTopThe top most Y pixel coordinate of where the display image is on the background image. Note: Do not count whitespace in your calculations.int-
BackgroundLeftThe left most Y pixel coordinate of where the display image is on the background image. Note: Do not count whitespace in your calculations.int-
BackgroundRightThe right most Y pixel coordinate of where the display image is on the background image. Note: Do not count whitespace in your calculations.int-
BackgroundBottomThe bottom most Y pixel coordinate of where the display image is on the background image. Note: Do not count whitespace in your calculations.int-
ImagePathThe full path to the display image. This is used when QuuppaOptions.DebugExportImages property value is set to true.string-
ImageWidthThe total width, in pixels, of the display image, including whitespace.int-
ImageHeightThe height, in pixels, of the display image, including whitespace.int-
LeftWhitespaceWidthThe width of the left most whitespace.int-
RightWhitespaceWidthThe width of the right most whitespace.int-
TopWhitespaceWidthThe width of the top most whitespace.int-
BottomWhitespaceWidthThe width of the bottom most whitespace.int-

ZoneGrouping Device

PropertyDescriptionTypeDefaults
TagGroupingDeviceThe device name for this device. This has to be specifiedstring-
EnabledGets or sets whether this device is enabled.boolfalse????
DeviceTypeGets or sets the type of this device. To use the TagGrouping device, this has to be set to TagGrouping for this specific device to workstring-
DebugGets or sets whether debug information is written to console/log file for this specific device.boolfalse
GatewayIdGets or sets the gateway identifier.stringLeave this blank or null to use the collector’s service identifier.
GroupNameGets or sets the group name, if required.string-
CoordinateSystemIdThe identifier that is used to map the acquired data from the Quuppa API to [Required]string-
TagGroupNamesAn array of Tag Group Names within the Coordinate systemobject: string array-
MapToImageWhether the tag information should be mapped to a different image than the standard background image provided by Quuppa.boolfalse
BackgroundTopThe top most Y pixel coordinate of where the display image is on the background image. Note: Do not count whitespace in your calculations.int-
BackgroundLeftThe left most Y pixel coordinate of where the display image is on the background image. Note: Do not count whitespace in your calculations.int-
BackgroundRightThe right most Y pixel coordinate of where the display image is on the background image. Note: Do not count whitespace in your calculations.int-
BackgroundBottomThe bottom most Y pixel coordinate of where the display image is on the background image. Note: Do not count whitespace in your calculations.int-
ImagePathThe full path to the display image. This is used when QuuppaOptions.DebugExportImages property value is set to true.string-
ImageWidthThe total width, in pixels, of the display image, including whitespace.int-
ImageHeightThe height, in pixels, of the display image, including whitespace.int-
LeftWhitespaceWidthThe width of the left most whitespace.int-
RightWhitespaceWidthThe width of the right most whitespace.int-
TopWhitespaceWidthThe width of the top most whitespace.int-
BottomWhitespaceWidthThe width of the bottom most whitespace.int-

QuuppaOptions (Additional JSON Configuration File)

{
    "QuuppaOptions": {
        "Servers": {
            "IoTnxtOffice": {
                "Enabled": true,
                "ServerUrl": "http://123.4.5.6:*****/****/",
                "UpdateInterval": 1000,
                "TagTimeout": 30000,
                "CacheItemAgeLimitMins": 10,
                "Debug": true
            },
            "IoTnxtOfficeSecured": {
                "Enabled": false,
                "ServerUrl": "http://123.4.5.6:*****/****/",
                "Authorization": "BasicAuth",
                "UserName": "integration",
                "Password": "**************",
                "UpdateInterval": 1000,
                "TagTimeout": 30000,
                "CacheItemAgeLimitMins": 10,
                "Debug": true
            }
        },
        "AsyncLockTimeout": 10000,
        "EnableSocialDistanceEvents": false,
        "SocialDistanceMinimum": 2.0,
        "SocialDistanceLevel": 2,
        "MaxSocialDistanceTimeDifference": 10000,
        "SocialDistanceEventTimeSpan": 30000,
        "DebugExportImages": false,
        "MaxDebugExportImageCount": 10
    }
}

Quuppa Options Definitions

PropertyDescriptionTypeDefaults
QuuppaOptionsOptions used by each device instance that has been initialised. Examples of devicetypes(TagGrouping, Quuppa, Zoning and SocialEvents)string-
IoTnxtOfficeThe server name for this device. This has to be specifiedstring-
EnabledDetermines whether the server will be enabled or not. If it is set to true it will be enabled, and if set to false the server will not be enabled.bool-
ServerUrlThe URL we are connecting to, to get data for that specific device.string-
UpdateIntervalThis is how frequently we update our caches according to the server URL.int-
TagTimeoutThis is the time frame from the first time we read if something went wrong, it is 30,000 milliseconds.  
So that will be a 30 second timer.int- 
CacheItemAgeLimitMinsThis is how long something will remain in the cache. If it exceeds 10 minutes, that specific item in the cache will be cleared.int-
DebugSets whether debug logging is captured (Debug logs).bool-

IoTnxt Office Secured Definitions

PropertyDescriptionTypeDefaults
IoTnxtOfficeSecuredThe server name for this device. This has to be specifiedstring-
EnabledDetermines whether the device will be enabled or not. If it is set to true it will be enabled, and if set to false the device will not be enabled.boolfalse
ServerUrlThe URL we are connecting to, to get data for that specific device.string-
AuthorizationIf you want a secured server connection, this is were you need to define what authorization you will be using.string-
UsernameThe username to login and authorize access.string-
PasswordThe password to login and authorize access.string-
UpdateIntervalThis is how frequently we update our caches according to the server URL.int-
TagTimeoutThis is the time frame from the first time we read if something went wrong, it is 30,000 milliseconds.  
So that will be a 30 second timer.int- 
CacheItemAgeLimitMinsThis is how long something will remain in the cache. If it exceeds 10 minutes, that specific item in the cache will be cleared.int-
DebugSets whether debug logging is captured (Debug logs).boolfalse
AsyncLockTimeoutAsynchronous timeout used for various calls.int10 000
EnableSocialDistanceEventsChecks for violations of social distances.This has to be set to true, so this will enable social distance monitoring between the tags.boolfalse
SocialDistanceMinimumThe minimum allowed social distance, in meters. You can define the lowest parameter of how close two objects can be. So if two tags are closer than two meters, it will log a warning and it will fire an alarm.int2
SocialDistanceLevelThe level of strictness of the social distance calculation. (2) Measured-Accuracy, (1) Measured, (0) Measured+Accuracy.This is an indicator determining how important social distancing is.int1
MaxSocialDistanceTimeDifferenceThe maximum time difference, in milliseconds, between two location readings that social distance is considered valid.int3 000
SocialDistanceEventTimeSpanThe amount of time the social distance event is highlighted.int20 000
DebugExportImagesChecks whether debug images are exported for the locations.boolfalse
MaxDebugExportImageCountThe maximum debug image count.int10

Usage

Steps On How To Deploy And Configure The Driver

The link below demonstrates the steps to follow when a user deploys and configures a V-Raptor driver:

Deployment Manager Application

Device Configuration Example And Walkthrough

Here is an example config, with a walkthrough below it.

{
  "Devices": {
    "IoTOffice": {
      "Enabled": false,
      "DeviceType": "Quuppa",
      "GatewayId": "******-****-****-****-**********",
      "GroupName": "Office",
      "CoordinateSystemId": "******-****-****-****-**********",
      "ImagePath": "$data$/BackgroundImages/IoT.nxt_Office_1stFloor_Monitored.png",
      "ImageWidth": 1920,
      "ImageHeight": 1080,
      "BackgroundLeft": 574,
      "BackgroundTop": 486,
      "BackgroundRight": 1398,
      "BackgroundBottom": 993,
      "LeftWhitespaceWidth": 220,
      "RightWhitespaceWidth": 220,
      "TopWhitespaceWidth": 75,
      "BottomWhitespaceWidth": 75,
      "Debug": true
    },
    "SocialEvents": {
      "Enabled": false,
      "DeviceType": "SocialEvents",
      "GatewayId": "r******-****-****-****-**********",
      "GroupName": "Office",
      "CoordinateSystemId": "******-****-****-****-**********"
    },
    "ZoningEvents": {
      "Enabled": true,
      "DeviceType": "Zoning",
      "GatewayId": "******-****-****-****-**********",
      "GroupName": "Workshop",
      "CoordinateSystemId": "******-****-****-****-**********",
      "ActionDelay": 300000,\
      "ImagePath": "$data$/BackgroundImages/IoT.nxt_Office_1stFloor_Monitored.png",
      "ImageWidth": 1920,
      "ImageHeight": 1080,
      "BackgroundLeft": 574,
      "BackgroundTop": 486,
      "BackgroundRight": 1398,
      "BackgroundBottom": 993,
      "LeftWhitespaceWidth": 220,
      "RightWhitespaceWidth": 220,
      "TopWhitespaceWidth": 75,
      "BottomWhitespaceWidth": 75,
    },
    "TagGroupingDevice": {
      "Enabled": true,
      "DeviceType": "ZoneGrouping",
      "GatewayId": "******-****-****-****-**********",
      "GroupName": "Workshop",
      "CoordinateSystemId": "******-****-****-****-**********",
      "ActionDelay": 300000,
      "TagGroupNames": ["Named Tags"],
      "ImagePath": "$data$/BackgroundImages/IoT.nxt_Office_1stFloor_Monitored.png",
      "ImageWidth": 1920,
      "ImageHeight": 1080,
      "BackgroundLeft": 574,
      "BackgroundTop": 486,
      "BackgroundRight": 1398,
      "BackgroundBottom": 993,
      "LeftWhitespaceWidth": 220,
      "RightWhitespaceWidth": 220,
      "TopWhitespaceWidth": 75,
      "BottomWhitespaceWidth": 75,
    }
  }
}

QuuppaDevice

  • We want this device to be enabled, so we set ‘enabled’ to true.
  • We want to make sure that we have the Quuppa device running, so we specify the ‘DeviceType’ as ‘Quuppa’.
  • We want this driver to register each meter as its own gateway, so we set GatewayId to ‘Zoning’ meaning we will be expecting a routing key in Commander like this <Options.GatewayId>.<Options.GroupName>:<{DeviceDependent}>|<Options.DeviceType> -. This is where we will be sending the data to.
  • We set the GroupName to ‘OFFICE’ (because we want a specific gateway path in Commander).
  • CoordinateSystemId, we set this to the coordinate system we are targeting.
  • We load an image into the configuration and define the image path. Parameters used for coordinate normalization are set because for it to work on Commander, all the coordinates have to be normalized from zero to one scale.
  • Set the coordinate normalization properties which encompasses ImageWidth, ImageHeight, BackgroundLeft, BackgroundTop, BackgroundRight, BackgroundBottom, LeftWhitespaceWidth, RightWhitespaceWidth, TopWhitespaceWidth, BottomWhitespaceWidth.
  • We want to see the device logging, so we set ‘Debug’ to true. Note - logging still needs to be turned on via the config ‘Logging.json’.

SocialEvents

  • We want this device to be enabled, so we set ‘enabled’ to true.
  • We want to make sure that we have the Quuppa device running, so we specify the ‘DeviceType’ as ‘Quuppa’.
  • We want this driver to register each meter as its own gateway, so we set GatewayId to ‘Zoning’ meaning we will be expecting a routing key in Commander like this <Options.GatewayId>.<Options.GroupName>:<{DeviceDependent}>|<Options.DeviceType> -. This is where we will be sending the data to.
  • We set the GroupName to ‘OFFICE’ (because we want a specific gateway path in Commander).
  • CoordinateSystemId, we set this to the coordinate system we are targeting.

ZoningEvents

  • We want this device to be enabled, so we set ‘enabled’ to true.
  • We want to make sure that we have the Quuppa device running, so we specify the ‘DeviceType’ as ‘Quuppa’.
  • We want this driver to register each meter as its own gateway, so we set GatewayId to ‘Zoning’ meaning we will be expecting a routing key in Commander like this <Options.GatewayId>.<Options.GroupName>:<{DeviceDependent}>|<Options.DeviceType> -. This is where we will be sending the data to.
  • We set the GroupName to ‘WORKSHOP’ (because we want a specific gateway path in Commander).
  • CoordinateSystemId, we set this to the coordinate system we are targeting.
  • We want this device to match meter readings every 5min, so we set the ActionDelay to 300000ms.
  • We load an image into the configuration and define the image path. Parameters used for coordinate normalization are set because for it to work on Commander, all the coordinates have to be normalized from zero to one scale.
  • Set the coordinate normalization properties which encompasses ImageWidth, ImageHeight, BackgroundLeft, BackgroundTop, BackgroundRight, BackgroundBottom, LeftWhitespaceWidth, RightWhitespaceWidth, TopWhitespaceWidth, BottomWhitespaceWidth.

TagGroupingDevice

  • We want this device to be enabled, so we set ‘enabled’ to true.
  • We want to make sure that we have the Quuppa device running, so we specify the ‘DeviceType’ as ‘Quuppa’.
  • We want this driver to register each meter as its own gateway, so we set GatewayId to ‘Zoning’ meaning we will be expecting a routing key in Commander like this <Options.GatewayId>.<Options.GroupName>:<{DeviceDependent}>|<Options.DeviceType> -. This is where we will be sending the data to.
  • We set the GroupName to ‘WORKSHOP’ (because we want a specific gateway path in Commander).
  • CoordinateSystemId, we set this to the coordinate system we are targeting.
  • We want this device to match meter readings every 5min, so we set the ActionDelay to 300000ms.
  • TagGroupNames, array of Tag Group Names within the Coordinate system. This will group tags via their group name. Tracking endpoints will be sent based on the Group names defined here.
  • We load an image into the configuration and define the image path. Parameters used for coordinate normalization are set because for it to work on Commander, all the coordinates have to be normalized from zero to one scale.
  • Set the coordinate normalization properties which encompasses ImageWidth, ImageHeight, BackgroundLeft, BackgroundTop, BackgroundRight, BackgroundBottom, LeftWhitespaceWidth, RightWhitespaceWidth, TopWhitespaceWidth, BottomWhitespaceWidth.

Routing Logic

SocialEvents Device

deviceInfo.SetGatewayId(Options.GatewayId);
deviceInfo.SetDeviceName(Options.DeviceName);
deviceInfo.SetDeviceType(Options.DeviceType);
deviceInfo.SetGroupName(Options.GroupName);

Quuppa Device

deviceInfo.SetGatewayId(Options.GatewayId);
deviceInfo.SetDeviceName(coordinateSystemId);
deviceInfo.SetDeviceType(DeviceType);
deviceInfo.SetGroupName(Options.GroupName);

Zoning Device

deviceInfo.SetGatewayId(Options.GatewayId);
deviceInfo.SetDeviceName(tag.Id);
deviceInfo.SetDeviceType(DeviceType);
deviceInfo.SetGroupName(Options.GroupName);

TagGrouping Device

deviceInfo.SetGatewayId(Options.GatewayId);
deviceInfo.SetDeviceName(groupName);
deviceInfo.SetDeviceType(DeviceType);
deviceInfo.SetGroupName(Options.GroupName);

Each group within the Group Array object will have their own dedicated endpoint which contains a collection of tags that is set up in a RFID format.

External References

Quuppa

Figure 4 - Coordinate Mapping

For more information on Quuppa, visit their website by clicking on this https://www.quuppa.com/.

Release Notes

VersionDescriptionRelease Date
4.0.49.1-alpha-2306111701Enhancement: Zoning + Tag Grouping2023-06-28 (QA approval pending)