NextAstro logo NextAstroDocumentation Open Hub

Python scripting

Python scripting

Use nextastro_obs_client to control a running NextAstro OBS from a Python script or notebook on the observatory computer. You can use loops, functions, target lists and image measurements alongside mount, camera, filter, focuser and rotator commands.

The client is in the OBS checkout, in nextastro_obs_client/. It talks to OBS's local console on 127.0.0.1:8221 by default. It uses the existing local operator access; a Hub login is not needed for this connection. Run OBS in its normal visible console and student Python in another terminal or notebook.

First script

Save this as my_observation.py. Replace the illustrative position, filter and temperature with the ones for your observation and camera. RA is in hours, declination in degrees, exposure time in seconds and temperature in Celsius.

from nextastro_obs_client import Observatory

obs = Observatory()
print(obs.site)
print(obs.camera.status())

with obs.session(name="First Python observation", userid="student01"):
    obs.camera.cool_to(-30)
    obs.mount.slew(ra_hours=12.5, dec_deg=-30, center=True)
    images = obs.camera.expose(
        seconds=5.5, filter="V", count=3, target_name="Student field"
    )
    for image in images:
        print(image.exposure_id, image.path)

Run it using the client in your existing checkout:

python C:\path\to\codexobs\nextastro_obs_client\run_script.py C:\students\my_observation.py

Session entry waits for current observing work to finish, then acquires script control in manual mode. Equipment calls wait for their completion result. A returned FITS path acknowledges the primary raw write; reduction and upload can continue afterward. The Python API makes cooling explicit with cool_to(...); the Hub's Linear Script exposure rows instead cool to the nighttime target automatically.

Setup and API

Worked examples

The Python example library contains 13 examples. Each page includes the command to run it, an explanation and complete Python source. Start with equipment discovery and a first exposure.

Examples cover colour sequences, variable-star photometry, CSV target lists, exposure ladders, dark current, photon transfer, focus curves, adaptive flats, dithering, video/planet/speckle and rotator calibration. Run them as modules from the OBS checkout; the shared helpers are already there.

Errors and interrupted work

A failed equipment operation raises CommandFailed. Completed images remain available in its recorded result. CommandCancelled identifies cancellation. If the connection is lost, keep the ConnectionLost.command_id and inspect obs.command_result(command_id) before deciding what to do next: the physical operation may already have happened. See results and exceptions.

The Python process must stay running for its live session. Ctrl+C or losing that connection requests cancellation. A Hub linear script runs inside OBS and can continue when its browser page closes; these are different execution models.