Metadata-Version: 2.3
Name: eta-nexus
Version: 0.2.1
Summary: Provides a standardized way to connect to machines and devices in a factory or other factory systems
License: BSD-2-Clause
Keywords: connectivity,servers,iot,multi-protocol,eta-fabrik
Author: Technical University of Darmstadt, Institute for Production Management, Technology and Machine Tools (PTW)
Author-email: info@ptw.tu-darmstadt.de
Maintainer: Andreas Clement
Maintainer-email: A.Clement@PTW.TU-Darmstadt.de
Requires-Python: >=3.10.16, <3.13.0
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Education
Classifier: Intended Audience :: Manufacturing
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: BSD License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Scientific/Engineering :: Interface Engine/Protocol Translator
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Provides-Extra: docs
Provides-Extra: examples
Requires-Dist: asyncua-fork-for-eta-utility (==1.0.7)
Requires-Dist: attrs (>=25.3.0,<26.0.0)
Requires-Dist: cryptography (>=44.0.2,<45.0.0)
Requires-Dist: esbonio (>=0.16.5,<0.17.0) ; extra == "docs"
Requires-Dist: influxdb3-python (>=0.16.0,<0.17.0)
Requires-Dist: numpy (>=2.0.0,<3.0.0)
Requires-Dist: onnxruntime (>=1.21.0) ; extra == "examples"
Requires-Dist: pandas[excel,xml] (>=2.2.2,<2.3.0)
Requires-Dist: pint (==0.24.4)
Requires-Dist: pymodbustcp (>=0.3.0,<0.4.0)
Requires-Dist: python-dateutil (>=2.8.2,<3.0.0)
Requires-Dist: python-dotenv (>=1.0.1,<2.0.0)
Requires-Dist: pyyaml (>=6.0.2,<7.0.0)
Requires-Dist: requests (>=2.31.0,<3.0.0)
Requires-Dist: requests-cache (>=1.2.0,<2.0.0)
Requires-Dist: sphinx (>=8.0.0,<9.0.0) ; extra == "docs"
Requires-Dist: sphinx-copybutton (>=0.5.2,<0.6.0) ; extra == "docs"
Requires-Dist: sphinx-rtd-theme (>=3.0.0,<4.0.0) ; extra == "docs"
Requires-Dist: toml (>=0.10.2,<0.11.0)
Requires-Dist: wetterdienst (>=0.97.0,<0.98.0)
Project-URL: Documentation, https://eta-nexus.readthedocs.io/
Project-URL: Homepage, https://www.ptw.tu-darmstadt.de
Project-URL: Repository, https://git.ptw.maschinenbau.tu-darmstadt.de/eta-fabrik/public/eta-nexus
Project-URL: issues, https://git.ptw.maschinenbau.tu-darmstadt.de/eta-fabrik/public/eta-nexus/-/issues
Description-Content-Type: text/x-rst

ETA Nexus
#########

The ETA Nexus package provides a standardized interface for managing communication across
industrial energy and production systems. It helps handle data streams across heterogeneous
Information Technology (IT) and Operational Technology (OT) resources such as factory systems,
machines, field devices, databases, and external API services.

The package provides one unified node and connection model across multiple protocols,
including OPC UA, Modbus TCP, REST APIs, InfluxDB, SMARD, ENTSO-E, Forecast.Solar,
Wetterdienst, EnEffCo, and Emonio. It is designed for live control, operational optimization,
data recording, simulation workflows, and the integration of future communication services.

Documentation
*************

Full documentation can be found on the `Documentation Page <https://eta-nexus.readthedocs.io/en/stable/>`_.

Warning
*******

This is beta software. APIs and functionality might change without prior notice. Please fix the version you
are using in your requirements to ensure your software will not be broken by changes in ETA Nexus.

Overview
********

Core
====

``Connection``:
Base class for protocol-specific clients. Connections can be created directly or from nodes with
``Connection.from_node()`` and ``Connection.from_nodes()``.

``RESTConnection``:
Base class for REST/API connectors. It provides shared request handling, retries, cached sessions,
authentication hooks, and parsing hooks.

``ConnectionManager``:
High-level orchestration class for working with multiple systems, servers, and protocols from configuration files.
It manages initialization, activation, deactivation, closing, reading, writing, and step-based control workflows.

Nodes
=====

``Node``:
Immutable description of a single data point. A node contains the protocol, URL, authentication data,
data type, and protocol-specific addressing information.

Protocol-specific nodes:
``OpcuaNode``, ``ModbusNode``, ``InfluxNode``, ``SmardNode``, ``EntsoeNode``,
``ForecastsolarNode``, ``WetterdienstNode``, ``EneffcoNode``, and ``EmonioNode``.

Connections
===========

Status connections:
Connections that support current-value operations with ``read()``, ``write()``, and optionally ``subscribe()``.

Series connections:
Connections that support historic time-series operations with ``read_series()``, ``write_series()``,
and optionally ``subscribe_series()``.

Supported connectors include:

- OPC UA
- Modbus TCP
- InfluxDB
- SMARD
- ENTSO-E
- Forecast.Solar
- Wetterdienst
- EnEffCo
- Emonio

Servers
=======

``OpcuaServer``:
Helper for creating local OPC UA servers with simple variable access.

``ModbusServer``:
Helper for creating local Modbus TCP servers.

Subscription Handlers
=====================

``SubscriptionHandler``:
Base class for processing values received from subscriptions.

``CsvSubscriptionHandler``:
Stores subscribed values in CSV files.

``DFSubscriptionHandler``:
Stores subscribed values in memory as pandas DataFrames.

``MultiSubscriptionHandler``:
Forwards subscribed values to multiple handlers.

Time Series
===========

``df_time_slice``:
Slices time-indexed pandas DataFrames.

``df_resample``:
Resamples the time index of a DataFrame to a specified frequency.

``df_interpolate``:
Interpolates missing values in a DataFrame with a specified frequency.

``find_time_slice``:
Finds deterministic or random time slices for time-series data.

Contributing
************

Please read the `development guide <https://eta-nexus.readthedocs.io/en/stable/guide/development.html>`_
before starting development on ETA Nexus.

Citing this Project
*******************

For referencing this package in academic work, please refer to ``CITATION.cff``.
See ``AUTHORS.rst`` for a list of further contributors.

