Skip to content

D-Bus subscriptions

In order to call D-Bus methods, update properties or expose signals, configure dbus2mqtt with at least one subscription to one or more D-Bus objects.

dbus:
  subscriptions:
    - bus_name: org.mpris.MediaPlayer2.*
      path: /org/mpris/MediaPlayer2
      interfaces:
        - interface: /org/mpris/MediaPlayer2
          ...

bus_name, path and interface should match the dbus object you want to subscribe to. Wildcard patterns are supported for both bus_name and path

For each subscription, you can configure the behavior of dbus2mqtt using any of the options below.

Field Description
interface The D-Bus interface that defines the set of methods, signals, and properties available
mqtt_command_topic MQTT topic where dbus2mqtt listens for JSON commands. For example dbus2mqtt/mpris/command. Value can be a string or templated string
mqtt_response_topic MQTT topic where dbus2mqtt published responses on. For example dbus2mqtt/mpris/response. Value can be a string or templated string
methods List of methods to expose over MQTT
properties List of properties to expose over MQTT
signals List of D-Bus signals to subscribe to

Note

Setting mqtt_command_topic will automatically make all configured methods and properties available over MQTT without any additional work

MQTT commands

Any D-Bus method (when configured) can be called by publishing a MQTT message to the configured mqtt_command_topic.

The example configuration below expose 3 methods and one property.

dbus:
  subscriptions:
    - bus_name: org.mpris.MediaPlayer2.*
      path: /org/mpris/MediaPlayer2
      interfaces:
        - interface: org.mpris.MediaPlayer2.Player
          mqtt_command_topic: dbus2mqtt/org.mpris.MediaPlayer2/command
          mqtt_response_topic: dbus2mqtt/org.mpris.MediaPlayer2/response/{{ method }}
          methods:
            - method: Pause
            - method: Play
            - method: Seek
          properties:
            - property: Volume

Calling methods

Methods are invoked after publishing a specific JSON message to the dbus2mqtt/org.mpris.MediaPlayer2/command MQTT topic. Arguments can be passed along in args.

key type description
method str Method name
args list Optional list of arguments that matches the methods D-Bus signature
bus_name str Only invoke on dbus objects where bus_name matches, defaults to *
path str Only invoke on dbus objects where path matches, defaults to *

Note

If no bus_name and path is given, commands are executed against all matching dbus objects. To target specific dbus objects make sure to set both keys.

Example 1, calling Play on all registered MPRIS players

{
    "method": "Play"
}

Example 2, invoking Seek with arguments and targeting only the VLC MPRIS player

{
    "method": "Seek",
    "args": [60000000],
    "bus_name": "*.vlc",
    "path": "/org/mpris/MediaPlayer2"
}

Property updates

Properties can be updated by publishing a specific JSON message to the dbus2mqtt/org.mpris.MediaPlayer2/command MQTT topic.

key type description
property str Property name
value any Property value
bus_name str Only invoke on dbus objects where bus_name matches, defaults to *
path str Only invoke on dbus objects where path matches, defaults to *

Example, setting Volume to 1.0 for Firefox MPRIS player only

{
    "property": "Volume",
    "value": 1.0,
    "bus_name": "*.firefox",
    "path": "/org/mpris/MediaPlayer2"
}

Command responses

If set, D-Bus responses to commands will be published on the configured mqtt_response_topic MQTT topic.

Note

dbus2mqtt publishes one response per targeted dbus object. When two dbus objects are targeted, two separate responses will be published.

Example response for method calls

{
  "bus_name": "org.mpris.MediaPlayer2.vlc",
  "path": "/org/mpris/MediaPlayer2",
  "interface": "org.freedesktop.DBus.Properties",
  "timestamp": "2025-08-24T16:36:42.522104",
  "method": "GetAll",
  "args": ["org.mpris.MediaPlayer2.Player"],
  "success": true,
  "result": {
    "Metadata": {},
    "Position": 0,
    "PlaybackStatus": "Stopped",
    "LoopStatus": "None",
    "Shuffle": false,
    "Volume": 0.0,
    "Rate": 1.0,
    "MinimumRate": 0.032,
    "MaximumRate": 32.0,
    "CanControl": true,
    "CanPlay": false,
    "CanGoNext": true,
    "CanGoPrevious": true,
    "CanPause": false,
    "CanSeek": false
  }
}

Example response for property updates

{
  "bus_name": "org.mpris.MediaPlayer2.vlc",
  "path": "/org/mpris/MediaPlayer2",
  "interface": "org.mpris.MediaPlayer2.Player",
  "timestamp": "2025-08-24T16:39:13.199826",
  "property": "Volume",
  "value": 0.99,
  "success": true,
  "result": 0.99
}

Exposing dbus signals

Publishing signals to MQTT topics works by subscribing to the relevant signal and using flows for publishing.

Signals configuration parameters

Field Description
signal Name of the signal
filter Templated string that should evaluate to a boolean result. True will accept signals, False will drop signals

In contrast to calling methods or setting properties, signals are not automatically published to MQTT topcis. To do so, configure a flow as shown below.

dbus:
  subscriptions:
    - bus_name: org.mpris.MediaPlayer2.*
      path: /org/mpris/MediaPlayer2
      interfaces:
        - interface: org.freedesktop.DBus.Properties
          signals:
            - signal: PropertiesChanged
              filter: "{{ args[0] == 'org.mpris.MediaPlayer2.Player' }}"

      flows:
        - name: "Property Changed flow"
          triggers:
            - type: on_signal
          actions:
            - type: mqtt_publish
              topic: dbus2mqtt/org.mpris.MediaPlayer2/signals/PropertiesChanged
              payload_type: json

More information on flows can be found in the flows section.