Skip to main content

indipyclient

You may have Python programs implementing some form of data collection or control and wish to remotely operate such an instrument.

An associated package 'indipydriver' can be used to take your data, organise it into a data structure defined by the INDI protocol, and serve it on a port.

INDI - Instrument Neutral Distributed Interface.

See https://en.wikipedia.org/wiki/Instrument_Neutral_Distributed_Interface

The INDI protocol defines the format of the data sent, such as light, number, text, switch or BLOB (Binary Large Object). The client is general purpose, taking the format of switches, numbers etc., from the protocol.

INDI is often used with astronomical instruments, but is a general purpose protocol which can be used for any instrument control.

This indipyclient package provides a set of classes which can be used to create scripts to control the remote instrument. In particular your script can import and create an instance of the 'IPyClient' class. The IPyClient object has an asyncrun() coroutine method which needs to be awaited, typically gathered with your own tasks, to run your script or client.

In general, a client transmits a 'getProperties' request (this indipyclient package does this for you on connecting).

The server replies with definition packets (defSwitchVector, defLightVector, .. ) that define the format of the instrument data.

The indipyclient package reads these, and its IPyClient instance becomes a mapping of the devices, vectors and members.

For example, if ipyclient is your instance of IPyClient:

ipyclient[devicename][vectorname][membername] will be the value of a particular parameter.

Multiple devices can be served, a 'vector' is a collection of members, so a switch vector may have one or more switches in it.

As the instrument produces changing values, the server sends 'set' packets, such as setSwitchVector, setLightVector ..., these contain new values, which update the ipyclient values. They also cause the ipyclient.rxevent(event) method to be called, which you could overwrite to take any actions you prefer.

To transmit a new value you could call the ipyclient.send_newVector coroutine method.

Indipyclient can be installed from Pypi with:

pip install indipyclient

The package also provides a general purpose terminal client (Linux only) developed with the Python standard library Curses package, and no dependencies. When run this connects to the INDI server port, allowing you to view and control your instrument from a terminal session.

The terminal client can be run from a virtual environment with

indipyclient [options]

or with

python3 -m indipyclient [options]

The package help is:

usage: indipyclient [options]

Terminal client to communicate to an INDI service.

options:
  -h, --help                show this help message and exit
  -p PORT, --port PORT      Port of the INDI server (default 7624).
  --host HOST               Hostname/IP of the INDI server (default localhost).
  -b BLOBS, --blobs BLOBS   Optional folder where BLOB's will be saved.
  --loglevel LOGLEVEL       Enables logging, value 1, 2, 3 or 4.
  --logfile LOGFILE         File where logs will be saved
  --version                 show program's version number and exit

The BLOB's folder can also be set from within the session.
Setting loglevel and logfile should only be used for brief
diagnostic purposes, the logfile could grow very big.
loglevel:1 Information and error messages only, no exception trace.
The following levels enable exception traces in the logs
loglevel:2 As 1 plus xml vector tags without members or contents,
loglevel:3 As 1 plus xml vectors and members - but not BLOB contents,
loglevel:4 As 1 plus xml vectors and all contents

A typical session would look like:

Terminal screenshot

Further documentation is available at:

https://indipyclient.readthedocs.io

The package can be installed from:

https://pypi.org/project/indipyclient

and indipydriver is available at:

https://pypi.org/project/indipydriver

https://github.com/bernie-skipole/indipydriver

A further terminal client 'indipyterm' is available, which itself calls on indipyclient to do the heavy lifting, and uses the textual package to present terminal characters, this should also work on Windows and is available at:

https://pypi.org/project/indipyterm

https://github.com/bernie-skipole/indipyterm

Download files

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

Source Distribution

indipyclient-0.7.3.tar.gz (66.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

indipyclient-0.7.3-py3-none-any.whl (74.1 kB view details)

Uploaded Python 3

File details

Details for the file indipyclient-0.7.3.tar.gz.

File metadata

  • Download URL: indipyclient-0.7.3.tar.gz
  • Upload date:
  • Size: 66.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.28.2

File hashes

Hashes for indipyclient-0.7.3.tar.gz
Algorithm Hash digest
SHA256 b87d656ad3bc003a9e73071840889cca0f1b7811a773dc58108c8c31592a1be9
MD5 c1567831609f9472c061477535c99c17
BLAKE2b-256 849a9071acb8e59bde2c66822fb31fd913505d0b6be778aa7d1e23231c8b1f26

See more details on using hashes here.

File details

Details for the file indipyclient-0.7.3-py3-none-any.whl.

File metadata

  • Download URL: indipyclient-0.7.3-py3-none-any.whl
  • Upload date:
  • Size: 74.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.28.2

File hashes

Hashes for indipyclient-0.7.3-py3-none-any.whl
Algorithm Hash digest
SHA256 2cae6f23085cfd64b7cb33cd368d1001db9e2bcfc23204d016975c6279b6bd51
MD5 5d7c89d0fd3a0fbba93aeb3aee0c0848
BLAKE2b-256 a018cb3d28bd13850d6cf4859a071b995805a21959e4b88cbd0cda6c49eb3afa

See more details on using hashes here.

Release history Release notifications | RSS feed

0.9.2

2 files

0.9.1

2 files

0.9.0

2 files

0.8.8

2 files

0.8.7

2 files

0.8.6

2 files

0.8.5

2 files

0.8.4

2 files

0.8.3

2 files

0.8.2

2 files

0.8.1

2 files

0.8.0

2 files

0.7.5

2 files

0.7.4

2 files

This release

0.7.3 This release

2 files

0.7.2

2 files

0.7.1

2 files

0.7.0

2 files

0.6.9

2 files

0.6.8

2 files

0.6.7

2 files

0.6.6

2 files

0.6.5

2 files

0.6.4

2 files

0.6.3

2 files

0.6.2

2 files

0.6.1

2 files

0.6.0

2 files

0.5.6

2 files

0.5.5

2 files

0.5.4

2 files

0.5.3

2 files

0.5.2

2 files

0.5.1

2 files

0.5.0

2 files

0.4.1

2 files

0.4.0

2 files

0.3.6

2 files

0.3.5

2 files

0.3.4

2 files

0.3.3

2 files

0.3.2

2 files

0.3.1

2 files

0.3.0

2 files

0.2.9

2 files

0.2.8

2 files

0.2.7

2 files

0.2.6

2 files

0.2.5

2 files

0.2.4

2 files

0.2.3

2 files

0.2.2

2 files

0.2.1

2 files

0.2.0

2 files

0.1.7

2 files

0.1.6

2 files

0.1.5

2 files

0.1.4

2 files

0.1.3

2 files

0.1.2

2 files

0.1.1

2 files

0.1.0

2 files

0.0.9

2 files

0.0.8

2 files

0.0.7

2 files

0.0.6

2 files

0.0.5

2 files

0.0.4

2 files

0.0.2

2 files

0.0.1

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page