https://github.com/peak-solution/asam_ods_exd_api_microunidaq
This repository contains an ASAM ODS EXD-API plugin that uses h5py to read microUniDAQ HDF5 waveform files.
https://github.com/peak-solution/asam_ods_exd_api_microunidaq
Last synced: 26 days ago
JSON representation
This repository contains an ASAM ODS EXD-API plugin that uses h5py to read microUniDAQ HDF5 waveform files.
- Host: GitHub
- URL: https://github.com/peak-solution/asam_ods_exd_api_microunidaq
- Owner: peak-solution
- License: mit
- Created: 2026-04-17T13:58:42.000Z (2 months ago)
- Default Branch: main
- Last Pushed: 2026-04-17T14:45:00.000Z (2 months ago)
- Last Synced: 2026-04-17T16:38:34.316Z (2 months ago)
- Language: Python
- Size: 783 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Agents: AGENTS.md
Awesome Lists containing this project
README
# ASAM ODS EXD-API microUniDAQ plugin
This repository contains a [ASAM ODS EXD-API](https://www.asam.net/standards/detail/ods/) plugin that uses [h5py](https://pypi.org/project/h5py/) to read microUniDAQ HDF5 waveform files.
It is built on the [ods-exd-api-box](https://pypi.org/project/ods-exd-api-box/) helper library which provides the gRPC server infrastructure and proto stubs.
## Content
### Implementation
* [external_data_file.py](external_data_file.py)
Implements the `ExdFileInterface` from `ods-exd-api-box` to access microUniDAQ HDF5 files using [h5py](https://pypi.org/project/h5py/).
Also contains the entry point to run the gRPC service.
### Tests
* [test_exd_api.py](tests/test_exd_api.py)
Some basic tests on example files in `data` folder.
## Development
### Setup
Install [uv](https://docs.astral.sh/uv/) and then install the project with dev dependencies:
```
uv sync --group dev
```
### Run Tests
```
uv run python -m unittest discover tests
```
### Code Quality
```bash
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 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-microunidaq: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-microunidaq:latest
docker run -v /path/to/local/data:/data -p 50051:50051 ghcr.io/peak-solution/asam-ods-exd-api-microunidaq:latest
```
### Using the Docker Container
To build the Docker image locally:
```
docker build -t asam-ods-exd-api-microunidaq .
```
To start the Docker container:
```
docker run -v /path/to/local/data:/data -p 50051:50051 asam-ods-exd-api-microunidaq
```
have a look at [start options](https://totonga.github.io/ods-exd-api-box/server-options.html) to
figure out how to customize the behavior of the EXD-API plugin.
## Architecture and Usage in ODS Server
```mermaid
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
AoTest,AoMeasurement,...
PDTT ->>- PODS: Add External Data info
Note right of PDTT: Attach AoFile ... for external data
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
```