Please note that this part of the documentation is not yet finished. It will still be revised and updated.

A device describes a single component of a Scenario or of a Setup. Generally they are container classes for a collection of Features.


A Scenario-Device is a device, that defines a subset of Features, a possible Setup-Device should have. Balder searches for matches (see also Matching process of setups and scenarios (SOLVING)), where the potential Setup-Device has an implementation for the Features of the Scenario-Device.

So when is a Device a scenario-device? - This depends one the definition location. A Device is a Scenario-Device when it is an inner-class of a Scenario.

# file `scenario_basic/`

import balder
from .features import SendFeature, RecvFeature

class ScenarioBasic(balder.Scenario):

    class MyDevice(balder.Device):
        send = SendFeature()
        recv = RecvFeature()


The shown scenario ScenarioBasic has one Scenario-Device with the name MyDevice, that requires two Features: SendFeature and RecvFeature.


On the other hand, a Setup-Device is a Device, that describes what we have. These devices contains the absolute implementation of the Features, that will be used for the scenarios later. Setup-Devices looks similar to Scenario-Devices, but are defined as inner-classes in Setups of course.

# file `setup_at_home/`

import balder
# contains the absolute implementation of ``SendFeature`` and ``RecvFeature``
from .setup_features import MySendFeatureImpl, MyRecvFeatureImpl

class SetupAtHome(balder.Setup):

    class MainDevice(balder.Device):

        send = MySendFeatureImpl()
        recv = MyRecvFeatureImpl()

Often the Features of a Setup-Device implement the complete logic, while the features of the Scenario-Device only describes the abstract architecture. This can be done, because the Features of the Setup-Devices are subclasses of the scenario-device Features. You can find more information about this in the sections Features and Matching process of setups and scenarios (SOLVING).

Connect Devices

Regardless of whether is a Scenario-Device or a Setup-Device you can simply connect two devices with the @balder.connect(..) decorator.

import balder
import balder.connections as conn

class MyScenario(balder.Scenario):

    class DeviceA(balder.Device):

    @balder.connect(DeviceA, over_connection=conn.TcpConnection)
    class DeviceB(balder.Device):


Over this decorator you can define different sub Connections within the over_connection argument. For more information how the connection mechanism works, see Connections.