ASAM ODS EXD-API MDF4 plugin
This repository contains a ASAM ODS EXD-API plugin that uses asammdf to read the ASAM MDF4 files.
It is built on the ods-exd-api-box helper library which provides the gRPC server infrastructure and proto stubs.
Find more tools supporting your digital transformation in the Peak Solution Git Repo.
Content
Implementation
- src/asam_ods_exd_api_mdf4/external_data_file.py
Implements theExdFileInterfacefromods-exd-api-boxto access MDF4 files using asammdf. Also contains the entry point to run the gRPC service.
Tests
- test_exd_api.py
Some basic tests on example files indatafolder. - example_access_exd_api_mdf4.ipynb
jupyter notebook the shows communication done by ASAM ODS server or Importer using the EXD-API plugin.
Development
Setup
Install uv and then install the project with dev dependencies:
uv sync --group dev
Run Tests
uv run python -m unittest discover tests
Run Plugin Locally
Use an explicit IPv4 bind address on Windows to avoid IPv6 bind issues:
uv run asam-ods-exd-api-mdf4 --bind-address 127.0.0.1 --port 50051
Stop the server with Ctrl+C. A non-zero exit code after interruption is expected.
Optional Parameters
The file handler accepts optional parameters in the EXD-API Identifier.parameters string. Parameters are separated with semicolons, for example:
parameters="values_raw=True;values_ignore_value2text_conversions=True"
values_raw
When set to True, the plugin reads the raw MDF samples without applying channel conversion rules. This is useful when you want the original stored values instead of the converted engineering values.
Example:
exd_api.Identifier(url=file_uri, parameters="values_raw=True")
values_ignore_value2text_conversions
When set to True, the plugin ignores value-to-text conversions and returns the underlying numeric or non-string values instead of the text labels created by the conversion tables. This is especially relevant for channels whose MDF conversion rules map numeric values to strings.
Example:
exd_api.Identifier(url=file_uri, parameters="values_ignore_value2text_conversions=True")
The behavior is covered by the conversion tests in tests/test_exd_api_string_conversion.py, where the same MDF file is read with and without these parameters to confirm the returned data types and sample values.
Run Plugin With uvx
Run the latest published package without installing it into the current project environment:
uvx asam-ods-exd-api-mdf4 --bind-address 127.0.0.1 --port 50051
Code Quality
uv sync --group dev # 1. Install all dependencies
uv run ruff format . # 2. Format code
uv run ruff check --fix . # 3. Fix lint violations
uv run mypy src/asam_ods_exd_api_mdf4/external_data_file.py # 4. Type check
uv run python -m unittest discover tests # 5. Run tests
Docker
Docker Image Details
The Docker image for this project is available at:
ghcr.io/peak-solution/asam-ods-exd-api-mdf4:latest
This image is automatically built and pushed via a GitHub Actions workflow. To pull and run the image:
docker pull ghcr.io/peak-solution/asam-ods-exd-api-mdf4:latest
docker run -v /path/to/local/data:/data -p 50051:50051 ghcr.io/peak-solution/asam-ods-exd-api-mdf4:latest
Using the Docker Container
To build the Docker image locally:
docker build -t asam-ods-exd-api-mdf4 .
To start the Docker container:
docker run -v /path/to/local/data:/data -p 50051:50051 asam-ods-exd-api-mdf4
have a look at start options to figure out how to customize the behavior of the EXD-API plugin.
Architecture and Usage in ODS Server
sequenceDiagram
actor CLIENT as Client
participant PDTT as 🛠️Importer
participant PODS as 🗃️ASAM ODS server
participant PLUGIN as 📊EXD-API plugin
participant FILE as 🗂️File Storage
autonumber
opt Import phase
FILE ->>+ PDTT: New file shows up
PDTT ->>+ PLUGIN : Get Structure
PLUGIN -> FILE: Extract content information
PLUGIN ->> PLUGIN: Create Structure
PLUGIN ->>- PDTT: Return Structure
PDTT ->> PODS: Import ODS structure
Note right of PDTT: Create hierarchy<br/>AoTest,AoMeasurement,...
PDTT ->>- PODS: Add External Data info
Note right of PDTT: Attach AoFile ... for external data<br/>AoFile,AoSubmatrix,AoLocalColumn,...
end
Note over CLIENT, FILE: Now we can work with the imported files
loop Runtime phase
CLIENT ->> PODS: Establish ODS session
CLIENT ->> PODS: Work with meta data imported from structure
CLIENT ->> PODS: Access external channel in preview
PODS ->> PLUGIN: GetValues
PLUGIN ->> FILE: Get Channel values
PLUGIN ->> PODS: Return values of channels
PODS ->> CLIENT: Return values needed for plot
end
Metadata
Release files for asam-ods-exd-api-mdf4 1.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| asam_ods_exd_api_mdf4-1.3.0.tar.gz | 27.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| asam_ods_exd_api_mdf4-1.3.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 37.0 kB
Release files / asam_ods_exd_api_mdf4-1.3.0.tar.gz
| Download URL | asam_ods_exd_api_mdf4-1.3.0.tar.gz |
|---|---|
| Size | 27.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c45ae93cd23ae79e00a94bc253709edec997abd3bf77d843eb4b06ec02b56a76
|
|
BLAKE2b-256 checksum How to use checksums |
ffe5135619b5adfe39efa3e17c4d2ac2ccd57db621d2022503e1078aed3ba200
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / asam_ods_exd_api_mdf4-1.3.0-py3-none-any.whl
| Download URL | asam_ods_exd_api_mdf4-1.3.0-py3-none-any.whl |
|---|---|
| Size | 9.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
12e31c47b76ff169258712ecd8fd755516536c153bdbfb1b0974b12ff26ebb64
|
|
BLAKE2b-256 checksum How to use checksums |
86375900ea58cf366781f15971872cb2c902137173ec458e59e487eb8df011c6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|