Skip to content
Snippets Groups Projects

Build

Python Unified Device Interface

Current stable version: 10.1.1

Installation

  1. Install the WZL-UDI package via pip
pip install wzl-udi

Documentation

A full documentation of the entire library does not exist yet and is currently work in progress.

Usage

For using the PUDI device interface you need to have a SOIL-Model of your device in JSON-Format. You can design the model by hand our use the SOIL-Web-Editor, to generate the source code and get a ready-to-run python script for your device server. Examples of fictional devices using the library can be found here.

Citation & References

Scientific background and publications related to the (Python) Unified Device Interface are:

Bodenbenner, M.; Sanders, M. P.; Montavon, B.; Schmitt, R. H. (2021): Domain-Specific Language for Sensors in the Internet of Production. In: Bernd-Arno Behrens, Alexander Brosius, Wolfgang Hintze, Steffen Ihlenfeldt und Jens Peter Wulfsberg (Hg.): Production at the leading edge of technology. Proceedings of the 10th Congress of the German Academic Association for Production Technology (WGP), Dresden, 23-24 September 2020. Berlin, Heidelberg, 2021. 1st ed. 2021. Berlin, Heidelberg: Springer (Lecture Notes in Production Engineering), S. 448–456, http://dx.doi.org/10.1007/978-3-662-62138-7_45

Bodenbenner, M.; Montavon, B.; Schmitt, R.H. (2021): FAIR sensor services - Towards sustainable sensor data management. In: Measurement: Sensors 18, S. 100206, https://doi.org/10.1016/j.measen.2021.100206

Bodenbenner, M.; Montavon, B.; Schmitt, R.H. (2022): Model-driven development of interoperable communication interfaces for FAIR sensor services, In: Measurement: Sensors, Volume 24, S. 100442, https://doi.org/10.1016/j.measen.2022.100442

Montavon, B. (2021): Virtual Reference Frame Based on Distributed Large-Scale Metrology Providing Coordinates as a Service. Aachen: Apprimus Verlag, https://doi.org/10.18154/RWTH-2021-10238

Montavon, B.; Peterek, M.; Schmitt, R. H. (2019): Model-based interfacing of large-scale metrology instruments. In: Ettore Stella (Hg.): Multimodal Sensing: Technologies and Applications. 26-27 June 2019, Munich, Germany. Multimodal Sensing and Artificial Intelligence: Technologies and Applications. Munich, Germany, 6/24/2019 - 6/27/2019. Bellingham, Washington: SPIE (Proceedings of SPIE. 5200-, volume 11059), S. 11, https://doi.org/10.1117/12.2527461

Acknowledgements

The authors acknowledge funding from the LaVA project (Large Volume Applications, contract 17IND03 of the European Metrology Programme for Innovation and Research EMPIR). The EMPIR initiative is co-funded by the European Union’s Horizon 2020 research and innovation programme and the EMPIR Participating States.

Funded by the Deutsche Forschungsgemeinschaft (DFG, German Research Foundation) under Germany's Excellence Strategy – EXC-2023 Internet of Production – 390621612.

Funded by the Deutsche Forschungsgemeinschaft (DFG, German Research Foundation) under Project-ID 432233186 -- AIMS.

Licenses of third-party libraries used

Library License
aiohttp Apache License, Version 2.0
Deprecated MIT License
nest-asyncio BSD License
pytz MIT License
rdflib BSD License
wzl-mqtt MIT License

Recent changes

10.1.1 - 2024-08-16

  • added additional flog to Scheduler to configure semantic publishing correctly and supress unnecessary errors and warnings

10.1.0 - 2024-04-17

  • added "advertisement", i.e. publishing of metadata via MQTT every x seconds
  • light refactoring of source code for streaming via MQTT
  • bug fix in the streaming scheduler

10.0.8 - 2024-03-25

  • fixed missing licences of some semantic resources
  • changed "schema.org" to http in instead of https

10.0.7 - 2024-03-22

  • fixed unit handling for the metadata provisioning

10.0.6 - 2024-03-22

  • fixed validation of rfc3339 datetime strings

10.0.5 - 2024-03-22

  • bug fix in streaming

10.0.4 - 2024-03-22

  • increased logging verbosity of streaming class
  • fixed streaming of semantic measurements

10.0.3 - 2024-03-21

  • added license field to semantic provision of measurement range

10.0.2 - 2024-03-21

  • bug fix

10.0.1 - 2024-03-21

  • removed strict-rfc3339 dependency to avoid licensing issues

10.0.0 - 2024-03-21

  • the getter method of a measurement must always return a tuple of value and uncertainty quantification, if the uncertainty is not applicable None must be returned for the uncertainty
  • semantic path for Observation and MeasurementResults can now be resolved

9.3.8 - 2024-03-19

  • fixed semantic serialization of integer variables

9.3.7 - 2024-03-18

  • fixed serialization of semantics

9.3.6 - 2024-03-18

  • fixed serialization of semantic values

9.3.5 - 2024-03-18

  • fixed metadata provisioning of arguments and returns

9.3.4 - 2024-03-16

  • fixed semantic name resolution of range profiles

9.3.3 - 2024-03-15

  • fixed streaming functions

9.3.2 - 2024-03-14

  • fixed semantic name resolution (again)

9.3.1 - 2024-03-14

  • fixed semantic name resolution

9.3.0 - 2024-03-13

  • implemented semantic features for functions
  • refactoring
    • renamed class Figure to Variable to reflect updated SOIL meta model

9.2.0 - 2024-02-08

  • functions can be used to publish results via MQTT instead returning the results as response to the POST request
    • if a function is implemented as generator this behaviour is triggered automatically
  • bug fixes
    • the semantic definition of the range of measurements and parameters are properly returned now
    • profiles of base components of a component are properly returned now

9.1.2 - 2024-01-19

  • added "all" query parameter for semantics, to request complete semantic data model
  • fixed bug when requesting enum or time measurements and parameters

9.1.1 - 2024-01-18

  • bug fix of subjects of license paths in semantic data packages

9.1.0 - 2024-01-17

  • the license for profiles, metadata and data is now provided anc can be specified in the config file

9.0.1 - 2024-01-11

  • bug fix of semantic name resolution

9.0.0 - 2024-01-10

  • added semantic features
    • the device can return profiles, metadata and data defined and structured according to semantic web standards using RDF and SHACL
  • changed signature of StreamScheduler
    • instead of a list of publishers, only one publisher is allowed no

8.2.5 - 2023-04-17

  • relaxed required versions of dependencies to avoid conflicts

8.2.4 - 2023-04-13

  • updated dependency, so that wzl-udi is also compatible with Python 3.11

8.2.3 - 2023-03-29

  • removed legacy attributes from serialization and streaming

8.2.2 - 2023-03-29

  • fixed a type hint which depended on windows

8.2.1 - 2023-03-25

  • removed utilities dependency, by integrating logger into wzl-udi library

8.2.0 - 2023-03-16

  • improved FAIRness of streaming
    • published data contains metadata now
  • bug fixes
    • serialization of the complete model

8.1.1 - 2023-03-15

  • bug fix
    • resolving the methods of the sensor logic for dynamic components

8.1.0 - 2023-03-15

  • the desired dataformat of the response can be specified with a query parameter now, e.g.,
    • ../MEA-Temperature?format=json
    • ../MEA-Temperature?format=xml

8.0.1 - 2023-03-14

  • bug fixes
    • fixed DELETE endpoint for dynamic components

8.0.0 - 2023-03-11

  • changed initialization routine
    • the mapping via a dictionary of encapsulated sensor logic to HTTP-Endpoints is not needed anymore
    • the mapping is now derived automatically because the names of the attributes from the sensor implementation are assumed to be generated from a SOIL-Model
  • code clean-up
    • removed a lot of deprecated source code
  • bug fixes
    • fixed in error of fixed jobs

7.1.0 - 2023-02-27

  • added legacy flag as server parameter (default: false)
    • if set, datatypes are serialized to the old string representation, i.e. "bool" instead of "boolean", and "double" instead of float

7.0.2 - 2023-02-23

  • fixed a bug in update-streams for non-scalar variables

7.0.1 - 2023-02-23

  • minor bugfix

7.0.0 - 2023-02-23

  • aligned the naming of datatypes with Textual SOIL
    • "bool" is replaced by "boolean"
    • "double" is replaced by "float"
    • old naming is still accepted when starting the server, but responses of the server use the SOIl-conform naming

6.3.1 - 2023-02-21

  • updated from Python 3.9 to Python 3.11

6.3.0 - 2022-06-09

  • added property "label" for measurements as replacement for "nonce"
  • marked usage of keyword "nonce" as deprecated

6.2.0 - 2022-06-02

  • added XML as dataformat for response bodies and published messages
  • dataformat can now be chosen between XML and JSON

6.1.2 - 2022-04-14

  • bug fix of loop handling of aiohttp web application

6.1.1 | 5.2.7 - 2021-05-19

  • improved error output for developers

6.1.0 - 2021-05-18

  • refactoring of streaming implementation
    • scheduler classes are reduced to only one for all job types instead of three distinct schedulers

6.0.3 | 5.2.6 - 2021-05-10

  • bug fix
    • fixed serialization to RFC3339 time string

6.0.2 | 5.2.5 - 2021-05-04

  • bug fix
    • fixed parsing of parameters and variables/ measurements of type "time" for higher dimensions

6.0.1

  • bug fix
    • fixed parsing of parameters and measurements of type "time" for higher dimensions

6.0.0 - 2021-05-04

  • renamed Object to Component and Variable to Measurement. UUID now starts with COM MEA respectively
  • marked Object and Variable as deprecated
  • marked docstring parsing as deprecated due to its error-prone behaviour

5.2.4 - 2021-04-15

  • bug fix
    • variables and parameters of type 'enum' and 'time' are now returned correctly

5.2.3 - 2021-04-07

  • minor bug fixes

5.2.2 - 2021-01-22

  • bug fixes of event handling and publishing, caused event handler to crash on the first event to be checked

5.2.1 - 2021-01-19

  • bug fix

5.2.0 - 2020-11-27

  • measurements can now be published automatically on value change

5.1.2

  • bug fixes

5.1.1 - 2020-07-13

  • bug fixes

5.1.0 - 2020-06-17

  • added method for customizing logging-level
  • unprotected the utils-module

5.0.3 - 2020-06-17

  • bug fix

5.0.2 - 2020-06-17

  • bug fix of asynchronous devices

5.0.1 - 2020-06-10

  • fixed erroneous import

5.0.0 - 2020-06-09

  • added events
  • changed way of how MQTTPublisher are handled

4.2.2 - 2020-05-29

  • bug fix of MQTT related docstring parsin

4.2.1 - 2020-05-28

  • fixed a bug causing Objects could not be added during runtime

4.2.0 - 2020-05-26

  • improved flexibility of docstring-parsing

4.1.1 - 2020-05-26

  • bug fix

4.1.0 - 2020-05-25

  • From now, the mqtt-callback of Functions accepts only one positional parameter, which is the message data. Thus, it is not required to specify the topic anymore.

4.0.0 - 2020-05-19

  • renamed packages
  • changed initialization routine
  • bug fixes

3.1.3 - 2020-04-16

  • bug fixes

3.1.2

  • bug fixes

3.1.1

  • bug fixes

3.1

  • moved ScheduledMQTTPublisher into the wzl-mqtt package to avoid ambiguity

3.0 - 2020-04-14

  • renamed and restructured packages for the sake of consistency with the C++ UDI

2.3.1 - 2020-03-26

  • bug fix of ScheduledMQTTPublisher

2.3.0 - 2020-02-26

  • instead of using Python-Docstrings one can provide an explicitly defined dictionary for configuration of the scheduled MQTTPublisher
  • the publish method of the MQTTPublisher can passed to a function of the device to explicitly publish values within this function
  • bug fixes

2.2.1 - 2020-02-03

  • bug fixes

2.2.0 - 2020-01-27

  • instead of using Python-Docstrings one can provide an explicitly defined dictionary with mappings from the model to the implementation

2.1.0 - 2020-01-21

  • the leading objects part of all urls is optional now.
  • bug fixes

2.0 - 2020-01-20

  • renamed library into wzl-udi
  • replaced MQTT-part with new wzl-mqtt package

1.5.2 - 2020-01-20

  • bug fixes

1.5.1 - 2020-01-20

  • bug fixes

1.5.0 - 2020-01-20

  • changed request for setting parameter values from PUT to PATCH

1.4.1 - 2020-01-20

  • bug fix

1.4.0 - 2020-01-20

  • added optional ontology field to all elements
  • bug fixes

1.3.0 - 2020-10-09

1.2.6 - 2020-08-09

  • bug fix in docstring parsing

1.2.5 - 2020-08-09

  • bug fix in GET handler

1.2.4 - 2020-08-01

  • bug fixes

1.2.3 - 2020-08-01

  • bug fixes

1.2.2 - 2020-08-01

  • bug fixes

1.2.1 - 2020-08-01

  • bug fixes

1.2.0 - 2020-08-01

  • getters and setters are asynchronous now

1.1.2 - 2020-07-31

  • improved error handling

1.1.1 - 2020-07-29

  • bug fixes

1.1.0 - 2020-07-29

  • enabled asynchronous functions
  • bug fixes

1.0.0 - 2020-07-28

  • initial release