Files
grossanzeige/lx200.py
T
2026-07-16 09:05:56 +02:00

47 lines
1.5 KiB
Python

"""LX200-Protokoll fuer die 10Micron GM4000 HPS II.
Nur das Rahmen der Kommandos und Entpacken der Antworten. Das Parsen der
Koordinatenwerte macht coords.py (dessen Parser ist bewusst tolerant gegenueber
den verschiedenen LX200-Trennzeichen ':', '*', 0xDF, "'").
Reines Python, laeuft auch unter MicroPython.
Kommando: ":" <Befehl> "#" z.B. :GR#
Antwort: <Zeichen...> "#" z.B. 18:36:56# (Get-Kommandos)
bzw. ein einzelnes Zeichen ohne "#" bei Steuerkommandos (hier ungenutzt)
"""
TERMINATOR = "#"
# Abfragekommandos (Get) -- liefern eine mit "#" abgeschlossene Antwort.
GET_RA = ":GR#" # Rektaszension des Teleskops
GET_DEC = ":GD#" # Deklination des Teleskops
GET_PRODUCT = ":GVP#" # Produktname, z.B. "10micron GM4000HPS"
GET_FIRMWARE = ":GVN#" # Firmware-Version
class LX200Error(Exception):
"""Fehler im LX200-Protokoll."""
def command(cmd):
"""Einen Befehl in die Rahmenform ":<cmd>#" bringen.
Nimmt sowohl "GR" als auch bereits gerahmte ":GR#" entgegen.
"""
cmd = cmd.strip()
if cmd.startswith(":"):
cmd = cmd[1:]
if cmd.endswith(TERMINATOR):
cmd = cmd[:-1]
if not cmd:
raise LX200Error("leeres Kommando")
return ":" + cmd + TERMINATOR
def strip_terminator(response):
"""Das abschliessende "#" entfernen und Rest liefern."""
if not response.endswith(TERMINATOR):
raise LX200Error("Antwort ohne Abschluss '#': %r" % (response,))
return response[:-len(TERMINATOR)]