%global _empty_manifest_terminate_build 0 Name: python-ATWG Version: 0.1.5 Release: 1 Summary: Arbitrary Temperature Waveform Generator for Climate Chambers License: GPLv3 URL: https://github.com/akaeba/ATWG Source0: https://mirrors.aliyun.com/pypi/web/packages/1d/97/60fc806927e507b55e510d1eb9e62dbf187ec18d9eabe9f28357f336ee90/ATWG-0.1.5.tar.gz BuildArch: noarch Requires: python3-pyserial Requires: python3-pyyaml %description ![Python 3.7](https://img.shields.io/badge/Python-3.7-blue.svg) [![Unittest](https://github.com/akaeba/ATWG/workflows/Unittest/badge.svg)](https://github.com/akaeba/ATWG/actions) # ATWG __Arbitrary Temperature Waveform Generator__ A various waveform shapes creating python script to control a climate chamber via PC. ## Releases | Version | Date | Source | Change log | | ---------------------------------------------------- | ---------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------- | | latest | | latest.zip | | | [v0.1.5](https://github.com/akaeba/ATWG/tree/v0.1.5) | 2021-07-05 | v0.1.5.zip | revised CLI interface and defaults | | [v0.1.4](https://github.com/akaeba/ATWG/tree/v0.1.4) | 2021-01-17 | v0.1.4.zip | added missing files to python package | | [v0.1.3](https://github.com/akaeba/ATWG/tree/v0.1.3) | 2021-01-17 | v0.1.3.zip | [atwg-cli](./atwg-cli) is registered as command | | [v0.1.1](https://github.com/akaeba/ATWG/tree/v0.1.1) | 2021-01-02 | v0.1.1.zip | [pypi.org](https://pypi.org/project/ATWG/) published | | [v0.1.0](https://github.com/akaeba/ATWG/tree/v0.1.0) | 2020-03-09 | v0.1.0.zip | initial draft | ## Supported climate chambers * [Espec Corp SH-641](https://espec.com/na/products/model/sh_641) - RS232 communication interface - Espec S-2 controller ## Install ### [pip](https://pypi.org/project/ATWG/) * Install : `python3.7 -m pip install ATWG ` * Update : `python3.7 -m pip install --upgrade ATWG ` ### [Github](https://github.com/akaeba/ATWG) `git clone https://github.com/akaeba/ATWG.git ` ## Command line interface ### Options | Option | Description | Args | | ---------------- | ----------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | | --sine | select sine as used waveform | | | --trapezoid | select trapezoid as used waveform | | | --minTemp=myVal | sets minimal temperature value | | | --maxTemp=myVal | sets maximal temperature value | | | [--invert] | start with lower part of wave | | | [--period=1h] | period of waveform | d:hh:mm:ss, h, m, s | | [--startTemp=25] | waves start temperature | start temperature of wave | | [--riseTime=0] | positive slew rate, used by '--trapezoid' | degree/time, T(min->max); 5C/h, 120min | | [--fallTime=0] | negative slew rate, used by '--trapezoid' | degree/time, T(max->min); 5C/h, 120min | | [--chamber=SIM] | chamber type | [SIM](./ATWG/driver/sim/simChamber.py), [ESPEC_SH641](./ATWG/driver/espec/sh641.py) | | [--port=] | chamber interfacing port | [SH641 default](./ATWG/driver/espec/sh641InterfaceDefault.yml):
WinNT: `COM1 `
Linux: `/dev/ttyUSB0 ` | ### Run #### Call | Platform | Command | |:-------- |:------------------------- | | Windows | python3 ./atwg-cli [ARGS] | | Linux | atwg-cli [ARGS] | | Anaconda | run ./atwg-cli [ARGS] | [ARGS]: `--sine --chamber=SIM --minTemp=10 --maxTemp=60 --startTemp=30 --period=1h ` This example starts the waveform generator in the simulation mode. The sine wave has a minimal value of 10°C, a maximum of 60°C and s start value of 30°C. A full period needs one hour. #### Output Following output is written to the command line interface while the script is active: ```text Arbitrary Temperature Waveform Generator Chamber State : Run / Type : SIM Tmeas : +30.02 °C Tset : +30.06 °C Waveform Shape : sine Tmin : +10.00 °C Tmax : +60.00 °C Period : 1h Gradient : +2.566 °C/m Press 'CTRL + C' for exit ``` #### Permission denied error on Linux In Linux has only the _root_ and _dialout_ group proper rights to open _/dev/ttyUSB*_ devices. Adding the current user to the _dialout_ group allows _ATWG_ to run without root permissions. ```bash sudo usermod -a -G dialout $USER # add login user to dialout group sudo reboot # apply settings ``` ## Chamber driver ### How-to add The architecture of the _ATWG_ allows the fast integration of a new chamber driver. Therefore is only the import in the [ATWG](./ATWG/ATWG.py) _open_ procedure necessary. As starting point of a new driver can the class [simChamber](./ATWG/driver/sim/simChamber.py) serve. There are all _ATWG_ mandatory procedures as simulation example implemented. ### Espec SH641 [sh641.py](./ATWG/driver/espec/sh641.py) realizes the interface to the climate chamber. Following instruction listing controls the chamber: ```python from ATWG.driver.espec.sh641 import especShSu # import driver myChamber = especShSu() # call class constructor myChamber.open() # open with interface defaults print(myChamber.get_clima()) # get current clima myChamber.start() # start chamber myChamber.set_clima(clima={'temperature': 25}) # set temperature value myChamber.stop() # stop chamber myChamber.close() # close handle ``` The _open_ procedure accepts as argument a .yml file with the chamber (RS232) configuration. In case of no argument [default](./ATWG/driver/espec/sh641InterfaceDefault.yml)s are used. ## References * [Espec Corp SH-641](https://espec.com/na/products/model/sh_641) * [Fix Serial Permission Error](https://websistent.com/fix-serial-port-permission-denied-errors-linux/) %package -n python3-ATWG Summary: Arbitrary Temperature Waveform Generator for Climate Chambers Provides: python-ATWG BuildRequires: python3-devel BuildRequires: python3-setuptools BuildRequires: python3-pip %description -n python3-ATWG ![Python 3.7](https://img.shields.io/badge/Python-3.7-blue.svg) [![Unittest](https://github.com/akaeba/ATWG/workflows/Unittest/badge.svg)](https://github.com/akaeba/ATWG/actions) # ATWG __Arbitrary Temperature Waveform Generator__ A various waveform shapes creating python script to control a climate chamber via PC. ## Releases | Version | Date | Source | Change log | | ---------------------------------------------------- | ---------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------- | | latest | | latest.zip | | | [v0.1.5](https://github.com/akaeba/ATWG/tree/v0.1.5) | 2021-07-05 | v0.1.5.zip | revised CLI interface and defaults | | [v0.1.4](https://github.com/akaeba/ATWG/tree/v0.1.4) | 2021-01-17 | v0.1.4.zip | added missing files to python package | | [v0.1.3](https://github.com/akaeba/ATWG/tree/v0.1.3) | 2021-01-17 | v0.1.3.zip | [atwg-cli](./atwg-cli) is registered as command | | [v0.1.1](https://github.com/akaeba/ATWG/tree/v0.1.1) | 2021-01-02 | v0.1.1.zip | [pypi.org](https://pypi.org/project/ATWG/) published | | [v0.1.0](https://github.com/akaeba/ATWG/tree/v0.1.0) | 2020-03-09 | v0.1.0.zip | initial draft | ## Supported climate chambers * [Espec Corp SH-641](https://espec.com/na/products/model/sh_641) - RS232 communication interface - Espec S-2 controller ## Install ### [pip](https://pypi.org/project/ATWG/) * Install : `python3.7 -m pip install ATWG ` * Update : `python3.7 -m pip install --upgrade ATWG ` ### [Github](https://github.com/akaeba/ATWG) `git clone https://github.com/akaeba/ATWG.git ` ## Command line interface ### Options | Option | Description | Args | | ---------------- | ----------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | | --sine | select sine as used waveform | | | --trapezoid | select trapezoid as used waveform | | | --minTemp=myVal | sets minimal temperature value | | | --maxTemp=myVal | sets maximal temperature value | | | [--invert] | start with lower part of wave | | | [--period=1h] | period of waveform | d:hh:mm:ss, h, m, s | | [--startTemp=25] | waves start temperature | start temperature of wave | | [--riseTime=0] | positive slew rate, used by '--trapezoid' | degree/time, T(min->max); 5C/h, 120min | | [--fallTime=0] | negative slew rate, used by '--trapezoid' | degree/time, T(max->min); 5C/h, 120min | | [--chamber=SIM] | chamber type | [SIM](./ATWG/driver/sim/simChamber.py), [ESPEC_SH641](./ATWG/driver/espec/sh641.py) | | [--port=] | chamber interfacing port | [SH641 default](./ATWG/driver/espec/sh641InterfaceDefault.yml):
WinNT: `COM1 `
Linux: `/dev/ttyUSB0 ` | ### Run #### Call | Platform | Command | |:-------- |:------------------------- | | Windows | python3 ./atwg-cli [ARGS] | | Linux | atwg-cli [ARGS] | | Anaconda | run ./atwg-cli [ARGS] | [ARGS]: `--sine --chamber=SIM --minTemp=10 --maxTemp=60 --startTemp=30 --period=1h ` This example starts the waveform generator in the simulation mode. The sine wave has a minimal value of 10°C, a maximum of 60°C and s start value of 30°C. A full period needs one hour. #### Output Following output is written to the command line interface while the script is active: ```text Arbitrary Temperature Waveform Generator Chamber State : Run / Type : SIM Tmeas : +30.02 °C Tset : +30.06 °C Waveform Shape : sine Tmin : +10.00 °C Tmax : +60.00 °C Period : 1h Gradient : +2.566 °C/m Press 'CTRL + C' for exit ``` #### Permission denied error on Linux In Linux has only the _root_ and _dialout_ group proper rights to open _/dev/ttyUSB*_ devices. Adding the current user to the _dialout_ group allows _ATWG_ to run without root permissions. ```bash sudo usermod -a -G dialout $USER # add login user to dialout group sudo reboot # apply settings ``` ## Chamber driver ### How-to add The architecture of the _ATWG_ allows the fast integration of a new chamber driver. Therefore is only the import in the [ATWG](./ATWG/ATWG.py) _open_ procedure necessary. As starting point of a new driver can the class [simChamber](./ATWG/driver/sim/simChamber.py) serve. There are all _ATWG_ mandatory procedures as simulation example implemented. ### Espec SH641 [sh641.py](./ATWG/driver/espec/sh641.py) realizes the interface to the climate chamber. Following instruction listing controls the chamber: ```python from ATWG.driver.espec.sh641 import especShSu # import driver myChamber = especShSu() # call class constructor myChamber.open() # open with interface defaults print(myChamber.get_clima()) # get current clima myChamber.start() # start chamber myChamber.set_clima(clima={'temperature': 25}) # set temperature value myChamber.stop() # stop chamber myChamber.close() # close handle ``` The _open_ procedure accepts as argument a .yml file with the chamber (RS232) configuration. In case of no argument [default](./ATWG/driver/espec/sh641InterfaceDefault.yml)s are used. ## References * [Espec Corp SH-641](https://espec.com/na/products/model/sh_641) * [Fix Serial Permission Error](https://websistent.com/fix-serial-port-permission-denied-errors-linux/) %package help Summary: Development documents and examples for ATWG Provides: python3-ATWG-doc %description help ![Python 3.7](https://img.shields.io/badge/Python-3.7-blue.svg) [![Unittest](https://github.com/akaeba/ATWG/workflows/Unittest/badge.svg)](https://github.com/akaeba/ATWG/actions) # ATWG __Arbitrary Temperature Waveform Generator__ A various waveform shapes creating python script to control a climate chamber via PC. ## Releases | Version | Date | Source | Change log | | ---------------------------------------------------- | ---------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------- | | latest | | latest.zip | | | [v0.1.5](https://github.com/akaeba/ATWG/tree/v0.1.5) | 2021-07-05 | v0.1.5.zip | revised CLI interface and defaults | | [v0.1.4](https://github.com/akaeba/ATWG/tree/v0.1.4) | 2021-01-17 | v0.1.4.zip | added missing files to python package | | [v0.1.3](https://github.com/akaeba/ATWG/tree/v0.1.3) | 2021-01-17 | v0.1.3.zip | [atwg-cli](./atwg-cli) is registered as command | | [v0.1.1](https://github.com/akaeba/ATWG/tree/v0.1.1) | 2021-01-02 | v0.1.1.zip | [pypi.org](https://pypi.org/project/ATWG/) published | | [v0.1.0](https://github.com/akaeba/ATWG/tree/v0.1.0) | 2020-03-09 | v0.1.0.zip | initial draft | ## Supported climate chambers * [Espec Corp SH-641](https://espec.com/na/products/model/sh_641) - RS232 communication interface - Espec S-2 controller ## Install ### [pip](https://pypi.org/project/ATWG/) * Install : `python3.7 -m pip install ATWG ` * Update : `python3.7 -m pip install --upgrade ATWG ` ### [Github](https://github.com/akaeba/ATWG) `git clone https://github.com/akaeba/ATWG.git ` ## Command line interface ### Options | Option | Description | Args | | ---------------- | ----------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | | --sine | select sine as used waveform | | | --trapezoid | select trapezoid as used waveform | | | --minTemp=myVal | sets minimal temperature value | | | --maxTemp=myVal | sets maximal temperature value | | | [--invert] | start with lower part of wave | | | [--period=1h] | period of waveform | d:hh:mm:ss, h, m, s | | [--startTemp=25] | waves start temperature | start temperature of wave | | [--riseTime=0] | positive slew rate, used by '--trapezoid' | degree/time, T(min->max); 5C/h, 120min | | [--fallTime=0] | negative slew rate, used by '--trapezoid' | degree/time, T(max->min); 5C/h, 120min | | [--chamber=SIM] | chamber type | [SIM](./ATWG/driver/sim/simChamber.py), [ESPEC_SH641](./ATWG/driver/espec/sh641.py) | | [--port=] | chamber interfacing port | [SH641 default](./ATWG/driver/espec/sh641InterfaceDefault.yml):
WinNT: `COM1 `
Linux: `/dev/ttyUSB0 ` | ### Run #### Call | Platform | Command | |:-------- |:------------------------- | | Windows | python3 ./atwg-cli [ARGS] | | Linux | atwg-cli [ARGS] | | Anaconda | run ./atwg-cli [ARGS] | [ARGS]: `--sine --chamber=SIM --minTemp=10 --maxTemp=60 --startTemp=30 --period=1h ` This example starts the waveform generator in the simulation mode. The sine wave has a minimal value of 10°C, a maximum of 60°C and s start value of 30°C. A full period needs one hour. #### Output Following output is written to the command line interface while the script is active: ```text Arbitrary Temperature Waveform Generator Chamber State : Run / Type : SIM Tmeas : +30.02 °C Tset : +30.06 °C Waveform Shape : sine Tmin : +10.00 °C Tmax : +60.00 °C Period : 1h Gradient : +2.566 °C/m Press 'CTRL + C' for exit ``` #### Permission denied error on Linux In Linux has only the _root_ and _dialout_ group proper rights to open _/dev/ttyUSB*_ devices. Adding the current user to the _dialout_ group allows _ATWG_ to run without root permissions. ```bash sudo usermod -a -G dialout $USER # add login user to dialout group sudo reboot # apply settings ``` ## Chamber driver ### How-to add The architecture of the _ATWG_ allows the fast integration of a new chamber driver. Therefore is only the import in the [ATWG](./ATWG/ATWG.py) _open_ procedure necessary. As starting point of a new driver can the class [simChamber](./ATWG/driver/sim/simChamber.py) serve. There are all _ATWG_ mandatory procedures as simulation example implemented. ### Espec SH641 [sh641.py](./ATWG/driver/espec/sh641.py) realizes the interface to the climate chamber. Following instruction listing controls the chamber: ```python from ATWG.driver.espec.sh641 import especShSu # import driver myChamber = especShSu() # call class constructor myChamber.open() # open with interface defaults print(myChamber.get_clima()) # get current clima myChamber.start() # start chamber myChamber.set_clima(clima={'temperature': 25}) # set temperature value myChamber.stop() # stop chamber myChamber.close() # close handle ``` The _open_ procedure accepts as argument a .yml file with the chamber (RS232) configuration. In case of no argument [default](./ATWG/driver/espec/sh641InterfaceDefault.yml)s are used. ## References * [Espec Corp SH-641](https://espec.com/na/products/model/sh_641) * [Fix Serial Permission Error](https://websistent.com/fix-serial-port-permission-denied-errors-linux/) %prep %autosetup -n ATWG-0.1.5 %build %py3_build %install %py3_install install -d -m755 %{buildroot}/%{_pkgdocdir} if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi pushd %{buildroot} if [ -d usr/lib ]; then find usr/lib -type f -printf "\"/%h/%f\"\n" >> filelist.lst fi if [ -d usr/lib64 ]; then find usr/lib64 -type f -printf "\"/%h/%f\"\n" >> filelist.lst fi if [ -d usr/bin ]; then find usr/bin -type f -printf "\"/%h/%f\"\n" >> filelist.lst fi if [ -d usr/sbin ]; then find usr/sbin -type f -printf "\"/%h/%f\"\n" >> filelist.lst fi touch doclist.lst if [ -d usr/share/man ]; then find usr/share/man -type f -printf "\"/%h/%f.gz\"\n" >> doclist.lst fi popd mv %{buildroot}/filelist.lst . mv %{buildroot}/doclist.lst . %files -n python3-ATWG -f filelist.lst %dir %{python3_sitelib}/* %files help -f doclist.lst %{_docdir}/* %changelog * Tue Jun 20 2023 Python_Bot - 0.1.5-1 - Package Spec generated