Observatory Configuration#
Astra requires an observatory configuration file in YAML format that defines all devices, their settings, safety limits, and how they interact with each other.
Important
Each Astra instance runs exactly one observatory at a time, specified by the observatory_name field in your base configuration file (~/.astra/astra_config.yml).
This name determines which configuration files are loaded: {observatory_name}_config.yml and {observatory_name}_fits_header_config.csv.
You’ll need to configure two files for your observatory:
{observatory_name}_config.yml(this page) - Device definitions, safety limits, and settings{observatory_name}_fits_header_config.csv(FITS Header Configuration) - FITS header keyword mappings
Telescope:
- device_name: telescope_observatoryname
ip: localhost:11111
device_number: 0
pointing_threshold: 0.1 # arcmins
settle_factor: 0.0 # exposure multiplier for calculated settle time after pointing (for SPIRIT like cameras)
meridian_flip: false # enable automated meridian flips
meridian_flip_min: 5 # minutes past meridian to trigger flip
guider: # populated using calibrate_guiding sequence
PIX2TIME: # ms/pixel for camera used for guiding
+x: 71.62908053771561
-x: 71.62926906533114
+y: 71.62775367838461
-y: 71.62771750106279
RA_AXIS: "x"
DIRECTIONS:
+x: East
-x: West
+y: North
-y: South
PID_COEFFS: # defaults
"x": { "p": 0.70, "i": 0.02, "d": 0.0 }
"y": { "p": 0.50, "i": 0.02, "d": 0.0 }
"set_x": 0.0
"set_y": 0.0
MIN_GUIDE_INTERVAL: 60 # seconds
Focuser:
- device_name: focuser_observatoryname
ip: localhost:11111
device_number: 0
focus_position: 10000
settle_time: 3 # seconds
connectable: true # optional, default: true
Camera:
- device_name: camera_observatoryname
ip: localhost:11111
device_number: 0
temperature: -20 # degrees Celsius
temperature_tolerance: 1 # degrees Celsius
cooling_timeout: 30 # minutes
flats:
target_adu: 31500 # ADU
target_adu_tolerance: 10500 # ADU
bias_offset: 300 # ADU
lower_exptime_limit: 1 # seconds
upper_exptime_limit: 60 # seconds
paired_devices:
Telescope: telescope_observatoryname
Focuser: focuser_observatoryname
Dome: dome_observatoryname
FilterWheel: fw_observatoryname
ObservingConditions: weather_observatoryname
SafetyMonitor: safety_observatoryname
Camera: camera_observatoryname
Dome:
- device_name: dome_observatoryname
ip: localhost:11111
device_number: 0
close_dome_on_telescope_error: false
telescopes:
- telescope_observatoryname
FilterWheel:
- device_name: fw_observatoryname
ip: localhost:11111
device_number: 0
ObservingConditions:
- device_name: weather_observatoryname
ip: localhost:11111
device_number: 0
polling_interval: 5 # seconds
closing_limits:
Humidity:
- upper: 70
max_safe_duration: 30
- upper: 80
max_safe_duration: 150
- upper: 90
max_safe_duration: 300
Temperature:
- lower: 0
max_safe_duration: 30
WindSpeed:
- upper: 10
max_safe_duration: 30
SkyTemperature:
- upper: -30
max_safe_duration: 30
RelativeSkyTemp:
- upper: -40
max_safe_duration: 30
SafetyMonitor:
- device_name: safety_observatoryname
ip: localhost:11111
device_number: 0
max_safe_duration: 15 # minutes
Misc:
backup_time: "12:00" # UTC back up time of polled data (e.g. CCDTemperature) and logs
# Webcam: http://localhost:8888/inside
## Multiple webcams:
# Webcam:
# - name: Inside View
# url: http://localhost:8888/inside
# - name: Outside View
# url: http://localhost:8888/outside
# AllSky: /path/to/allsky.jpg
## Multiple all-sky cameras:
# AllSky:
# - name: East Sky
# path: /path/to/allsky_east.jpg
# - name: West Sky
# path: /path/to/allsky_west.jpg
# filename_templates:
# object: "{action_date}/{device}_{filter_name}_{object_name}_{exptime:.3f}_{timestamp}.fits"
# calibration: "{action_date}/{device}_{imagetype}_{exptime:.3f}_{timestamp}.fits"
# flats: "{action_date}/{device}_{filter_name}_{imagetype}_{exptime:.3f}_{timestamp}.fits"
# autofocus: "autofocus/{action_date}/{device}_{filter_name}_{imagetype}_{exptime:.3f}_{timestamp}.fits"
# calibrate_guiding: "calibrate_guiding/{action_date}/{device}_{filter_name}_{imagetype}_{exptime:.3f}_{timestamp}.fits"
# pointing_model: "pointing_model/{action_date}/{device}_{filter_name}_{imagetype}_{exptime:.3f}_{timestamp}.fits"
# default: "{action_date}/{device}_{filter_name}_{imagetype}_{exptime:.3f}_{timestamp}.fits"
This example configuration shows all supported device types and their parameters. You can customize this template for your specific observatory setup.
Device Types and Configuration#
Astra supports the following device types, all conforming to the ASCOM Alpaca standard:
Telescope
Focuser
Camera
Dome
FilterWheel
ObservingConditions
SafetyMonitor
CoverCalibrator
Rotator
Switch
Each device type has specific configuration parameters detailed below.
Common Device Parameters#
All devices share these required parameters:
device_name: Unique identifier for the device (string, e.g., “camera_main”)ip: Network address of the Alpaca device (string, format: “hostname:port”)device_number: ASCOM Alpaca device number (integer)polling_interval: How often to poll ASCOM properties (set by FITS header configuration), in seconds (integer, optional, default: 5)connectable: Whether to attempt connection at startup (boolean, optional, default: true)
Telescope Configuration#
Additional parameters for telescope mounts:
pointing_threshold: Maximum acceptable pointing error in arcminutes before pointing correction is applied (float, default: 0.1)settle_factor: Exposure multiplier for calculated settle time after pointing - useful for continuous acquisition type cameras (float, default: 0.0)meridian_flip: Enable automated meridian flips (boolean, default: false)meridian_flip_min: Buffer time in minutes past meridian to trigger flip (float, default: 5)guider: Autoguider calibration settings (dict, populated automatically by the calibrate_guiding sequence)
Focuser Configuration#
Focuser-specific parameters:
focus_position: Best known absolute focus position (integer)settle_time: Time in seconds to wait after focus position move (integer)
Camera Configuration#
Camera-specific parameters for cooling and imaging:
Cooling Parameters:
temperature: Target cooling temperature in Celsius (float)temperature_tolerance: Acceptable temperature tolerance from target in Celsius (float)cooling_timeout: Time in minutes to wait to reach target temperature before timing out (int, default: 30)
Sky Flat Parameters:
flats: Configuration for automated flat field acquisition (dict)target_adu: Target median ADU value for sky flat frame (int)target_adu_tolerance: Acceptable tolerance around target ADU (int)bias_offset: Median bias level offset in ADU for exposure time calculations (int)lower_exptime_limit: Minimum allowed exposure time in seconds (int)upper_exptime_limit: Maximum allowed exposure time in seconds (int)
Device Associations:
paired_devices: Links to other devices for FITS headers and sequence coordination (dict){device_type}:{device_name}which must match the name used in device configuration (string)
Dome Configuration#
Dome-specific parameters:
close_dome_on_telescope_error: Flag to close the dome in case of a telescope error. (boolean, default: false)telescopes: List of associated telescope(s) within the dome (list)
ObservingConditions Configuration#
Weather monitoring and safety parameters:
closing_limits: Weather safety thresholds that trigger observatory closure (dict){parameter}: Weather parameter name (e.g.,Humidity,WindSpeed,Temperature){parameter}[i].upper/lower: Threshold value -upperfor maximum safe value,lowerfor minimum (float){parameter}[i].max_safe_duration: Time in minutes the parameter must stay within safe limits beforeweather_safeis set toTrue(int)
Supported Parameters:
Standard ASCOM:
CloudCover,DewPoint,Humidity,Pressure,RainRate,SkyBrightness,SkyQuality,SkyTemperature,StarFWHM,Temperature,WindDirection,WindGust,WindSpeedCustom:
RelativeSkyTemp(sky temperature minus ambient temperature; requires bothSkyTemperatureandTemperatureto be available from your weather station via its ASCOM Alpaca ObservingConditions driver)
Important
A weather parameter is only used for safety evaluation when both conditions are met:
It is exposed by your ASCOM Alpaca ObservingConditions driver.
It is defined in your FITS header configuration such that Astra can retrieve historical values from the local SQLite database for safety monitoring its
max_safe_duration.
SafetyMonitor Configuration#
Safety system monitoring parameters:
max_safe_duration: Time in minutes theIsSafeproperty must remainTruecontinuously before the observatory is consideredweather_safe(int)
Misc Options#
Optional observatory-wide settings:
backup_time: UTC time of day to perform automatic daily backups of polled data and logs on the SQLite database (string, format: “HH:MM”)Webcam: Webcam feed configuration. The URL is embedded in an iframe element in the frontend. Can be:Single URL string for one webcam (e.g.,
Webcam: http://localhost:8888/inside)Array of objects for multiple webcams, each with
nameandurlpropertiesAny iframe-compatible video source (e.g., mediamtx)
AllSky: All-sky camera configuration. Images are fetched via/api/allsky/latestendpoint and automatically refreshed every 60 seconds. Can be:Single path string for one camera (e.g.,
AllSky: /path/to/allsky.jpg)Array of objects for multiple cameras, each with
nameandpathpropertiesSupports JPEG and PNG formats
filename_templates: Customize how FITS files are named and organized (dict). Seeastra.filename_templatesfor more details.