In a complex system architecture, you will need to clearly identify your devices across several layers.
Providing a unique ID for all entities, helps to avoid ambiguity.
Table of contents
Device ID and allowed characters
The identifier is composed of the namespace and the name, separated by a colon : character.
In order to separate things from different solution spaces from each other, they are required to be created in a specific namespace.
The namespace must conform to the reverse domain name notation:
must start with a lower- or uppercase character from a-z
can use dots (“.”) to separate characters
a dot (“.”) must be followed by a lower- or uppercase character from a-z
numbers can be used
underscore can be used
The namespace is separated by a mandatory colon (:) from the rest of the thing identifier.
Due to the fact that a thing ID often needs to be set in the path of a HTTP request, following restrictions apply:
may not contain the slash character /
may not contain the control characters hex 00-1F to 7F-FF
may contain special characters, but these have to be encoded/decoded according to the standard/format required for the respective channel.
See Decoding and encoding of special characters for details.
Examples for a valid device ID and thing ID
The namespace could represent the manufacturer, customer, subscription, tenant or project, which your other code uses.
In case you can choose only one namespace, you can optionally add structuring information, e.g.
In case of a standard plan you can even reserve multiple namespaces, if it helps your filtering, or for other purposes.
Examples for namespaces showing a hierarchy:
The device name could be a device serial number or similar identifier.
The syntax of the name is very open and we will not prevent you from starting with a blank or star, even if in some cases such IDs are not easy to understand.
However, you don't need to invest too much time in encoding and decoding special characters,
if your device name's regex would look like this: [a-zA-Z0-9-_:]+$
meaning, it uses small and capital letters, numbers, minus, underscores, and colon.
Device ID of devices registered automatically via a gateway device
A gateway running the Bosch IoT Edge Agent is provisioned in a way, that it allows to automatically register the devices, which are attached to the gateway. The implicit registration is triggered on the first device message.
Examples for devices registered via an edge agent
A gateway, named com.example.my.solution:gw-01 registered with the specific empowerment would automatically provision:
com.example.my.solution:gw-01:edge:containers - the thing which manages the OCI containers
As soon as you instantiate additionally the Bosch IoT Edge Services, following virtual devices will be auto-registered:
com.example.my.solution:gw-01:edge:services:runtime - the thing which represents the Edge Services Runtime (OSGi runtime)
com.example.my.solution:gw-01:edge:services:bundles - the thing which manages the bundles of the Edge Services Runtime (OSGi bundles)
com.example.my.solution:gw-01:edge:services:configurations - the thing which manages the configurations of the Edge Services Runtime (OSGi configurations)
As soon as you instantiate additionally a device, the pattern is:
com.example.my.solution:gw-01:<device_id> - the thing which represents the Edge Services Runtime connected device (OSGi Device Access devices)
Examples for IDs of auto-registered Bluetooth, Onvif, Z-Wave and ZigBee devices:
Device to digital twin relation
As of today the Device Provisioning API and the default connection between the Hub and Things building blocks is implemented as 1:1 relation.
It imposes, that both - the device and its digital twin - are registered with the exact same identifier, composed of the namespace and the name, separated by a colon : character.
This way, we can assure that a device within Bosch IoT Hub can only update its own digital twin in Bosch IoT Things (i.e. the one with the same ID).
In scenarios, where you create a connection by yourself, and where you don't need this feature, you can uncheck the "Enable Bosch IoT Hub/Things ID convention" checkbox in your connections source configuration.
On all Bosch IoT Suite APIs the transfer of IDs needs to be encoded according to the respective channel technology (e.g. IDs in HTTP URLs must be URL-encoded). No additional Suite-specific encoding must be used.
Additionally, please keep in mind, that the device ID and thing ID may only consist of up to 256 characters in total.