Modern python bindings for ZWO ASI astronomical cameras
Project description
zwoasi
Modern, type-safe, zero-dependency Python library for controlling ZWO ASI astronomical cameras.
Installation
pip install zwo
or
using your preferred environment / package manager of choice, e.g., poetry, conda or uv:
poetry add zwo
conda install zwo
uv add zwo
Linux Setup
To check if you any ZWO ASI cameras connected, run the following command:
lsusb | grep 03c3
N.B. The 03c3 is the vendor ID for ZWO.
You should see something like this as your output:
Bus 001 Device 016: ID 03c3:620b ZWO ASI6200MM Pro
To allow non-root users to access the ASI camera, you need to create a udev rule. Firstly, create the .rules file:
cat <<EOF > asi.rules
ACTION=="add", ATTR{idVendor}=="03c3", RUN+="/bin/sh -c '/bin/echo 200 >/sys/module/usbcore/parameters/usbfs_memory_mb'"
SUBSYSTEMS=="usb", ATTR{idVendor}=="03c3", MODE="0666"
EOF
The following command will copy the rule to the correct location:
sudo install asi.rules /lib/udev/rules.d
sudo udevadm control --reload-rules && sudo udevadm trigger
Once you have done this, check that the camera is accessible by running the following command:
ls -l /dev/bus/usb/$(lsusb | grep 03c3:620b | awk '{print $2}')/$(lsusb | grep 03c3:620b | awk '{print $4}' | tr -d :)
You should see something like this:
crw-rw-rw- 1 root root 189, 0 Jan 1 00:00 /dev/bus/usb/001/001
i.e., the camera is accessible by all users with permissions crw-rw-rw- with a mode of MODE=0666.
Then when you have verified these steps, run the following command:
cat /sys/module/usbcore/parameters/usbfs_memory_mb
If the output is anything other than 200, something has gone wrong. To fix, simply follow the steps above again.
Once you have verified that the camera is accessible, if you reconnect the camera by unplugging it from the UBS port and plugging it back in, you can now use the zwo library to control the camera.
Windows Setup
Unfortunately, ZWO ASI does not directly support .dll files for Windows. However, you can use the zwo library on Windows by using the Windows Subsystem for Linux (WSL) and following the Linux setup instructions above and passing through USB devices to the WSL from your host machine.
Usage
from zwo import ZWOASICamera, ZWOASICameraParams
# Let's assume the camera ID is 0 (e.g., only 1 camera is connected):
id = 0
# Create a new camera parameters instance (for demonstration purposes we are
# connecting to a ASI62000M Pro model) which has a pid of "620b":
# N.B. Replace the pid with the correct one for your camera model.
pid: str = "620b"
params: ZWOASICameraParams = ZWOASICameraParams(pid=pid)
# Create a new camera instance:
zwo = ZWOASICamera(id, params)
# Check if the camera is ready:
is_ready = zwo.is_ready()
if not is_ready:
print("Camera is not ready!")
exit(1)
As the zwo instance is fully typed, you can use your IDE's autocompletion to see all the available methods and properties.
We have also provided further usage examples in the examples directory.
Milestones
- Type-safe modern 3.6+ Python
- Portable .h, .so and .dylib files for Linux and MacOS
- Portable .dll files for Windows
- Fully unit tested
- Simpler API (modelled around the ASCOM Alpaca API)
- Integration testing with HIL testing (hardware-in-the-loop)
- Zero-external dependencies (no numpy, astropy etc for portability)
- Example API usage
- Fully supported ZWO ASI Camera operations
- Fully supported ZWO Electronic Automatic Focuser operations
- Fully supported ZWO Filter Wheel operations
- Fully seasoned recipes for usage with numpy, astropy et al.
- ASCOM Alpaca APIs w/Fast API
Miscellaneous
For more information on the ZWO ASI SDK, please visit the ZWO ASI SDK website.
Disclaimer
This project is not affiliated with ZWO ASI in any way. It is a community-driven project. All trademarks and logos are the property of their respective owners. The ZWO ASI SDK is the property of ZWO ASI.
License
This project is licensed under the terms of the MIT license.
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file zwo-0.3.0.tar.gz.
File metadata
- Download URL: zwo-0.3.0.tar.gz
- Upload date:
- Size: 18.9 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b69ef5659bbfaf62d14975266c125d49b10546f6e2eef51c45ebdda08312847e
|
|
| MD5 |
61299e6f1068530fe45765ea294576f5
|
|
| BLAKE2b-256 |
fc38ec8b991d54d44cc7dcb1b08b1e9f5f6acc5fe9f3a3f518f16581f034cba4
|
Provenance
The following attestation bundles were made for zwo-0.3.0.tar.gz:
Publisher:
publish.yml on michealroberts/zwoasi
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
zwo-0.3.0.tar.gz -
Subject digest:
b69ef5659bbfaf62d14975266c125d49b10546f6e2eef51c45ebdda08312847e - Sigstore transparency entry: 182867121
- Sigstore integration time:
-
Permalink:
michealroberts/zwoasi@ee327a55693bd132cc93e86d9314498d7393861b -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/michealroberts
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@ee327a55693bd132cc93e86d9314498d7393861b -
Trigger Event:
release
-
Statement type:
File details
Details for the file zwo-0.3.0-py3-none-any.whl.
File metadata
- Download URL: zwo-0.3.0-py3-none-any.whl
- Upload date:
- Size: 25.9 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e93f08dd1282b013c37209c0c1f43db0db3549e9c609c32464fb7656007d3ddc
|
|
| MD5 |
f93e80c441e309facf661bba765ffa30
|
|
| BLAKE2b-256 |
e6f6b0818ab43dc5c919491d841188314502c06a3c092ba25fad0fd7b978d4eb
|
Provenance
The following attestation bundles were made for zwo-0.3.0-py3-none-any.whl:
Publisher:
publish.yml on michealroberts/zwoasi
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
zwo-0.3.0-py3-none-any.whl -
Subject digest:
e93f08dd1282b013c37209c0c1f43db0db3549e9c609c32464fb7656007d3ddc - Sigstore transparency entry: 182867122
- Sigstore integration time:
-
Permalink:
michealroberts/zwoasi@ee327a55693bd132cc93e86d9314498d7393861b -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/michealroberts
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@ee327a55693bd132cc93e86d9314498d7393861b -
Trigger Event:
release
-
Statement type: