Hierarchical MQTT Eventing#
User Story & Use Case#
As AAS Components user
I want hierarchical MQTT topics in the AAS Server Component
so that I can subscribe precisely to the topics of interest without having to filter on client side
MQTT supports hierarchical topics with wildcard subscription support. For example, if the topics a/b/x and a/b/y exist, subscribing to a/b/+ subscribes to all events broadcasted on both topics.
Please note, that this feature can not be combined with lambda properties due to them being only updated on query.
Feature Overview#
The following hierarchical topics with their respective payloads are implemented:
aas-repository/
/shells/created Payload: Complete AAS (without ConceptDictionaries)
aas-repository/
/shells/deleted Payload: Complete AAS (old, without ConceptDictionaries)
aas-repository/
/shells/updated Payload: Complete AAS (without ConceptDictionaries)
aas-repository/
/shells/ /submodels/created Payload: Submodels without SMEs
aas-repository/
/shells/ /submodels/deleted Payload: Submodels without SMEs
aas-repository/
/shells/ /submodels/updated Payload: Submodels without SMEs
aas-repository/
/shells/ /submodels/ /submodelElements/ /created Payload: SME without value (or value-equivalent)
aas-repository/
/shells/ /submodels/ /submodelElements/ /deleted Payload: old SME without value (or value-equivalent)
aas-repository/
/shells/ /submodels/ /submodelElements/ /updated Payload: SME without value (or value-equivalent)
aas-repository/
/shells/ /submodels/ /submodelElements/ /value SME value, if not specified otherwise via qualifier
For AAS/SM-Identifier encoding, Base64URL encoding and URL encoding are available.
Feature Configuration#
The feature can be configured in the aas.properties file by setting aas.events = MQTTV2 for Base64URL encoding or aas.events = MQTTV2_SIMPLE_ENCODING for URL encoding. Additionally, the repo id needs to be configured via aas.id =
An example configuration for this feature could be:
aas.events = MQTTV2
aas.id = product-aas-repo
The MQTT broker connectivity is configured via mqtt.properties
Additional to the overall event configuration, the payload send on the ../value topic for updating a SubmodelElement’s value can be tailored. For SubmodelElements containing huge values like Blobs, it may be sensible to disable sending their value’s content. If this is the case, a qualifier with type emptyValueUpdateEvent and value set to true will configure empty value updates for the specific SubmodelElement (cf. ObservableSubmodelAPIV2Helper).