# KStars fernsteuern: Die DCOP-Schnittstelle

Eines der Ziele von &kstars; ist es, schwierigere Verhaltensweisen mit Skripten erneut aufzurufen. Dies erlaubt Ihnen, virtuelle Führungen des Himmels durchzuführen und erlaubt es Lehrern, Klassenszimmervorführungen zu erstellen, die bestimmte astronomische Konzepte darstellen. Es ist schon möglich, solche Skripte für &kstars; zu schreiben, obwohl noch nicht alle Funktionen beinhaltet sind. Vielleicht wird es bald einen oberflächenbasierten Skriptbaukasten geben, zur Zeit müssen die Skripte jedoch per Hand geschrieben werden. Dieses Kapitel beschreibt, wie Sie &kstars;-Skripte schreiben können.

Die &kde;-Architektur biete das nötige Grundgerüst für Skriptanwendungen über die Schnittstelle namens DCOP. DCOP steht für Desktop Communication Protocol; durch DCOP können &kde;-Anwendungen von anderen Anwendungen, einer Kommandozeile oder durch ein Textskript gesteuert werden.

## DCOP-Funktionen

Die &kstars; DCOP-Schnittstelle enthält folgende Funktionen:

- `lookTowards( const QString richtung )`: Richtet die Anzeigenmitte auf die Richtung aus, die durch das Argument angegeben wird. Das kann der Name jedes Objektes im Himmel sein oder einer der folgenden direktionalen Begriffe oder Abkürzungen: "zenith" (Zenit) (oder "z"), "north" (Nord) (oder "n"), "northeast" (Nordost) (oder "ne"), "east" (Osten) (oder ("e"), "southeast" (Südosten) (oder "se"), "south" (Süden) (oder "s"), "southwest" (Südwest) (oder "sw"), "west" (Westen) (oder "w") oder "northwest" (Nordwest) (oder "nw").

- `setRaDec( double ra, double neig )`: Fokussiert die Anzeige auf die angegebenen äquatorialen Koordinaten.

- `setAltAz(double hoehe, double abw)`: Fokussiert die Anzeige auf die angegebenen waagerechten Koordinaten.

- `zoomIn()`: Vergrößert die Anzeige.

- `zoomOut()`: Verkleinert die Anzeige

- `zoomOut()`: Setzt die Anzeige auf die Vergrößerungsstufe 3 (der Standard).

- `setLocalTime(int jahr, int monat, int tag, int std, int min, int sek)`: Setzt die Simulationsuhr auf das angegebene Datum und Zeit.

- `waitFor( double t )`: Pausiert für t Sekunden bevor mit den weiteren Skriptbefehlen fortgefahren wird.

- `waitForKey( const QString k )`: Hält die Skriptausführung solange an, bis der Benutzer die angegebene Taste drückt. An diesem Punkt können Sie keine Tastenkombinationen angeben (wie etwa &Ctrl;C). Nur einfache Tasten sind erlaubt. Sie können space (engl. für Leertaste) eingeben, um die Leertaste zu bezeichnen.

- `setTracking( bool track )`: Kontrolliert, ob die Verfolgungsfunktion eingeschaltet ist.

- `changeViewOption( const QString option, const QString value )`: Passt eine Anzeigeeinstellung an. Es gibt dutzende dieser Einstellungen, praktisch alles, was Sie im Fenster Anzeigeeinstellungen verändern können. Das erste Argument ist der Name der Einstellung (Die Namen sind aus der Einstellungsdatei `kstarsrc` entnommen) und das zweite Argument ist der gewünschte Wert. Der Argumentleser ist sehr robust, also wenn Sie falsche Daten angeben, sollte er sich achtbar aus der Affäre ziehen.

- `setGeoLocation( const QString city, const QString province, const QString country )`: Verändert den Observationsort auf die angegebene Stadt. Wenn keine Stadt mit dem Namen des Arguments gefunden wird, passiert nichts.

- `stop()` [Uhr]: Hält die Simulationsuhr an.

- `start()` [Uhr]: Startet die Simulationsuhr.

- `setScale(float s)` [Uhr]: Setzt den Zeitschritt der Simulationsuhr: s = 1.0 entspricht der Realzeit, 2.0 ist zweimal so schnell, wie die Realzeit.

## DCOP-Funktionen testen

Sie können die DCOP-Funktionen recht einfach ausprobieren, wenn Sie das Programm kdcop benutzen. Wenn Sie kdcop starten, sehen Sie eine Baumliste aller laufenden Programme; wenn &kstars; läuft, ist es aufgelistet. Viele der DCOP-Funktionen werden unter der Überschrift KStarsInterface aufgeführt, aber die Uhrzeitfunktionen werden unterUhr aufgelistet. Doppelklicken Sie auf eine Funktion, um sie auszuführen. Wenn die Funktion Argumente erwartet, wird sich ein Fenster öffnen, in das Sie die Werte eingeben können.

## Schreiben eines DCOP-Skriptes

DCOP-Funktionen können auch von der UNIX-Kommandozeile aus aufgerufen werden und können in ein Skript verpackt werden. Wir werden ein Beispielskript erstellen, das auf äquatoriale Koordinaten umschaltet, die Ansicht auf dem Mond zentriert, etwas vergrößert und die Uhr auf eine Stunde pro Sekunde beschleunigt. Nachdem der Mond für 20 Sekunden verfolgt wird, wird die Uhr pausiert und die Anzeige verkleinert. Sie können dieses Skript als eine Art Beispieldatei für das Erstellen neuer Skripte verwenden. Ich werde das Skript zunächst hier aufführen und dann seine verschiedenen Teile erklären.

    #!/bin/bash
    #KStars Skript: Verfolgt den Mond
    #
    KSTARS=`dcopfind -a 'kstars*'`
    MAIN=KStarsInterface
    CLOCK=clock#1
    dcop $KSTARS $MAIN  changeViewOption UseAltAz false
    dcop $KSTARS $MAIN  lookTowards Moon
    dcop $KSTARS $MAIN  defaultZoom
    dcop $KSTARS $MAIN  zoomIn
    dcop $KSTARS $MAIN  zoomIn
    dcop $KSTARS $MAIN  zoomIn
    dcop $KSTARS $MAIN  zoomIn
    dcop $KSTARS $MAIN  zoomIn
    dcop $KSTARS $CLOCK setScale 3600.
    dcop $KSTARS $CLOCK start
    dcop $KSTARS $MAIN  waitFor  20.
    dcop $KSTARS $CLOCK stop
    dcop $KSTARS $MAIN  defaultZoom
    ##

Speichern Sie dieses Skript in eine Datei. Der Dateiname kann ein beliebiger sein. Ich empfehle etwas beschreibendes wie `trackmoon.kstars`. Dann geben Sie folgenden Befehl ein, um das Skript ausführbar zu machen: ``chmod` `a+x` `trackmoon.kstars`` . Das Skript kann dann zu jeder Zeit mit der Eingabe ``./trackmoon.kstars`` im Verzeichnis, das das Skript enthält, ausgeführt werden. Beachten Sie, dass das Skript nur dann funktioniert, wenn &kstars; schon läuft. Sie können den Befehl `dcopstart` benutzen, um eine neue Instanz von &kstars; zu starten.

Nun zur Erklärung des Skriptes. Die Kopfzeile identifiziert die Datei als `BASH` Shellskript. Die folgenden zwei Zeilen sind Kommentare (jede Zeile, die mit einem # beginnt ist ein Kommentar und wird ignoriert). Die nächsten drei Zeilen definieren einige Variablen, die später benutzt werden. Die Variable `KSTARS` identifiziert den aktuell laufenden &kstars;-Prozess, mit dem Befehl `dcopfind`. `MAIN` und `CLOCK` bezeichnen die zwei DCOP-Schnittstellen, die mit &kstars; verknüpft sind.

Der Rest des Skriptes ist die tatsächliche Liste der DCOP-Aufrufe. Der erste Befehl setzt die Anzeige auf äquatoriale Koordinaten, indem die Einstellung UseAltAz auf false gesetzt wird. (Sie können eine Liste aller Optionen, die changeViewOption kennt, erhalten, wenn Sie in die Datei `kstarsrc` schauen). Der nächste Befehl zentriert die Ansicht auf dem Mond und schaltet die Verfolgung an. Dann setzen wir die normale Vergrößerungsstufe und vergrößern fünf Mal. Dann setzen wir die Zeitschritteinheit auf 1 Stunde pro Sekunde (3600 Sekunden sind eine Stunde) und starten die Uhr (falls sie noch nicht gelaufen ist). Die nächste Zeile pausiert das Skript für 20 Sekunden, während wir den Mond verfolgen, der über den Himmel zieht. Letztendlich stoppen wir die Uhr und setzen die Vergrößerungsstufe auf den normalen Wert.

Wir hoffen, Sie mögen die Skriptmöglichkeiten von KStars. Falls Sie ein interessantes Skript erstellt haben, bitte schicken Sie es an kstars@30doradus.org, wir würden gerne sehen, was Sie erstellt haben und vielleicht einige Skripte auf der Webseite veröffentlichen. Wenn Sie Ideen zu Verbesserung der Skriptingmöglichkeiten haben (oder zu irgendeinem anderen Teil von &kstars;) lassen Sie es uns wissen unter kstars-devel@lists.sourceforge.net oder schicken Sie einen Wunschlisteneintrag in bugzilla.