Skip to content

SENERGY-Platform/mgw-mqtt-dc

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

74 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Maps MQTT-Messages to MGW-Messages according to Topic-Descriptions. Topic-Descriptions may be generated or user-defined.

Config

Config values can be set in config.json or as Environment-Variable. (Example: config.json: "connector_id", Env: "CONNECTOR_ID")

connector_id

String. Identifies device connector in MGW.

mgw_mqtt_broker

String. Address of the MQTT-Broker of the MGW. Example: tcp://mgw-broker:1883

mgw_mqtt_user

String. Username used for MGW MQTT-Broker.

mgw_mqtt_pw

String. Password used for MGW MQTT-Broker.

mgw_mqtt_client_id

String. Client-Id used for MGW MQTT-Broker.

mqtt_broker

String. Address of the mapped MQTT-Broker. Example: tcp://broker:1883

mqtt_user

String. Username used for the mapped MQTT-Broker.

mqtt_pw

String. Password used for the mapped MQTT-Broker.

mqtt_event_client_id

String. Client-Id used for event subscriptions to the mapped MQTT-Broker.

mqtt_cmd_client_id

String. Client-Id used for response subscriptions and command publications to the mapped MQTT-Broker.

debug

Boolean.

update_period

String. Duration. Interval between updates of Device-Informations.

device_descriptions_dir

String. Directory. Location of Topic-Descriptions.

delete_devices

Boolean. Decides if removed devices should be deleted or markt as offline.

max_correlation_id_age

String. Duration.

generator_use

Boolean. Decides if Topic-Descriptions should be generated.

generator_auth_username

generator_auth_password

generator_filter_devices_by_attribute

String. Used to filter platform devices which should be used to generate topic-descriptions. Must be used if user has more than one MGW or mgw-mqtt-dc. If set, only devices with matching senergy/local-mqtt attribute are used.

generator_auth_endpoint

generator_auth_client_id

generator_auth_client_secret

generator_permission_search_url

generator_device_repository_url

generator_device_descriptions_dir

String. Directory. Location where Topic-Descriptions should be generated.

generator_truncate_device_prefix

String. The local id of a device must be globally unique but the user might want to keep the device-topic simple. To enable this the user may truncate a prefix when generating topics.

Example:

local device id: "foo:d1"
generator_truncate_device_prefix: "foo:"
topic-template: "{{.Device}}/bar"
generated topic: "d1/bar"

Topic-Descriptions

Topic-Descriptions are used to describe how to map between the two mqtt brokers. They may be defined as json, yaml or csv. The user may define multiple files in multiple subdirectories. Examples can be found in pkg/topicdescription/testdata/topicdesc.

Topic-Description Fields

  • event_topic: may not be used in the same description as cmd_topic
  • cmd_topic: may not be used in the same description as event_topic
  • resp_topic: must be used in the same description as a cmd_topic
  • device_type_id
  • device_local_id
  • service_local_id
  • device_name

Topic-Description Generator

Topic-Descriptions may be generated from devices on the Senergy-Platform.

Device-Type

If a device type is to be used for generated topic-descriptions it has to use the attribute senergy/local-mqtt with any value. And its services define attributes used to generate topic-descriptions.

Service-Attributes

  • senergy/local-mqtt/event-topic-tmpl: template used to generate a event topic description.
  • senergy/local-mqtt/cmd-topic-tmpl: template used to generate a command topic description.
  • senergy/local-mqtt/resp-topic-tmpl: template used to generate a response topic description for a matching command.

The attributes define templates to generate topics. Placeholders for these templates are:

  • {{.Device}} local device id (may be truncated by generator_truncate_device_prefix)
  • {{.LocalDeviceId}} same as {{.Device}}
  • {{.Service}}
  • {{.LocalServiceId}} same as {{.Service}}
  • device attributes, that are valid template placeholders

Device

Device-Local-Id

Please reference the documentation to the config value generator_truncate_device_prefix

Attributes

senergy/local-mqtt: optional, in combination with the config field generator_filter_devices_by_attribute

Warning

Removed platform devices may be recreated by the mgw if the mgw-mqtt-dc is unable to request updates from the platform.

Docker-Compose Example

version: "3"
services:
  test-mgw-broker:
    image: eclipse-mosquitto:1.6.12
  mgw-senergy-connector:
    container_name: mgw-senergy-connector
    image: ghcr.io/senergy-platform/mgw-senergy-connector:dev
    environment:
      CONF_MB_HOST: test-mgw-broker
      CONF_MB_PORT: 1883
      CONF_DM_URL: http://mgw-device-manager
      CONF_DM_API: devices
      CONF_MQTTCLIENT_QOS: 2
      CONF_LOGGER_LEVEL: debug
      CC_LIB_CONNECTOR_LOW_LEVEL_LOGGER: "True"
      CONF_DSROUTER_MAX_COMMAND_AGE: 60
      CONF_HUB_NAME: test-hub
      CC_LIB_CONNECTOR_HOST: fgseitsrancher.wifa.intern.uni-leipzig.de
      CC_LIB_CONNECTOR_PORT: 2883
      CC_LIB_CONNECTOR_TLS: "False"
      CC_LIB_CONNECTOR_QOS: 2
      CC_LIB_API_HUB_ENDPT: https://fgseitsrancher.wifa.intern.uni-leipzig.de:8000/device-manager/hubs
      CC_LIB_API_DEVICE_ENDPT: https://fgseitsrancher.wifa.intern.uni-leipzig.de:8000/device-manager/local-devices
      CC_LIB_API_AUTH_ENDPT: https://fgseitsrancher.wifa.intern.uni-leipzig.de:8087/auth/realms/master/protocol/openid-connect/token
      CC_LIB_CREDENTIALS_USER: "*****"
      CC_LIB_CREDENTIALS_PW: "*****"
      CC_LIB_CREDENTIALS_CLIENT_ID: client-connector-lib
      CC_LIB_CONNECTOR_CLEAN_SESSION: "True"
    depends_on:
      - test-mgw-broker
      - mgw-device-manager
    restart: unless-stopped
  mgw-device-manager:
    container_name: mgw-device-manager
    image: ghcr.io/senergy-platform/mgw-device-manager:dev
    ports:
      - "7002:80"
    environment:
      - CONF_MB_HOST=test-mgw-broker
      - CONF_MB_PORT=1883
    depends_on:
      - test-mgw-broker
    restart: unless-stopped
  mgw-mqtt-dc:
    container_name: mgw-mqtt-dc
    image: ghcr.io/senergy-platform/mgw-mqtt-dc:dev
    environment:
      - MGW_MQTT_BROKER=tcp://test-mgw-broker:1883
      - MGW_MQTT_CLIENT_ID=mgw-mqtt-dc
      - MQTT_BROKER=tcp://test-mgw-broker:1883
      - MQTT_CMD_CLIENT_ID=mgw-mqtt-dc-cmd
      - MQTT_EVENT_CLIENT_ID=mgw-mqtt-dc-event
      - GENERATOR_USE=true
      - GENERATOR_AUTH_USERNAME=*****
      - GENERATOR_AUTH_PASSWORD=*****
      - GENERATOR_AUTH_ENDPOINT=https://fgseitsrancher.wifa.intern.uni-leipzig.de:8087
      - GENERATOR_PERMISSION_SEARCH_URL=https://fgseitsrancher.wifa.intern.uni-leipzig.de:8000/permissions/query
      - GENERATOR_DEVICE_REPOSITORY_URL=https://fgseitsrancher.wifa.intern.uni-leipzig.de:8000/device-repository
      - GENERATOR_TRUNCATE_DEVICE_PREFIX=testmgwprefix_
    depends_on:
      - mgw-device-manager
    restart: unless-stopped

DeviceType Example

{
   "id":"urn:infai:ses:device-type:7c162b2c-56fa-4ca2-a9cd-936da7c8b1a9",
   "name":"mgw-mqtt-dc-test",
   "description":"test dc for mgw-mqtt-dc",
   "services":[
      {
         "id":"urn:infai:ses:service:ba1e8a32-61bf-4fe8-a129-4e8d4b220e00",
         "local_id":"brightness",
         "name":"brightness",
         "description":"",
         "interaction":"request",
         "aspect_ids":[
            "urn:infai:ses:aspect:a7470d73-dde3-41fc-92bd-f16bb28f2da6"
         ],
         "protocol_id":"urn:infai:ses:protocol:f3a63aeb-187e-4dd9-9ef5-d97a6eb6292b",
         "inputs":[
            {
               "id":"urn:infai:ses:content:f438a16d-cc94-472c-acd4-d1fb071c0314",
               "content_variable":{
                  "id":"urn:infai:ses:content-variable:ffa689f5-d15a-4d5e-9956-89d79ee0a39c",
                  "name":"brightness",
                  "type":"https://schema.org/Integer",
                  "sub_content_variables":null,
                  "characteristic_id":"urn:infai:ses:characteristic:72b624b5-6edc-4ec4-9ad9-fa00b39915c0",
                  "value":null,
                  "serialization_options":null
               },
               "serialization":"json",
               "protocol_segment_id":"urn:infai:ses:protocol-segment:0d211842-cef8-41ec-ab6b-9dbc31bc3a65"
            }
         ],
         "outputs":[
            
         ],
         "function_ids":[
            "urn:infai:ses:controlling-function:6ce74d6d-7acb-40b7-aac7-49daca214e85"
         ],
         "attributes":[
            {
               "key":"senergy/local-mqtt/cmd-topic-tmpl",
               "value":"{{.Device}}/{{.Service}}/set",
               "origin":"web-ui"
            }
         ],
         "rdf_type":""
      },
      {
         "id":"urn:infai:ses:service:be6e0d93-246b-4d96-adca-6f9f8617f723",
         "local_id":"battery",
         "name":"event",
         "description":"",
         "interaction":"event",
         "aspect_ids":[
            "urn:infai:ses:aspect:f0bd89b6-4f60-49a9-9489-ea215f2ec3d2"
         ],
         "protocol_id":"urn:infai:ses:protocol:f3a63aeb-187e-4dd9-9ef5-d97a6eb6292b",
         "inputs":[
            
         ],
         "outputs":[
            {
               "id":"urn:infai:ses:content:707ec1c9-02c5-4459-84b7-93aceff90505",
               "content_variable":{
                  "id":"urn:infai:ses:content-variable:39b22f49-4f5f-44b9-83ef-0a74871572bd",
                  "name":"battery",
                  "type":"https://schema.org/Float",
                  "sub_content_variables":null,
                  "characteristic_id":"urn:infai:ses:characteristic:5caa707d-dc08-4f3b-bd9f-f08935c8dd3c",
                  "value":null,
                  "serialization_options":null
               },
               "serialization":"json",
               "protocol_segment_id":"urn:infai:ses:protocol-segment:0d211842-cef8-41ec-ab6b-9dbc31bc3a65"
            }
         ],
         "function_ids":[
            "urn:infai:ses:measuring-function:00549f18-88b5-44c7-adb1-f558e8d53d1d"
         ],
         "attributes":[
            {
               "key":"senergy/local-mqtt/event-topic-tmpl",
               "value":"{{.Device}}/{{.Service}}",
               "origin":"web-ui"
            }
         ],
         "rdf_type":""
      }
   ],
   "device_class_id":"urn:infai:ses:device-class:14e56881-16f9-4120-bb41-270a43070c86",
   "attributes":[
      {
         "key":"senergy/local-mqtt",
         "value":"true",
         "origin":"web-ui"
      }
   ],
   "rdf_type":""
}

Device Example

{
   "id":"urn:infai:ses:device:51a2a119-bf99-4951-8fc3-c0c7d9b20629",
   "local_id":"testmgwprefix_d1",
   "name":"test-mqtt-dc-1",
   "attributes":null,
   "device_type_id":"urn:infai:ses:device-type:7c162b2c-56fa-4ca2-a9cd-936da7c8b1a9"
}