HERE Tracking Developer's Guide Version 1.0 - HERE Technologies

Page created by Cecil Hawkins
 
CONTINUE READING
HERE Tracking
Developer's Guide
Version 1.0
Legal Notices
© 2019 HERE Global B.V. and its Affiliate(s). All rights reserved.

This material, including documentation and any related computer programs, is protected by copyright controlled by
HERE. All rights are reserved. Copying, including reproducing, storing, adapting or translating, any or all of this
material requires the prior written consent of HERE. This material also contains confidential information, which may
not be disclosed to others without the prior written consent of HERE.

Trademark Acknowledgements
HERE is trademark or registered trademark of HERE Global B.V. Other product and company names mentioned
herein may be trademarks or trade names of their respective owners.

Disclaimer
This content is provided "as-is" and without warranties of any kind, either express or implied, including, but not
limited to, the implied warranties of merchantability, fitness for a particular purpose, satisfactory quality and non-
infringement. HERE does not warrant that the content is error free and HERE does not warrant or make any
representations regarding the quality, correctness, accuracy, or reliability of the content. You should therefore
verify any information contained in the content before acting on it.

To the furthest extent permitted by law, under no circumstances, including without limitation the negligence of
HERE, shall HERE be liable for any damages, including, without limitation, direct, special, indirect, punitive,
consequential, exemplary and/ or incidental damages that result from the use or application of this content, even
if HERE or an authorized representative has been advised of the possibility of such damages.

                                                                                                                         1
Document Information
Product
 Name:      HERE Tracking
 Version:   Version 1.0

Document
 Name:      HERE Tracking - Developer's Guide
 ID:        ca942c18-ccd4-46f3-bab0-1f02b11615cc
 Status:    FINAL
 Date:      2019-04-26T13:13:10.869Z

                                                   2
Table of Contents
  Introduction

  Concepts

         Devices

             Device Licenses

             Device Authentication

         Telemetry

         Ingestion

         Positioning

         Shadows

         Traces

         Geofences

         Transitions

         Notifications

         Vendors

  Getting Started

         Creating a device licence

         Preparing the device

         Claiming ownership of a device

         Send data to the cloud

         Process data in the cloud

         Send data to the device

  Tips

         Optimize positioning result

         Optimize indoor positioning result

                                              3
Introduction

Introduction
HERE Tracking is a fast and flexible IoT location platform that makes it quick and easy to add location awareness to
your products.

HERE Tracking exposes a set of REST APIs and client libraries to enable location tracking and geofencing for a
variety of device form-factors including small-footprint (small memory and processing power) devices. HERE
Tracking also includes end-user applications on mobile and web to be used as reference apps to demonstrate the
product capabilities.

For the terms and conditions covering this documentation, see the HERE Documentation License.

Why Use HERE Tracking

HERE Tracking provides resources to address the following high-level use cases:

  FEATURE                   DESCRIPTION

                            Provides the APIs to connect all your tracker devices and to rapidly deploy your IoT
  Connect Devices
                            solution.

  Real-time Location        Track your devices indoor and outdoor, see traces on a map, create geofences and
  and Data                  get custom notifications.

                            Retrieve historical tracking data for analysis with data visualization tools such as
  Historical data
                            charts, graphs, and heatmaps.

Features

HERE Tracking builds upon a set of objects and backend capabilities that facilitate working with IoT devices in an
open and flexible manner. Here's a summary of the main features:

Devices

Add devices to the cloud and configure in detail how they report their geolocation and enviromental data.

Positioning

Use WiFi, Cell and Bluetooth LE to determine position on devices without GPS or in areas where GPS is unavailable.

Shadows

Manage the configuration for your devices and access their reported geolocation and enviromental data.

Traces

Access current and historical data that a device collected.

Geofences

                                                                                                                     4
Introduction

Create circular and polygonal geofences on the map that trigger notifications when a device enters or exits a
geofence.

Notifications

Receive notifications via webhook when devices enter or leave geofences.

                                                                                                                5
Devices

Devices
Devices record position, sensor readings, WiFi, Bluetooth or network cell measurements and send them to HERE
Tracking.

Devices authenticate to HERE Tracking using an OAuth 1.0 header generated from their unique       deviceId    and
deviceSecret   .

Data sent by a device to HERE Tracking is not stored until the device is added to a user account. When a user adds a
device, the device is assigned a unique   trackingId   and the user gets secure access to the data generated by that
device via the     trackingId   .

A device can later be removed from the user account if it is sold or decommissioned. In this case, the   trackingId       is
dissociated from the device and the device can be added to another user account and assigned a new           trackingId   .
The original data will still be accessible to the original user but not the new data.

                                                                                                                              6
Device Licenses

Device License
A   deviceId   and   deviceSecret   pair. Every device needs this in order to authenticate against HERE Tracking.

                                                                                                                    7
Device Authentication

Authenticating a device
Every device must provide a valid access token when it sends telemetry to HERE Tracking. Tokens must be obtained
from HERE Tracking. A device must be added to a user account before it will be sent a valid access token.

HERE Tracking requires that you sign your requests for tokens. The signature method uses the OAuth 1.0 standard.
For more information on this standard, see the OAuth Core 1.0 specification.

   IMPORTANT You must create a new signature for each token request to HERE Tracking. Signatures can only be
   used once.

The process for generating a signed request is described in the API documentation.

                                                                                                                   8
Telemetry

Telemetry
This is the data sent by the device to HERE Tracking. The data must be accompanied by a valid access token to both
authenticate and authorize data storage.

Telemetry can contain GPS position, WiFi, Bluetooth or cell measurements along with a   payload   of sensor
measurements and a    timestamp   specifying the time at which these measurements were taken.

Telemetry recorded in the past can be uploaded to enable recording of offline sensor readings and positions. If
historical telemetry is uploaded, it is compared against associated geofences and transitions are recorded but
notifications are not generated as they may be significantly out-of-date.

                                                                                                                  9
Ingestion

Ingestion
A device can send its telemetry – GPS position, sensor readings, WiFi or Bluetooth scans – to HERE Tracking once it
has been provisioned with a license. If the device has not yet been added to a user account, the data will not be
stored.

   IMPORTANT Devices should use this endpoint to send data to HERE Tracking and not any other endpoint.

                                                                                                                    10
Positioning

Positioning
To have a position associated with a device, the request body must contain either a   position   or a   scan   object. If
both are provided, the scan is resolved to a position using the HERE Positioning API. The more accurate of the two
positions (provided and resolved) is used as the device's position.

For more details, see the HERE Positioning API documentation.

                                                                                                                            11
Shadows

Shadows
Shadows provide an effective way to manage configurations for devices that are only intermittently online.

Shadows are stored in HERE Tracking and contain two states of a device's configuration: The           reported    state and
the    desired    state.

The    reported    state contains the telemetry that was sent by the device when it was last online.

The    desired    state contains the settings that will be sent to the device when it next comes online.

      IMPORTANT Devices should not communicate directly with this service but should instead send telemetry to
      the ingestion endpoint only.

Ideally, applications should only write to the     desired   configuration state and only read from    reported

configuration state.

Example

A connected heater reports that the temperature of the room in which it is installed is 25°C. This value is stored in
the device's reported state.

Reported state

  {
      "reported": {
          "payload": {
            "temperature": 25.2
          }
      }
  }

The facility management system wants the room temperature lowered and sets the desired value:

Reported state

  {
      "desired": {
          "payload": {
            "temperature": 21
          }
      }
  }

The next time the device comes online, it will receive this desired state.

The device will then change the temperature of the room and update its shadow again

Reported state

  {
      "reported": {
            "payload": {
            "temperature": 21

                                                                                                                              12
Shadows

          }
     }
 }

              13
Traces

Traces
A device's trace is a record of its   reported   state through time. Every time telemetry is ingested, it is recorded along
with the timestamp provided with the telemetry. You can query traces based on date ranges.

                                                                                                                         14
Geofences

Geofences
A geofence is a geographic boundary that you can define and associate with your devices. HERE Tracking can then
notify you when a device transitions into or out of a geofence.

Geofences can be circular or polygonal. Circular fences are defined by a centre geo-coordinate and a radius while
polygonal fences are defined as a set of geo-coordinates.

Once created, a geofence can be associated with a device. This association means that every time a location update
is received from the device, it will be compared to the area of geofence. If the device has transitioned from outside
the geofence to inside or vice versa, a   transition   event is recorded and HERE Tracking will generate a
notification   .

                                                                                                                    15
Transitions

Transitions
A transition event is created every time a device enters or exits an associated geofence. These events are stored in
the transition log.

This log also includes details of events where a device 'almost' crossed a geofence boundary. Device positions
determined through GPS, WiFi or other methods have a range of uncertainty about them. This uncertainty is
typically represented as a radius around the recorded point showing the accuracy of the position.

These are times when the accuracy radius reported around a device interesects with the geofence boundary but
where it is not possible to confirm what side of the geofence boundary the device is on. This returns those events
as well as total transitions.

Types of transitions

There are three types of transition event:

 1. Transition to inside
         The device and its accuracy radius are now completely enclosed in the geofence
 2. Transition to outside
         The device and its accuracy radius are now completely outside in the geofence
 3. Boundary
         The accuracy radius intersects with the geofence boundary.

The device is completely outside the geofence

                                                                                                                     16
Transitions

The device position intersects the geofence and is probably outside

The device position intersects the geofence and is probably inside

The device is completely inside the geofence

                                                                      17
Transitions

              18
Notifications

Notifications
A   webhook   notification is created every time a device enters or exits an associated geofence.

Webhook

HERE Tracking can send a      POST   request to a specified URL containing details of the device location, the geofence
and whether it has entered or exited.

                                                                                                                          19
Vendors

Vendor
Device licences can only be created by a vendor. A vendor is a user who has a developer plan (evaluation, free or
paid) with HERE that has been enabled for device licence creation. Plans can be enabled for device licence creation
via https://tracking.here.com or via your HERE support contact.

The vendor has no access to the data generated by the device as that is securely limited to the user account the
device has been added to.

                                                                                                                    20
Creating a device licence

Creating a device licence
To create a new device licence, you must be a vendor. This means you have an             appId    with a valid evaluation
licence obtained through tracking.here.com. In HERE Tracking, vendors create the devices and the application
software but do not own the data created by the device.

NOTE: For trial purposes, there is nothing wrong with using the same HERE account as vendor and as user but in
standard practice, the vendor would create the device and sell it to the end-user.

Creating a licence

Prerequisites

    A HERE account
    A valid evaluation plan      appId

Log in the vendor

  curl -X POST \
    https://tracking.api.here.com/users/v2/login \
    -H 'Content-Type: application/json' \
    -d '{
      "email": "{vendorUserEmail}",
      "password": "{vendorUserPassword}"
  }'

This will return a HERE Account     accessToken   . In this guide, we will refer to this as the   vendorToken   .

Request one device licence

You may request one device license using this request

  curl -X POST \
    https://tracking.api.here.com/registry/v2/{appId}/one-device \
    -H 'Authorization: Bearer {vendorToken}' \
    -H 'Content-Type: application/json'

Request multiple device licences

Create device license job

  curl -X POST \
    https://tracking.api.here.com/registry/v2/{appId}/devices \
    -H 'Authorization: Bearer {vendorToken}' \
    -H 'Content-Type: application/json' \
    -d '{
      "count": 5
  }'

This will return a   jobId   which can be used to track the progress of the licence creation. For a small number of
devices, this will be almost instantaneous. For evaluation, you can create a maximum of 10 device licences.

                                                                                                                            21
Creating a device licence

Check job progress

  curl -X GET \
    'https://tracking.api.here.com/registry/v2/{jobId}/status' \
    -H 'Authorization: Bearer {vendorToken}' \
    -H 'Content-Type: application/json'

Retrieve licence

  curl -X GET \
    'https://tracking.api.here.com/registry/v2/{jobId}/results' \
    -H 'Authorization: Bearer {vendorToken}' \
    -H 'Content-Type: application/json'

                                                                    22
Preparing the device

Preparing the device

Prerequisites

    At least one Device Licence – a   deviceId   and   deviceSecret

By this point, you have a licence to send data to HERE Tracking. Now we need to set up a device to actually send the
data.

You have several options now depending on what kind of device you want to use.

NOTE: Even once a device has a licence installed, its data will not be saved in HERE Tracking until the device is
claimed by an end-user (see Claiming ownership of a device).

Android app

As a fast way for evaluating HERE Tracking, download the HERE Tracker android app from the Google Play Store.
This acts like a 'Virtual Tracker' and sends its data to HERE Tracking. The app can be configured to position itself
with WiFi, BLE, Cell, GPS or any combination of technologies.

    Download
    Launch
    Enter licence

NOTE: This is a way to do rapid prototyping and evaluation. It is not intended as a way for clients to produce real
products.

Use HERE Tracking device firmware C library

HERE Tracking provides a C library and sample application via GitHub.

Follow the instructions in the project to install and use the sample application.

Use HERE Tracking ingestion APIs

You may build your own tracker firmware that collects telemetry data and then you use HERE Tracking ingestion
APIs to upload your ingestion data to HERE Tracking cloud.

                                                                                                                       23
Claiming ownership of a device

Claiming ownership of a device
For the rest of this guide, we will deal with the end user and not the vendor. The user controls the device and can
access data created by the device.

In order to do that, the first step is to claim the device. This allows the device data to be saved in HERE Tracking.

Add a device to a user account

Prerequisites:

    Valid   deviceId    and   deviceSecret   that have not yet been added to a user account
    Valid user account

Log the user in

  curl -X POST \
    https://tracking.api.here.com/users/v2/login \
    -H 'Content-Type: application/json' \
    -d '{
      "email": "{userEmail}",
      "password": "{userPassword}"
  }'

This will return an    accessToken   . In this guide, we will refer to this as the   userToken   .

Add the device to the user account

  curl -X PUT \
    https://tracking.api.here.com/registry/v2/devices/{deviceId} \
    -H 'Authorization: Bearer {userToken}' \
    -H 'Content-Type: application/json'

This will return a    trackingId   . This is the unique identifier associated with the data in HERE Tracking.

NOTE: This is different from the      deviceId   used in the licence. The   deviceId   is permanently associated with the
hardware, the   trackingId     is associated with the data. If the device is later sold or transferred, the   deviceId

remains the same but the       trackingId    changes.

Verify the device is in the user's list of devices

  curl -X GET \
    https://tracking.api.here.com/users/v2/devices \
    -H 'Authorization: Bearer {userToken}'

                                                                                                                            24
Send data to the cloud

Send data to the cloud
Your user account now has access to the data reported by the device. The next step is for the device to report data.

If you are using one of the sample HERE Tracker applications (Android, C), you may already be seeing data in HERE
Tracking. The following examples show what those applications are doing and allow you to do it manually yourself.

Send data to HERE Tracking

Prerequisites

    Valid   deviceId   and   deviceSecret   for a device that has been added to a user account

Log in device

Follow the documentation for details on how to generate a signed OAuth 1.0 request.

  curl -X POST \
    https://tracking.api.here.com/v2/token
    -H 'Authorization: Bearer {signedRequest}'

You will receive an    accessToken   for the device. In this guide, we will refer to this as the   trackingToken   . If you
receive an error "412 Precondition Failed", it means the device has not been claimed by an end-user yet. See the
previous section for details on how to claim a device.

Send data

  curl -X POST \
    https://tracking.api.here.com/v2/ \
    -H 'Authorization: Bearer {deviceToken}' \
    -H 'Content-Type: application/json' \
    -d '[{
    "timestamp": 1529320151007,
    "position": {
        "lat": 52.5,
        "lng": 13.4,
        "alt": 1,
        "accuracy": 10
    }
  }]'

You will receive the device's updated shadow.

                                                                                                                              25
Process data in the cloud

Process data in the cloud

Create a geofence

Geofences can be circular (specified by a centre point and a radius) or polygonal (an array of coordinates).

  curl -X POST \
    'https://tracking.api.here.com/geofences/v2' \
    -H 'authorization: Bearer {userToken}' \
    -H 'content-type: application/json' \
    -d '{
    "type": "circle",
    "definition": {
      "center": {
        "latitude": 52.5308398,
        "longitude": 13.38490035
      },
      "radius": 100
    }
  }'

This will create a circular geofence and return the unique ID. At this point, the geofence isn't associated with any
device but it will be visible on the web dashboard.

You can also get a list of the IDs of geofences you previously created.

  curl -X GET \
    'https://tracking.api.here.com/geofences/v2/' \
    -H 'authorization: Bearer {userToken}' \
    -H 'content-type: application/json'

Associate geofence and device

Now that we have a device sending its location and a geofence around an area, we can associate one to the other.
This will cause a notification to be sent whenever this device transitions from outside-the-fence to inside-the-fence
or vice versa.

  curl -X PUT \
    https://tracking.api.here.com/geofence-associations/v2/{geofenceId}/{trackingId} \
    -H 'authorization: Bearer {userToken}' \
    -H 'content-type: application/json'

Send telemetry outside the fence then inside the fence

  curl -X POST \
    https://tracking.api.here.com/v2/ \
    -H 'authorization: Bearer {deviceToken}' \
    -H 'content-type: application/json' \
    -d '[{
        "timestamp": 1529436288264
        "position": {
          "alt": 107,
          "accuracy": 1,
          "lng": 0,
          "lat": 60,
          "altaccuracy": 1
        }

                                                                                                                       26
Process data in the cloud

  }]'

  curl -X POST \
    https://tracking.api.here.com/v2/ \
    -H 'authorization: Bearer {deviceToken}' \
    -H 'content-type: application/json' \
    -d '[{
        "timestamp": 1529436303311
        "position": {
          "alt": 107,
          "accuracy": 1,
          "lng": 13.3848191,
          "lat": 52.5308059,
          "altaccuracy": 1
        }
  }]'

You can confirm the location of the updates using the web dashboard.

See a transition was recorded

All geofence transitions and near-transitions are recorded in the transition history.

  curl -X GET \
    https://tracking.api.here.com/transitions/v2/devices/{trackingId} \
    -H 'authorization: Bearer {userToken}' \
    -H 'content-type: application/json'

A near-transition is one where the accuracy radius of the position update provided overlaps with the geofence
boundary. In this case, it is not possible to say conclusively whether the device is on one side of the fence or the
other. These events don't generate webhook notifications but will be recorded and available through the API.

                                                                                                                       27
Send data to the device

Send data to the device
You manage the device's configuration via its online Device Shadow. This is the online representation of the device
which contains its last known reported state and the configuration to be sent to the device.

When devices send data to the cloud, the response returned is a JSON object containing the values that differ
between the desired     stateVersion   and reported   stateVersion   of device shadow.

For example, if the device was already configured at     stateVersion   0 which contains the following:

  {
   "payload": {
    "led": "green",
    "text": "online",
    "threshold": 28
   },
   "system": {
    "stateVersion": 0
   }
  }

and the new desired state configured by user is as follows:

  {
   "payload": {
    "led": "blue",
    "text": "active",
    "threshold": 28
   },
   "system": {
    "stateVersion": 1
   }
  }

and the device reported the following reported state:

  {
   "position": {},
   "payload": {
    "temperature": 25
   },
   "system": {
    "stateVersion": 0
   }
  }

The response returned by the cloud will be:

  {
   "payload": {
    "led": "blue",
    "text": "active"
   },
   "system": {
    "stateVersion": 1
   }
  }

                                                                                                                 28
Send data to the device

The device can then set its internal state to match the desired state. It should also use the new   stateVersion    to
report all the upcoming states until it receives a newer version in the response.

NOTE: If the device doesn't send a   stateVersion   as below:

  {
   "position": {},
   "payload": {
    "temperature": 25
   }
  }

It will receive the entire desired state set by user and the latest   stateVersion   .

  {
   "payload": {
    "led": "blue",
    "text": "active",
    "threshold": 28
   },
   "system": {
    "stateVersion": 1
   }
  }

Set desired configuration

To set configuration on a device and save the values to the Device Shadow, Use HERE Tracking web application or
HERE Tracking shadows endpoint. Whenever you set new device configurations, the          stateVersion   of the device
shadow in HERE Tracking cloud is incremented. The next time the device synchronises with the cloud, it will receive
the configuration along with the new    stateVersion   .

  curl -X POST \
    https://tracking.api.here.com/shadows/v2/{deviceId} \
    -H 'authorization: Bearer {userToken}' \
    -H 'content-type: application/json' \
    -d '{
      "desired": {
          "payload": {
              "led": "red"
          }
      }
  }'

                                                                                                                         29
Optimize positioning result

Tips for Positioning Data Accuracy
Use the following tips to get the most accurate positioning response.

    To ensure the best possible positioning result, provide high-quality measurements.

    The result quality depends on the measurement freshness and correctness.

    Your APIs for listing available WLANs may include some old or cached WLANs that are no longer relevant. If
    such stale WLANs are included in a positioning request, the resulting location estimate may be inaccurate,
    incorrect, or simply not available.

    Filter out any old WLANs from the measurements and do not send them in your requests.

    During cell handovers (from one cell to another) and during cell technology handovers (between 2G/3G/4G),
    the cell parameters returned by external APIs may be temporarily incoherent. For example, the cell identifier
    may be measured from the new cell, but the LAC code may still be the one for the old cell. Beware of such
    corrupt measurements, as they may result in incorrect location estimates. They may also even prevent the
    service from being able to determine a position.

    You can compare several subsequent measurements to better detect such anomalies or recheck the parameter
    values a few seconds after a cell change is detected.

    During an ongoing call or data transfer, the cell identifier reported by your APIs may be stale. The values may
    identify the cell in which the call started, instead of the current cell, when the device has moved during the
    call.

    In such cases, the location estimate can be incorrect. You can detect these situations on the client side by
    checking the Radio Resource Control State.

    Include cell measurements in a WLAN-based positioning requests to get better positioning results.

                                                                                                                     30
Optimize indoor positioning result

Tips for Indoor Positioning Data Accuracy
Use the following tips to get the most accurate indoor positioning response.

WiFi

    The objective of WiFi scanning is to capture all the WiFi APs (Access Point) observable by the device.
    Limiting the number of WiFi APs in the object sent to server in any way is highly undesirable.
    Indoor Positioning specifics
        Rx level is mandatory
        About timestamps
             Including measurement timestamps to the object sent to server is highly recommended.
             If measurement timestamps are available in the device, we recommend including up to a 10-second
             tail of measurements to the object sent to server.
             If measurement timestamps are unavailable in the device, only include the instantaneous
             measurements (no tail) to the object sent to server.

Bluetooth

    The objective of Bluetooth scanning is to capture all the Eddystone/iBeacon Bluetooth beacons observable by
    the device.
    Limiting the number of beacons in the object sent to server in any way is highly undesirable.
    Only include Eddystone and/or iBeacon beacons to the object sent to server.
    Always include one of {MAC Address, EddystoneID, iBeaconID}. Prefer MAC Address.
    About timestamps
        Including measurement timestamps to the object sent to server is highly recommended.
        If measurement timestamps are available in the device, we recommend including up to a 10-second tail of
        measurements to the object sent to server. In this case, make 500ms scans continuously.
        If measurement timestamps are unavailable in the device, only include the instantaneous measurements
        (no tail) to the object sent to server. For an instantaneous measurement make a single 3000ms scan.

                                                                                                               31
You can also read