# indipyserver
Server for the INDI protocol, written in Python
This package provides an IPyServer class used to serve the INDI protocol on a port.
INDI - Instrument Neutral Distributed Interface.
See https://en.wikipedia.org/wiki/Instrument_Neutral_Distributed_Interface
Drivers controlling instrumentation can be written, typically using the IPyDriver class from the associated indipydriver package, this server opens a port to which an INDI client can connect.
You would create a script something like:
import asyncio
from indipyserver import IPyServer
import ... your own modules creating driver1, driver2 ...
server = IPyServer(driver1, driver2, host="localhost", port=7624, maxconnections=5)
asyncio.run(server.asyncrun())
A connected client can then control all the drivers. The above illustrates multiple drivers can be served, however it could equally be one or none at all.
## Third party drivers
IPyServer can also run third party INDI drivers created with other languages or tools, using an add_exdriver method to include executable drivers.
For example, using drivers available from indilib:
import asyncio
from indipyserver import IPyServer
server = IPyServer(host="localhost", port=7624, maxconnections=5)
server.add_exdriver("indi_simulator_telescope")
server.add_exdriver("indi_simulator_ccd")
asyncio.run(server.asyncrun())
Please note: The author has no relationship with indilib, these indipyserver and indipydriver packages are independently developed implementations. However they were developed with reference to the INDI version 1.7 specification, and are intended to interwork with other implementations that also meets that spec.
## Networked instruments
IPyServer also has an add_remote method which can be used to add connections to remote servers, creating a tree network of servers:
import asyncio
from indipyserver import IPyServer
import ... your own modules creating DriverA, DriverB ...
server = IPyServer(DriverA, DriverB, host="localhost", port=7624, maxconnections=5)
server.add_remote(host="nameofserverB", port=7624, blob_enable=True)
server.add_remote(host="nameofserverC", port=7624, blob_enable=True)
asyncio.run(server.asyncrun())

With such a layout, the client can control all the instruments.
Drivers made with indipydriver, third party executable drivers and remote connections can all be served together.
Further documentation can be found at:
https://indipyserver.readthedocs.io/en/latest/index.html
Raw data
{
"_id": null,
"home_page": null,
"name": "indipyserver",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.11",
"maintainer_email": null,
"keywords": "indi, server, astronomy, instrument, remote, control",
"author": null,
"author_email": "Bernard Czenkusz <bernie@skipole.co.uk>",
"download_url": "https://files.pythonhosted.org/packages/aa/11/3b3e8b61cd37b919f14ccad4388872eb21c4c9926441aa5c24e83661fc0b/indipyserver-0.0.1.tar.gz",
"platform": null,
"description": "# indipyserver\nServer for the INDI protocol, written in Python\n\nThis package provides an IPyServer class used to serve the INDI protocol on a port.\n\nINDI - Instrument Neutral Distributed Interface.\n\nSee https://en.wikipedia.org/wiki/Instrument_Neutral_Distributed_Interface\n\nDrivers controlling instrumentation can be written, typically using the IPyDriver class from the associated indipydriver package, this server opens a port to which an INDI client can connect.\n\nYou would create a script something like:\n\n\n import asyncio\n from indipyserver import IPyServer\n import ... your own modules creating driver1, driver2 ...\n\n server = IPyServer(driver1, driver2, host=\"localhost\", port=7624, maxconnections=5)\n asyncio.run(server.asyncrun())\n\nA connected client can then control all the drivers. The above illustrates multiple drivers can be served, however it could equally be one or none at all.\n\n\n## Third party drivers\n\nIPyServer can also run third party INDI drivers created with other languages or tools, using an add_exdriver method to include executable drivers.\n\nFor example, using drivers available from indilib:\n\n import asyncio\n from indipyserver import IPyServer\n\n server = IPyServer(host=\"localhost\", port=7624, maxconnections=5)\n\n server.add_exdriver(\"indi_simulator_telescope\")\n server.add_exdriver(\"indi_simulator_ccd\")\n asyncio.run(server.asyncrun())\n\n\nPlease note: The author has no relationship with indilib, these indipyserver and indipydriver packages are independently developed implementations. However they were developed with reference to the INDI version 1.7 specification, and are intended to interwork with other implementations that also meets that spec.\n\n\n## Networked instruments\n\nIPyServer also has an add_remote method which can be used to add connections to remote servers, creating a tree network of servers:\n\n import asyncio\n from indipyserver import IPyServer\n import ... your own modules creating DriverA, DriverB ...\n\n server = IPyServer(DriverA, DriverB, host=\"localhost\", port=7624, maxconnections=5)\n\n server.add_remote(host=\"nameofserverB\", port=7624, blob_enable=True)\n server.add_remote(host=\"nameofserverC\", port=7624, blob_enable=True)\n\n asyncio.run(server.asyncrun())\n\n\n\n\nWith such a layout, the client can control all the instruments.\n\nDrivers made with indipydriver, third party executable drivers and remote connections can all be served together.\n\nFurther documentation can be found at:\n\nhttps://indipyserver.readthedocs.io/en/latest/index.html\n",
"bugtrack_url": null,
"license": null,
"summary": "Server for the INDI protocol.",
"version": "0.0.1",
"project_urls": {
"Documentation": "https://indipyserver.readthedocs.io",
"Source": "https://github.com/bernie-skipole/indipyserver"
},
"split_keywords": [
"indi",
" server",
" astronomy",
" instrument",
" remote",
" control"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "871f21bee1c6c46f0462bb6302f277c45fbe1ce420efd888f3ddf96f3c825f2a",
"md5": "dc4e3ac92de6f3c66f2f323376bb89cc",
"sha256": "afe1ee19abf1a1183952992d4f5576094f4a93fff3ed0b8cd547dbfedc4baf6b"
},
"downloads": -1,
"filename": "indipyserver-0.0.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "dc4e3ac92de6f3c66f2f323376bb89cc",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.11",
"size": 17185,
"upload_time": "2025-10-19T14:00:49",
"upload_time_iso_8601": "2025-10-19T14:00:49.575695Z",
"url": "https://files.pythonhosted.org/packages/87/1f/21bee1c6c46f0462bb6302f277c45fbe1ce420efd888f3ddf96f3c825f2a/indipyserver-0.0.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "aa113b3e8b61cd37b919f14ccad4388872eb21c4c9926441aa5c24e83661fc0b",
"md5": "ad7f459a4427aaaeaf664f03da9936a5",
"sha256": "9132a3355a4bb91670036d6fe000df1757edc57c4eb3569be81b68f7e5f2cbb1"
},
"downloads": -1,
"filename": "indipyserver-0.0.1.tar.gz",
"has_sig": false,
"md5_digest": "ad7f459a4427aaaeaf664f03da9936a5",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.11",
"size": 13830,
"upload_time": "2025-10-19T14:00:51",
"upload_time_iso_8601": "2025-10-19T14:00:51.341240Z",
"url": "https://files.pythonhosted.org/packages/aa/11/3b3e8b61cd37b919f14ccad4388872eb21c4c9926441aa5c24e83661fc0b/indipyserver-0.0.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-10-19 14:00:51",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "bernie-skipole",
"github_project": "indipyserver",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "indipyserver"
}