Skip to main content

A framework for using remote lab instruments as local resources built on Pyro5

Project description

PyroLab


Development version PyPI Version PyPI - Python Version Documentation Status License Latest Commit

A framework for using remote lab instruments as local resources, built on Pyro5.

Developed by Sequoia Ploeg (for CamachoLab, Brigham Young University).

About

This project aims to allow all laboratory instruments to be accessed as local objects from a remote machine. Instruments that don't natively support such access, such as those required to be connected by a USB cable (or similar), are wrapped with a Pyro5 interface. However, this library may contain other instruments that are already internet-capable and don't rely on Pyro5. That's alright; we're just trying to create a minimal-dependency, one-stop-shop for laboratory instruments!

Note: while the software says "OS Independent", some of the servers are OS-specific. For example, ThorLabs DLL's only work on Windows. However, you could use PyroLab to connect to those devices from any operating system.

Installation

PyroLab is pip installable:

pip install pyrolab

PyroLab declares several "extras", depending on which instruments you need to support:

pip install pyrolab[tsl550, oscope]

The full list of supported extras is:

  • tsl550
  • oscope
  • arduino

You can also clone the repository, navigate to the toplevel, and install in editable mode (make sure you have pip >= 21.1):

pip install -e .

Uninstallation

PyroLab creates data and configuration directories that aren't deleted when pip uninstalled. You can find their locations by running (before uninstallation):

import pyrolab
print(pyrolab.PYROLAB_DATA_DIR)
print(pyrolab.PYROLAB_CONFIG_DIR)

These folders can be safely deleted after uninstallation.

Example

Local Instruments

Locally available instruments just import drivers without using any of the other features of PyroLab.

from pyrolab.drivers.lasers.tsl550 import TSL550

laser = TSL550("COM4")
laser.on()
laser.power_dBm(12)
laser.open_shutter()
laser.sweep_set_mode(continuous=True, twoway=True, trigger=False, const_freq_step=False)

Remote Instruments

First, make sure all configurations on the nameserver computer, instrument server computer, and client are correct (with the proper keys, if configured, etc.).

Run a nameserver:

from pyrolab.api import start_ns_loop
start_ns_loop()

Provide a service:

from pyrolab.api import Daemon, locate_ns
from pyrolab.drivers.sample import SampleService

daemon = Daemon()
ns = locate_ns(host="localhost")
uri = daemon.register(SampleService)
ns.register("test.SampleService", uri)

try:
    daemon.requestLoop()
finally:
    ns.remove("test.SampleService")

Connect using a remote client:

from pyrolab.api import locate_ns, Proxy

ns = locate_ns(host="localhost")
uri = ns.lookup("test.SampleService")

with Proxy(uri) as service:
    resp = service.echo("Hello, server!")
    print(type(resp), resp)

Instrument Server Configuration

PyroLab stores information about instruments and servers when it closes. This means that once PyroLab has been configured once, each time it is restarted, it will remember and reload the previous configuration. Hence, once a server is set up, unless the available instruments, nameserver, or other configurations change, PyroLab will automatically work when started, every time!

For an example of how a new PyroLab instrument server should be configured the first time it's run, see examples/302.resource-manager/prep.py.

FAQ's

  1. Another instrument library? What about all the others?
    In our experience, many of the other libraries are buggy or have difficulty with network connections. So, our approach was to rely on a well developed and time-tested framework (Pyro) instead of worrying about developing and supporting our own custom set of servers.

  2. Is this a standalone software that automatically supports all the advertised instruments?
    No; many of these instruments depend on other software already being installed. In particular, ThorLabs equipment depends on ThorLabs software already being installed on the computer connected to the physical hardware (but not on the remote computer!). As much as possible, though, we try to make the drivers standalone capable.

For Developers

Since the passing of data is, by definition, between hosts and over IP, PyroLab avoids the use of complex Python objects for return values that will be transmitted to remote machines. Since serialization is complicated, and security is even harder, we resort to using only basic Python types when interfacing with hardware (i.e., Python lists, ints, tuples, and not NumPy arrays, matplotlib plot objects, custom objects, etc.).

To bump version prior to a release, run one of the following commands:

bumpversion major
bumpversion minor
bumpversion patch

For code quality, please run isort and black before committing (note that the latest release of isort may not work through VSCode's integrated terminal, and it's safest to run it separately through another terminal).

Releases are automatically created when git tags matching the "v*" pattern are created.

Building the Docs

Much of the API documentation is autogenerated from the source code. Due to this, to maintain a clean repository, make sure to never commit the directory /docs/reference/api to Git. Always delete this folder before committing.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

PyroLab-0.2.1.tar.gz (90.0 kB view details)

Uploaded Source

Built Distribution

PyroLab-0.2.1-py3-none-any.whl (110.3 kB view details)

Uploaded Python 3

File details

Details for the file PyroLab-0.2.1.tar.gz.

File metadata

  • Download URL: PyroLab-0.2.1.tar.gz
  • Upload date:
  • Size: 90.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.62.3 importlib-metadata/4.11.0 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for PyroLab-0.2.1.tar.gz
Algorithm Hash digest
SHA256 25a6fdf482e89e76c10678098c7c321f997ad27e9baac30afc27935364e1868a
MD5 faa7d39e94f817505ca2cebfbdd5ff39
BLAKE2b-256 63d2430fc9152f6d09f2eb13c6e1ffb44c551d09823a1e667534f5d15ca29e27

See more details on using hashes here.

File details

Details for the file PyroLab-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: PyroLab-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 110.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.62.3 importlib-metadata/4.11.0 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for PyroLab-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 9ef54d076e1261bc74ea39e4b1d4738e396071f5547ad8870eaa031cb895fc71
MD5 07c909077eae03c0e40880baf386751a
BLAKE2b-256 3ab1ba3449a05b22d4ca8b20ef317a7afe7a5731e4249b9e32fc8be7d6c89b6d

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page