PointPerfect Zero Touch Provisioning

Overview of Credentials Provisioning

To access the PointPerfect service from a device, the basic steps include creating a PointPerfect Thing on our Thingstream platform and using the credentials provided in the PointPerfect Thing to provision the service onto the device.

Your device can be provisioned to use any available delivery methods provided by the PointPerfect plan (NTRIP (NTRIP is for either SPARTN/NTRIP or RTCM over NTRIP), MQTT, L-band) with the corresponding client credentials for the device.  See all of these steps explained in the PointPerfect Getting Started Guide

As your fleet grows, performing these steps on individual devices can add time and other related costs to your organization. To reduce these costs, u-blox has developed Zero Touch Provisioning (ZTP) allowing customers to deploy devices that can provision themselves.  This happens automatically the first time they access our PointPerfect service in the field.

Implementing Zero Touch Provisioning 

PointPerfect ZTP is based on two elements:

Creating a Device Profile

Select 'Device Profiles' from the Location Services menu on the sidebar and click on 'Create Profile' in the top right corner. 

In this section

Still need help?

If you need more help or have any questions, please send an email to services-support@u-blox.com.

You can now set the Device Profile attributes:

On the initial screen you can set the following attributes:

When the PointPerfect Device Type is selected, the screen will update to include other attributes.   

Once the Device Profile is created, it is available in your domain.  

Device Profile details such as the desired Plan and other attributes can be adjusted using the Edit/Change plan links, or the Status can be Disabled to stop new devices from registering on it.

Calling the REST API

On the Device Profile page, you will find the ZTP endpoint URL and the provisioning token to be used for creating/provisioning devices using this Device Profile. The swagger docs for the API can be found here.  

The body of the request shall be in the following format:

{"tags": ["string"],"token": "string", "givenName": "string", "hardwareId": "string" }  

where:

Upon a successful request the response body will include JSON code with content needed by the device to use the service, including device authentication parameters and specifics for using the selected plan and delivery methods defined in the Device Profile. The device can parse the JSON content to collect and store client authentication and connection requirements for PointPerfect after provisioning.

Note: Authentication parameters in the JSON (credentials such as certificates and private keys, username and passwords) are unique, and the device can store and use them as such. 

An example of the an MQTT request response in JSON format is shown below. 

{

    "certificate": "string",

    "clientId": "f5xexxxxxxxxxxxxxxxxxxxxxxx",

    "privateKey": "string",

    "brokerHost": "pp.services.u-blox.com",

    "supportsMqtt": true,

    "supportsLband": false,

    "subscriptions": [

        {

            "description": "IP key distribution topic",

            "path": "/pp/key/ip"

        },

        {

            "description": "IP correction topic for EU region",

            "path": "/pp/ip/eu"

        },

        {

            "description": "IP correction topic for US region",

            "path": "/pp/ip/us"

        }

    ],

    "subscriptionsTitle": "Subscriptions",

    "rotatingKeyTitle": "IP Dynamic Keys",

    "dynamickeys": {

        "next": {

            "duration": 2419199999,

            "start": 1647043182000,

            "value": "95axxxxxxxxxxxxxxxxxxxxxxxx"

        },

        "current": {

            "duration": 2419199999,

            "start": 1644623982000,

            "value": "82xxxxxxxxxxxxxxxxxxxxxxxxx"

        }

    }

}

An example of an SPARTN/NTRIP request response in JSON format is shown below. 

{

    "brokerPort": 0,

    "ntripCredentials": {

    "userName": "d2xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",

    "password": "xxxxxxxxxx",

    "endpoint": "ppntrip.services.u-blox.com",

    "httpPort": "2101",

    "httpsPort": "2102",

    "mountPoints": [

      {

        "path": "/EU",

        "region": "Europe",

        "displayName": "Europe"

      },

      {

        "path": "/US",

        "region": "United States",

        "displayName": "United States"

      },

      {

        "path": "/AU",

        "region": "Australia",

        "displayName": "Australia"

      },

      {

        "path": "/KR",

        "region": "Korea",

        "displayName": "Korea"

      }

    ]

  },

  "supportsMqtt": true,

  "supportsLband": false,

  "subscriptions": []

}

An example of an RTCM over NTRIP request response in JSON format is shown below. 

{

    "rtcmCredentials": {

        "userName": "BACPFqXgxrE6",

        "password": "36stcUX5yD7C",

        "mountPoint": "NEAR-RTCM",

        "endPoints": [

            {

                "endpoint": "pp2ntrip-eu-dev.services.u-blox.com",

                "httpPort": "2101",

                "httpsPort": "2102",

                "region": "Europe"

            },

            {

                "endpoint": "ppntrip-na-dev.services.u-blox.com",

                "httpPort": "2101",

                "httpsPort": "2102",

                "region": "North America"

            },

            {

                "endpoint": "ppntrip-sa-dev.services.u-blox.com",

                "httpPort": "2101",

                "httpsPort": "2102",

                "region": "South America"

            }

        ]

    },

    "brokerPort": 0,

    "supportsMqtt": false,

    "supportsLband": false,

    "subscriptions": []

}

The PointPerfect Thing for your device (auto-created as a result of your successful ZTP request) can be seen in the Location Things section on the Thingstream platform. You can search your device using the name, the unique "hardwareId" parameters used in the provisioning request, or the tags defined in the device profile.