G: Programando clientes INDI

En este notebook hacemos una introducción simple y burda a como podemos controlar dispositivos astronómicos con INDI. Para ello vamos a bajar bastante de nivel: abriremos un socket hacia nuestro servidor INDI e iremos leyendo / mandando los mensajes de XML que hacen falta para hacerlo funcionar. Algunos enlaces que pueden resultar de interés para seguir mejor estos ejemplos:

También te puede interesar ver esta esta introducción a INDI (PDF)

image1

Primer ejemplo: controlando un enfocador simulado

Partimos de la base de que hemos instalado la biblioteca INDI y vamos a ejecutar el servidor de INDI con un único dispositivo: indi_simulator_focus (un simulador de enfocador. Como es un simulador no necesitamos hardware ninguno para ejecutar el ejemplo. Podemos abrir un cliente habitual de INDI (como el que está integrado en KStars para ir comprobando que los cambios que solicitamos al dispositivo efectivamente se llevan a cabo.

> indiserver indi_simulator_focus

Definimos unas cuantas funciones para simplificar el envio de mensajes y su recepción. No es un código muy elegante puesto que la recepción de mensajes debería hacerse en una hebra (hilo) diferente (Threading: programación con hilos (I)), pero esa es otra historia y debe ser contada en otra ocasión.

[ ]:
#nombreEnfocador = "MyFocuserPro2"
nombreEnfocador = "Focuser Simulator"
[1]:
import socket
import time
from datetime import datetime
[2]:
def conectar(host, port):
    global s

    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)   # Creamos el socket y nos conectamos
    s.connect((host, port))
    s.settimeout(.01)

def mandar(s, comando):      # Manda al socket s un comando
    comando = comando.encode("ASCII")

    print(comando)

    s.sendall(comando)

def recibir(s, wait = 0.1, imprimir=True):  # wait es el tiempo que vamos a esperar leyendo mensajes
    inicio = datetime.now()

    msg = ""

    try:
        msg = s.recv(500000).decode("UTF-8")
    except socket.timeout:
        msg = ""

    horaActual = datetime.now()

    while (horaActual - inicio).total_seconds() < wait:   # Espera activa... no es nada elegante :)
        try:
            msg = msg + s.recv(500000).decode("UTF-8")
        except socket.timeout:
            # no hacemos nada
            msg = msg

        horaActual = datetime.now()

        time.sleep(0.05)

    if imprimir:
        print(msg)

    return msg
[3]:
s=None     # Nuestro socket

host = "127.0.0.1"  # Hostname o IP del servidor de INDI
port = 7624         # Puerto por defecto de INDI


conectar(host, port)

A estas alturas nos hemos conectado al servidor INDI pero no hemos recibido nada. Vamos a pedirle que nos envie toda la información sobre dispositivos y sus propiedades que tenga el servidor:

[4]:
mandar(s, '<getProperties version="2.0" />')
b'<getProperties version="2.0" />'

Y recibimos información a ver que nos dice:

[5]:
recv = recibir(s, 1)
<setSwitchVector device='Mount Simulator' name='CONNECTION' state='Busy'>
<oneSwitch name='CONNECTED'>Off</oneSwitch>
<oneSwitch name='DISCONNECTED'>Off</oneSwitch>
</setSwitchVector>
<delProperty device='Mount Simulator' name='MOUNT_INFO'/>
<delProperty device='Mount Simulator' name='GEOGRAPHIC_COORDINATES'/>
<delProperty device='Mount Simulator' name='MOUNT_LST_TIME'/>
<delProperty device='Mount Simulator' name='MOUNT_PARK'/>
<delProperty device='Mount Simulator' name='MOUNT_PARK_SET'/>
<delProperty device='Mount Simulator' name='MOUNT_PARK_POSITION'/>
<delProperty device='Mount Simulator' name='MOUNT_HOME'/>
<delProperty device='Mount Simulator' name='MOUNT_HOME_SET'/>
<delProperty device='Mount Simulator' name='MOUNT_HOME_POSITION'/>
<delProperty device='Mount Simulator' name='MOUNT_SLEW_RATE'/>
<delProperty device='Mount Simulator' name='MOUNT_MOTION_DEC'/>
<delProperty device='Mount Simulator' name='MOUNT_MOTION_RA'/>
<delProperty device='Mount Simulator' name='MOUNT_TRACK_RATE'/>
<delProperty device='Mount Simulator' name='MOUNT_TRACKING'/>
<delProperty device='Mount Simulator' name='MOUNT_GUIDE_RATE'/>
<delProperty device='Mount Simulator' name='MOUNT_ON_COORDINATES_SET'/>
<delProperty device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES'/>
<delProperty device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES'/>
<delProperty device='Mount Simulator' name='MOUNT_ABORT_MOTION'/>
<delProperty device='Mount Simulator' name='MOUNT_ALIGNMENT_MODE'/>
<delProperty device='Mount Simulator' name='MOUNT_EPOCH'/>
<delProperty device='Mount Simulator' name='SNOOP_DEVICES'/>
<setSwitchVector device='Mount Simulator' name='CONNECTION' state='Ok'>
<oneSwitch name='CONNECTED'>Off</oneSwitch>
<oneSwitch name='DISCONNECTED'>Off</oneSwitch>
</setSwitchVector>
<setSwitchVector device='Mount Simulator' name='CONNECTION' state='Busy'>
<oneSwitch name='CONNECTED'>On</oneSwitch>
<oneSwitch name='DISCONNECTED'>Off</oneSwitch>
</setSwitchVector>
<defTextVector device='Mount Simulator' name='MOUNT_INFO' group='Mount' label='Info' perm='ro' state='Ok'>
<defText name='VENDOR' label='Vendor'>Unknown</defText>
<defText name='MODEL' label='Model'>Unknown</defText>
<defText name='FIRMWARE_VERSION' label='Firmware'>N/A</defText>
</defTextVector>
<defNumberVector device='Mount Simulator' name='GEOGRAPHIC_COORDINATES' group='Site' label='Location' perm='rw' state='Ok'>
<defNumber name='LATITUDE' label='Latitude (-90 to +90° +N)' format='%12.9m' min='-90' max='90' step='0' target='0'>0</defNumber>
<defNumber name='LONGITUDE' label='Longitude (0 to 360° +E)' format='%12.9m' min='-180' max='360' step='0' target='0'>0</defNumber>
<defNumber name='ELEVATION' label='Elevation (m)' format='%g' min='-400' max='8000' step='0' target='0'>0</defNumber>
</defNumberVector>
<defNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' group='Site' label='LST Time' perm='ro' state='Ok'>
<defNumber name='TIME' label='LST Time' format='%12.9m' min='0' max='24' step='0'>0</defNumber>
</defNumberVector>
<defSwitchVector device='Mount Simulator' name='MOUNT_PARK' group='Mount' label='Park' perm='rw' state='Ok' rule='OneOfMany'>
<defSwitch name='PARKED' label='Mount parked'>On</defSwitch>
<defSwitch name='UNPARKED' label='Mount unparked'>Off</defSwitch>
</defSwitchVector>
<defSwitchVector device='Mount Simulator' name='MOUNT_PARK_SET' group='Mount' label='Set park position' perm='rw' state='Ok' rule='AtMostOne'>
<defSwitch name='CURRENT' label='Set current position'>Off</defSwitch>
<defSwitch name='DEFAULT' label='Set default position'>Off</defSwitch>
</defSwitchVector>
<defNumberVector device='Mount Simulator' name='MOUNT_PARK_POSITION' group='Mount' label='Park position' perm='rw' state='Ok'>
<defNumber name='HA' label='Hour Angle (-12 to 12 hrs)' format='%12.9m' min='-12' max='12' step='0' target='6'>6</defNumber>
<defNumber name='DEC' label='Declination (-90 to 90°)' format='%12.9m' min='-90' max='90' step='0' target='90'>90</defNumber>
</defNumberVector>
<defSwitchVector device='Mount Simulator' name='MOUNT_HOME' group='Mount' label='Home' perm='rw' state='Ok' rule='OneOfMany'>
<defSwitch name='HOME' label='Slew to home position and stop'>Off</defSwitch>
</defSwitchVector>
<defSwitchVector device='Mount Simulator' name='MOUNT_HOME_SET' group='Mount' label='Set home position' perm='rw' state='Ok' rule='AtMostOne'>
<defSwitch name='CURRENT' label='Set current position'>Off</defSwitch>
<defSwitch name='DEFAULT' label='Set default position'>Off</defSwitch>
</defSwitchVector>
<defNumberVector device='Mount Simulator' name='MOUNT_HOME_POSITION' group='Mount' label='Home position' perm='rw' state='Ok'>
<defNumber name='HA' label='Hour Angle (-12 to 12 hrs)' format='%12.9m' min='-12' max='12' step='0' target='6'>6</defNumber>
<defNumber name='DEC' label='Declination (-90 to 90°)' format='%12.9m' min='-90' max='90' step='0' target='90'>90</defNumber>
</defNumberVector>
<defSwitchVector device='Mount Simulator' name='MOUNT_SLEW_RATE' group='Mount' label='Slew rate' perm='rw' state='Ok' rule='OneOfMany'>
<defSwitch name='GUIDE' label='Guide rate'>On</defSwitch>
<defSwitch name='CENTERING' label='Centering rate'>Off</defSwitch>
<defSwitch name='FIND' label='Find rate'>Off</defSwitch>
<defSwitch name='MAX' label='Max rate'>Off</defSwitch>
</defSwitchVector>
<defSwitchVector device='Mount Simulator' name='MOUNT_MOTION_DEC' group='Mount' label='Move N/S' perm='rw' state='Ok' rule='AtMostOne'>
<defSwitch name='NORTH' label='North'>Off</defSwitch>
<defSwitch name='SOUTH' label='South'>Off</defSwitch>
</defSwitchVector>
<defSwitchVector device='Mount Simulator' name='MOUNT_MOTION_RA' group='Mount' label='Move W/E' perm='rw' state='Ok' rule='AtMostOne'>
<defSwitch name='WEST' label='West'>Off</defSwitch>
<defSwitch name='EAST' label='East'>Off</defSwitch>
</defSwitchVector>
<defSwitchVector device='Mount Simulator' name='MOUNT_TRACK_RATE' group='Mount' label='Track rate' perm='rw' state='Ok' rule='OneOfMany'>
<defSwitch name='SIDEREAL' label='Sidereal rate'>On</defSwitch>
<defSwitch name='SOLAR' label='Solar rate'>Off</defSwitch>
<defSwitch name='LUNAR' label='Lunar rate'>Off</defSwitch>
<defSwitch name='KING' label='King rate'>Off</defSwitch>
<defSwitch name='CUSTOM' label='Custom rate'>Off</defSwitch>
</defSwitchVector>
<defSwitchVector device='Mount Simulator' name='MOUNT_TRACKING' group='Mount' label='Tracking' perm='rw' state='Ok' rule='OneOfMany'>
<defSwitch name='ON' label='Tracking'>Off</defSwitch>
<defSwitch name='OFF' label='Stopped'>On</defSwitch>
</defSwitchVector>
<defNumberVector device='Mount Simulator' name='MOUNT_GUIDE_RATE' group='Mount' label='Guide rate' perm='rw' state='Ok'>
<defNumber name='RA' label='Guiding rate (% of sidereal)' format='%g' min='1' max='100' step='1' target='50'>50</defNumber>
<defNumber name='DEC' label='DEC Guiding rate (% of sidereal)' format='%g' min='1' max='100' step='1' target='50'>50</defNumber>
</defNumberVector>
<defSwitchVector device='Mount Simulator' name='MOUNT_ON_COORDINATES_SET' group='Mount' label='On coordinates set' perm='rw' state='Ok' rule='OneOfMany'>
<defSwitch name='TRACK' label='Slew to target and track'>On</defSwitch>
<defSwitch name='SYNC' label='Sync to target'>Off</defSwitch>
</defSwitchVector>
<defNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' group='Mount' label='Equatorial coordinates' perm='rw' state='Ok'>
<defNumber name='RA' label='Right ascension (0 to 24 hrs)' format='%12.9m' min='0' max='24' step='0' target='16.97615821'>16.97615821</defNumber>
<defNumber name='DEC' label='Declination (-90 to 90°)' format='%12.9m' min='-90' max='90' step='0' target='90'>90</defNumber>
</defNumberVector>
<defNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' group='Mount' label='Horizontal coordinates' perm='ro' state='Ok'>
<defNumber name='AZ' label='Azimuth (0 to 360°)' format='%12.9m' min='0' max='360' step='0'>359.9654362</defNumber>
<defNumber name='ALT' label='Altitude (0 to 90°)' format='%12.9m' min='0' max='90' step='0'>-0.1245785888</defNumber>
</defNumberVector>
<defSwitchVector device='Mount Simulator' name='MOUNT_ABORT_MOTION' group='Mount' label='Abort motion' perm='rw' state='Ok' rule='AtMostOne'>
<defSwitch name='ABORT_MOTION' label='Abort motion'>Off</defSwitch>
</defSwitchVector>
<defSwitchVector device='Mount Simulator' name='MOUNT_ALIGNMENT_MODE' group='Alignment' label='Alignment mode' perm='rw' state='Ok' rule='OneOfMany'>
<defSwitch name='SINGLE_POINT' label='Single point'>Off</defSwitch>
<defSwitch name='NEAREST_POINT' label='Nearest point'>Off</defSwitch>
<defSwitch name='MULTI_POINT' label='Multi point'>Off</defSwitch>
<defSwitch name='CONTROLLER' label='Mount controller'>On</defSwitch>
</defSwitchVector>
<defNumberVector device='Mount Simulator' name='MOUNT_EPOCH' group='Alignment' label='Current epoch' perm='ro' state='Ok'>
<defNumber name='EPOCH' label='Epoch (0, 1950-2050)' format='%g' min='0' max='2050' step='0'>2000</defNumber>
</defNumberVector>
<defTextVector device='Mount Simulator' name='SNOOP_DEVICES' group='Main' label='Snoop devices' perm='rw' state='Ok'>
<defText name='JOYSTICK' label='Joystick'></defText>
<defText name='GPS' label='GPS'></defText>
</defTextVector>
<setSwitchVector device='Mount Simulator' name='CONNECTION' state='Ok'>
<oneSwitch name='CONNECTED'>On</oneSwitch>
<oneSwitch name='DISCONNECTED'>Off</oneSwitch>
</setSwitchVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9654453</oneNumber>
<oneNumber name='ALT'>-0.1245811091</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.97643675</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.97615821'>16.97643675</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9654544</oneNumber>
<oneNumber name='ALT'>-0.1245836288</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.9767153</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.97615821'>16.9767153</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setSwitchVector device='Mount Simulator' name='CONNECTION' state='Busy'>
<oneSwitch name='CONNECTED'>Off</oneSwitch>
<oneSwitch name='DISCONNECTED'>On</oneSwitch>
</setSwitchVector>
<delProperty device='Mount Simulator' name='MOUNT_INFO'/>
<delProperty device='Mount Simulator' name='GEOGRAPHIC_COORDINATES'/>
<delProperty device='Mount Simulator' name='MOUNT_LST_TIME'/>
<delProperty device='Mount Simulator' name='MOUNT_PARK'/>
<delProperty device='Mount Simulator' name='MOUNT_PARK_SET'/>
<delProperty device='Mount Simulator' name='MOUNT_PARK_POSITION'/>
<delProperty device='Mount Simulator' name='MOUNT_HOME'/>
<delProperty device='Mount Simulator' name='MOUNT_HOME_SET'/>
<delProperty device='Mount Simulator' name='MOUNT_HOME_POSITION'/>
<delProperty device='Mount Simulator' name='MOUNT_SLEW_RATE'/>
<delProperty device='Mount Simulator' name='MOUNT_MOTION_DEC'/>
<delProperty device='Mount Simulator' name='MOUNT_MOTION_RA'/>
<delProperty device='Mount Simulator' name='MOUNT_TRACK_RATE'/>
<delProperty device='Mount Simulator' name='MOUNT_TRACKING'/>
<delProperty device='Mount Simulator' name='MOUNT_GUIDE_RATE'/>
<delProperty device='Mount Simulator' name='MOUNT_ON_COORDINATES_SET'/>
<delProperty device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES'/>
<delProperty device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES'/>
<delProperty device='Mount Simulator' name='MOUNT_ABORT_MOTION'/>
<delProperty device='Mount Simulator' name='MOUNT_ALIGNMENT_MODE'/>
<delProperty device='Mount Simulator' name='MOUNT_EPOCH'/>
<delProperty device='Mount Simulator' name='SNOOP_DEVICES'/>
<setSwitchVector device='Mount Simulator' name='CONNECTION' state='Ok'>
<oneSwitch name='CONNECTED'>Off</oneSwitch>
<oneSwitch name='DISCONNECTED'>On</oneSwitch>
</setSwitchVector>
<setSwitchVector device='Mount Simulator' name='CONNECTION' state='Busy'>
<oneSwitch name='CONNECTED'>On</oneSwitch>
<oneSwitch name='DISCONNECTED'>Off</oneSwitch>
</setSwitchVector>
<defTextVector device='Mount Simulator' name='MOUNT_INFO' group='Mount' label='Info' perm='ro' state='Ok'>
<defText name='VENDOR' label='Vendor'>Unknown</defText>
<defText name='MODEL' label='Model'>Unknown</defText>
<defText name='FIRMWARE_VERSION' label='Firmware'>N/A</defText>
</defTextVector>
<defNumberVector device='Mount Simulator' name='GEOGRAPHIC_COORDINATES' group='Site' label='Location' perm='rw' state='Ok'>
<defNumber name='LATITUDE' label='Latitude (-90 to +90° +N)' format='%12.9m' min='-90' max='90' step='0' target='0'>0</defNumber>
<defNumber name='LONGITUDE' label='Longitude (0 to 360° +E)' format='%12.9m' min='-180' max='360' step='0' target='0'>0</defNumber>
<defNumber name='ELEVATION' label='Elevation (m)' format='%g' min='-400' max='8000' step='0' target='0'>0</defNumber>
</defNumberVector>
<defNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' group='Site' label='LST Time' perm='ro' state='Ok'>
<defNumber name='TIME' label='LST Time' format='%12.9m' min='0' max='24' step='0'>22.9767153</defNumber>
</defNumberVector>
<defSwitchVector device='Mount Simulator' name='MOUNT_PARK' group='Mount' label='Park' perm='rw' state='Ok' rule='OneOfMany'>
<defSwitch name='PARKED' label='Mount parked'>On</defSwitch>
<defSwitch name='UNPARKED' label='Mount unparked'>Off</defSwitch>
</defSwitchVector>
<defSwitchVector device='Mount Simulator' name='MOUNT_PARK_SET' group='Mount' label='Set park position' perm='rw' state='Ok' rule='AtMostOne'>
<defSwitch name='CURRENT' label='Set current position'>Off</defSwitch>
<defSwitch name='DEFAULT' label='Set default position'>Off</defSwitch>
</defSwitchVector>
<defNumberVector device='Mount Simulator' name='MOUNT_PARK_POSITION' group='Mount' label='Park position' perm='rw' state='Ok'>
<defNumber name='HA' label='Hour Angle (-12 to 12 hrs)' format='%12.9m' min='-12' max='12' step='0' target='6'>6</defNumber>
<defNumber name='DEC' label='Declination (-90 to 90°)' format='%12.9m' min='-90' max='90' step='0' target='90'>90</defNumber>
</defNumberVector>
<defSwitchVector device='Mount Simulator' name='MOUNT_HOME' group='Mount' label='Home' perm='rw' state='Ok' rule='OneOfMany'>
<defSwitch name='HOME' label='Slew to home position and stop'>Off</defSwitch>
</defSwitchVector>
<defSwitchVector device='Mount Simulator' name='MOUNT_HOME_SET' group='Mount' label='Set home position' perm='rw' state='Ok' rule='AtMostOne'>
<defSwitch name='CURRENT' label='Set current position'>Off</defSwitch>
<defSwitch name='DEFAULT' label='Set default position'>Off</defSwitch>
</defSwitchVector>
<defNumberVector device='Mount Simulator' name='MOUNT_HOME_POSITION' group='Mount' label='Home position' perm='rw' state='Ok'>
<defNumber name='HA' label='Hour Angle (-12 to 12 hrs)' format='%12.9m' min='-12' max='12' step='0' target='6'>6</defNumber>
<defNumber name='DEC' label='Declination (-90 to 90°)' format='%12.9m' min='-90' max='90' step='0' target='90'>90</defNumber>
</defNumberVector>
<defSwitchVector device='Mount Simulator' name='MOUNT_SLEW_RATE' group='Mount' label='Slew rate' perm='rw' state='Ok' rule='OneOfMany'>
<defSwitch name='GUIDE' label='Guide rate'>On</defSwitch>
<defSwitch name='CENTERING' label='Centering rate'>Off</defSwitch>
<defSwitch name='FIND' label='Find rate'>Off</defSwitch>
<defSwitch name='MAX' label='Max rate'>Off</defSwitch>
</defSwitchVector>
<defSwitchVector device='Mount Simulator' name='MOUNT_MOTION_DEC' group='Mount' label='Move N/S' perm='rw' state='Ok' rule='AtMostOne'>
<defSwitch name='NORTH' label='North'>Off</defSwitch>
<defSwitch name='SOUTH' label='South'>Off</defSwitch>
</defSwitchVector>
<defSwitchVector device='Mount Simulator' name='MOUNT_MOTION_RA' group='Mount' label='Move W/E' perm='rw' state='Ok' rule='AtMostOne'>
<defSwitch name='WEST' label='West'>Off</defSwitch>
<defSwitch name='EAST' label='East'>Off</defSwitch>
</defSwitchVector>
<defSwitchVector device='Mount Simulator' name='MOUNT_TRACK_RATE' group='Mount' label='Track rate' perm='rw' state='Ok' rule='OneOfMany'>
<defSwitch name='SIDEREAL' label='Sidereal rate'>On</defSwitch>
<defSwitch name='SOLAR' label='Solar rate'>Off</defSwitch>
<defSwitch name='LUNAR' label='Lunar rate'>Off</defSwitch>
<defSwitch name='KING' label='King rate'>Off</defSwitch>
<defSwitch name='CUSTOM' label='Custom rate'>Off</defSwitch>
</defSwitchVector>
<defSwitchVector device='Mount Simulator' name='MOUNT_TRACKING' group='Mount' label='Tracking' perm='rw' state='Ok' rule='OneOfMany'>
<defSwitch name='ON' label='Tracking'>Off</defSwitch>
<defSwitch name='OFF' label='Stopped'>On</defSwitch>
</defSwitchVector>
<defNumberVector device='Mount Simulator' name='MOUNT_GUIDE_RATE' group='Mount' label='Guide rate' perm='rw' state='Ok'>
<defNumber name='RA' label='Guiding rate (% of sidereal)' format='%g' min='1' max='100' step='1' target='50'>50</defNumber>
<defNumber name='DEC' label='DEC Guiding rate (% of sidereal)' format='%g' min='1' max='100' step='1' target='50'>50</defNumber>
</defNumberVector>
<defSwitchVector device='Mount Simulator' name='MOUNT_ON_COORDINATES_SET' group='Mount' label='On coordinates set' perm='rw' state='Ok' rule='OneOfMany'>
<defSwitch name='TRACK' label='Slew to target and track'>On</defSwitch>
<defSwitch name='SYNC' label='Sync to target'>Off</defSwitch>
</defSwitchVector>
<defNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' group='Mount' label='Equatorial coordinates' perm='rw' state='Ok'>
<defNumber name='RA' label='Right ascension (0 to 24 hrs)' format='%12.9m' min='0' max='24' step='0' target='16.97727237'>16.97727237</defNumber>
<defNumber name='DEC' label='Declination (-90 to 90°)' format='%12.9m' min='-90' max='90' step='0' target='90'>90</defNumber>
</defNumberVector>
<defNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' group='Mount' label='Horizontal coordinates' perm='ro' state='Ok'>
<defNumber name='AZ' label='Azimuth (0 to 360°)' format='%12.9m' min='0' max='360' step='0'>359.9654726</defNumber>
<defNumber name='ALT' label='Altitude (0 to 90°)' format='%12.9m' min='0' max='90' step='0'>-0.124588666</defNumber>
</defNumberVector>
<defSwitchVector device='Mount Simulator' name='MOUNT_ABORT_MOTION' group='Mount' label='Abort motion' perm='rw' state='Ok' rule='AtMostOne'>
<defSwitch name='ABORT_MOTION' label='Abort motion'>Off</defSwitch>
</defSwitchVector>
<defSwitchVector device='Mount Simulator' name='MOUNT_ALIGNMENT_MODE' group='Alignment' label='Alignment mode' perm='rw' state='Ok' rule='OneOfMany'>
<defSwitch name='SINGLE_POINT' label='Single point'>Off</defSwitch>
<defSwitch name='NEAREST_POINT' label='Nearest point'>Off</defSwitch>
<defSwitch name='MULTI_POINT' label='Multi point'>Off</defSwitch>
<defSwitch name='CONTROLLER' label='Mount controller'>On</defSwitch>
</defSwitchVector>
<defNumberVector device='Mount Simulator' name='MOUNT_EPOCH' group='Alignment' label='Current epoch' perm='ro' state='Ok'>
<defNumber name='EPOCH' label='Epoch (0, 1950-2050)' format='%g' min='0' max='2050' step='0'>2000</defNumber>
</defNumberVector>
<defTextVector device='Mount Simulator' name='SNOOP_DEVICES' group='Main' label='Snoop devices' perm='rw' state='Ok'>
<defText name='JOYSTICK' label='Joystick'></defText>
<defText name='GPS' label='GPS'></defText>
</defTextVector>
<setSwitchVector device='Mount Simulator' name='CONNECTION' state='Ok'>
<oneSwitch name='CONNECTED'>On</oneSwitch>
<oneSwitch name='DISCONNECTED'>Off</oneSwitch>
</setSwitchVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9654817</oneNumber>
<oneNumber name='ALT'>-0.1245911836</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.97755091</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.97727237'>16.97755091</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setSwitchVector device='Mount Simulator' name='CONNECTION' state='Busy'>
<oneSwitch name='CONNECTED'>Off</oneSwitch>
<oneSwitch name='DISCONNECTED'>On</oneSwitch>
</setSwitchVector>
<delProperty device='Mount Simulator' name='MOUNT_INFO'/>
<delProperty device='Mount Simulator' name='GEOGRAPHIC_COORDINATES'/>
<delProperty device='Mount Simulator' name='MOUNT_LST_TIME'/>
<delProperty device='Mount Simulator' name='MOUNT_PARK'/>
<delProperty device='Mount Simulator' name='MOUNT_PARK_SET'/>
<delProperty device='Mount Simulator' name='MOUNT_PARK_POSITION'/>
<delProperty device='Mount Simulator' name='MOUNT_HOME'/>
<delProperty device='Mount Simulator' name='MOUNT_HOME_SET'/>
<delProperty device='Mount Simulator' name='MOUNT_HOME_POSITION'/>
<delProperty device='Mount Simulator' name='MOUNT_SLEW_RATE'/>
<delProperty device='Mount Simulator' name='MOUNT_MOTION_DEC'/>
<delProperty device='Mount Simulator' name='MOUNT_MOTION_RA'/>
<delProperty device='Mount Simulator' name='MOUNT_TRACK_RATE'/>
<delProperty device='Mount Simulator' name='MOUNT_TRACKING'/>
<delProperty device='Mount Simulator' name='MOUNT_GUIDE_RATE'/>
<delProperty device='Mount Simulator' name='MOUNT_ON_COORDINATES_SET'/>
<delProperty device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES'/>
<delProperty device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES'/>
<delProperty device='Mount Simulator' name='MOUNT_ABORT_MOTION'/>
<delProperty device='Mount Simulator' name='MOUNT_ALIGNMENT_MODE'/>
<delProperty device='Mount Simulator' name='MOUNT_EPOCH'/>
<delProperty device='Mount Simulator' name='SNOOP_DEVICES'/>
<setSwitchVector device='Mount Simulator' name='CONNECTION' state='Ok'>
<oneSwitch name='CONNECTED'>Off</oneSwitch>
<oneSwitch name='DISCONNECTED'>On</oneSwitch>
</setSwitchVector>
<setSwitchVector device='Mount Simulator' name='CONNECTION' state='Busy'>
<oneSwitch name='CONNECTED'>On</oneSwitch>
<oneSwitch name='DISCONNECTED'>Off</oneSwitch>
</setSwitchVector>
<defTextVector device='Mount Simulator' name='MOUNT_INFO' group='Mount' label='Info' perm='ro' state='Ok'>
<defText name='VENDOR' label='Vendor'>Unknown</defText>
<defText name='MODEL' label='Model'>Unknown</defText>
<defText name='FIRMWARE_VERSION' label='Firmware'>N/A</defText>
</defTextVector>
<defNumberVector device='Mount Simulator' name='GEOGRAPHIC_COORDINATES' group='Site' label='Location' perm='rw' state='Ok'>
<defNumber name='LATITUDE' label='Latitude (-90 to +90° +N)' format='%12.9m' min='-90' max='90' step='0' target='0'>0</defNumber>
<defNumber name='LONGITUDE' label='Longitude (0 to 360° +E)' format='%12.9m' min='-180' max='360' step='0' target='0'>0</defNumber>
<defNumber name='ELEVATION' label='Elevation (m)' format='%g' min='-400' max='8000' step='0' target='0'>0</defNumber>
</defNumberVector>
<defNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' group='Site' label='LST Time' perm='ro' state='Ok'>
<defNumber name='TIME' label='LST Time' format='%12.9m' min='0' max='24' step='0'>22.97755091</defNumber>
</defNumberVector>
<defSwitchVector device='Mount Simulator' name='MOUNT_PARK' group='Mount' label='Park' perm='rw' state='Ok' rule='OneOfMany'>
<defSwitch name='PARKED' label='Mount parked'>On</defSwitch>
<defSwitch name='UNPARKED' label='Mount unparked'>Off</defSwitch>
</defSwitchVector>
<defSwitchVector device='Mount Simulator' name='MOUNT_PARK_SET' group='Mount' label='Set park position' perm='rw' state='Ok' rule='AtMostOne'>
<defSwitch name='CURRENT' label='Set current position'>Off</defSwitch>
<defSwitch name='DEFAULT' label='Set default position'>Off</defSwitch>
</defSwitchVector>
<defNumberVector device='Mount Simulator' name='MOUNT_PARK_POSITION' group='Mount' label='Park position' perm='rw' state='Ok'>
<defNumber name='HA' label='Hour Angle (-12 to 12 hrs)' format='%12.9m' min='-12' max='12' step='0' target='6'>6</defNumber>
<defNumber name='DEC' label='Declination (-90 to 90°)' format='%12.9m' min='-90' max='90' step='0' target='90'>90</defNumber>
</defNumberVector>
<defSwitchVector device='Mount Simulator' name='MOUNT_HOME' group='Mount' label='Home' perm='rw' state='Ok' rule='OneOfMany'>
<defSwitch name='HOME' label='Slew to home position and stop'>Off</defSwitch>
</defSwitchVector>
<defSwitchVector device='Mount Simulator' name='MOUNT_HOME_SET' group='Mount' label='Set home position' perm='rw' state='Ok' rule='AtMostOne'>
<defSwitch name='CURRENT' label='Set current position'>Off</defSwitch>
<defSwitch name='DEFAULT' label='Set default position'>Off</defSwitch>
</defSwitchVector>
<defNumberVector device='Mount Simulator' name='MOUNT_HOME_POSITION' group='Mount' label='Home position' perm='rw' state='Ok'>
<defNumber name='HA' label='Hour Angle (-12 to 12 hrs)' format='%12.9m' min='-12' max='12' step='0' target='6'>6</defNumber>
<defNumber name='DEC' label='Declination (-90 to 90°)' format='%12.9m' min='-90' max='90' step='0' target='90'>90</defNumber>
</defNumberVector>
<defSwitchVector device='Mount Simulator' name='MOUNT_SLEW_RATE' group='Mount' label='Slew rate' perm='rw' state='Ok' rule='OneOfMany'>
<defSwitch name='GUIDE' label='Guide rate'>On</defSwitch>
<defSwitch name='CENTERING' label='Centering rate'>Off</defSwitch>
<defSwitch name='FIND' label='Find rate'>Off</defSwitch>
<defSwitch name='MAX' label='Max rate'>Off</defSwitch>
</defSwitchVector>
<defSwitchVector device='Mount Simulator' name='MOUNT_MOTION_DEC' group='Mount' label='Move N/S' perm='rw' state='Ok' rule='AtMostOne'>
<defSwitch name='NORTH' label='North'>Off</defSwitch>
<defSwitch name='SOUTH' label='South'>Off</defSwitch>
</defSwitchVector>
<defSwitchVector device='Mount Simulator' name='MOUNT_MOTION_RA' group='Mount' label='Move W/E' perm='rw' state='Ok' rule='AtMostOne'>
<defSwitch name='WEST' label='West'>Off</defSwitch>
<defSwitch name='EAST' label='East'>Off</defSwitch>
</defSwitchVector>
<defSwitchVector device='Mount Simulator' name='MOUNT_TRACK_RATE' group='Mount' label='Track rate' perm='rw' state='Ok' rule='OneOfMany'>
<defSwitch name='SIDEREAL' label='Sidereal rate'>On</defSwitch>
<defSwitch name='SOLAR' label='Solar rate'>Off</defSwitch>
<defSwitch name='LUNAR' label='Lunar rate'>Off</defSwitch>
<defSwitch name='KING' label='King rate'>Off</defSwitch>
<defSwitch name='CUSTOM' label='Custom rate'>Off</defSwitch>
</defSwitchVector>
<defSwitchVector device='Mount Simulator' name='MOUNT_TRACKING' group='Mount' label='Tracking' perm='rw' state='Ok' rule='OneOfMany'>
<defSwitch name='ON' label='Tracking'>Off</defSwitch>
<defSwitch name='OFF' label='Stopped'>On</defSwitch>
</defSwitchVector>
<defNumberVector device='Mount Simulator' name='MOUNT_GUIDE_RATE' group='Mount' label='Guide rate' perm='rw' state='Ok'>
<defNumber name='RA' label='Guiding rate (% of sidereal)' format='%g' min='1' max='100' step='1' target='50'>50</defNumber>
<defNumber name='DEC' label='DEC Guiding rate (% of sidereal)' format='%g' min='1' max='100' step='1' target='50'>50</defNumber>
</defNumberVector>
<defSwitchVector device='Mount Simulator' name='MOUNT_ON_COORDINATES_SET' group='Mount' label='On coordinates set' perm='rw' state='Ok' rule='OneOfMany'>
<defSwitch name='TRACK' label='Slew to target and track'>On</defSwitch>
<defSwitch name='SYNC' label='Sync to target'>Off</defSwitch>
</defSwitchVector>
<defNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' group='Mount' label='Equatorial coordinates' perm='rw' state='Ok'>
<defNumber name='RA' label='Right ascension (0 to 24 hrs)' format='%12.9m' min='0' max='24' step='0' target='16.97782944'>16.97782944</defNumber>
<defNumber name='DEC' label='Declination (-90 to 90°)' format='%12.9m' min='-90' max='90' step='0' target='90'>90</defNumber>
</defNumberVector>
<defNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' group='Mount' label='Horizontal coordinates' perm='ro' state='Ok'>
<defNumber name='AZ' label='Azimuth (0 to 360°)' format='%12.9m' min='0' max='360' step='0'>359.9654907</defNumber>
<defNumber name='ALT' label='Altitude (0 to 90°)' format='%12.9m' min='0' max='90' step='0'>-0.1245937005</defNumber>
</defNumberVector>
<defSwitchVector device='Mount Simulator' name='MOUNT_ABORT_MOTION' group='Mount' label='Abort motion' perm='rw' state='Ok' rule='AtMostOne'>
<defSwitch name='ABORT_MOTION' label='Abort motion'>Off</defSwitch>
</defSwitchVector>
<defSwitchVector device='Mount Simulator' name='MOUNT_ALIGNMENT_MODE' group='Alignment' label='Alignment mode' perm='rw' state='Ok' rule='OneOfMany'>
<defSwitch name='SINGLE_POINT' label='Single point'>Off</defSwitch>
<defSwitch name='NEAREST_POINT' label='Nearest point'>Off</defSwitch>
<defSwitch name='MULTI_POINT' label='Multi point'>Off</defSwitch>
<defSwitch name='CONTROLLER' label='Mount controller'>On</defSwitch>
</defSwitchVector>
<defNumberVector device='Mount Simulator' name='MOUNT_EPOCH' group='Alignment' label='Current epoch' perm='ro' state='Ok'>
<defNumber name='EPOCH' label='Epoch (0, 1950-2050)' format='%g' min='0' max='2050' step='0'>2000</defNumber>
</defNumberVector>
<defTextVector device='Mount Simulator' name='SNOOP_DEVICES' group='Main' label='Snoop devices' perm='rw' state='Ok'>
<defText name='JOYSTICK' label='Joystick'></defText>
<defText name='GPS' label='GPS'></defText>
</defTextVector>
<setSwitchVector device='Mount Simulator' name='CONNECTION' state='Ok'>
<oneSwitch name='CONNECTED'>On</oneSwitch>
<oneSwitch name='DISCONNECTED'>Off</oneSwitch>
</setSwitchVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9654998</oneNumber>
<oneNumber name='ALT'>-0.1245962168</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.97810798</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.97782944'>16.97810798</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9655089</oneNumber>
<oneNumber name='ALT'>-0.1245987324</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.97838652</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.97782944'>16.97838652</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.965518</oneNumber>
<oneNumber name='ALT'>-0.1246012474</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.97866505</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.97782944'>16.97866505</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9655271</oneNumber>
<oneNumber name='ALT'>-0.1246037617</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.9789436</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.97782944'>16.9789436</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9655362</oneNumber>
<oneNumber name='ALT'>-0.1246062754</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.97922214</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.97782944'>16.97922214</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9655453</oneNumber>
<oneNumber name='ALT'>-0.1246087883</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.97950067</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.97782944'>16.97950067</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9655543</oneNumber>
<oneNumber name='ALT'>-0.1246113006</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.97977921</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.97782944'>16.97977921</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9655634</oneNumber>
<oneNumber name='ALT'>-0.1246138123</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.98005775</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.97782944'>16.98005775</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9655725</oneNumber>
<oneNumber name='ALT'>-0.1246163233</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.98033629</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.97782944'>16.98033629</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9655816</oneNumber>
<oneNumber name='ALT'>-0.1246188336</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.98061482</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.97782944'>16.98061482</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9655907</oneNumber>
<oneNumber name='ALT'>-0.1246213433</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.98089337</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.97782944'>16.98089337</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9655998</oneNumber>
<oneNumber name='ALT'>-0.1246238523</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.98117191</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.97782944'>16.98117191</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9656089</oneNumber>
<oneNumber name='ALT'>-0.1246263607</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.98145044</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.97782944'>16.98145044</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.965618</oneNumber>
<oneNumber name='ALT'>-0.1246288683</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.98172898</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.97782944'>16.98172898</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.965627</oneNumber>
<oneNumber name='ALT'>-0.1246313753</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.98200752</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.97782944'>16.98200752</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9656361</oneNumber>
<oneNumber name='ALT'>-0.1246338817</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.98228605</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.97782944'>16.98228605</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9656452</oneNumber>
<oneNumber name='ALT'>-0.1246363873</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.98256459</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.97782944'>16.98256459</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9656543</oneNumber>
<oneNumber name='ALT'>-0.1246388924</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.98284313</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.97782944'>16.98284313</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9656634</oneNumber>
<oneNumber name='ALT'>-0.1246413968</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.98312168</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.97782944'>16.98312168</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9656725</oneNumber>
<oneNumber name='ALT'>-0.1246439005</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.98340021</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.97782944'>16.98340021</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9656816</oneNumber>
<oneNumber name='ALT'>-0.1246464035</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.98367875</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.97782944'>16.98367875</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9656907</oneNumber>
<oneNumber name='ALT'>-0.1246489059</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.98395729</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.97782944'>16.98395729</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9656998</oneNumber>
<oneNumber name='ALT'>-0.1246514076</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.98423582</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.97782944'>16.98423582</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9657088</oneNumber>
<oneNumber name='ALT'>-0.1246539086</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.98451436</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.97782944'>16.98451436</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9657179</oneNumber>
<oneNumber name='ALT'>-0.124656409</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.9847929</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.97782944'>16.9847929</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.965727</oneNumber>
<oneNumber name='ALT'>-0.1246589088</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.98507144</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.97782944'>16.98507144</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9657361</oneNumber>
<oneNumber name='ALT'>-0.1246614079</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.98534998</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.97782944'>16.98534998</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9657452</oneNumber>
<oneNumber name='ALT'>-0.1246639063</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.98562852</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.97782944'>16.98562852</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9657543</oneNumber>
<oneNumber name='ALT'>-0.124666404</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.98590705</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.97782944'>16.98590705</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9657634</oneNumber>
<oneNumber name='ALT'>-0.124668901</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.98618559</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.97782944'>16.98618559</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9657725</oneNumber>
<oneNumber name='ALT'>-0.1246713974</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.98646413</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.97782944'>16.98646413</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9657816</oneNumber>
<oneNumber name='ALT'>-0.1246738932</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.98674266</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.97782944'>16.98674266</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9657907</oneNumber>
<oneNumber name='ALT'>-0.1246763882</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.9870212</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.97782944'>16.9870212</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9657998</oneNumber>
<oneNumber name='ALT'>-0.1246788828</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.98729975</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.97782944'>16.98729975</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9658088</oneNumber>
<oneNumber name='ALT'>-0.1246813765</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.98757829</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.97782944'>16.98757829</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9658179</oneNumber>
<oneNumber name='ALT'>-0.1246838696</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.98785682</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.97782944'>16.98785682</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.965827</oneNumber>
<oneNumber name='ALT'>-0.124686362</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.98813536</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.97782944'>16.98813536</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9658361</oneNumber>
<oneNumber name='ALT'>-0.1246888538</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.9884139</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.97782944'>16.9884139</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9658452</oneNumber>
<oneNumber name='ALT'>-0.1246913449</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.98869243</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.97782944'>16.98869243</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9658543</oneNumber>
<oneNumber name='ALT'>-0.1246938353</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.98897097</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.97782944'>16.98897097</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9658634</oneNumber>
<oneNumber name='ALT'>-0.1246963252</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.98924952</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.97782944'>16.98924952</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9658725</oneNumber>
<oneNumber name='ALT'>-0.1246988143</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.98952806</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.97782944'>16.98952806</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9658816</oneNumber>
<oneNumber name='ALT'>-0.1247013027</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.98980659</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.97782944'>16.98980659</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9658907</oneNumber>
<oneNumber name='ALT'>-0.1247037905</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.99008513</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.97782944'>16.99008513</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setSwitchVector device='Mount Simulator' name='CONNECTION' state='Busy'>
<oneSwitch name='CONNECTED'>Off</oneSwitch>
<oneSwitch name='DISCONNECTED'>On</oneSwitch>
</setSwitchVector>
<delProperty device='Mount Simulator' name='MOUNT_INFO'/>
<delProperty device='Mount Simulator' name='GEOGRAPHIC_COORDINATES'/>
<delProperty device='Mount Simulator' name='MOUNT_LST_TIME'/>
<delProperty device='Mount Simulator' name='MOUNT_PARK'/>
<delProperty device='Mount Simulator' name='MOUNT_PARK_SET'/>
<delProperty device='Mount Simulator' name='MOUNT_PARK_POSITION'/>
<delProperty device='Mount Simulator' name='MOUNT_HOME'/>
<delProperty device='Mount Simulator' name='MOUNT_HOME_SET'/>
<delProperty device='Mount Simulator' name='MOUNT_HOME_POSITION'/>
<delProperty device='Mount Simulator' name='MOUNT_SLEW_RATE'/>
<delProperty device='Mount Simulator' name='MOUNT_MOTION_DEC'/>
<delProperty device='Mount Simulator' name='MOUNT_MOTION_RA'/>
<delProperty device='Mount Simulator' name='MOUNT_TRACK_RATE'/>
<delProperty device='Mount Simulator' name='MOUNT_TRACKING'/>
<delProperty device='Mount Simulator' name='MOUNT_GUIDE_RATE'/>
<delProperty device='Mount Simulator' name='MOUNT_ON_COORDINATES_SET'/>
<delProperty device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES'/>
<delProperty device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES'/>
<delProperty device='Mount Simulator' name='MOUNT_ABORT_MOTION'/>
<delProperty device='Mount Simulator' name='MOUNT_ALIGNMENT_MODE'/>
<delProperty device='Mount Simulator' name='MOUNT_EPOCH'/>
<delProperty device='Mount Simulator' name='SNOOP_DEVICES'/>
<setSwitchVector device='Mount Simulator' name='CONNECTION' state='Ok'>
<oneSwitch name='CONNECTED'>Off</oneSwitch>
<oneSwitch name='DISCONNECTED'>On</oneSwitch>
</setSwitchVector>
<setSwitchVector device='Mount Simulator' name='CONNECTION' state='Busy'>
<oneSwitch name='CONNECTED'>On</oneSwitch>
<oneSwitch name='DISCONNECTED'>Off</oneSwitch>
</setSwitchVector>
<defTextVector device='Mount Simulator' name='MOUNT_INFO' group='Mount' label='Info' perm='ro' state='Ok'>
<defText name='VENDOR' label='Vendor'>Unknown</defText>
<defText name='MODEL' label='Model'>Unknown</defText>
<defText name='FIRMWARE_VERSION' label='Firmware'>N/A</defText>
</defTextVector>
<defNumberVector device='Mount Simulator' name='GEOGRAPHIC_COORDINATES' group='Site' label='Location' perm='rw' state='Ok'>
<defNumber name='LATITUDE' label='Latitude (-90 to +90° +N)' format='%12.9m' min='-90' max='90' step='0' target='0'>0</defNumber>
<defNumber name='LONGITUDE' label='Longitude (0 to 360° +E)' format='%12.9m' min='-180' max='360' step='0' target='0'>0</defNumber>
<defNumber name='ELEVATION' label='Elevation (m)' format='%g' min='-400' max='8000' step='0' target='0'>0</defNumber>
</defNumberVector>
<defNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' group='Site' label='LST Time' perm='ro' state='Ok'>
<defNumber name='TIME' label='LST Time' format='%12.9m' min='0' max='24' step='0'>22.99008513</defNumber>
</defNumberVector>
<defSwitchVector device='Mount Simulator' name='MOUNT_PARK' group='Mount' label='Park' perm='rw' state='Ok' rule='OneOfMany'>
<defSwitch name='PARKED' label='Mount parked'>On</defSwitch>
<defSwitch name='UNPARKED' label='Mount unparked'>Off</defSwitch>
</defSwitchVector>
<defSwitchVector device='Mount Simulator' name='MOUNT_PARK_SET' group='Mount' label='Set park position' perm='rw' state='Ok' rule='AtMostOne'>
<defSwitch name='CURRENT' label='Set current position'>Off</defSwitch>
<defSwitch name='DEFAULT' label='Set default position'>Off</defSwitch>
</defSwitchVector>
<defNumberVector device='Mount Simulator' name='MOUNT_PARK_POSITION' group='Mount' label='Park position' perm='rw' state='Ok'>
<defNumber name='HA' label='Hour Angle (-12 to 12 hrs)' format='%12.9m' min='-12' max='12' step='0' target='6'>6</defNumber>
<defNumber name='DEC' label='Declination (-90 to 90°)' format='%12.9m' min='-90' max='90' step='0' target='90'>90</defNumber>
</defNumberVector>
<defSwitchVector device='Mount Simulator' name='MOUNT_HOME' group='Mount' label='Home' perm='rw' state='Ok' rule='OneOfMany'>
<defSwitch name='HOME' label='Slew to home position and stop'>Off</defSwitch>
</defSwitchVector>
<defSwitchVector device='Mount Simulator' name='MOUNT_HOME_SET' group='Mount' label='Set home position' perm='rw' state='Ok' rule='AtMostOne'>
<defSwitch name='CURRENT' label='Set current position'>Off</defSwitch>
<defSwitch name='DEFAULT' label='Set default position'>Off</defSwitch>
</defSwitchVector>
<defNumberVector device='Mount Simulator' name='MOUNT_HOME_POSITION' group='Mount' label='Home position' perm='rw' state='Ok'>
<defNumber name='HA' label='Hour Angle (-12 to 12 hrs)' format='%12.9m' min='-12' max='12' step='0' target='6'>6</defNumber>
<defNumber name='DEC' label='Declination (-90 to 90°)' format='%12.9m' min='-90' max='90' step='0' target='90'>90</defNumber>
</defNumberVector>
<defSwitchVector device='Mount Simulator' name='MOUNT_SLEW_RATE' group='Mount' label='Slew rate' perm='rw' state='Ok' rule='OneOfMany'>
<defSwitch name='GUIDE' label='Guide rate'>On</defSwitch>
<defSwitch name='CENTERING' label='Centering rate'>Off</defSwitch>
<defSwitch name='FIND' label='Find rate'>Off</defSwitch>
<defSwitch name='MAX' label='Max rate'>Off</defSwitch>
</defSwitchVector>
<defSwitchVector device='Mount Simulator' name='MOUNT_MOTION_DEC' group='Mount' label='Move N/S' perm='rw' state='Ok' rule='AtMostOne'>
<defSwitch name='NORTH' label='North'>Off</defSwitch>
<defSwitch name='SOUTH' label='South'>Off</defSwitch>
</defSwitchVector>
<defSwitchVector device='Mount Simulator' name='MOUNT_MOTION_RA' group='Mount' label='Move W/E' perm='rw' state='Ok' rule='AtMostOne'>
<defSwitch name='WEST' label='West'>Off</defSwitch>
<defSwitch name='EAST' label='East'>Off</defSwitch>
</defSwitchVector>
<defSwitchVector device='Mount Simulator' name='MOUNT_TRACK_RATE' group='Mount' label='Track rate' perm='rw' state='Ok' rule='OneOfMany'>
<defSwitch name='SIDEREAL' label='Sidereal rate'>On</defSwitch>
<defSwitch name='SOLAR' label='Solar rate'>Off</defSwitch>
<defSwitch name='LUNAR' label='Lunar rate'>Off</defSwitch>
<defSwitch name='KING' label='King rate'>Off</defSwitch>
<defSwitch name='CUSTOM' label='Custom rate'>Off</defSwitch>
</defSwitchVector>
<defSwitchVector device='Mount Simulator' name='MOUNT_TRACKING' group='Mount' label='Tracking' perm='rw' state='Ok' rule='OneOfMany'>
<defSwitch name='ON' label='Tracking'>Off</defSwitch>
<defSwitch name='OFF' label='Stopped'>On</defSwitch>
</defSwitchVector>
<defNumberVector device='Mount Simulator' name='MOUNT_GUIDE_RATE' group='Mount' label='Guide rate' perm='rw' state='Ok'>
<defNumber name='RA' label='Guiding rate (% of sidereal)' format='%g' min='1' max='100' step='1' target='50'>50</defNumber>
<defNumber name='DEC' label='DEC Guiding rate (% of sidereal)' format='%g' min='1' max='100' step='1' target='50'>50</defNumber>
</defNumberVector>
<defSwitchVector device='Mount Simulator' name='MOUNT_ON_COORDINATES_SET' group='Mount' label='On coordinates set' perm='rw' state='Ok' rule='OneOfMany'>
<defSwitch name='TRACK' label='Slew to target and track'>On</defSwitch>
<defSwitch name='SYNC' label='Sync to target'>Off</defSwitch>
</defSwitchVector>
<defNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' group='Mount' label='Equatorial coordinates' perm='rw' state='Ok'>
<defNumber name='RA' label='Right ascension (0 to 24 hrs)' format='%12.9m' min='0' max='24' step='0' target='16.99119929'>16.99119929</defNumber>
<defNumber name='DEC' label='Declination (-90 to 90°)' format='%12.9m' min='-90' max='90' step='0' target='90'>90</defNumber>
</defNumberVector>
<defNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' group='Mount' label='Horizontal coordinates' perm='ro' state='Ok'>
<defNumber name='AZ' label='Azimuth (0 to 360°)' format='%12.9m' min='0' max='360' step='0'>359.9659271</defNumber>
<defNumber name='ALT' label='Altitude (0 to 90°)' format='%12.9m' min='0' max='90' step='0'>-0.1247137351</defNumber>
</defNumberVector>
<defSwitchVector device='Mount Simulator' name='MOUNT_ABORT_MOTION' group='Mount' label='Abort motion' perm='rw' state='Ok' rule='AtMostOne'>
<defSwitch name='ABORT_MOTION' label='Abort motion'>Off</defSwitch>
</defSwitchVector>
<defSwitchVector device='Mount Simulator' name='MOUNT_ALIGNMENT_MODE' group='Alignment' label='Alignment mode' perm='rw' state='Ok' rule='OneOfMany'>
<defSwitch name='SINGLE_POINT' label='Single point'>Off</defSwitch>
<defSwitch name='NEAREST_POINT' label='Nearest point'>Off</defSwitch>
<defSwitch name='MULTI_POINT' label='Multi point'>Off</defSwitch>
<defSwitch name='CONTROLLER' label='Mount controller'>On</defSwitch>
</defSwitchVector>
<defNumberVector device='Mount Simulator' name='MOUNT_EPOCH' group='Alignment' label='Current epoch' perm='ro' state='Ok'>
<defNumber name='EPOCH' label='Epoch (0, 1950-2050)' format='%g' min='0' max='2050' step='0'>2000</defNumber>
</defNumberVector>
<defTextVector device='Mount Simulator' name='SNOOP_DEVICES' group='Main' label='Snoop devices' perm='rw' state='Ok'>
<defText name='JOYSTICK' label='Joystick'></defText>
<defText name='GPS' label='GPS'></defText>
</defTextVector>
<setSwitchVector device='Mount Simulator' name='CONNECTION' state='Ok'>
<oneSwitch name='CONNECTED'>On</oneSwitch>
<oneSwitch name='DISCONNECTED'>Off</oneSwitch>
</setSwitchVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9659362</oneNumber>
<oneNumber name='ALT'>-0.1247162195</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.99147782</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.99119929'>16.99147782</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9659452</oneNumber>
<oneNumber name='ALT'>-0.1247187033</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.99175636</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.99119929'>16.99175636</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9659543</oneNumber>
<oneNumber name='ALT'>-0.1247211865</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.9920349</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.99119929'>16.9920349</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9659634</oneNumber>
<oneNumber name='ALT'>-0.1247236689</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.99231343</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.99119929'>16.99231343</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9659725</oneNumber>
<oneNumber name='ALT'>-0.1247261507</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.99259197</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.99119929'>16.99259197</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9659816</oneNumber>
<oneNumber name='ALT'>-0.1247286319</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.99287051</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.99119929'>16.99287051</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9659907</oneNumber>
<oneNumber name='ALT'>-0.1247311124</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.99314904</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.99119929'>16.99314904</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9659998</oneNumber>
<oneNumber name='ALT'>-0.1247335923</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.99342759</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.99119929'>16.99342759</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9660089</oneNumber>
<oneNumber name='ALT'>-0.1247360715</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.99370613</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.99119929'>16.99370613</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.966018</oneNumber>
<oneNumber name='ALT'>-0.1247385499</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.99398467</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.99119929'>16.99398467</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9660271</oneNumber>
<oneNumber name='ALT'>-0.1247410278</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.9942632</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.99119929'>16.9942632</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9660362</oneNumber>
<oneNumber name='ALT'>-0.124743505</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.99454174</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.99119929'>16.99454174</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9660453</oneNumber>
<oneNumber name='ALT'>-0.1247459815</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.99482028</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.99119929'>16.99482028</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9660544</oneNumber>
<oneNumber name='ALT'>-0.1247484573</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.99509881</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.99119929'>16.99509881</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9660635</oneNumber>
<oneNumber name='ALT'>-0.1247509326</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.99537736</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.99119929'>16.99537736</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9660726</oneNumber>
<oneNumber name='ALT'>-0.1247534071</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.9956559</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.99119929'>16.9956559</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9660817</oneNumber>
<oneNumber name='ALT'>-0.1247558809</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.99593444</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.99119929'>16.99593444</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9660908</oneNumber>
<oneNumber name='ALT'>-0.1247583541</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.99621297</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.99119929'>16.99621297</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9660999</oneNumber>
<oneNumber name='ALT'>-0.1247608266</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.99649151</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.99119929'>16.99649151</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.966109</oneNumber>
<oneNumber name='ALT'>-0.1247632985</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.99677005</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.99119929'>16.99677005</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9661181</oneNumber>
<oneNumber name='ALT'>-0.1247657697</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.99704858</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.99119929'>16.99704858</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9661272</oneNumber>
<oneNumber name='ALT'>-0.1247682402</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.99732712</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.99119929'>16.99732712</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9661363</oneNumber>
<oneNumber name='ALT'>-0.1247707102</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.99760567</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.99119929'>16.99760567</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9661454</oneNumber>
<oneNumber name='ALT'>-0.1247731794</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.9978842</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.99119929'>16.9978842</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9661545</oneNumber>
<oneNumber name='ALT'>-0.124775648</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.99816274</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.99119929'>16.99816274</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9661636</oneNumber>
<oneNumber name='ALT'>-0.1247781158</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.99844128</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.99119929'>16.99844128</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9661727</oneNumber>
<oneNumber name='ALT'>-0.1247805831</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.99871981</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.99119929'>16.99871981</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9661818</oneNumber>
<oneNumber name='ALT'>-0.1247830496</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.99899835</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.99119929'>16.99899835</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9661909</oneNumber>
<oneNumber name='ALT'>-0.1247855155</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.99927689</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.99119929'>16.99927689</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9662</oneNumber>
<oneNumber name='ALT'>-0.1247879808</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.99955544</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.99119929'>16.99955544</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9662091</oneNumber>
<oneNumber name='ALT'>-0.1247904454</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>22.99983397</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.99119929'>16.99983397</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9662182</oneNumber>
<oneNumber name='ALT'>-0.1247929093</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>23.00011251</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.99119929'>17.00011251</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9662273</oneNumber>
<oneNumber name='ALT'>-0.1247953725</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>23.00039105</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.99119929'>17.00039105</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9662364</oneNumber>
<oneNumber name='ALT'>-0.1247978351</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>23.00066958</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.99119929'>17.00066958</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9662455</oneNumber>
<oneNumber name='ALT'>-0.124800297</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>23.00094812</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.99119929'>17.00094812</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_HORIZONTAL_COORDINATES' state='Ok'>
<oneNumber name='AZ'>359.9662546</oneNumber>
<oneNumber name='ALT'>-0.1248027582</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_LST_TIME' state='Ok'>
<oneNumber name='TIME'>23.00122666</oneNumber>
</setNumberVector>
<setNumberVector device='Mount Simulator' name='MOUNT_EQUATORIAL_COORDINATES' state='Ok'>
<oneNumber name='RA' target='16.99119929'>17.00122666</oneNumber>
<oneNumber name='DEC' target='90'>90</oneNumber>
</setNumberVector>

Lo recibido son todas las propiedades que tiene definidas ese driver en ese momento. En este punto es interesante revisar dichas propiedades y compararlas con la información que nos enseña KStars:

_images/INDI_kstars_01.jpg

Casi todos los dispositivos INDI tienen una propiedad llamada CONNECTION que hay que activar para que el dispositivo funcione correctamente. Vamos a pedirle al driver que encienda el enfocador:

[ ]:
mandar(s, f'<newSwitchVector device="{nombreEnfocador}" name="CONNECTION"><oneSwitch name="CONNECT">On</oneSwitch></newSwitchVector>')
b'<newSwitchVector device="Mount Simulator" name="CONNECTION"><oneSwitch name="CONNECTED">On</oneSwitch></newSwitchVector>'
[ ]:
recv = recibir(s, 1)

Tras conectarse hemos recibido la confirmación de que se ha conectado (la propiedad CONNECTION tiene su campo CONNECT a ON (antes estaba a OFF) junto con otras muchas propiedades que tenemos disponibles:

_images/INDI_kstars_02.jpg

Para finalizar este ejemplo vamos a pedirle al enfocador que vaya a la posición absoluta 2000 (la inicial es 50000):

[ ]:
mandar(s, f'<newNumberVector device="{nombreEnfocador}" name="ABS_FOCUS_POSITION"><oneNumber name="FOCUS_ABSOLUTE_POSITION">100000</oneNumber></newNumberVector>')

Recibimos los mensajes (dejamos 5 prudentes segundos para asegurarnos que el enfocador ha tenido tiempo de llegar a la posición deseada):

[ ]:
recv = recibir(s, 5)

Efectivamente hemos recibido (además de otra información) una nueva posición absoluta de 100000. Podemos comprobar que en KStars también se refleja dicho cambio:

_images/INDI_kstars_03.jpg

Por último cerraremos el socket para desconectarnos del servidor INDI:

[ ]:
s.close()

Controlando una CCD simulada y una montura (también simulada)

Vamos a hacer otro ejemplo para capturar una imagen (FITS) de una cámara virtual simulada. El simulador puede mostrar estrellas «realistas» si instalamos el GSC (General Star Catalog). En Linux:

> sudo apt install gsc

Para ello lanzaremos el servidor INDI con el driver indi_simulator_ccd y el driver indi_simulator_telescope:

> indiserver indi_simulator_ccd indi_simulator_telescope
[ ]:
import socket
from pprint import pprint
import time
from datetime import datetime
import regex as re

Conectamos al servidor INDI:

[ ]:
s = None

conectar("127.0.0.1", 7624)

nombreCamara = "CCD Simulator"
nombreMontura = "Telescope Simulator"
[ ]:
# mandar(s, '<getProperties version="1.7" />')
[ ]:
# recv = recibir(s, 1)

Conectamos la cámara y la montura:

[ ]:
mandar(s, f'<newSwitchVector device="{nombreCamara}" name="CONNECTION"><oneSwitch name="CONNECT">On</oneSwitch></newSwitchVector>')

mandar(s, f'<newSwitchVector device="{nombreMontura}" name="CONNECTION"><oneSwitch name="CONNECT">On</oneSwitch></newSwitchVector>')
[ ]:
# recv = recibir(s, 1)

Activamos la recepción de BLOBs (objetos binarios, en este caso y casi siempre imágenes FITS:

[ ]:
mandar(s, f'<enableBLOB device="{nombreCamara}">Only</enableBLOB>"')
[ ]:
# recv = recibir(s, 1)

Movemos la montura a Sirio:

[ ]:
mandar(s, f'<newNumberVector device="{nombreMontura}" name="EQUATORIAL_EOD_COORD"><oneNumber name="RA">6.7685230037972683448</oneNumber><oneNumber name="DEC">-16.746465419192418267</oneNumber></newNumberVector>')
[ ]:
# recv = recibir(s, 1)

Tomamos una exposición de 2 segundos y esperamos a que mande los resultados. Cuidado si imprimimos que son varios megas y Jupyter-Lab se puede quejar:

[ ]:
mandar(s, f'<newNumberVector device="{nombreCamara}" name="CCD_EXPOSURE"><oneNumber name="CCD_EXPOSURE_VALUE">2.0</oneNumber></newNumberVector>')
recv = recibir(s, 3, imprimir=False)

#print(recv[0:1000])
#print(recv[-1000:])

Buscamos exactamente los datos de la imagen que vienen codificados como una cadena en BASE64 dentro de un elemento <oneBLOB> ... </oneBLOB>:

[ ]:
datosBLOB = re.search(r'.*<oneBLOB(.*)>(.*)</oneBLOB>.*', recv, flags=re.DOTALL).group(2)

#print(datosBLOB[0:1000])
#print(len(datosBLOB))
#print(datosBLOB[-10000:])

Decodificamos los datos a binario y guardamos la imagen (directamente los datos binarios son los datos del fichero FITS):

[ ]:
import base64

message_bytes = base64.b64decode(datosBLOB)

f = open("salidas/capturaINDI.fit", "wb")

f.write(message_bytes)

f.close()

Cerramos el socket:

[ ]:
s.close()

Mostramos la imagen:

[ ]:
%matplotlib widget

import matplotlib.pyplot as plt
import numpy as np
from astropy.io import fits
import matplotlib.colors as colors

hdul = fits.open("salidas/capturaINDI.fit")
data = hdul[0].data
fig = plt.figure("matrix", figsize=[10, 7])

image = plt.imshow(data, norm=colors.PowerNorm(gamma=.1, vmin=np.min(data), vmax=np.max(data)/20), origin='lower')
plt.colorbar(label='Counts')

Capturando imágenes de una cámara real: ZWO ASI174MM-Cool

Con casi el mismo código anterior (obviando el tema de la montura) podemos disparar una cámara real. Vamos a lanzar el servidor de INDI con el driver correspondiente:

> indiserver indi_asi_ccd
[ ]:
import socket
from pprint import pprint
import time
from datetime import datetime
import regex as re

s = None

conectar("127.0.0.1", 7624)

nombreCamara = "ZWO CCD ASI174MM-Cool"

mandar(s, f'<newSwitchVector device="{nombreCamara}" name="CONNECTION"><oneSwitch name="CONNECT">On</oneSwitch></newSwitchVector>')

mandar(s, f'<enableBLOB device="{nombreCamara}">Only</enableBLOB>"')

mandar(s, f'<newNumberVector device="{nombreCamara}" name="CCD_EXPOSURE"><oneNumber name="CCD_EXPOSURE_VALUE">2.0</oneNumber></newNumberVector>')

recv = recibir(s, 4, imprimir=False)

datosBLOB = re.search(r'.*<oneBLOB(.*)>(.*)</oneBLOB>.*', recv, flags=re.DOTALL).group(2)

import base64

message_bytes = base64.b64decode(datosBLOB)

f = open("salidas/capturaINDI_ZWO.fit", "wb")

f.write(message_bytes)

f.close()