Bosch IoT Device Management

Restrictions related to the digital twin layer

Please consider the following restrictions related to the digital twin layer.

Service plan

What

Description

Managed connections / integrations

max. 10 for Free plan - this number could be less in future
max. 10 for Standard plan

Client count per managed connection / integration

max. 1 for Free plan
max. 3 for Standard plan

Data volume

See Pricing & Conditions for Bosch IoT Device Management

Transactions

See Pricing & Conditions for Bosch IoT Device Management

Identifier

What

Description

  • Namespace
    (i.e. first part of the thing ID, before the colon : )

  • max. 256 characters (together with Thing name and Policy name)

  • The namespace must conform to the reverse domain name notation (aka Java package format)

    • 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

See Unique identifier - common device ID patterns for examples.

  • Thing name (i.e. part after the colon : )

  • JSON keys of a thing's Attribute

  • Feature ID

  • JSON keys of feature properties

  • Policy name (part after : in policy ID)

  • Policy entry label

  • max. 256 characters (together with Namespace)

  • may not be the wildcard operator *, due to the special meaning of this character for filtering

  • 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 communication channel

See Decoding and encoding of special characters for details.

  • Message subject

  • Subject ID within policy (aka authorization subject)

  • Resource within policy

  • max. 256 characters

  • 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 communication channel

See Decoding and encoding of special characters for details.

Decoding and encoding of special characters

All APIs of the Bosch IoT Things service will expect encoding of input data and decoding of output data as required for the respective communication channel/protocol:

  • URL encoding for entities included in HTTP URLs (according to RFC 3986, i.e. %-escaping of most special characters)

  • HTTP conform delivery of HTTP header values (according to RFC 7230, Section 3.2.6)

  • JSON encoding in JSON content and Eclipse Ditto protocol message content (according to ECMA 404, The JSON Data Interchange Syntax, Chapter 9)

  • Respective encodings/decodings defined for AMQP/MQTT/Kafka (if needed according to the respective protocols):

Tip: No encoding/decoding is required when using Java with the Eclipse Ditto Java Client.

Sizes

What

Description

Size of thing - feature - property path

max. 950 Byte
i.e. the complete path of a namespace - thing name - features - feature ID - properties - property key including all sub keys.
Applies also for the namespace - thing name - attributes - path

Size of a message

max. 250 kB

Size of a policy

max. 100 kB

OAuth scopes in a JWT

20 scopes
i.e. if your custom OAuth2 authorization provider issues a JWT with more than 20 scopes, we will only accept the first 20.

Authorization subjects

max. 100

Size of header

max. 5 kB - i.e the sum of all headers must not exceed this limit

Top-level entries in a custom header

max. 100
A header x-things-parameter-order is used to provide the correct order of JSON payload.

JSON strings

The null character \u0000 is forbidden

JSON integers

The range of integer values allowed is from -9223372036854775808 to 9223372036854775807.
This is the limit of a 64 bit signed integer, also known as long integer.

Search index

max. 950 Byte for the path
max. 950 Byte for the value

Connection / Integration related

What

Description

Managed connections - HTTP forwarding

Max. 100 requests can be queued for HTTP forwarding
If a single connection queues more than 100 HTTP requests, further events/messages/commands will be dropped instead of being forwarded.
For a Free plan this is a fixed limit.
Using a Standard plan can however increase the client count, and/or additionally increase the HTTP parallelism from 1 up to 10.

WebSocket connections

Max. 100 messages/second
(i.e. 100 emitted or consumed events or messages)
If a single connection receives more than 100 messages per second, back-pressure is applied and the consumption gets throttled.
Please contact us if more is needed.

WebSocket based integrations:

  • Things protocol over WebSocket

  • Ditto client (Java)

  • Ditto JavaScript client - when using WebSocket API instead of HTTP API

WebSocket based integrations cannot be used to implement integrations with your own horizontally scaled application, because there is no support for load balancing of receiving events via WebSockets.
Each WebSocket connection of each node of your application cluster will receive all messages, and this would not help to do load balancing on your side.

Payload mapping

Only supported for the Connections channel

Payload mapping: max. size of JavaScript code

50 KB

Payload mapping: max. execution time per message

500 msec. (single CPU core)

Payload mapping: max. stack depth

10 levels

Payload mapping: max. applied Ditto Protocol messages from one external message

10
A single JavaScript based payload mapping can at most create an array of 10 Ditto Protocol messages from one single external message.

Payload mapping: JavaScript language support

JavaScript/ECMAScript language features according to Rhino Version 1.7.11 with a subset of ES5, 6, and 7. See http://mozilla.github.io/rhino/compat/engines.html for details.

Enrichment of events and messages

It can take up to 2 minutes to reflect recent updates of the corresponding thing and its policy. Thus, especially for live communication, the “enriched” content might be slightly behind the current thing.

Search via a managed connection

Search via a managed connection only works if the convention that Hub and Things use the exact same ID is disabled (disable the Option “Bosch IoT Hub/Things ID convention is enabled.” at the UI in the Sources section). In case you need to employ the search protocol via a managed connection, you will need to configure a fine-grained per-device access control. Otherwise, searching could result in information disclosure (i.e. it would allow one device to search and list other devices and their thing data).

Server-Sent Events (SSE)

The Azure infrastructure does not allow SSE. Thus, in case you have booked our service plan on that infrastructure, you can not establish any SSE connection to our service.