"""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: ":" "#" z.B. :GR# Antwort: "#" 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 ":#" 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)]