parameters

In this optional section, parameters to customize commissioning files for multiple use cases can be defined. Each time a service is installed or reconfigured, the user is asked to enter custom values for the parameters or to confirm the default values.

Inside of the commissioning file, the values of these parameters can be used in two ways, either by reference !ref or by string substitution !sub.

  • Using a parameter value by reference will fill in the parameter’s value at the property where it is mentioned. The syntax is to write !ref and then the name of the referenced parameter, without further delimiters such as curly braces or similar. Example: !ref Cybus::MqttHost

  • Using a parameter value by string substitution will replace the parameter name inside the given string by the parameter’s value, so that the resulting string is used for the property where it is mentioned. The syntax is to write !sub and then a yaml string which includes the parameter name with dollar sign and curly braces. Example: !sub 'Some ${param}'

Note: Parameter substitution or referencing is implemented only for using the full parameter value in unchanged form. Even for parameters of data type array, no further element addressing or similar is implemented, only substitution of the full value (which would be an array in this case).

Parameter Properties

When defining parameters in the parameters section of the commissioning file, the following properties can be given for each parameter. Additional documentation on the used JSON schema specification can be found on the pages of the internally used “ajv” library, see here: https://ajv.js.org/json-schema.html#json-data-type

type

Required. The data type for the parameter (DataType), specified by one of the following strings.

The following parameter types are supported:

string

A literal string. For example, users could specify “MyUserName”. See also Additional properties for strings.

number

Can be used for integer or float. See also Additional properties for numbers.

integer

An integer value, which is a numeric value with no decimals. See also Additional properties for numbers.

boolean

A boolean value: true or false. When the parameter value is referenced within the commissioning file using !ref, it will evaluate to true or false.

array

A JSON array of literal values, which in turn can be either strings or numbers. Requires the items: property as described in Additional properties for arrays below. (Note: When substituting such a parameter using !sub inside the file, only the full value can be substituted. No element addressing or similar is possible inside the commissioning file.) Example: A parameter with type: array could receive the following value: [test,dev,prod]. When substituting this into e.g. JSONata expressions of the rule engine, the value will evaluate to ["test","dev","prod"] which can then be processed in JSONata accordingly.

default

Optional. A value of the appropriate type for the parameter to use if no value is specified when the service is installed. If additional constraints have been defined as explained below, this default value must adhere to those constraints.

description

Optional. A string of up to 4000 characters that describes the parameter. This is shown in the configuration dialog window when installing a service in the admin UI.

enum

Optional. An array containing the list of values allowed for the parameter. If a value different from all array elements has been specified for this parameter, it will be invalid, and the resulting error message will list the allowed values as given in this property as allowedValues: [...]

Additional properties for strings

minLength

Optional, and only active for string values: An integer value that specifies the minimum number of characters which the value must have.

maxLength

Optional, and only active for string values: An integer value that specifies the maximum number of characters which the value must have.

pattern

Optional, and only active for string values: A regular expression pattern which the value must match, otherwise the value is invalid.

format

Optional, and only active for string values: Specifies one of several fixed string formats which the parameter value must fulfil. Currently available formats are: date, date-time, uri, email, hostname, ipv4, ipv6, regex. For more information, see https://ajv.js.org/json-schema.html#format

Additional properties for numbers

minimum

Optional, and only active for number values: The minimum allowed value for the data to be valid.

maximum

Optional, and only active for number values: The maximum allowed value for the data to be valid.

Additional properties for arrays

items

Required. An object, or an array of objects, describing the types of the array’s items. To define an array of strings, write items: { type: string }

minItems

Optional. The value should be a number defining the minimum number of items in the array. Only applicable if items is an object and not an array, i.e. all array elements have the same type.

maxItems

Optional. The value should be a number defining the maximum number of items in the array. Only applicable if items is an object and not an array, i.e. all array elements have the same type.

uniqueItems

Optional. If the value is true, the array should have unique items only to be valid.

Example

parameters:
  modbusPort:
    type: integer
    default: 10922
    description: The modbus port number

  someString:
    type: string
    description: This should be a string to be used somewhere else in the service

  hostname:
    type: string
    format: hostname
    description: The hostname for the xy connection

  hostname_array:
    description: List of hostnames or IP addresses
    type: array
    items: { type: string }
    default: [ '123.123.123.123:4567', '124.124.124.124:5678' ]

  mixedArray:
    type: array
    items: [{type: 'integer'}, {type: 'string'}]
    default: [1, 'abc']

  anotherArray:
    type: array
    items: {type: 'number'}
    minItems: 2
    maxItems: 4
    uniqueItems: true

Global pre-defined parameters

In addition to the parameters defined in the parameters section of the commissioning file, the following global parameters are always pre-defined by the Connectware system and can be used everywhere:

Cybus::ServiceId

This is the ServiceID that uniquely identifies the currently running service, as defined by the user when installing and configuring the service

Cybus::MqttHost

Hostname of the Connectware’s internal MQTT broker

Cybus::MqttPort

Hostname of the Connectware’s internal MQTT Broker

Cybus::MqttUser

Valid username for the Connectware’s internal MQTT broker (auto-generated)

Cybus::MqttPassword

Valid password for the Connectware’s internal MQTT broker (auto-generated)

Cybus::MqttRoot

Topic prefix for all MQTT topics within this service instance. This global parameter by default has the value services/<serviceId> where <serviceId> is replaced with the actual ServiceID of the current service, as specified by the user during installing a service.

The default Cybus::MqttRoot can be overridden by defining the CYBUS_MQTT_ROOT variable in the definitions section of the commissioning file. See below for an explanation of when this override may be needed. In the general case it is not recommended to override the default, because the auto-generated topic prefix helps keeping the services isolated from each other.

Important

It is a central goal of the Connectware to let resources from one service be automatically protected and isolated from resources defined in another service. This isolation should be implemented for as many aspects of the resources as possible, including generated URLs, persisted storage, MQTT communication topics, Docker container namings, etc.. To achieve this isolation, the namespacing principle is applied. This means a unique prefix is prepended to all named identifiers, which could otherwise collide with a name or identifier already used by other services.

With respect to MQTT data, the namespacing principle means that all MQTT topics of one service will be prepended with an auto-generated prefix named according to the service instance. This prefix is accessible in the commissioning file by the global parameter Cybus::MqttRoot mentioned above.

In some applications (but seldomly), this auto-generated prefixing and namespacing turns out to be not the best solution and an alternative implementation is needed. For example, there might be an application inside a Docker container (i.e. a Cybus::Container resource) that requires fixed and unchangeable MQTT topics for subscription and publishing, and those topics cannot easily be changed by configuration such as through environment variables. In that case, the auto-generated prefix (the Cybus::MqttRoot) is potentially difficult to be used, and hence this prefix can be defined manually to match the required topics of the application. To define the Cybus::MqttRoot prefix manually, you need to set a variable named CYBUS_MQTT_ROOT in the definitions section of the commissioning file.

In those cases where Cybus::MqttRoot was set manually, you need to watch out yourself to not run into naming collisions between multiple service instances on the same Connectware installation.