Metadata-Version: 2.1
Name: pydevmgr-core
Version: 0.6a3
Summary: Python package to handle distributed device handling
License: Creative Commons Attribution-Noncommercial-Share Alike license
Author: Sylvain Guieu
Author-email: sylvain.guieu@univ-grenoble-alpes.fr
Requires-Python: >=3.7,<4.0
Classifier: License :: Other/Proprietary License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Requires-Dist: get-annotations (>=0.1.2,<0.2.0)
Requires-Dist: py-expression-eval (>=0.3.14,<0.4.0)
Requires-Dist: pydantic (>=1.9,<2.0)
Requires-Dist: systemy (>=0.1.1,<0.2.0)
Requires-Dist: valueparser (>=0.1.3,<0.2.0)
Description-Content-Type: text/markdown


This python package is used as a core engine for any pydevmgr high level package. 

The documentation is on its way, but one may be interested to higher level package such as 
- [pydevmgr_ua](https://github.com/efisoft-elt/pydevmgr_ua)
- [pydevmgr_elt](https://github.com/efisoft-elt/pydevmgr_elt)


Python package to by used as substitute of a real device manager running in a ELT-Software environment when the full ELT-Software environment cannot be used. 



Sources are [here](https://github.com/efisoft-elt/pydevmgr_core)


# Install

```bash
> pip install pydevmgr_core 
```

# Basic Usage

pydevmgr_core is not indented to be used directly but used by other pydevmgr related package as a core engine. 

For usage here is an example using pydevmgr_ua to access an OPC-UA node : 

```python
from pydevmgr_ua import UaRpc, UaNode, UaCom
from pydevmgr_core.nodes import InsideInterval
import time 

com = UaCom(address="opc.tcp://192.168.1.11:4840", prefix="MAIN")

target = 7.0

move = UaRpc( com=com, suffix="Motor1.RPC_MoveAbs", args_parser=[float, float])
pos = UaNode( com=com,  suffix="Motor1.stat.lrPosActual" )
test = InsideInterval( node = pos, min=target-0.1, max=target+0.1 )


try:
    com.connect()
    move.call( 7.0, 1 )
    while not test.get():
        time.sleep(0.1)

    print( "posisiotn is", pos.get() )
finally:
    com.disconnect()

```

Or using the highest level dedicated for ELT devices: 


```python 
from pydevmgr_elt import Motor, wait
m1 = Motor('motor1', address="opc.tcp://192.168.1.11:4840", prefix="MAIN.Motor1")
try:
    m1.connect()    
    wait(m1.move_abs(7.0,1.0), lag=0.1)
    print( "position is", m1.stat.pos_actual.get() )
finally:
    m1.disconnect()
```

