Skip to main content

Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.

Jump to: navigation, search

Difference between revisions of "BaSyx / Documentation / Components / AAS Server / Features / Hierarchical MQTT"

Line 14: Line 14:
 
The following hierarchical topics with their respective payloads are implemented:
 
The following hierarchical topics with their respective payloads are implemented:
  
*/aas-repository/<repo-id>/shells/created
+
*aas-repository/<repo-id>/shells/created
 
** Payload: Complete AAS (without ConceptDictionaries)
 
** Payload: Complete AAS (without ConceptDictionaries)
*/aas-repository/<repo-id>/shells/deleted
+
*aas-repository/<repo-id>/shells/deleted
 
*** Payload: Complete AAS (old, without ConceptDictionaries)
 
*** Payload: Complete AAS (old, without ConceptDictionaries)
*/aas-repository/<repo-id>/shells/updated
+
*aas-repository/<repo-id>/shells/updated
 
** Payload: Complete AAS (without ConceptDictionaries)
 
** Payload: Complete AAS (without ConceptDictionaries)
  
  
*/aas-repository/<repo-id>/shells/<encoded-aas-identifier>/submodels/created
+
*aas-repository/<repo-id>/shells/<encoded-aas-identifier>/submodels/created
 
** Payload: Submodels without SMEs
 
** Payload: Submodels without SMEs
*/aas-repository/<repo-id>/shells/<encoded-aas-identifier>/submodels/deleted
+
*aas-repository/<repo-id>/shells/<encoded-aas-identifier>/submodels/deleted
 
** Payload: Submodels without SMEs
 
** Payload: Submodels without SMEs
*/aas-repository/<repo-id>/shells/<encoded-aas-identifier>/submodels/updated
+
*aas-repository/<repo-id>/shells/<encoded-aas-identifier>/submodels/updated
 
** Payload: Submodels without SMEs
 
** Payload: Submodels without SMEs
  
  
*/aas-repository/<repo-id>/shells/<encoded-aas-identifier>/submodels/<encoded-sm-identifier>/submodelElements/<idShortPath>/created
+
*aas-repository/<repo-id>/shells/<encoded-aas-identifier>/submodels/<encoded-sm-identifier>/submodelElements/<idShortPath>/created
 
** Payload:  SME without value (or value-equivalent)
 
** Payload:  SME without value (or value-equivalent)
*/aas-repository/<repo-id>/shells/<encoded-aas-identifier>/submodels/<encoded-sm-identifier>/submodelElements/<idShortPath>/deleted
+
*aas-repository/<repo-id>/shells/<encoded-aas-identifier>/submodels/<encoded-sm-identifier>/submodelElements/<idShortPath>/deleted
 
** Payload:  old SME without value (or value-equivalent)
 
** Payload:  old SME without value (or value-equivalent)
*/aas-repository/<repo-id>/shells/<encoded-aas-identifier>/submodels/<encoded-sm-identifier>/submodelElements/<idShortPath>/updated
+
*aas-repository/<repo-id>/shells/<encoded-aas-identifier>/submodels/<encoded-sm-identifier>/submodelElements/<idShortPath>/updated
 
** Payload:  SME without value (or value-equivalent)
 
** Payload:  SME without value (or value-equivalent)
*/aas-repository/<repo-id>/shells/<encoded-aas-identifier>/submodels/<encoded-sm-identifier>/submodelElements/<idShortPath>/value
+
*aas-repository/<repo-id>/shells/<encoded-aas-identifier>/submodels/<encoded-sm-identifier>/submodelElements/<idShortPath>/value
 
** SME value, if not specified otherwise via qualifier
 
** SME value, if not specified otherwise via qualifier
  

Revision as of 11:38, 29 November 2022

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.

Feature Overview

The following hierarchical topics with their respective payloads are implemented:

  • aas-repository/<repo-id>/shells/created
    • Payload: Complete AAS (without ConceptDictionaries)
  • aas-repository/<repo-id>/shells/deleted
      • Payload: Complete AAS (old, without ConceptDictionaries)
  • aas-repository/<repo-id>/shells/updated
    • Payload: Complete AAS (without ConceptDictionaries)


  • aas-repository/<repo-id>/shells/<encoded-aas-identifier>/submodels/created
    • Payload: Submodels without SMEs
  • aas-repository/<repo-id>/shells/<encoded-aas-identifier>/submodels/deleted
    • Payload: Submodels without SMEs
  • aas-repository/<repo-id>/shells/<encoded-aas-identifier>/submodels/updated
    • Payload: Submodels without SMEs


  • aas-repository/<repo-id>/shells/<encoded-aas-identifier>/submodels/<encoded-sm-identifier>/submodelElements/<idShortPath>/created
    • Payload: SME without value (or value-equivalent)
  • aas-repository/<repo-id>/shells/<encoded-aas-identifier>/submodels/<encoded-sm-identifier>/submodelElements/<idShortPath>/deleted
    • Payload: old SME without value (or value-equivalent)
  • aas-repository/<repo-id>/shells/<encoded-aas-identifier>/submodels/<encoded-sm-identifier>/submodelElements/<idShortPath>/updated
    • Payload: SME without value (or value-equivalent)
  • aas-repository/<repo-id>/shells/<encoded-aas-identifier>/submodels/<encoded-sm-identifier>/submodelElements/<idShortPath>/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 = <repo-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).

Back to the top