47 lines
1.5 KiB
Python
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)]
|