DISCOSClient

DISCOSClient is a Python library that provides a high-level interface to access real-time telemetry data and send control commands to DISCOS (Development of the Italian Single-dish COntrol System), the control software of the three INAF single-dish radiotelescopes, the Sardinia Radio Telescope (SRT), the Medicina Radio Telescope, and the Noto Radio Telescope.

The library provides an interface for accessing the internal state of telescope components such as the antenna, mount, etc., for interacting with them, and for controlling the telescope by sending it commands. It is designed to be minimal, thread-safe, and self-describing via JSON schemas.

DISCOSClient is built on top of ZeroMQ, a high-performance asynchronous messaging library for distributed systems. All message transport is handled through pyzmq, the official Python bindings for ZeroMQ.

Key Features

  • Subscribe to one or multiple topics (e.g., mount, antenna)

  • Send commands to DISCOS

  • Automatically decodes incoming JSON messages into nested Python namespaces

  • Supports both blocking and non-blocking access to telemetry data

  • Cross-platform: works on Linux, macOS, and Windows

  • Minimal dependencies: only 2 non-built-in Python libraries are used for maximum portability

Goals

The main goals of DISCOSClient are:

  • To simplify the development of monitoring, visualization and control tools for telescope systems

  • To allow easy integration with third-party Python applications and dashboards

  • To provide a minimal yet powerful abstraction over ZMQ-based message subscriptions and command dispatching

Overview

The library exposes a main class DISCOSClient in order to access the telescope telemetry data and send commands to it, along with three pre-configured classes, one for each telescope:

  • SRTClient client for the Sardinia Radio Telescope

  • MedicinaClient client for the Medicina Radio Telescope

  • NotoClient client for the Noto Radio Telescope

These specialized clients simplify the setup by pre-filling the telescope, address and port arguments. Internally, each client instance manages a subscription socket for telemetry and a dedicated interface for command transmission. Incoming JSON messages are automatically parsed and stored as structured Python objects, which can be queried or watched.

For further details, installation instructions, and usage examples, see the sections below.

Indices and tables