INDI Concepts
What is INDI?
INDI is a protocol designed to support control, automation, data aquisition, and exchange among hardware devices and software frontends. INDI stands for the Instrument-Neutral-Distributed-Interface, and was developed by Elwood C. Downey of ClearSky Institute.
Control systems are often written for a specific device or range of devices. When one or more of the device parameters change, the software needs to be modified to accomodate the change. That is, the software frontend and hardware backend are tightly coupled.
INDI resolves this problem by providing a framework that decouples low level hardware drivers from high level front end clients. That is, clients that use the device drivers are completely unaware of the device capabilities. In run time, clients communicate with the device drivers and build a completely dynamical GUI based on the services provided by the device. In essence, INDI provides the capacity to describe any device and its parameters to any INDI-compliant client. Once you have a client, you can develop as many devices as you can without any changes on the client side.
But this is not all! Since INDI's protocol is based on XML, it can be easily parsed and nested in other frameworks. For example, you can incorporate INDI in RTML to place observational constraints on your devices.
Furthermore, remote control of devices is seamless with INDI's server/client architecture. Distributed devices can be controlled from one centralized environment.
Finally, INDI drivers are scriptable using INDI scripting tools. You can use these command line tools in your favorite langauge to have complete control of the device. These tools enable developers to provide scheduling and automation frameworks for their devices.
What are INDI drivers?
INDI driver is what communicates directly to your device. It is responsible for controlling the device parameters and for defining them to clients. Drivers send a list of supported device properties to clients where they are parsed and presented to the end users.
For more information on INDI drivers, please refer to INDI Developers Manual.
What is INDI server?
INDI server is the hub that sits between your devices (drivers) and your clients. It reroutes traffic for control and data acorss distributed networks. Each device or client in the network is a node and may communicate with other nodes whenever desired. The sever supports broadcasting, chaining, and marshalling of data.
What are INDI clients?
Clients are the software frontends that communicate with the hardware drivers. They usually communicate with INDI hardware drivers via INDI server, though they can communicate with the drivers directly. There are many types of clients, most notably:
- Generic GUI clients like KStars or Xephem. Such clients generate a dynamic GUI to offer users a control panel to control the device.
- Logger clients to record messages, alarms, and data exchanged between devices and clients.
- Watch dog clients to insure safe and proper operation of devices.
- Automated scripts to carry on complex and coordinates operations on devices.
Which devices can INDI control?
Thanks to the generic nature of INDI, INDI can virtually control any device. While our focus is astronomical instruments, there is nothing that prevents you from writing an INDI driver for your toaster!
Currently, INDI Library supports a growing number of telescopes, CCD, focusers, and video capture devices. For a complete list, please visit INDI devices page.
If your device doesn't exist in the devices list page, there is a couple of things you can do:
- Ask your device manafacturer to provide an INDI driver.
- Write your own INDI driver for the device. Refer to INDI Developers Manual on driver development HOWTO, the manual also includes many tutorials and examples.
- If you lack programming knowledge and have the technical specification for your device, you may send the information to INDI Development mailing list. One of the developers might be interested in developing a driver for your device.
How can I use INDI?
INDI is shipped with many Linux distributions today by default. Check if your distribution includes one of INDI compatible clients. Ideally, GUI clients should take care of establishing INDI server and providing users with a list of supported drivers.
You may use the INDI version shipped with your client, or at your option, you may download the latest stable INDI release from the download section.
All INDI compatible clients can also connect to local and remote INDI servers. So you should first start INDI server, then configure your client to connect to it. INDI server must be running on the same physical machine connected to the device. For example, to start INDI server to run the LX200 GPS telescope on localhost and listening on default port 7624, type:
$ indiserver lx200gps
Type 'man indiserver' for the complete INDI Server command syntax.
What operating systems does INDI support?
Before answering this question, it is important to distinguish between INDI wire protocol and INDI Library:
- INDI Wire Protocol is the protocol's description, semantics, and schema as strictly defined by INDI White Paper. The protocol can be implemented under any operating system.
- INDI Library is one implementation of the INDI wire protocol and is designed to work on Unix/Linux systems. The INDI Library contains the INDI server, drivers, and tools.
At this stage, there is no plan to support INDI Library on other operating systems. On the other hand, INDI clients exist for different platforms. While KStars and Xephem are traditional Linux clients, DCD can run on any platform supporting Python.
What are the minimum requirements to run INDI?
INDI Library can be compiled under a vanilla POSIX system. It requires the following components:
- GNU gcc and autotools
- ZLib. It is included with most systems.
- CFITSIO. It is included with INDI library, but INDI will use the system's CFITSIO if it exists.
Some drivers require external libraries like libusb, or SBIG universal library. Make sure to install them if you want to operate your particular device.
How do I configure my device with KStars/Xephem/DCD/etc...?
Unfortunately, we can't help you with that. Refer to your client documentation or contact the client's maintainer to find out. Please do not post client-specific questions on the INDI mailing list. Direct such question to your client's author.
I'd like to write my own client, can you help me?
Due to the varied nature of clients, there are no documentation to help you write a client. However, you can start by looking at existing clients like KStars or Xephem. Furthermore, it is highly recommended to examine the getINDI and setINDI tools source code since these two tools are very simple INDI clients.
I have a problem with an INDI driver, what do I do?
The most common reported problem is that of permission. Please insure you have proper permissions to access your device. You should check out INDI Wiki for driver-specfic details and troubleshooting. If you found a bug in the software, file a bug report at INDI Bug Tracking system. You may also post your problem to the INDI Development mailing list.
I'd like to contribute to INDI, how?
We highly appreciate any help from our users! Do you have a device that is not yet supported by INDI? Tell us about it, or go ahead and write your own driver and submit it to us. If your device is supported, test it with INDI, does it work as expected? If not, please report to us any problems, suggestions, or comments you have.
Contributions to Wiki and documentation are greatly appreciated as well. Let us know if you use INDI in your observatory, home, or camp. It's always good to know about more INDI users!


