Instrument Neutral Distributed Interface INDI  2.0.2
Instrument Neutral Distributed Interface INDI

Introduction

INDI is a simple XML-like communications protocol described for interactive and automated remote control of diverse instrumentation. INDI is small, easy to parse, and stateless.

A full description of the INDI protocol is detailed in the INDI white paper

Under INDI, any number of clients can connect to any number of drivers running one or more devices. It is a true N-to-N server/client architecture topology allowing for reliable deployments of several INDI server, client, and driver instances distrubted across different systems in different physical and logical locations.

The basic premise of INDI is this: Drivers are responsible for defining their functionality in terms of Properties. Clients are not aware of such properties until they establish connection with the driver and start receiving streams of defined properties. Each property encompases some functionality or information about the device. These include number, text, switch, light, and BLOB properties.

For example, all devices define the CONNECTION vector switch property, which is compromised of two switches:

  1. CONNECT: Connect to the device.
  2. DISCONNECT: Disconnect to the device.

Therefore, a client, whether it is a GUI client that represents such property as buttons, or a Python script that parses the properties, can change the state of the switch to cause the desired action.

Not all properties are equal. A few properties are reserved to ensure interoperality among different clients that want to target a specific functionality. These Standard Properties ensure that different clients agree of a common set of properties with specific meaning since INDI does not impose any specific meaning on the properties themselves.

INDI server acts as a convenient hub to route communications between clients and drivers. While it is not strictly required for controlling driver, it offers many queue and routing capabilities.

Intended Audience

INDI is intended for developers seeking to add support for their devices in INDI. Any INDI driver can be operated from numerous cross-platform cross-architecture clients.

Developing under INDI

Please refere to the INDI Developers Manual for a complete guide on INDI's driver developemnt framework.

The INDI Library API is divided into the following main sections:

Tutorials

INDI Library includes a number of tutorials to illustrate development of INDI drivers. Check out the examples provided with INDI library.

Simulators

Simulators provide a great framework to test drivers and equipment alike. INDI Library provides the following simulators:

  • Telescope Simulator: Offers GOTO capability, motion control, guiding, and ability to set Periodic Error (PE) which is read by the CCD simulator when generating images.
  • CCD Simulator: Offers a very flexible CCD simulator with a primary CCD chip and a guide chip. The simulator generate images based on the RA & DEC coordinates it snoops from the telescope driver using General Star Catalog (GSC). Please note that you must install GSC for the CCD simulator to work properly. Furthermore, The simulator snoops FWHM from the focuser simulator which affects the generated images focus. All images are generated in standard FITS format.
  • Guide Simulator: Simple dedicated Guide Simulator.
  • Filter Wheel Simulator: Offers a simple simulator to change filter wheels and their corresponding designations.
  • Focuser Simulator: Offers a simple simualtor for an absolute position focuser. It generates a simulated FWHM value that may be used by other simulator such as the CCD simulator.
  • Dome Simulator: Offers a simple simulator for an absolute position dome with shutter.
  • GPS Simulator: Offers a simple simulator for GPS devices that send time and location data to the client and other drivers.

Help

You can find information on INDI development in the INDI Library site. Furthermore, you can discuss INDI related issues on the INDI development mailing list.

Author
Jasem Mutlaq
Elwood Downey

For a full list of contributors, please check Contributors page on Github.