This is the multi-page printable view of this section. Click here to print.

Return to the regular view of this page.

Reference

This section of the United Manufacturing Hub documentation contains references.

1 - Helm Chart

This page describes the Helm Chart of the United Manufacturing Hub and the possible configuration options.

An Helm chart is a package manager for Kubernetes that simplifies the installation, configuration, and deployment of applications and services. It contains all the necessary Kubernetes manifests, configuration files, and dependencies required to run a particular application or service. One of the main advantages of Helm is that it allows to define the configuration of the installed resources in a single YAML file, called values.yaml. Helm provides great documentation on this process.

The Helm Chart of the United Manufacturing Hub is composed of both custom microservices and third-party applications. If you want a more in-depth view of the architecture of the United Manufacturing Hub, you can read the Architecture overview page.

Helm Chart structure

Custom microservices

The Helm Chart of the United Manufacturing Hub is composed of the following custom microservices:

  • barcodereader: reads the input from a barcode reader and sends it to the MQTT broker for further processing.
  • customMicroservice: a template for deploying any number of custom microservices.
  • data-bridge: transfers data between two Kafka or MQTT brokers, transforming the data following the UNS data model.
  • factoryinsight: provides REST endpoints to fetch data and calculate KPIs.
  • MQTT Simulator: simulates sensors and sends the data to the MQTT broker for further processing.
  • kafka-bridge: connects Kafka brokers on different Kubernetes clusters.
  • kafkatopostgresql: stores the data from the Kafka broker in a PostgreSQL database.
  • mqtt-kafka-bridge: connects the MQTT broker and the Kafka broker.
  • opcuasimulator: simulates OPC UA servers and sends the data to the MQTT broker for further processing.
  • packmlmqttsimulator: simulates a PackML state machine and sends the data to the MQTT broker for further processing.
  • sensorconnect: connects to a sensor and sends the data to the MQTT and Kafka brokers for further processing.
  • tulip-connector: exposes internal APIs to the internet, especially tailored for the Tulip platform.

Third-party applications

The Helm Chart of the United Manufacturing Hub is composed of the following third-party applications:

  • Grafana: a visualization and analytics software.
  • HiveMQ: an MQTT broker.
  • Node-RED: a programming tool for wiring together hardware devices, APIs and online services.
  • Redis: an in-memory data structure store, used for cache.
  • RedPanda: a Kafka-compatible distributed event streaming platform.
  • RedPanda Console: a web-based user interface for RedPanda.
  • TimescaleDB: an open-source time-series SQL database.

Configuration options

The Helm Chart of the United Manufacturing Hub can be configured by setting values in the values.yaml file. This file has three main sections that can be used to configure the applications:

  • customers: contains the definition of the customers that will be created during the installation of the Helm Chart. This section is optional, and it’s used only by factoryinsight.
  • _000_commonConfig: contains the basic configuration options to customize the United Manufacturing Hub, and it’s divided into sections that group applications with similar scope, like the ones that compose the infrastructure or the ones responsible for data processing. This is the section that should be mostly used to configure the microservices.
  • _001_customMicroservices: used to define the configuration of custom microservices that are not included in the Helm Chart.

After those three sections, there are the specific sections for each microservice, which contain their advanced configuration. This is the so called Danger Zone, because the values in those sections should not be changed, unlsess you absolutely know what you are doing.

When a parameter contains . (dot) characters, it means that it is a nested parameter. For example, in the tls.factoryinsight.cert parameter the cert parameter is nested inside the tls.factoryinsight section, and the factoryinsight section is nested inside the tls section.

Customers

The customers section contains the definition of the customers that will be created during the installation of the Helm Chart. It’s a simple dictionary where the key is the name of the customer, and the value is the password.

For example, the following snippet creates two customers:

customers:
  customer1: password1
  customer2: password2

Common configuration options

The _000_commonConfig contains the basic configuration options to customize the United Manufacturing Hub, and it’s divided into sections that group applications with similar scope.

The following table lists the configuration options that can be set in the _000_commonConfig section:

_000_commonConfig section parameters
ParameterDescriptionTypeAllowed valuesDefault
datainputThe configuration of the microservices used to input data.objectSee belowSee below
datamodel_v2The configuration related to the UNS data model.objectSee belowSee below
dataprocessingThe configuration of the microservices used to process data.objectSee belowSee below
datasourcesThe configuration of the microservices used to acquire data.objectSee belowSee below
datastorageThe configuration of the microservices used to store data.objectSee belowSee below
debugThe configuration for the debug mode.objectSee belowSee below
infrastructureThe configuration of the microservices used to provide infrastructure services.objectSee belowSee below
kafkaBridgeThe configuration for the Kafka bridge.objectSee belowSee below
metrics.enabledWhether to enable the anonymous metrics service or not.booltrue or falsetrue
serialNumberThe hostname of the device. Used by some microservices to identify the device.stringAnydefault
tulipconnectorThe configuration for the Tulip connector.objectSee belowSee below

Data model v2

The _000_commonConfig.datamodel_v2 section contains the configuration related to the UNS data model.

The following table lists the configuration options that can be set in the _000_commonConfig.datamodel_v2 section:

datamodel_v2 section parameters
ParameterDescriptionTypeAllowed valuesDefault
enabledWhether the UNS data model should be used.booltrue, falsetrue
bridgesList of data bridges to create.listSee belowSee below
database.nameThe name of the database to use for the data model v2stringAnyumh_v2
database.hostThe host of the database to use for the data model v2stringAnyunited-manufacturing-hub
grafana.dbreaderThe name of the Grafana read-only database userstringAnygrafanareader
grafana.dbpasswordThe password of the Grafana read-only database userstringAnychangeme
Bridges

The _000_commonConfig.datamodel_v2.bridges section contains a list of configuration options for the data bridge. Each item in the list represents a data bridge instance, and the following table lists the configuration options that can be set in each item:

bridges section parameters
ParameterDescriptionTypeAllowed valuesDefault
modeThe mode of the data bridge.stringmqtt-kafka, kafka-kafka, mqtt-mqttmqtt-kafka
brokerAThe address of the source broker. Can be either MQTT or Kafka, and must include the portstringValid addressunited-manufacturing-hub-mqtt:1883
brokerBThe address of the destination broker. Can be either MQTT or Kafka, and must include the portstringValid addressunited-manufacturing-hub-kafka:9092
topicThe topic to subscribe to. Can be in either MQTT or Kafka form. Wildcards (# for MQTT, .* for Kafka) are allowed in order to subscribe to multiple topicsstringAnyumh.v1..*
topicMergePointThe nth part of the topic to use as the message key. If the topic is umh/v1/acme/anytown/foo/bar/#, and this value is 5, then all the messages wil end up in the topic umh.v1.acme.anytown.foointGreater than 35
partitionsThe number of partitions to use for the destination topic. Only used if the destination broker is Kafka.intGreater than 06
replicationFactorThe replication factor to use for the destination topic. Only used if the destination broker is Kafka.intOdd integer1
mqttEnableTLSWhether to enable TLS for the MQTT connection. Only used with MQTT brokersbooltrue, falsefalse
mqttPasswordThe password to use for the MQTT connection. Only used with MQTT brokersstringAny""
messageLRUSizeThe size of the LRU cache used to avoid message looping. Only used with MQTT brokersintAny1000000

Data sources

The _000_commonConfig.datasources section contains the configuration of the microservices used to acquire data, like the ones that connect to a sensor or simulate data.

The following table lists the configuration options that can be set in the _000_commonConfig.datasources section:

datasources section parameters
ParameterDescriptionTypeAllowed valuesDefault
barcodereaderThe configuration of the barcodereader microservice.objectSee belowSee below
iotsensorsmqttThe configuration of the IoTSensorsMQTT microservice.objectSee belowSee below
opcuasimulatorThe configuration of the opcuasimulator microservice.objectSee belowSee below
packmlmqttsimulatorThe configuration of the packmlsimulator microservice.objectSee belowSee below
sensorconnectThe configuration of the sensorconnect microservice.objectSee belowSee below
Barcode reader

The _000_commonConfig.datasources.barcodereader section contains the configuration of the barcodereader microservice.

The following table lists the configuration options that can be set in the _000_commonConfig.datasources.barcodereader section:

barcodereader section parameters
ParameterDescriptionTypeAllowed valuesDefault
enabledWhether the barcodereader microservice is enabled.booltrue, falsefalse
USBDeviceNameThe name of the USB device to use.stringAnyDatalogic ADC, Inc. Handheld Barcode Scanner
USBDevicePathThe path of the USB device to use. It is recommended to use a wildcard (for example, /dev/input/event*) or leave emptystringValid Unix device path""
customerIDThe customer ID to use in the topic structure.stringAnyraw
locationThe location to use in the topic structure.stringAnybarcodereader
machineIDThe asset ID to use in the topic structure.stringAnybarcodereader
IoT Sensors MQTT

The _000_commonConfig.datasources.iotsensorsmqtt section contains the configuration of the IoTSensorsMQTT microservice.

The following table lists the configuration options that can be set in the _000_commonConfig.datasources.iotsensorsmqtt section:

iotsensorsmqtt section parameters
ParameterDescriptionTypeAllowed valuesDefault
enabledWhether the IoTSensorsMQTT microservice is enabled.booltrue, falsetrue
OPC UA Simulator

The _000_commonConfig.datasources.opcuasimulator section contains the configuration of the opcuasimulator microservice.

The following table lists the configuration options that can be set in the _000_commonConfig.datasources.opcuasimulator section:

opcuasimulator section parameters
ParameterDescriptionTypeAllowed valuesDefault
enabledWhether the opcuasimulator microservice is enabled.booltrue, falsetrue
PackML MQTT Simulator

The _000_commonConfig.datasources.packmlmqttsimulator section contains the configuration of the packmlsimulator microservice.

The following table lists the configuration options that can be set in the _000_commonConfig.datasources.packmlmqttsimulator section:

packmlmqttsimulator section parameters
ParameterDescriptionTypeAllowed valuesDefault
enabledWhether the packmlsimulator microservice is enabled.booltrue, falsetrue
Sensor connect

The _000_commonConfig.datasources.sensorconnect section contains the configuration of the sensorconnect microservice.

The following table lists the configuration options that can be set in the _000_commonConfig.datasources.sensorconnect section:

sensorconnect section parameters
ParameterDescriptionTypeAllowed valuesDefault
enabledWhether the sensorconnect microservice is enabled.booltrue, falsefalse
iprangeThe IP range of the sensors in CIDR notation.stringValid IP range192.168.10.1/24
enableKafkaWhether the sensorconnect microservice should use Kafka.booltrue, falsetrue
enableMQTTWhether the sensorconnect microservice should use MQTT.booltrue, falsefalse
testModeWhether to enable test mode. Only useful for development.booltrue, falsefalse

Data processing

The _000_commonConfig.dataprocessing section contains the configuration of the microservices used to process data, such as the nodered microservice.

The following table lists the configuration options that can be set in the _000_commonConfig.dataprocessing section:

dataprocessing section parameters
ParameterDescriptionTypeAllowed valuesDefault
noderedThe configuration of the nodered microservice.objectSee belowSee below
Node-RED

The _000_commonConfig.dataprocessing.nodered section contains the configuration of the nodered microservice.

The following table lists the configuration options that can be set in the _000_commonConfig.dataprocessing.nodered section:

nodered section parameters
ParameterDescriptionTypeAllowed valuesDefault
enabledWhether the nodered microservice is enabled.booltrue, falsetrue
defaultFlowsWhether the default flows should be used.booltrue, falsefalse

Infrastructure

The _000_commonConfig.infrastructure section contains the configuration of the microservices responsible for connecting all the other microservices, such as the MQTT broker and the Kafka broker.

The following table lists the configuration options that can be set in the _000_commonConfig.infrastructure section:

infrastructure section parameters
ParameterDescriptionTypeAllowed valuesDefault
mqttThe configuration of the MQTT broker.objectSee belowSee below
kafkaThe configuration of the Kafka broker.objectSee belowSee below
MQTT

The _000_commonConfig.infrastructure.mqtt section contains the configuration of the MQTT broker.

The following table lists the configuration options that can be set in the _000_commonConfig.infrastructure.mqtt section:

mqtt section parameters
ParameterDescriptionTypeAllowed valuesDefault
enabledWhether the MQTT broker is enabledbooltrue, falsetrue
adminUser.enabledWhether the admin user is enabledbooltrue, falsefalse
adminUser.nameThe name of the admin userstringAny UTF-8 stringadmin-user
adminUser.encryptedPasswordThe encrypted password of the admin userstringAny""
tls.useTLSWhether TLS should be usedbooltrue, falsetrue
tls.insecureSkipVerifyWhether the SSL certificate validation should be skippedbooltrue, falsetrue
tls.keystoreBase64The base64 encoded keystorestringAny""
tls.keystorePasswordThe password of the keystorestringAny""
tls.truststoreBase64The base64 encoded truststorestringAny""
tls.truststorePasswordThe password of the truststorestringAny""
tls.caCertThe CA certificatestringAny""
tls.mqtt_kafka_bridge.certThe certificate used for the mqttkafkabridgestringAny""
tls.mqtt_kafka_bridge.keyThe key used for the mqttkafkabridgestringAny""
tls.sensorconnect.certThe certificate used for the sensorconnect microservicestringAny""
tls.sensorconnect.keyThe key used for the sensorconnect microservicestringAny""
tls.iotsensorsmqtt.certThe certificate used for the iotsensorsmqtt microservicestringAny""
tls.iotsensorsmqtt.keyThe key used for the iotsensorsmqtt microservicestringAny""
tls.packmlsimulator.certThe certificate used for the packmlsimulator microservicestringAny""
tls.packmlsimulator.keyThe key used for the packmlsimulator microservicestringAny""
tls.nodered.certThe certificate used for the nodered microservicestringAny""
tls.nodered.keyThe key used for the nodered microservicestringAny""
Kafka

The _000_commonConfig.infrastructure.kafka section contains the configuration of the Kafka broker and related services, like mqttkafkabridge, kafkatopostgresql and the Kafka console.

The following table lists the configuration options that can be set in the _000_commonConfig.infrastructure.kafka section:

kafka section parameters
ParameterDescriptionTypeAllowed valuesDefault
enabledWhether the Kafka broker and related services are enabledbooltrue, falsetrue
useSSLWhether SSL should be usedbooltrue, falsetrue
defaultTopicsThe default topics that should be createdstringSemicolon separated list of valid Kafka topicsia.test.test.test.processValue;ia.test.test.test.count;umh.v1.kafka.newTopic
tls.CACertThe CA certificatestringAny—–BEGIN CERTIFICATE—– … —–END CERTIFICATE—–
tls.kafka.certThe certificate used for the kafka brokerstringAny—–BEGIN CERTIFICATE—– … —–END CERTIFICATE—–
tls.kafka.privkeyThe private key of the certificate for the Kafka brokerstringAny—–BEGIN PRIVATE KEY—– … —–END PRIVATE KEY—–
tls.barcodereader.sslKeyPasswordThe encrypted password of the SSL key for the barcodereader microservice. If empty, no password is usedstringAny""
tls.barcodereader.sslKeyPemThe private key for the SSL certificate of the barcodereader microservicestringAny—–BEGIN PRIVATE KEY—– … —–END PRIVATE KEY—–
tls.barcodereader.sslCertificatePemThe private SSL certificate for the barcodereader microservicestringAny—–BEGIN CERTIFICATE—– … —–END CERTIFICATE—–
tls.kafkabridge.sslKeyPasswordLocalThe encrypted password of the SSL key for the local kafkabridge broker. If empty, no password is usedstringAny""
tls.kafkabridge.sslKeyPemLocalThe private key for the SSL certificate of the local kafkabridge brokerstringAny—–BEGIN PRIVATE KEY—– … —–END PRIVATE KEY—–
tls.kafkabridge.sslCertificatePemLocalThe private SSL certificate for the local kafkabridge brokerstringAny—–BEGIN CERTIFICATE—– … —–END CERTIFICATE—–
tls.kafkabridge.sslCACertRemoteThe CA certificate for the remote kafkabridge brokerstringAny—–BEGIN CERTIFICATE—– … —–END CERTIFICATE—–
tls.kafkabridge.sslCertificatePemRemoteThe private SSL certificate for the remote kafkabridge brokerstringAny—–BEGIN CERTIFICATE—– … —–END CERTIFICATE—–
tls.kafkabridge.sslKeyPasswordRemoteThe encrypted password of the SSL key for the remote kafkabridge broker. If empty, no password is usedstringAny""
tls.kafkabridge.sslKeyPemRemoteThe private key for the SSL certificate of the remote kafkabridge brokerstringAny—–BEGIN PRIVATE KEY—– … —–END PRIVATE KEY—–
tls.kafkadebug.sslKeyPasswordThe encrypted password of the SSL key for the kafkadebug microservice. If empty, no password is usedstringAny""
tls.kafkadebug.sslKeyPemThe private key for the SSL certificate of the kafkadebug microservicestringAny—–BEGIN PRIVATE KEY—– … —–END PRIVATE KEY—–
tls.kafkadebug.sslCertificatePemThe private SSL certificate for the kafkadebug microservicestringAny—–BEGIN CERTIFICATE—– … —–END CERTIFICATE—–
tls.kafkainit.sslKeyPasswordThe encrypted password of the SSL key for the kafkainit microservice. If empty, no password is usedstringAny""
tls.kafkainit.sslKeyPemThe private key for the SSL certificate of the kafkainit microservicestringAny—–BEGIN PRIVATE KEY—– … —–END PRIVATE KEY—–
tls.kafkainit.sslCertificatePemThe private SSL certificate for the kafkainit microservicestringAny—–BEGIN CERTIFICATE—– … —–END CERTIFICATE—–
tls.kafkatopostgresql.sslKeyPasswordThe encrypted password of the SSL key for the kafkatopostgresql microservice. If empty, no password is usedstringAny""
tls.kafkatopostgresql.sslKeyPemThe private key for the SSL certificate of the kafkatopostgresql microservicestringAny—–BEGIN PRIVATE KEY—– … —–END PRIVATE KEY—–
tls.kafkatopostgresql.sslCertificatePemThe private SSL certificate for the kafkatopostgresql microservicestringAny—–BEGIN CERTIFICATE—– … —–END CERTIFICATE—–
tls.kowl.sslKeyPasswordThe encrypted password of the SSL key for the kowl microservice. If empty, no password is usedstringAny""
tls.kowl.sslKeyPemThe private key for the SSL certificate of the kowl microservicestringAny—–BEGIN PRIVATE KEY—– … —–END PRIVATE KEY—–
tls.kowl.sslCertificatePemThe private SSL certificate for the kowl microservicestringAny—–BEGIN CERTIFICATE—– … —–END CERTIFICATE—–
tls.mqttkafkabridge.sslKeyPasswordThe encrypted password of the SSL key for the mqttkafkabridge microservice. If empty, no password is usedstringAny""
tls.mqttkafkabridge.sslKeyPemThe private key for the SSL certificate of the mqttkafkabridge microservicestringAny—–BEGIN PRIVATE KEY—– … —–END PRIVATE KEY—–
tls.mqttkafkabridge.sslCertificatePemThe private SSL certificate for the mqttkafkabridge microservicestringAny—–BEGIN CERTIFICATE—– … —–END CERTIFICATE—–
tls.nodered.sslKeyPasswordThe encrypted password of the SSL key for the nodered microservice. If empty, no password is usedstringAny""
tls.nodered.sslKeyPemThe private key for the SSL certificate of the nodered microservicestringAny—–BEGIN PRIVATE KEY—– … —–END PRIVATE KEY—–
tls.nodered.sslCertificatePemThe private SSL certificate for the nodered microservicestringAny—–BEGIN CERTIFICATE—– … —–END CERTIFICATE—–
tls.sensorconnect.sslKeyPasswordThe encrypted password of the SSL key for the sensorconnect microservice. If empty, no password is usedstringAny""
tls.sensorconnect.sslKeyPemThe private key for the SSL certificate of the sensorconnect microservicestringAny—–BEGIN PRIVATE KEY—– … —–END PRIVATE KEY—–
tls.sensorconnect.sslCertificatePemThe private SSL certificate for the sensorconnect microservicestringAny—–BEGIN CERTIFICATE—– … —–END CERTIFICATE—–

Data storage

The _000_commonConfig.datastorage section contains the configuration of the microservices used to store data. Specifically, it controls the following microservices:

If you want to specifically configure one of these microservices, you can do so in their respective sections in the Danger Zone.

The following table lists the configurable parameters of the _000_commonConfig.datastorage section.

datastorage section parameters
ParameterDescriptionTypeAllowed valuesDefault
enabledWhether to enable the data storage microservicesbooltrue, falsetrue
db_passwordThe password for the database. Used by all the microservices that need to connect to the databasestringAnychangeme

Kafka Bridge

The _000_commonConfig.kafkaBridge section contains the configuration of the kafka-bridge microservice, responsible for bridging Kafka brokers in different Kubernetes clusters.

The following table lists the configurable parameters of the _000_commonConfig.kafkaBridge section.

kafkaBridge section parameters
ParameterDescriptionTypeAllowed valuesDefault
enabledWhether to enable the kafka-bridge microservicebooltrue, falsefalse
remotebootstrapServerThe URL of the remote Kafka brokerstringAny""
topicCreationLocalListThe list of topics to create locallystringSemicolon separated list of valid Kafka topicsia.test.test.test.processValue;ia.test.test.test.count;umh.v1.kafka.newTopic
topicCreationRemoteListThe list of topics to create remotelystringSemicolon separated list of valid Kafka topicsia.test.test.test.processValue;ia.test.test.test.count;umh.v1.kafka.newTopic
topicmapThe list of topic maps of topics to forwardobjectSee belowempty
Topic Map

The topicmap parameter is a list of topic maps, each of which contains the following parameters:

topicmap section parameters
ParameterDescriptionTypeAllowed values
bidirectionalWhether to enable bidirectional communication for that topicbooltrue, false
nameThe name of the mapstringHighIntegrity, HighThroughput
send_directionThe direction of the communication for that topicstringto_remote, to_local
topicThe topic to forward. A regex can be used to match multiple topics.stringAny valid Kafka topic

For more information about the topic maps, see the kafka-bridge documentation.

Debug

The _000_commonConfig.debug section contains the debug configuration for all the microservices. This values should not be enabled in production.

The following table lists the configurable parameters of the _000_commonConfig.debug section.

debug section parameters
ParameterDescriptionTypeAllowed valuesDefault
enableFGTraceWhether to enable the foreground tracebooltrue, falsefalse

Tulip Connector

The _000_commonConfig.tulipconnector section contains the configuration of the tulip-connector microservice, responsible for connecting a Tulip instance with the United Manufacturing Hub.

The following table lists the configurable parameters of the _000_commonConfig.tulipconnector section.

tulipconnector section parameters
ParameterDescriptionTypeAllowed valuesDefault
enabledWhether to enable the tulip-connector microservicebooltrue, falsefalse
domainThe domain name pointing to you clusterstringAny valid domain nametulip-connector.changme.com

Custom microservices configuration

The _001_customConfig section contains a list of custom microservices definitions. It can be used to deploy any application of your choice, which can be configured using the following parameters:

Custom microservices configuration parameters
ParameterDescriptionTypeAllowed valuesDefault
nameThe name of the microservicestringAnyexample
imageThe image and tag of the microservicestringAnyhello-world:latest
enabledWhether to enable the microservicebooltrue, falsefalse
imagePullPolicyThe image pull policy of the microservicestring“Always”, “IfNotPresent”, “Never”“Always”
envThe list of environment variables to set for the microserviceobjectAny[{name: LOGGING_LEVEL, value: PRODUCTION}]
portThe internal port of the microservice to targetintAny80
externalPortThe host port to which expose the internal portintAny8080
probePortThe port to use for the liveness and startup probesintAny9091
startupProbeThe interval in seconds for the startup probeintAny200
livenessProbeThe interval in seconds for the liveness probeintAny500
statefulEnabledCreate a PersistentVolumeClaim for the microservice and mount it in /databooltrue, falsefalse

Danger zone

The next sections contain a more advanced configuration of the microservices. Usually, changing the values of the previous sections is enough to run the United Manufacturing Hub. However, you may need to adjust some of the values below if you want to change the default behavior of the microservices.

Everything below this point should not be changed, unless you know what you are doing.
Danger zone advanced configuration
SectionDescription
barcodereaderConfiguration for barcodereader
databridgeConfiguration for databridge
factoryinsightConfiguration for factoryinsight
grafanaConfiguration for Grafana
iotsensorsmqttConfiguration for the IoTSensorsMQTT simulator
kafkabridgeConfiguration for kafka-bridge
kafkatopostgresqlConfiguration for kafka-to-postgresql
kafkatopostgresqlv2Configuration for kafka-to-postgresql-v2
metricsConfiguration for the metrics
mqtt_brokerConfiguration for the MQTT broker
mqttkafkabridgeConfiguration for mqtt-kafka-bridge
noderedConfiguration for Node-RED
opcuasimulatorConfiguration for the OPC UA simulator
packmlmqttsimulatorConfiguration for the PackML MQTT simulator
redisConfiguration for Redis
redpandaConfiguration for the Kafka broker
sensorconnectConfiguration for sensorconnect
serviceAccountConfiguration for the service account used by the microservices
timescaledb-singleConfiguration for TimescaleDB
tulipconnectorConfiguration for tulip-connector

Sections

barcodereader

The barcodereader section contains the advanced configuration of the barcodereader microservice.

barcodereader advanced section parameters
ParameterDescriptionTypeAllowed valuesDefault
annotationsAnnotations to add to the Kubernetes resourcesobjectAny{}
enabledWhether to enable the barcodereader microservicebooltrue, falsefalse
image.pullPolicyThe image pull policystringAlways, IfNotPresent, NeverIfNotPresent
image.repositoryThe image of the barcodereader microservicestringAnyghcr.io/united-manufacturing-hub/barcodereader
image.tagThe tag of the barcodereader microservice. Defaults to Chart version if not setstringAny
resources.limits.cpuThe CPU limitstringAny10m
resources.limits.memoryThe memory limitstringAny60Mi
resources.requests.cpuThe CPU requeststringAny2m
resources.requests.memoryThe memory requeststringAny30Mi
scanOnlyWhether to only scan without sending the data to the Kafka brokerbooltrue, falsefalse

databridge

The databridge section contains the advanced configuration of the databridge microservice.

databridge advanced section parameters
ParameterDescriptionTypeAllowed valuesDefault
enabledWhether to enable the databridge microservicebooltrue, falsefalse
image.pullPolicyThe image pull policystringAlways, IfNotPresent, NeverIfNotPresent
image.repositoryThe image of the databridge microservicestringAnyghcr.io/united-manufacturing-hub/databridge
image.tagThe tag of the databridge microservice. Defaults to Chart version if not setstringAny
pdb.enabledWhether to enable a PodDisruptionBudgetbooltrue, falsetrue
pdb.minAvailableThe minimum number of available podsintAny1
replicasThe number of Pod replicasintAny1
resources.limits.cpuThe CPU limitstringAny400m
resources.limits.memoryThe memory limitstringAny300Mi
resources.requests.cpuThe CPU requeststringAny500m
resources.requests.memoryThe memory requeststringAny450Mi

factoryinsight

The factoryinsight section contains the advanced configuration of the factoryinsight microservice.

factoryinsight advanced section parameters
ParameterDescriptionTypeAllowed valuesDefault
db_databaseThe database namestringAnyfactoryinsight
db_hostThe host of the databasestringAny[i18n] resource_service_database
db_userThe database userstringAnyfactoryinsight
enabledWhether to enable the factoryinsight microservicebooltrue, falsefalse
hpa.enabledWhether to enable a HorizontalPodAutoscalerbooltrue, falsefalse
image.pullPolicyThe image pull policystringAlways, IfNotPresent, NeverIfNotPresent
image.repositoryThe image of the factoryinsight microservicestringAnyghcr.io/united-manufacturing-hub/factoryinsight
image.tagThe tag of the factoryinsight microservice. Defaults to Chart version if not setstringAny
ingress.enabledWhether to enable an Ingressbooltrue, falsefalse
ingress.publicHostSecretNameThe secret name of the public host of the IngressstringAny""
ingress.publicHostThe public host of the IngressstringAny""
insecure_no_authWhether to enable the insecure_no_auth modebooltrue, falsefalse
pdb.enabledWhether to enable a PodDisruptionBudgetbooltrue, falsefalse
redis.URIThe URI of the Redis instancestringAnyunited-manufacturing-hub-redis-headless:6379
replicasThe number of Pod replicasintAny2
resources.limits.cpuThe CPU limitstringAny200m
resources.limits.memoryThe memory limitstringAny200Mi
resources.requests.cpuThe CPU requeststringAny50m
resources.requests.memoryThe memory requeststringAny50Mi
service.annotationsAnnotations to add to the factoryinsight ServiceobjectAny{}
userThe user of factoryinsightstringAnyfactoryinsight
versionThe version of the API used. Each version also enables all the previous onesintAny2

grafana

The grafana section contains the advanced configuration of the grafana microservice. This is based on the official Grafana Helm chart. For more information about the parameters, please refer to the official documentation.

Here are only the values different from the default ones.

grafana advanced section parameters
ParameterDescriptionTypeAllowed valuesDefault
admin.existingSecretThe name of the secret containing the admin passwordstringAnygrafana-secret
admin.passwordKeyThe key of the admin password in the secretstringAnyadminpassword
admin.userKeyThe key of the admin password in the secretstringAnyadminuser
datasourcesThe datasources configuration.objectAnySee datasources section
envValueFromEnvironment variables to add to the Pod, from a secret or a configmapobjectAnySee envValueFrom section
envEnvironment variables to add to the PodobjectAnySee env section
extraInitContainersExtra init containers to add to the PodobjectAnySee extraInitContainers section
grafana.iniThe grafana.ini configuration.objectAnySee grafana.ini section
initChownData.enabledWhether to enable the initChownData job, to reset data ownership at startupbooltrue, falsetrue
persistence.enabledWhether to enable persistencebooltrue, falsetrue
persistence.sizeThe size of the persistent volumestringAny5Gi
podDisruptionBudget.minAvailableThe minimum number of available podsintAny1
service.portThe port of the ServiceintAny8080
service.typeThe type of Service to exposestringClusterIP, LoadBalancerLoadBalancer
serviceAccount.createWhether to create a ServiceAccountbooltrue, falsefalse
testFramework.enabledWhether to enable the test frameworkbooltrue, falsefalse
datasources

The datasources section contains the configuration of the datasources provisioning. See the Grafana documentation for more information.

datasources.yaml:
  apiVersion: 1
  datasources:
    - name: umh-v2-datasource
      # <string, required> datasource type. Required
      type: umh-v2-datasource
      # <string, required> access mode. proxy or direct (Server or Browser in the UI). Required
      access: proxy
      # <int> org id. will default to orgId 1 if not specified
      orgId: 1
      url: "http://united-manufacturing-hub-factoryinsight-service/"
      jsonData:
        customerID: $FACTORYINSIGHT_CUSTOMERID
        apiKey: $FACTORYINSIGHT_PASSWORD
        baseURL: "http://united-manufacturing-hub-factoryinsight-service/"
        apiKeyConfigured: true
      version: 1
      # <bool> allow users to edit datasources from the UI.
      isDefault: false
      editable: false
    # <string, required> name of the datasource. Required
    - name: umh-datasource
      # <string, required> datasource type. Required
      type: umh-datasource
      # <string, required> access mode. proxy or direct (Server or Browser in the UI). Required
      access: proxy
      # <int> org id. will default to orgId 1 if not specified
      orgId: 1
      url: "http://united-manufacturing-hub-factoryinsight-service/"
      jsonData:
        customerId: $FACTORYINSIGHT_CUSTOMERID
        apiKey: $FACTORYINSIGHT_PASSWORD
        serverURL: "http://united-manufacturing-hub-factoryinsight-service/"
        apiKeyConfigured: true
      version: 1
      # <bool> allow users to edit datasources from the UI.
      isDefault: false
      editable: false
    - name: UMH TimescaleDB 
      type: postgres
      url: united-manufacturing-hub:5432
      user: $GRAFANAREADER_USER
      isDefault: true
      secureJsonData:
        password: $GRAFANAREADER_PASSWORD
      jsonData:
        database: umh_v2
        sslmode: 'require' # disable/require/verify-ca/verify-full
        maxOpenConns: 100 # Grafana v5.4+
        maxIdleConns: 100 # Grafana v5.4+
        maxIdleConnsAuto: true # Grafana v9.5.1+
        connMaxLifetime: 14400 # Grafana v5.4+
        postgresVersion: 1300 # 903=9.3, 904=9.4, 905=9.5, 906=9.6, 1000=10
        timescaledb: true
envValueFrom

The envValueFrom section contains the configuration of the environment variables to add to the Pod, from a secret or a configmap.

grafana envValueFrom section parameters
ParameterDescriptionValue fromNameKey
FACTORYINSIGHT_APIKEYThe API key to use to authenticate to the Factoryinsight APIsecretKeyReffactoryinsight-secretapiKey
FACTORYINSIGHT_BASEURLThe base URL of the Factoryinsight APIsecretKeyReffactoryinsight-secretbaseURL
FACTORYINSIGHT_CUSTOMERIDThe customer ID to use to authenticate to the Factoryinsight APIsecretKeyReffactoryinsight-secretcustomerID
FACTORYINSIGHT_PASSWORDThe password to use to authenticate to the Factoryinsight APIsecretKeyReffactoryinsight-secretpassword
GRAFANAREADER_USERThe name of the Grafana read-only user for the data model v2secretKeyRef"grafana-secretgrafanareader
GRAFANAREADER_PASSWORDThe password of the Grafana read-only user for the data model v2secretKeyRef"grafana-secretgrafanareaderpassword
env

The env section contains the configuration of the environment variables to add to the Pod.

grafana env section parameters
ParameterDescriptionTypeAllowed valuesDefault
GF_PLUGINS_ALLOW_LOADING_UNSIGNED_PLUGINSList of plugin identifiers to allow loading even if they lack a valid signaturestringComma separated listumh-datasource, umh-v2-datasource
extraInitContainers

The extraInitContainers section contains the configuration of the extra init containers to add to the Pod.

The init-plugins container is used to install the default plugins shipped with the UMH version of Grafana without the need to have an internet connection. See the documentation for a list of the plugins.

- image: unitedmanufacturinghub/grafana-umh:1.2.0
  name: init-plugins
  imagePullPolicy: IfNotPresent
  command: ['sh', '-c', 'cp -r /plugins /var/lib/grafana/']
  volumeMounts:
    - name: storage
      mountPath: /var/lib/grafana
grafana.ini

The grafana.ini section contains the configuration of the grafana.ini file. See the Grafana documentation for more information.

paths:
  data: /var/lib/grafana/data
  logs: /var/log/grafana
  plugins: /var/lib/grafana/plugins
  provisioning: /etc/grafana/provisioning
database:
  host: united-manufacturing-hub
  user: "grafana"
  name: "grafana"
  password: "changeme"
  ssl_mode: require
  type: postgres

iotsensorsmqtt

The iotsensorsmqtt section contains the configuration of the IoT Sensors MQTT microservice.

iotsensorsmqtt section parameters
ParameterDescriptionTypeAllowed valuesDefault
imageThe image of the iotsensorsmqtt microservicestringAnyamineamaach/sensors-mqtt
mqtt.encryptedPasswordThe encrypted password of the MQTT brokerstringAnyBase 64 encrypted password
mqtt.passwordThe password of the MQTT brokerstringAnyINSECURE_INSECURE_INSECURE
resources.limits.cpuThe CPU limitstringAny30m
resources.limits.memoryThe memory limitstringAny50Mi
resources.requests.cpuThe CPU requeststringAny10m
resources.requests.memoryThe memory requeststringAny20Mi
tagThe tag of the iotsensorsmqtt microservice. Defaults to latest if not setstringAnyv1.0.0

kafkabridge

The kafkabridge section contains the configuration of the Kafka bridge.

kafkabridge section parameters
ParameterDescriptionTypeAllowed valuesDefault
image.pullPolicyThe image pull policystringAlways, IfNotPresent, NeverIfNotPresent
image.repositoryThe image of the kafka-bridge microservicestringAnyghcr.io/united-manufacturing-hub/kafka-bridge
image.tagThe tag of the kafka-bridge microservice. Defaults to Chart version if not setstringAny
initContainer.pullPolicyThe image pull policy of the init containerstringAlways, IfNotPresent, NeverIfNotPresent
initContainer.repositoryThe image of the init containerstringAnyghcr.io/united-manufacturing-hub/kafka-init
initContainer.tagThe tag of the init container. Defaults to Chart version if not setstringAny

kafkatopostgresql

The kafkatopostgresql section contains the configuration of the Kafka to PostgreSQL microservice.

kafkatopostgresql section parameters
ParameterDescriptionTypeAllowed valuesDefault
enabledWhether to enable the Kafka to PostgreSQL microservicebooltrue, falsetrue
image.pullPolicyThe image pull policystringAlways, IfNotPresent, NeverIfNotPresent
image.repositoryThe image of the kafkatopostgresql microservicestringAnyghcr.io/united-manufacturing-hub/kafka-to-postgresql
image.tagThe tag of the kafkatopostgresql microservice. Defaults to Chart version if not setstringAny
initContainer.pullPolicyThe image pull policy of the init containerstringAlways, IfNotPresent, NeverIfNotPresent
initContainer.repositoryThe image of the init containerstringAnyghcr.io/united-manufacturing-hub/kafka-init
initContainer.tagThe tag of the init container. Defaults to Chart version if not setstringAny
replicasThe number of Pod replicasintAny1
resources.limits.cpuThe CPU limitstringAny200m
resources.limits.memoryThe memory limitstringAny300Mi
resources.requests.cpuThe CPU requeststringAny50m
resources.requests.memoryThe memory requeststringAny150Mi

kafkatopostgresqlv2

The kafkatopostgresqlv2 section contains the configuration of the Kafka to PostgreSQL v2 microservice.

kafkatopostgresqlv2 section parameters
ParameterDescriptionTypeAllowed valuesDefault
enabledWhether to enable the Kafka to PostgreSQL v2 microservicebooltrue, falsetrue
image.pullPolicyThe image pull policystringAlways, IfNotPresent, NeverIfNotPresent
image.repositoryThe image of the kafkatopostgresqlv2 microservicestringAnyghcr.io/united-manufacturing-hub/kafka-to-postgresql-v2
image.tagThe tag of the kafkatopostgresqlv2 microservice. Defaults to Chart version if not setstringAny
replicasThe number of Pod replicasintAny1
resources.limits.cpuThe CPU limitstringAny200m
resources.limits.memoryThe memory limitstringAny300Mi
resources.requests.cpuThe CPU requeststringAny50m
resources.requests.memoryThe memory requeststringAny150Mi
probes.startup.failureThresholdThe failure threshold of the startup probeintAny30
probes.startup.initialDelaySecondsThe initial delay of the startup probeintAny10
probes.startup.periodSecondsThe period of the startup probeintAny10
probes.liveness.periodSecondsThe period of the liveness probeintAny10
probes.readiness.periodSecondsThe period of the readiness probeintAny10
logging.levelThe logging level of the microservicestringPRODUCTION, DEVELOPMENTPRODUCTION
asset.cache.lru.sizeThe size of the LRU cacheintAny1000
workers.channel.sizeSize in messages for each worker’s channelintAny10000
workers.goroutines.multiplierThe multiplier of the number of goroutines. The total number of goroutines is determined by the CPU count times the multiplierintAny16
database.userThe name of the database user for the Kafka to PostgreSQL v2 microservicestringAnykafkatopostgresqlv2
database.passwordThe password of the database user for the Kafka to PostgreSQL v2 microservicestringAnychangemetoo

metrics

The metrics section contains the configuration of the metrics CronJob that sends anonymous usage data.

metrics section parameters
ParameterDescriptionTypeAllowed valuesDefault
image.pullPolicyThe image pull policystringAlways, IfNotPresent, NeverIfNotPresent
image.repositoryThe image of the metrics microservicestringAnyghcr.io/united-manufacturing-hub/metrics
cronJob.scheduleThe schedule of the CronJobstringAny0 */4 * * * (every 4 hours)

mqtt_broker

The mqtt_broker section contains the configuration of the MQTT broker.

mqtt_broker section parameters
ParameterDescriptionTypeAllowed valuesDefault
image.pullPolicyThe image pull policystringAlways, IfNotPresent, NeverIfNotPresent
image.repositoryThe image of the mqtt_broker microservicestringAnyhivemq/hivemq-ce
image.tagThe tag of the mqtt_broker microservice. Defaults to 2022.1 if not setstringAny2022.1
initContainerThe init container configurationobjectAnySee initContainer section
persistence.extension.sizeThe size of the persistence volume for the extensionsstringAny100Mi
persistence.storage.sizeThe size of the persistence volume for the storagestringAny2Gi
rbacEnabledWhether to enable RBACbooltrue, falsefalse
resources.limits.cpuThe CPU limitstringAny700m
resources.limits.memoryThe memory limitstringAny1700Mi
resources.requests.cpuThe CPU requeststringAny300m
resources.requests.memoryThe memory requeststringAny1000Mi
service.mqtt.enabledWhether to enable the MQTT servicebooltrue, falsetrue
service.mqtt.portThe port of the MQTT serviceintAny1883
service.mqtts.cipher_suitesThe ciphersuites to enablestring arrayAnyTLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_128_GCM_SHA256, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_256_CBC_SHA
service.mqtts.enabledWhether to enable the MQTT over TLS servicebooltrue, falsetrue
service.mqtts.portThe port of the MQTT over TLS serviceintAny8883
service.mqtts.tls_versionsThe TLS versions to enablestring arrayAnyTLSv1.3, TLSv1.2
service.ws.enabledWhether to enable the WebSocket servicebooltrue, falsefalse
service.ws.portThe port of the WebSocket serviceintAny8080
service.wss.cipher_suitesThe ciphersuites to enablestring arrayAnyTLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_128_GCM_SHA256, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_256_CBC_SHA
service.wss.enabledWhether to enable the WebSocket over TLS servicebooltrue, falsefalse
service.wss.portThe port of the WebSocket over TLS serviceintAny8443
service.wss.tls_versionsThe TLS versions to enablestring arrayAnyTLSv1.3, TLSv1.2
initContainer

The initContainer section contains the configuration for the init containers. By default, the hivemqextensioninit container is used to initialize the HiveMQ extensions.

initContainer:
  hivemqextensioninit:
    image:
      repository: unitedmanufacturinghub/hivemq-init
      tag: 2.0.0
      pullPolicy: IfNotPresent

mqttkafkabridge

The mqttkafkabridge section contains the configuration of the MQTT-Kafka bridge.

mqttkafkabridge section parameters
ParameterDescriptionTypeAllowed valuesDefault
enabledWhether to enable the MQTT-Kafka bridgebooltrue, falsefalse
image.pullPolicyThe pull policy of the mqtt-kafka-bridge microservicestringAnyIfNotPresent
image.repositoryThe image of the mqtt-kafka-bridge microservicestringAnyghcr.io/united-manufacturing-hub/mqtt-kafka-bridge
image.tagThe tag of the mqtt-kafka-bridge microservice. Defaults to Chart version if not setstringAny
initContainer.pullPolicyThe pull policy of the init containerstringAnyIfNotPresent
initContainer.repositoryThe image of the init containerstringAnyghcr.io/united-manufacturing-hub/kafka-init
initContainer.tagThe tag of the init container. Defaults to Chart version if not setstringAny
kafkaAcceptNoOriginAllow access to the Kafka broker without a valid x-tracebooltrue, falsefalse
kafkaSenderThreadsThe number of threads for sending messages to the Kafka brokerintAny1
messageLRUSizeThe size of the LRU cache for messagesintAny100000
mqtt.encryptedPasswordThe encrypted password of the MQTT brokerstringAnyBase 64 encrypted password
mqtt.passwordThe password of the MQTT brokerstringAnyINSECURE_INSECURE_INSECURE
mqttSenderThreadsThe number of threads for sending messages to the MQTT brokerintAny1
pdb.enabledWhether to enable the pod disruption budgetbooltrue, falsetrue
pdb.minAvailableThe minimum number of pods that must be availableintAny1
rawMessageLRUSizeThe size of the LRU cache for raw messagesintAny100000
resources.limits.cpuThe CPU limitstringAny500m
resources.limits.memoryThe memory limitstringAny450Mi
resources.requests.cpuThe CPU requeststringAny400m
resources.requests.memoryThe memory requeststringAny300Mi

nodered

The nodered section contains the configuration of the Node-RED microservice.

nodered section parameters
ParameterDescriptionTypeAllowed valuesDefault
envEnvironment variables to add to the PodobjectAnySee env section
flowsA JSON string containing the flows to import into Node-REDstringAnySee the documentation
ingress.enabledWhether to enable the ingressbooltrue, falsefalse
ingress.publicHostSecretNameThe secret name of the public host of the IngressstringAny""
ingress.publicHostThe public host of the IngressstringAny""
mqtt.encryptedPasswordThe encrypted password of the MQTT brokerstringAnyBase 64 encrypted password
portThe port of the Node-RED serviceintAny1880
serviceTypeThe type of the servicestringClusterIP, LoadBalancerLoadBalancer
settingsA JSON string containing the settings of Node-REDstringAnySee the documentation
storageRequestThe amount of storage for the PersistentVolumeClaimstringAny1Gi
tagThe Node-RED versionstringAny2.0.6
timezoneThe timezonestringAnyBerlin/Europe
env

The env section contains the environment variables to add to the Pod.

env section parameters
ParameterDescriptionTypeAllowed valuesDefault
NODE_RED_ENABLE_SAVE_MODEWhether to enable the save modebooltrue, falsefalse

opcuasimulator

The opcuasimulator section contains the configuration of the OPC UA Simulator microservice.

opcuasimulator section parameters
ParameterDescriptionTypeAllowed valuesDefault
certadds.hostsHosts to add to the certificatestringAnyunited-manufacturing-hub-opcuasimulator-service
certadds.ipsIPs to add to the certificatestringAny""
imageThe image of the OPC UA Simulator microservicestringAnyghcr.io/united-manufacturing-hub/opcuasimulator
resources.limits.cpuThe CPU limitstringAny30m
resources.limits.memoryThe memory limitstringAny50Mi
resources.requests.cpuThe CPU requeststringAny10m
resources.requests.memoryThe memory requeststringAny20Mi
service.annotationsThe annotations of the serviceobjectAny{}
tagThe tag of the OPC UA Simulator microservice. Defaults to latest if not setstringAny0.1.0

packmlmqttsimulator

The packmlmqttsimulator section contains the configuration of the PackML MQTT Simulator microservice.

packmlmqttsimulator section parameters
ParameterDescriptionTypeAllowed valuesDefault
image.repositoryThe image of the PackML MQTT Simulator microservicestringAnyspruiktec/packml-simulator
image.hashThe hash of the image of the PackML MQTT Simulator microservicestringAny01e2f0da3542f1b4e0de830a8d24135de03fd9174dce184ed329bed3ee688e19
image.pullPolicyThe image pull policystringAlways, IfNotPresent, NeverIfNotPresent
replicasThe number of replicasintAny1
resources.limits.cpuThe CPU limitstringAny30m
resources.limits.memoryThe memory limitstringAny50Mi
resources.requests.cpuThe CPU requeststringAny10m
resources.requests.memoryThe memory requeststringAny20Mi
envEnvironment variables to add to the PodobjectAnySee env section
env

The env section contains the environment variables to add to the Pod.

env section parameters
ParameterDescriptionTypeAllowed valuesDefault
areaISA-95 area name of the linestringAnyDefaultArea
productionLineISA-95 line name of the linestringAnyDefaultProductionLine
siteISA-95 site name of the linestringAnytestLocation
mqtt.passwordThe password of the MQTT brokerstringAnyINSECURE_INSECURE_INSECURE
mqtt.encryptedPasswordThe encrypted password of the MQTT brokerstringAnyBase 64 encrypted password

redis

The redis section contains the configuration of the Redis microservice. This is based on the official Redis Helm chart. For more information about the parameters, see the official documentation.

Here are only the values different from the default ones.

redis section parameters
ParameterDescriptionTypeAllowed valuesDefault
architectureRedis architecturestringstandalone, replicationstandalone
auth.existingSecretPasswordKeyPassword key to be retrieved from existing secretstringAnyredispassword
auth.existingSecretThe name of the existing secret with Redis credentialsstringAnyredis-secret
commonConfigurationCommon configuration to be added into the ConfigMapstringAnySee commonConfiguration section
master.extraFlagsArray with additional command line flags for Redis masterstring arrayAny–maxmemory 200mb
master.livenessProbe.initialDelaySecondsThe initial delay before the liveness probe startsintAny5
master.readinessProbe.initialDelaySecondsThe initial delay before the readiness probe startsintAny120
master.resources.limits.cpuThe CPU limitstringAny100m
master.resources.limits.memoryThe memory limitstringAny100Mi
master.resources.requests.cpuThe CPU requeststringAny50m
master.resources.requests.memoryThe memory requeststringAny50Mi
metrics.enabledStart a sidecar prometheus exporter to expose Redis metricsbooltrue, falsetrue
pdb.createWhether to create a Pod Disruption Budgetbooltrue, falsetrue
pdb.minAvailableMin number of pods that must still be available after the evictionintAny2
serviceAccount.createWhether to create a service accountbooltrue, falsefalse
commonConfiguration

The commonConfiguration section contains the common configuration to be added into the ConfigMap. For more information, see the documentation.

# Enable AOF https://redis.io/topics/persistence#append-only-file
appendonly yes
# Disable RDB persistence, AOF persistence already enabled.
save ""
# Backwards compatability with Redis version 6.*
replica-ignore-disk-write-errors yes

redpanda

The redpanda section contains the configuration of the Kafka broker. This is based on the RedPanda chart. For more information about the parameters, see the official documentation.

Here are only the values different from the default ones.

kafka section parameters
ParameterDescriptionTypeAllowed valuesDefault
config.cluster.auto_create_topics_enabledWhether to enable auto creation of topicsbooltrue, falsetrue
consoleThe configuration for RedPanda ConsoleobjectAnySee console section
external.typeThe type of Service for external accessstringNodePort, LoadBalancerNodePort
fullnameOverrideThe full name overridestringAnyunited-manufacturing-hub-kafka
listeners.kafka.portThe port of the Kafka listenerintAny9092
rbac.enableWhether to enable RBACbooltrue, falsetrue
resources.cpu.coresThe number of CPU cores to allocate to the Kafka brokerintAny1
resources.memory.container.maxMaximum memory count for each brokerstringAny2Gi
resources.memory.enable_memory_lockingWhether to enable memory lockingbooltrue, falsetrue
serviceAccount.createWhether to create a service accountbooltrue, falsefalse
statefulset.replicasThe number of brokersintAny1
storage.persistentVolume.sizeThe size of the persistent volumestringAny10Gi
tls.enabledWhether to enable TLSbooltrue, falsefalse
console

The console section contains the configuration of the RedPanda Console.

For more information about the parameters, see the official documentation.

console section parameters
ParameterDescriptionTypeAllowed valuesDefault
console.config.kafka.brokersThe list of Kafka brokerslistAnyunited-manufacturing-hub-kafka:9092
service.portThe port of the Service to exposeintAny8090
service.targetPortThe target port of the Service to exposeintAny8080
service.typeThe type of Service to exposestringClusterIp, NodePort, LoadBalancerLoadBalancer
serviceAccount.createWhether to create a service accountbooltrue, falsefalse

sensorconnect

The sensorconnect section contains the configuration of the Sensorconnect microservice.

sensorconnect section parameters
ParameterDescriptionTypeAllowed valuesDefault
additionalSleepTimePerActivePortMsAdditional sleep time between pollings for each active port in millisecondsfloatAny0.0
additionalSlowDownMapJSON map of values, allows to slow down and speed up the polling time of specific sensorsJSONAny{}
allowSubTwentyMsWhether to allow sub 20ms polling time. Set to 1 to enable. Not recommendedint0, 10
deviceFinderTimeSecTime interval in second between new device discoveryintAny20
deviceFinderTimeoutSecTimeout in second for device discovery. Never set lower than deviceFinderTimeSecintAny1
imageThe image of the sensorconnect microservicestringAnyghcr.io/united-manufacturing-hub/sensorconnect
ioddfilepathThe path to the IODD filesstringAny/ioddfiles
lowerPollingTimeThe lower polling time in millisecondsintAny100
maxSensorErrorCountThe maximum number of sensor errors before the sensor is marked as not respondingintAny50
mqtt.encryptedPasswordThe encrypted password of the MQTT brokerstringAnyBase 64 encrypted password
mqtt.passwordThe password of the MQTT brokerstringAnyINSECURE_INSECURE_INSECURE
pollingSpeedStepDownMsThe time to subtract from the polling time in milliseconds when a sensor is respondingintAny1
pollingSpeedStepUpMsThe time to add to the polling time in milliseconds when a sensor is not respondingintAny20
resources.limits.cpuThe CPU limitstringAny100m
resources.limits.memoryThe memory limitstringAny200Mi
resources.requests.cpuThe CPU requeststringAny10m
resources.requests.memoryThe memory requeststringAny75Mi
storageRequestThe amount of storage for the PersistentVolumeClaimstringAny1Gi
tagThe tag of the sensorconnect microservice. Defaults to Chart version if not setstringAny
upperPollingTimeThe upper polling time in millisecondsintAny1000

serviceAccount

The serviceAccount section contains the configuration of the service account. See the Kubernetes documentation for more information.

serviceAccount section parameters
ParameterDescriptionTypeAllowed valuesDefault
createWhether to create a service accountbooltrue, falsetrue

timescaledb-single

The timescaledb-single section contains the configuration of the TimescaleDB microservice. This is based on the official TimescaleDB Helm chart. For more information about the parameters, see the official documentation.

Here are only the values different from the default ones.

timescaledb-single section parameters
ParameterDescriptionTypeAllowed valuesDefault
replicaCountThe number of replicasintAny1
image.repositoryThe image of the TimescaleDB microservicestringAnyghcr.io/united-manufacturing-hub/timescaledb
image.tagThe Timescaledb-ha versionstringAnypg13.8-ts2.8.0-p1
image.pullPolicyThe image pull policystringAlways, IfNotPresent, NeverIfNotPresent
patroni.postgresql.create_replica_methodsThe replica creation methodstring arrayAnybasebackup
postInitA list of sources that contain post init scriptsobject arrayAnySee postInit
service.primary.typeThe type of the primary servicestringClusterIP, NodePort, LoadBalancerLoadBalancer
serviceAccount.createWhether to create a service accountbooltrue, falsefalse
postInit

The postInit parameter is a list of references to sources that contain post init scripts. The scripts are executed after the database is initialized.

postInit:
  - configMap:
      name: {{ resource type="configmap" name="database" }}
      optional: false
  - secret:
      name: {{ resource type="secret" name="database" }}
      optional: false

tulipconnector

The tulipconnector section contains the configuration of the Tulip Connector microservice.

tulipconnector section parameters
ParameterDescriptionTypeAllowed valuesDefault
image.repositoryThe image of the Tulip Connector microservicestringAnyghcr.io/united-manufacturing-hub/tulip-connector
image.tagThe tag of the Tulip Connector microservice. Defaults to latest if not setstringAny0.1.0
image.pullPolicyThe image pull policystringAlways, IfNotPresent, NeverIfNotPresent
replicasThe number of Pod replicasintAny1
envThe environment variablesobjectAnySee env
resources.limits.cpuThe CPU limitstringAny30m
resources.limits.memoryThe memory limitstringAny50Mi
resources.requests.cpuThe CPU requeststringAny10m
resources.requests.memoryThe memory requeststringAny20Mi
env

The env section contains the configuration of the environment variables to add to the Pod.

env section parameters
ParameterDescriptionTypeAllowed valuesDefault
modeIn which mode to run the Tulip Connectorstringdev, prodprod

What’s next

2 - Microservices

This section contains the reference documentation for the microservices that can be found in the United Manufacturing Hub.

This section contains the technical documentation for the microservices that compose the United Manufacturing Hub.

2.1 - Barcodereader

The technical documentation of the barcodereader microservice, which reads barcodes and sends the data to the Kafka broker.

Kubernetes resources

  • Deployment: united-manufacturing-hub-barcodereader
  • Secret: united-manufacturing-hub-barcodereader-secrets

Configuration

Environment variables

Environment variables
Variable nameDescriptionTypeAllowed valuesDefault
ASSET_IDThe asset ID, which is used for the topic structurestringAnybarcodereader
CUSTOMER_IDThe customer ID, which is used for the topic structurestringAnyraw
DEBUG_ENABLE_FGTRACEEnables the use of the fgtrace library. Not recommended for productionstringtrue, falsefalse
INPUT_DEVICE_NAMEThe name of the USB device to usestringAnyDatalogic ADC, Inc. Handheld Barcode Scanner
INPUT_DEVICE_PATHThe path of the USB device to use. It is recommended to use a wildcard (for example, /dev/input/event*) or leave emptystringValid Unix device path""
KAFKA_BOOTSTRAP_SERVERURL of the Kafka broker used, port is requiredstringAnyunited-manufacturing-hub-kafka:9092
LOCATIONThe location, which is used for the topic structurestringAnybarcodereader
LOGGING_LEVELDefines which logging level is used, mostly relevant for developers.stringPRODUCTION, DEVELOPMENTPRODUCTION
MICROSERVICE_NAMEName of the microservice (used for tracing)stringAnyunited-manufacturing-hub-barcodereader
SCAN_ONLYPrevent message broadcasting if enabledbooltrue, falsefalse
SERIAL_NUMBERSerial number of the cluster (used for tracing)stringAnydefalut

2.2 - Cache

The technical documentation of the redis microservice, which is used as a cache for the other microservices.

Kubernetes resources

  • StatefulSet: united-manufacturing-hub-redis-master
  • Service:
    • Internal ClusterIP:
      • Redis: united-manufacturing-hub-redis-master at port 6379
      • Headless: united-manufacturing-hub-redis-headless at port 6379
      • Metrics: united-manufacturing-hub-redis-metrics at port 6379
  • ConfigMap:
    • Configuration: united-manufacturing-hub-redis-configuration
    • Health: united-manufacturing-hub-redis-health
    • Scripts: united-manufacturing-hub-redis-scripts
  • Secret: redis-secret
  • PersistentVolumeClaim: redis-data-united-manufacturing-hub-redis-master-0

Configuration

You shouldn’t need to configure the cache manually, as it’s configured automatically when the cluster is deployed. However, if you need to change the configuration, you can do it by editing the redis section of the Helm chart values file.

You can consult the Bitnami Redis chart for more information about the available configuration options.

Environment variables

Environment variables
Variable nameDescriptionTypeAllowed valuesDefault
ALLOW_EMPTY_PASSWORDAllow empty passwordbooltrue, falsefalse
BITNAMI_DEBUGSpecify if debug values should be setbooltrue, falsefalse
REDIS_PASSWORDRedis passwordstringAnyRandom UUID
REDIS_PORTRedis port numberintAny6379
REDIS_REPLICATION_MODERedis replication modestringmaster, slavemaster
REDIS_TLS_ENABLEDEnable TLSbooltrue, falsefalse

2.3 - Data Bridge

The technical documentation of the data-bridge microservice, which transfers data between two Kafka or MQTT brokers, tranforming the data following the UNS data model.

Kubernetes resources

  • Deployment: united-manufacturing-hub-databridge-0
  • Secret: united-manufacturing-hub-databridge-mqtt-secrets

Configuration

You shouldn’t need to configure the environment variables directly, as they are set by the Helm chart. If you need to change them, you can do so by editing the values in the Helm chart.

Environment variables

Environment variables
Variable nameDescriptionTypeAllowed valuesDefault
BROKER_AThe address of the source broker.stringAny""
BROKER_BThe address of the destination broker.stringAny""
LOGGING_LEVELThe logging level to use.stringPRODUCTION, DEVELOPMENTPRODUCTION
MESSAGE_LRU_SIZEThe size of the LRU cache used to avoid message looping. Only used with MQTT brokersintAny1000000
MICROSERVICE_NAMEName of the microservice. Used for tracing.stringAnyunited-manufacturing-hub-databridge
MQTT_ENABLE_TLSWhether to enable TLS for the MQTT connection.booltrue, falsefalse
MQTT_PASSWORDThe password to use for the MQTT connection.stringAny""
PARTITIONSThe number of partitions to use for the destination topic. Only used if the destination broker is Kafka.intGreater than 06
POD_NAMEName of the pod. Used for tracing.stringAnyunited-manufacturing-hub-databridge
REPLICATION_FACTORThe replication factor to use for the destination topic. Only used if the destination broker is Kafka.intOdd integer3
SERIAL_NUMBERSerial number of the cluster. Used for tracing.stringAnydefault
SPLITThe nth part of the topic to use as the message key. If the topic is umh/v1/acme/anytown/foo/bar, and SPLIT is 4, then the message key will be foo.barintGreater than 3-1
TOPICThe topic to subscribe to. Can be in either MQTT or Kafka form. Wildcards (# for MQTT, .* for Kafka) are allowed in order to subscribe to multiple topicsstringAny""

2.4 - Database

The technical documentation of the database microservice, which stores the data of the application.

Kubernetes resources

  • StatefulSet: united-manufacturing-hub-timescaledb
  • Service:
    • Internal ClusterIP for the replicas: united-manufacturing-hub-replica at port 5432
    • Internal ClusterIP for the config: united-manufacturing-hub-config at port 8008
    • External LoadBalancer: united-manufacturing-hub at port 5432
  • ConfigMap:
    • Patroni: united-manufacturing-hub-timescaledb-patroni
    • Post init: timescale-post-init
    • Postgres BackRest: united-manufacturing-hub-timescaledb-pgbackrest
    • Scripts: united-manufacturing-hub-timescaledb-scripts
  • Secret:
    • Certificate: united-manufacturing-hub-certificate
    • Patroni credentials: united-manufacturing-hub-credentials
    • Users passwords: timescale-post-init-pw
  • PersistentVolumeClaim:
    • Data: storage-volume-united-manufacturing-hub-timescaledb-0
    • WAL-E: wal-volume-united-manufacturing-hub-timescaledb-0

Configuration

There is only one parameter that usually needs to be changed: the password used to connect to the database. To do so, set the value of the db_password key in the _000_commonConfig.datastorage section of the Helm chart values file.

Environment variables

Environment variables
Variable nameDescriptionTypeAllowed valuesDefault
BOOTSTRAP_FROM_BACKUPWhether to bootstrap the database from a backup or not.int0, 10
PATRONI_KUBERNETES_LABELSThe labels to use to find the pods of the StatefulSet.stringAny{app: united-manufacturing-hub-timescaledb, cluster-name: united-manufacturing-hub, release: united-manufacturing-hub}
PATRONI_KUBERNETES_NAMESPACEThe namespace in which the StatefulSet is deployed.stringAnyunited-manufacturing-hub
PATRONI_KUBERNETES_POD_IPThe IP address of the pod.stringAnyRandom IP
PATRONI_KUBERNETES_PORTSThe ports to use to connect to the pods.stringAny[{"name": "postgresql", "port": 5432}]
PATRONI_NAMEThe name of the pod.stringAnyunited-manufacturing-hub-timescaledb-0
PATRONI_POSTGRESQL_CONNECT_ADDRESSThe address to use to connect to the database.stringAny$(PATRONI_KUBERNETES_POD_IP):5432
PATRONI_POSTGRESQL_DATA_DIRThe directory where the database data is stored.stringAny/var/lib/postgresql/data
PATRONI_REPLICATION_PASSWORDThe password to use to connect to the database as a replica.stringAnyRandom 16 characters
PATRONI_REPLICATION_USERNAMEThe username to use to connect to the database as a replica.stringAnystandby
PATRONI_RESTAPI_CONNECT_ADDRESSThe address to use to connect to the REST API.stringAny$(PATRONI_KUBERNETES_POD_IP):8008
PATRONI_SCOPEThe name of the cluster.stringAnyunited-manufacturing-hub
PATRONI_SUPERUSER_PASSWORDThe password to use to connect to the database as the superuser.stringAnyRandom 16 characters
PATRONI_admin_OPTIONSThe options to use for the admin user.stringComma separated list of optionscreaterole,createdb
PATRONI_admin_PASSWORDThe password to use to connect to the database as the admin user.stringAnyRandom 16 characters
PGBACKREST_CONFIGThe path to the configuration file for Postgres BackRest.stringAny/etc/pgbackrest/pgbackrest.conf
PGDATAThe directory where the database data is stored.stringAny$(PATRONI_POSTGRESQL_DATA_DIR)
PGHOSTThe directory of the runnning databasestringAny/var/run/postgresql

2.5 - Factoryinsight

The technical documentation of the Factoryinsight microservice, which exposes a set of APIs to access the data from the database.

Kubernetes resources

  • Deployment: united-manufacturing-hub-factoryinsight-deployment
  • Service:
  • Secret: factoryinsight-secret

Configuration

You shouldn’t need to configure Factoryinsight manually, as it’s configured automatically when the cluster is deployed. However, if you need to change the configuration, you can do it by editing the factoryinsight section of the Helm chart values file.

Environment variables

Environment variables
Variable nameDescriptionTypeAllowed valuesDefault
CUSTOMER_NAME_{NUMBER}Specifies a user for the REST API. Multiple users can be setstringAny""
CUSTOMER_PASSWORD_{NUMBER}Specifies the password of the user for the REST APIstringAny""
DEBUG_ENABLE_FGTRACEEnables the use of the fgtrace library. Not recommended for productionstringtrue, falsefalse
DRY_RUNIf enabled, data wont be stored in databasebooltrue, falsefalse
FACTORYINSIGHT_PASSWORDSpecifies the password for the admin user for the REST APIstringAnyRandom UUID
FACTORYINSIGHT_USERSpecifies the admin user for the REST APIstringAnyfactoryinsight
INSECURE_NO_AUTHIf enabled, no authentication is required for the REST API. Not recommended for productionbooltrue, falsefalse
LOGGING_LEVELDefines which logging level is used, mostly relevant for developersstringPRODUCTION, DEVELOPMENTPRODUCTION
MICROSERVICE_NAMEName of the microservice. Used for tracingstringAnyunited-manufacturing-hub-factoryinsight
POSTGRES_DATABASESpecifies the database name to usestringAnyfactoryinsight
POSTGRES_HOSTSpecifies the database DNS name or IP addressstringAnyunited-manufacturing-hub
POSTGRES_PASSWORDSpecifies the database password to usestringAnychangeme
POSTGRES_PORTSpecifies the database portintValid port number5432
POSTGRES_USERSpecifies the database user to usestringAnyfactoryinsight
REDIS_PASSWORDPassword to access the redis sentinelstringAnyRandom UUID
REDIS_URIThe URI of the Redis instancestringAnyunited-manufacturing-hub-redis-headless:6379
SERIAL_NUMBERSerial number of the cluster. Used for tracingstringAnydefault
VERSIONThe version of the API used. Each version also enables all the previous onesintAny2

API documentation

2.6 - Grafana

The technical documentation of the grafana microservice, which is a web application that provides visualization and analytics capabilities.

Kubernetes resources

  • Deployment: united-manufacturing-hub-grafana
  • Service:
    • External LoadBalancer: united-manufacturing-hub-grafana at port 8080
  • ConfigMap: united-manufacturing-hub-grafana
  • Secret: grafana-secret
  • PersistentVolumeClaim: united-manufacturing-hub-grafana

Configuration

Grafana is configured through its user interface. The default credentials are found in the grafana-secret Secret.

The Grafana installation that is provided by the United Manufacturing Hub is shipped with a set of preinstalled plugins:

  • ACE.SVG by Andrew Rodgers
  • Button Panel by CloudSpout LLC
  • Button Panel by UMH Systems Gmbh
  • Discrete by Natel Energy
  • Dynamic Text by Marcus Olsson
  • FlowCharting by agent
  • Pareto Chart by isaozler
  • Pie Chart (old) by Grafana Labs
  • Timepicker Buttons Panel by williamvenner
  • UMH Datasource by UMH Systems Gmbh
  • UMH Datasource v2 by UMH Systems Gmbh
  • Untimely by factry
  • Worldmap Panel by Grafana Labs

Environment variables

Environment variables
Variable nameDescriptionTypeAllowed valuesDefault
FACTORYINSIGHT_APIKEYThe API key to use to authenticate to the Factoryinsight APIstringAnyBase64 encoded string
FACTORYINSIGHT_BASEURLThe base URL of the Factoryinsight APIstringAnyunited-manufacturing-hub-factoryinsight-service
FACTORYINSIGHT_CUSTOMERIDThe customer ID to use to authenticate to the Factoryinsight APIstringAnyfactoryinsight
FACTORYINSIGHT_PASSWORDThe password to use to authenticate to the Factoryinsight APIstringAnyRandom UUID
GF_PATHS_DATAThe path where Grafana will store its datastringAny/var/lib/grafana/data
GF_PATHS_LOGSThe path where Grafana will store its logsstringAny/var/log/grafana
GF_PATHS_PLUGINSThe path where Grafana will store its pluginsstringAny/var/lib/grafana/plugins
GF_PATHS_PROVISIONINGThe path where Grafana will store its provisioning configurationstringAny/etc/grafana/provisioning
GF_PLUGINS_ALLOW_LOADING_UNSIGNED_PLUGINSList of plugin identifiers to allow loading even if they lack a valid signaturestringComma separated listumh-datasource,umh-factoryinput-panel,umh-v2-datasource
GF_SECURITY_ADMIN_PASSWORDThe password of the admin userstringAnyRandom UUID
GF_SECURITY_ADMIN_USERThe username of the admin userstringAnyadmin

2.7 - Kafka Bridge

The technical documentation of the kafka-bridge microservice, which acts as a communication bridge between two Kafka brokers.

Kubernetes resources

  • Deployment: united-manufacturing-hub-kafkabridge
  • Secret:
    • Local broker: united-manufacturing-hub-kafkabridge-secrets-local
    • Remote broker: united-manufacturing-hub-kafkabridge-secrets-remote

Configuration

You can configure the kafka-bridge microservice by setting the following values in the _000_commonConfig.kafkaBridge section of the Helm chart values file.

  kafkaBridge:
    enabled: true
    remotebootstrapServer: ""
    topicmap:
      - bidirectional: false
        name: HighIntegrity
        send_direction: to_remote
        topic: ^ia\..+\..+\..+\.((addMaintenanceActivity)|(addOrder)|(addParentToChild)|(addProduct)|(addShift)|(count)|(deleteShiftByAssetIdAndBeginTimestamp)|(deleteShiftById)|(endOrder)|(modifyProducedPieces)|(modifyState)|(productTag)|(productTagString)|(recommendation)|(scrapCount)|(startOrder)|(state)|(uniqueProduct)|(scrapUniqueProduct))$
      - bidirectional: false
        name: HighThroughput
        send_direction: to_remote
        topic: ^ia\..+\..+\..+\.(processValue).*$

Topic Map schema

The topic map is a list of objects, each object represents a topic (or a set of topics) that should be forwarded. The following JSON schema describes the structure of the topic map:

{
    "$schema": "http://json-schema.org/draft-07/schema",
    "type": "array",
    "title": "Kafka Topic Map",
    "description": "This schema validates valid Kafka topic maps.",
    "default": [],
    "additionalItems": true,
    "items": {
        "$id": "#/items",
        "anyOf": [
            {
                "$id": "#/items/anyOf/0",
                "type": "object",
                "title": "Unidirectional Kafka Topic Map with send direction",
                "description": "This schema validates entries, that are unidirectional and have a send direction.",
                "default": {},
                "examples": [
                    {
                        "name": "HighIntegrity",
                        "topic": "^ia\\..+\\..+\\..+\\.(?!processValue).+$",
                        "bidirectional": false,
                        "send_direction": "to_remote"
                    }
                ],
                "required": [
                    "name",
                    "topic",
                    "bidirectional",
                    "send_direction"
                ],
                "properties": {
                    "name": {
                        "$id": "#/items/anyOf/0/properties/name",
                        "type": "string",
                        "title": "Entry Name",
                        "description": "Name of the map entry, only used for logging & tracing.",
                        "default": "",
                        "examples": [
                            "HighIntegrity"
                        ]
                    },
                    "topic": {
                        "$id": "#/items/anyOf/0/properties/topic",
                        "type": "string",
                        "title": "The topic to listen on",
                        "description": "The topic to listen on, this can be a regular expression.",
                        "default": "",
                        "examples": [
                            "^ia\\..+\\..+\\..+\\.(?!processValue).+$"
                        ]
                    },
                    "bidirectional": {
                        "$id": "#/items/anyOf/0/properties/bidirectional",
                        "type": "boolean",
                        "title": "Is the transfer bidirectional?",
                        "description": "When set to true, the bridge will consume and produce from both brokers",
                        "default": false,
                        "examples": [
                            false
                        ]
                    },
                    "send_direction": {
                        "$id": "#/items/anyOf/0/properties/send_direction",
                        "type": "string",
                        "title": "Send direction",
                        "description": "Can be either 'to_remote' or 'to_local'",
                        "default": "",
                        "examples": [
                            "to_remote",
                            "to_local"
                        ]
                    }
                },
                "additionalProperties": true
            },
            {
                "$id": "#/items/anyOf/1",
                "type": "object",
                "title": "Bi-directional Kafka Topic Map with send direction",
                "description": "This schema validates entries, that are bi-directional.",
                "default": {},
                "examples": [
                    {
                        "name": "HighIntegrity",
                        "topic": "^ia\\..+\\..+\\..+\\.(?!processValue).+$",
                        "bidirectional": true
                    }
                ],
                "required": [
                    "name",
                    "topic",
                    "bidirectional"
                ],
                "properties": {
                    "name": {
                        "$id": "#/items/anyOf/1/properties/name",
                        "type": "string",
                        "title": "Entry Name",
                        "description": "Name of the map entry, only used for logging & tracing.",
                        "default": "",
                        "examples": [
                            "HighIntegrity"
                        ]
                    },
                    "topic": {
                        "$id": "#/items/anyOf/1/properties/topic",
                        "type": "string",
                        "title": "The topic to listen on",
                        "description": "The topic to listen on, this can be a regular expression.",
                        "default": "",
                        "examples": [
                            "^ia\\..+\\..+\\..+\\.(?!processValue).+$"
                        ]
                    },
                    "bidirectional": {
                        "$id": "#/items/anyOf/1/properties/bidirectional",
                        "type": "boolean",
                        "title": "Is the transfer bidirectional?",
                        "description": "When set to true, the bridge will consume and produce from both brokers",
                        "default": false,
                        "examples": [
                            true
                        ]
                    }
                },
                "additionalProperties": true
            }
        ]
    },
    "examples": [
   {
      "name":"HighIntegrity",
      "topic":"^ia\\..+\\..+\\..+\\.(?!processValue).+$",
      "bidirectional":true
   },
   {
      "name":"HighThroughput",
      "topic":"^ia\\..+\\..+\\..+\\.(processValue).*$",
      "bidirectional":false,
      "send_direction":"to_remote"
   }
]
}

Environment variables

Environment variables
Variable nameDescriptionTypeAllowed valuesDefault
DEBUG_ENABLE_FGTRACEEnables the use of the fgtrace library, do not enable in productionstringtrue, falsefalse
KAFKA_GROUP_ID_SUFFIXIdentifier appended to the kafka group ID, usually a serial numberstringAnydefalut
KAFKA_SSL_KEY_PASSWORD_LOCALPassword for the SSL key pf the local brokerstringAny""
KAFKA_SSL_KEY_PASSWORD_REMOTEPassword for the SSL key of the remote brokerstringAny""
KAFKA_TOPIC_MAPA json map of the kafka topics should be forwardedJSONSee below{}
KAKFA_USE_SSLEnables the use of SSL for the kafka connectionstringtrue, falsefalse
LOCAL_KAFKA_BOOTSTRAP_SERVERURL of the local kafka broker, port is requiredstringAny valid URLunited-manufacturing-hub-kafka:9092
LOGGING_LEVELDefines which logging level is used, mostly relevant for developers.stringPRODUCTION, DEVELOPMENTPRODUCTION
MICROSERVICE_NAMEName of the microservice (used for tracing)stringAnyunited-manufacturing-hub-kafka-bridge
REMOTE_KAFKA_BOOTSTRAP_SERVERURL of the remote kafka brokerstringAny valid URL""
SERIAL_NUMBERSerial number of the cluster (used for tracing)stringAnydefalut

2.8 - Kafka Broker

The technical documentation of the kafka-broker microservice, which handles the communication between the microservices.

Kubernetes resources

  • StatefulSet: united-manufacturing-hub-kafka
  • Service:
    • Internal ClusterIP (headless): united-manufacturing-hub-kafka
    • External NodePort: united-manufacturing-hub-kafka-external at port 9094 for the Kafka API listener, port 9644 for the Admin API listener, port 8083 for the HTTP Proxy listener, and port 8081 for the Schema Registry listener.
  • ConfigMap: united-manufacturing-hub-kafka
  • Secret: united-manufacturing-hub-kafka-sts-lifecycle
  • PersistentVolumeClaim: datadir-united-manufacturing-hub-kafka-0

Configuration

You shouldn’t need to configure the Kafka broker manually, as it’s configured automatically when the cluster is deployed. However, if you need to change the configuration, you can do it by editing the redpanda section of the Helm chart values file.

Environment variables

Environment variables
Variable nameDescriptionTypeAllowed valuesDefault
HOST_IPThe IP address of the host machine.stringAnyRandom IP
POD_IPThe IP address of the pod.stringAnyRandom IP
SERVICE_NAMEThe name of the service.stringAnyunited-manufacturing-hub-kafka

2.9 - Kafka Console

The technical documentation of the kafka-console microservice, which provides a GUI to interact with the Kafka broker.

Kubernetes resources

  • Deployment: united-manufacturing-hub-console
  • Service:
    • External LoadBalancer: united-manufacturing-hub-console at port 8090
  • ConfigMap: united-manufacturing-hub-console
  • Secret: united-manufacturing-hub-console

Configuration

Environment variables

Environment variables
Variable nameDescriptionTypeAllowed valuesDefault
LOGIN_JWTSECRETThe secret used to authenticate the communication to the backend.stringAnyRandom string

2.10 - Kafka to Postgresql

The technical documentation of the kafka-to-postgresql microservice, which consumes messages from a Kafka broker and writes them in a PostgreSQL database.

Kubernetes resources

  • Deployment: united-manufacturing-hub-kafkatopostgresql
  • Secret: united-manufacturing-hub-kafkatopostgresql-certificates

Configuration

You shouldn’t need to configure kafka-to-postgresql manually, as it’s configured automatically when the cluster is deployed. However, if you need to change the configuration, you can do it by editing the kafkatopostgresql section of the Helm chart values file.

Environment variables

Environment variables
Variable nameDescriptionTypeAllowed valuesDefault
DEBUG_ENABLE_FGTRACEEnables the use of the fgtrace library. Not recommended for productionstringtrue, falsefalse
DRY_RUNIf set to true, the microservice will not write to the databasebooltrue, falsefalse
KAFKA_BOOTSTRAP_SERVERURL of the Kafka broker used, port is requiredstringAnyunited-manufacturing-hub-kafka:9092
KAFKA_SSL_KEY_PASSWORDKey password to decode the SSL private keystringAny""
LOGGING_LEVELDefines which logging level is used, mostly relevant for developersstringPRODUCTION, DEVELOPMENTPRODUCTION
MEMORY_REQUESTMemory request for the message cachestringAny50Mi
MICROSERVICE_NAMEName of the microservice (used for tracing)stringAnyunited-manufacturing-hub-kafkatopostgresql
POSTGRES_DATABASEThe name of the PostgreSQL databasestringAnyfactoryinsight
POSTGRES_HOSTHostname of the PostgreSQL databasestringAnyunited-manufacturing-hub
POSTGRES_PASSWORDThe password to use for PostgreSQL connectionsstringAnychangeme
POSTGRES_SSLMODEIf set to true, the PostgreSQL connection will use SSLstringAnyrequire
POSTGRES_USERThe username to use for PostgreSQL connectionsstringAnyfactoryinsight

2.11 - Kafka to Postgresql v2

The technical documentation of the kafka-to-postgresql-v2 microservice, which consumes messages from a Kafka broker and writes them in a PostgreSQL database by following the UMH data model v2.

Kubernetes resources

  • Deployment: united-manufacturing-hub-kafkatopostgresqlv2

Configuration

You shouldn’t need to configure kafka-to-postgresql-v2 manually, as it’s configured automatically when the cluster is deployed. However, if you need to change the configuration, you can do it by editing the kafkatopostgresqlv2 section of the Helm chart values file.

Environment variables

Environment variables
Variable nameDescriptionTypeAllowed valuesDefault
KAFKA_BROKERSSpecifies the URLs and required ports of Kafka brokers using the Kafka protocol.stringAnyunited-manufacturing-hub-kafka:9092
KAFKA_HTTP_BROKERSSpecifies the URLs and required ports of Kafka brokers using the HTTP protocol.stringAnyunited-manufacturing-hub-kafka:8082
LOGGING_LEVELDetermines the verbosity of the logging output, primarily used for development purposes.stringPRODUCTION, DEVELOPMENTPRODUCTION
POSTGRES_DATABASEDesignates the name of the target PostgreSQL database.stringAnyumh_v2
POSTGRES_HOSTIdentifies the hostname for the PostgreSQL database server.stringAnyunited-manufacturing-hub
POSTGRES_LRU_CACHE_SIZEDetermines the size of the Least Recently Used (LRU) cache for asset ID storage. This cache is optimized for minimal memory usage.stringAny1000
POSTGRES_PASSWORDSets the password for accessing the PostgreSQL databasestringAnychangemetoo
POSTGRES_PORTSpecifies the network port for the PostgreSQL database server.stringAny5432
POSTGRES_SSL_MODEConfigures the PostgreSQL connection to use SSL if set to ’true'.stringAnyrequire
POSTGRES_USERDefines the username for PostgreSQL database access.stringAnykafkatopostgresqlv2
VALUE_CHANNEL_SIZESets the size of the channel for message storage prior to insertion. This parameter is significant for memory consumptionstringAny10000
WORKER_MULTIPLIERThis multiplier affects the number of workers converting Kafka messages into the PostgreSQL schema. Total workers = cores * multiplier.stringAny16

2.12 - MQTT Broker

The technical documentation of the mqtt-broker microservice, which forwards MQTT messages between the other microservices.

Kubernetes resources

  • StatefulSet: united-manufacturing-hub-hivemqce
  • Service:
    • Internal ClusterIP:
      • HiveMQ local: united-manufacturing-hub-hivemq-local-service at port 1883 (MQTT) and 8883 (MQTT over TLS)
      • VerneMQ (for backwards compatibility): united-manufacturing-hub-vernemq at port 1883 (MQTT) and 8883 (MQTT over TLS)
      • VerneMQ local (for backwards compatibility): united-manufacturing-hub-vernemq-local-service at port 1883 (MQTT) and 8883 (MQTT over TLS)
    • External LoadBalancer: united-manufacturing-hub-mqtt at port 1883 (MQTT) and 8883 (MQTT over TLS)
  • ConfigMap:
    • Configuration: united-manufacturing-hub-hivemqce-hive
    • Credentials: united-manufacturing-hub-hivemqce-extension
  • Secret: united-manufacturing-hub-hivemqce-secret-keystore
  • PersistentVolumeClaim:
    • Data: united-manufacturing-hub-hivemqce-claim-data
    • Extensions: united-manufacturing-hub-hivemqce-claim-extensions

Configuration

Most of the configuration is done through the XML files in the ConfigMaps. The default configuration should be sufficient for most use cases.

The HiveMQ installation of the United Manufacturing Hub comes with these extensions:

If you want to add more extensions, or to change the configuration, visit the HiveMQ documentation.

Environment variables

Environment variables
Variable nameDescriptionTypeAllowed valuesDefault
HIVEMQ_ALLOW_ALL_CLIENTSWhether to allow all clients to connect to the brokerbooltrue, falsetrue

2.13 - MQTT Kafka Bridge

The technical documentation of the mqtt-kafka-bridge microservice, which transfers messages from MQTT brokers to Kafka Brokers and vice versa.

Kubernetes resources

  • Deployment: united-manufacturing-hub-mqttkafkabridge
  • Secret:
    • Kafka: united-manufacturing-hub-mqttkafkabridge-kafka-secrets
    • MQTT: united-manufacturing-hub-mqttkafkabridge-mqtt-secrets

Configuration

You shouldn’t need to configure mqtt-kafka-bridge manually, as it’s configured automatically when the cluster is deployed. However, if you need to change the configuration, you can do it by editing the mqttkafkabridge section of the Helm chart values file.

Environment variables

Environment variables
Variable nameDescriptionTypeAllowed valuesDefault
DEBUG_ENABLE_FGTRACEEnables the use of the fgtrace library. Not recommended for productionstringtrue, falsefalse
INSECURE_SKIP_VERIFYSkip TLS certificate verificationbooltrue, falsetrue
KAFKA_BASE_TOPICThe Kafka base topicstringAnyia
KAFKA_BOOTSTRAP_SERVERURL of the Kafka broker used, port is requiredstringAnyunited-manufacturing-hub-kafka:9092
KAFKA_LISTEN_TOPICKafka topic to subscribe to. Accept regex valuesstringAny^ia.+
KAFKA_SENDER_THREADSNumber of threads used to send messages to KafkaintAny1
LOGGING_LEVELDefines which logging level is used, mostly relevant for developersstringPRODUCTION, DEVELOPMENTPRODUCTION
MESSAGE_LRU_SIZESize of the LRU cache used to store messages. This is used to prevent duplicate messages from being sent to Kafka.intAny100000
MICROSERVICE_NAMEName of the microservice (used for tracing)stringAnyunited-manufacturing-hub-mqttkafkabridge
MQTT_BROKER_URLThe MQTT broker URLstringAnyunited-manufacturing-hub-mqtt:1883
MQTT_CERTIFICATE_NAMESet to NO_CERT to allow non-encrypted MQTT access, or to USE_TLS to use TLS encryptionstringUSE_TLS, NO_CERTUSE_TLS
MQTT_PASSWORDPassword for the MQTT brokerstringAnyINSECURE_INSECURE_INSECURE
MQTT_SENDER_THREADSNumber of threads used to send messages to MQTTintAny1
MQTT_TOPICMQTT topic to subscribe to. Accept regex valuesstringAnyia/#
POD_NAMEName of the pod. Used for tracingstringAnyunited-manufacturing-hub-mqttkafkabridge-Random-ID
RAW_MESSSAGE_LRU_SIZESize of the LRU cache used to store raw messages. This is used to prevent duplicate messages from being sent to Kafka.intAny100000
SERIAL_NUMBERSerial number of the cluster (used for tracing)stringAnydefault

2.14 - MQTT Simulator

The technical documentation of the iotsensorsmqtt microservice, which simulates sensors sending data to the MQTT broker.

Kubernetes resources

  • Deployment: united-manufacturing-hub-iotsensorsmqtt
  • ConfigMap: united-manufacturing-hub-iotsensors-mqtt

Configuration

You can change the configuration of the microservice by updating the config.json file in the ConfigMap.

2.15 - MQTT to Postgresql

The technical documentation of the mqtt-to-postgresql microservice, which consumes messages from an MQTT broker and writes them in a PostgreSQL database.

2.16 - Node-RED

The technical documentation of the nodered microservice, which wires together hardware devices, APIs and online services.

Kubernetes resources

  • StatefulSet: united-manufacturing-hub-nodered
  • Service:
    • External LoadBalancer: united-manufacturing-hub-nodered-service at port 1880
  • ConfigMap:
    • Configuration: united-manufacturing-hub-nodered-config
    • Flows: united-manufacturing-hub-nodered-flows
  • Secret: united-manufacturing-hub-nodered-secrets
  • PersistentVolumeClaim: united-manufacturing-hub-nodered-claim

Configuration

You can enable the nodered microservice and decide if you want to use the default flows in the _000_commonConfig.dataprocessing.nodered section of the Helm chart values.

All the other values are set by default and you can find them in the Danger Zone section of the Helm chart values.

Environment variables

Environment variables
Variable nameDescriptionTypeAllowed valuesDefault
NODE_RED_ENABLE_SAFE_MODEEnable safe mode, useful in case of broken flowsbooleantrue, falsefalse
TZThe timezone used by Node-REDstringAnyBerlin/Europe

2.17 - OPCUA Simulator

The technical documentation of the opcua-simulator microservice, which simulates OPCUA devices.

Kubernetes resources

  • Deployment: united-manufacturing-hub-opcuasimulator-deployment
  • Service:
    • External LoadBalancer: united-manufacturing-hub-opcuasimulator-service at port 46010
  • ConfigMap: united-manufacturing-hub-opcuasimulator-config

Configuration

You can change the configuration of the microservice by updating the config.json file in the ConfigMap.

2.18 - PackML Simulator

The technical documentation of the packml-simulator microservice, which simulates a manufacturing line using PackML over MQTT.

Kubernetes resources

  • Deployment: united-manufacturing-hub-packmlmqttsimulator

Configuration

You shouldn’t need to configure PackML Simulator manually, as it’s configured automatically when the cluster is deployed. However, if you need to change the configuration, you can do it by editing the packmlmqttsimulator section of the Helm chart values file.

Environment variables

Environment variables
Variable nameDescriptionTypeAllowed valuesDefault
AREAISA-95 area name of the linestringAnyDefaultArea
LINEISA-95 line name of the linestringAnyDefaultProductionLine
MQTT_PASSWORDPassword for the MQTT broker. Leave empty if the server does not manage permissionsstringAnyINSECURE_INSECURE_INSECURE
MQTT_URLServer URL of the MQTT serverstringAnymqtt://united-manufacturing-hub-mqtt:1883
MQTT_USERNAMEName for the MQTT broker. Leave empty if the server does not manage permissionsstringAnyPACKMLSIMULATOR
SITEISA-95 site name of the linestringAnytestLocation

2.19 - Sensorconnect

The technical documentation of the sensorconnect microservice, which reads data from sensors and sends them to the MQTT or Kafka broker.

Kubernetes resources

  • StatefulSet: united-manufacturing-hub-sensorconnect
  • Secret:
    • Kafka: united-manufacturing-hub-sensorconnect-kafka-secrets
    • MQTT: united-manufacturing-hub-sensorconnect-mqtt-secrets
  • PersistentVolumeClaim: united-manufacturing-hub-sensorconnect-claim

Configuration

You can configure the IP range to scan for gateways, and which message broker to use, by setting the values of the parameters in the _000_commonConfig.datasources.sensorconnect section of the Helm chart values file.

The default values of the other parameters are usually good for most use cases, but you can change them in the Danger Zone section of the Helm chart values file.

If you want to increase the polling speed of the sensors, you can do so by setting the sensorconnect.lowerPollingTime parameter to a lower value. This can cause the ifm IO-link master to become unresponsive, if its firmware is not up to date.

Environment variables

Environment variables
Variable nameDescriptionTypeAllowed valuesDefault
ADDITIONAL_SLEEP_TIME_PER_ACTIVE_PORT_MSAdditional sleep time between pollings for each active portfloatAny0.0
ADDITIONAL_SLOWDOWN_MAPJSON map of values, allows to slow down and speed up the polling time of specific sensorsJSONSee below[]
DEBUG_ENABLE_FGTRACEEnables the use of the fgtrace library. Not recommended for productionstringtrue, falsefalse
DEVICE_FINDER_TIMEOUT_SECHTTP timeout in seconds for finding new devicesintAny1
DEVICE_FINDER_TIME_SECTime interval in seconds for finding new devicesintAny20
IODD_FILE_PATHFilesystem path where to store IODD filesstringAny valid Unix path/ioddfiles
IP_RANGEThe IP range to scan for new sensorstringAny valid IP in CIDR notation192.168.10.1/24
KAFKA_BOOTSTRAP_SERVERURL of the Kafka broker. Port is requiredstringAnyunited-manufacturing-hub-kafka:9092
KAFKA_SSL_KEY_PASSWORDThe encrypted password of the SSL key. If empty, no password is usedstringAny""
KAFKA_USE_SSLSet to true to use SSL encryption for the connection to the Kafka brokerstringtrue, falsefalse
LOGGING_LEVELDefines which logging level is used, mostly relevant for developersstringPRODUCTION, DEVELOPMENTPRODUCTION
LOWER_POLLING_TIME_MSTime in milliseconds to define the lower bound of time between sensor pollingintAny100
MAX_SENSOR_ERROR_COUNTAmount of errors before a sensor is temporarily disabledintAny50
MICROSERVICE_NAMEName of the microservice (used for tracing)stringAnyunited-manufacturing-hub-sensorconnect
MQTT_BROKER_URLURL of the MQTT broker. Port is requiredstringAnyunited-manufacturing-hub-mqtt:1883
MQTT_CERTIFICATE_NAMESet to NO_CERT to allow non-encrypted MQTT access, or to USE_TLS to use TLS encryptionstringUSE_TLS, NO_CERTUSE_TLS
MQTT_PASSWORDPassword for the MQTT brokerstringAnyINSECURE_INSECURE_INSECURE
POD_NAMEName of the pod (used for tracing)stringAnyunited-manufacturing-hub-sensorconnect-0
POLLING_SPEED_STEP_DOWN_MSTime in milliseconds subtracted from the polling interval after a successful pollingintAny1
POLLING_SPEED_STEP_UP_MSTime in milliseconds added to the polling interval after a failed pollingintAny20
SENSOR_INITIAL_POLLING_TIME_MSAmount of time in milliseconds before starting to request sensor data. Must be higher than LOWER_POLLING_TIME_MSintAny100
SUB_TWENTY_MSSet to 1 to allow LOWER_POLLING_TIME_MS of under 20 ms. This is not recommended as it might lead to the gateway becoming unresponsive until a manual rebootint0, 10
TESTIf enabled, the microservice will use a test IODD file from the filesystem to use with a mocked sensor. Only useful for development.stringtrue, falsefalse
TRANSMITTERIDSerial number of the cluster (used for tracing)stringAnydefault
UPPER_POLLING_TIME_MSTime in milliseconds to define the upper bound of time between sensor pollingintAny1000
USE_KAFKAIf enabled, uses Kafka as a message brokerstringtrue, falsetrue
USE_MQTTIf enabled, uses MQTT as a message brokerstringtrue, falsefalse

Slowdown map

The ADDITIONAL_SLOWDOWN_MAP environment variable allows you to slow down and speed up the polling time of specific sensors. It is a JSON array of values, with the following structure:

[
  {
    "serialnumber": "000200610104",
    "slowdown_ms": -10
  },
  {
    "url": "http://192.168.0.13",
    "slowdown_ms": 20
  },
  {
    "productcode": "AL13500",
    "slowdown_ms": 20.01
  }
]

2.20 - Tulip Connector

The technical documentation of the tulip-connector microservice, which exposes internal APIs, such as factoryinsight, to the internet. Specifically designed to communicate with Tulip.

Kubernetes resources

  • Deployment: united-manufacturing-hub-tulip-connector-deployment
  • Service:
    • Internal ClusterIP: united-manufacturing-hub-tulip-connector-service at port 80
  • Ingress: united-manufacturing-hub-tulip-connector-ingress

Configuration

You can enable the tulip-connector and set the domain for the ingress by editing the values in the _000_commonConfig.tulipconnector section of the Helm chart values file.

Environment variables

Environment variables
Variable nameDescriptionTypeAllowed valuesDefault
FACTORYINSIGHT_PASSWORDSpecifies the password for the admin user for the REST APIstringAnyRandom UUID
FACTORYINSIGHT_URLSpecifies the URL of the factoryinsight microservice.stringAnyhttp://united-manufacturing-hub-factoryinsight-service
FACTORYINSIGHT_USERSpecifies the admin user for the REST APIstringAnyfactoryinsight
MODESpecifies the mode that the service will run in. Change only during developmentstringdev, prodprod

API documentation