MADS interfaces
Connecting things
MADS has been developed to connect different devices and software together. The basic MADS installation provides a set of minimal, general purpose agents that solve simple needs. However, the real power of MADS is in its ability to connect to other software and devices. This is done through plugins and custom agents. The following sections provide a list of the available interfaces and how to use them.
Beside the default agents and plugins provided by MADS, more specific interfaces are available on github.com/mads-net. Some of the more mature agents and plugins can also be installed as MADS packages with the command mads package (see the guide).
Interfaces, by application field
| Domain | Interface | Description | Type | |
|---|---|---|---|---|
| I/O | Serial | Serial port interface to an Arduino | Plugin; source | |
| I/O | ArduinoUno Q | Interface to an Arduino Uno Q board | Plugin; source, filter, sink | |
| I/O | BluetoothLE | Bluetooth Low Energy interface to BLE devices | Plugin; source | |
| I/O | Raspberry PI GPIO | Interface to Raspberry PI GPIO pins | Plugin; source, sink | |
| Languages | Python agent | Interface to Python scripts | Agent; source, filter, sink | |
| Languages | Python library | Python library for creating custom agents | Library; source, filter, sink | |
| Languages | R plugin | Interface to R scripts | Plugin; source, filter, sink | |
| Languages | Lua plugin | Interface to Lua scripts | Plugin; source, filter, sink | |
| Simulation & Digital Twins | FMU agent | Interface to Functional Mock-up Units (FMUs) | Agent; source, filter | |
| AI & ML | ONNX agent | Interface to ONNX models | Agent; source, filter | |
| Log and storage | HDF5 plugin | Interface to HDF5 files | Plugin; sink | |
| Networking | mads-federate |
Federation of MADS networks (since MADS v2.4.0) | Agent |
The usual way to use these interfaces is to clone, configure, build and install them. By default, the install step installs the products in the MADS prefix folder, as given by mads --prefix, so that they can be found by MADS commands and plugin loaders.
Remember the mads inspect_plugins command to validate a compiled plugin for compatibility with your current MADS installation:
> mads inspect_plugin $(mads -p)/lib/hdf5_writer.plugin
plugin: /usr/local/lib/hdf5_writer.plugin
loadable: yes
protocol_current: yes
type: sink
expected_protocol_version: 7
drivers:
- name: hdf5_writer, type: sink, protocol_version: 7When a plugin cannot be loaded, it’s probably due to library mismatches with a more recent MADS version. In these cases:
- Delete the build directory
- Create a blank plugin in a temporary directory with the command
mads plugin - Compare the
CMakeLists.txtfile of the new plugin with the one of the plugin that cannot be loaded. Pay specifically attention to fetched libraries and their versions. - Update the old
CMakeLists.txtfile accordingly - Configure and build again:
cmake -Bbuild -GNinja $$ cmake --build build -j6(or similar)