Homematic Scriptprogrammierung Teil 2b – Objekte, Datenpunkte und erste Scripte

0,00
Aus ELVjournal Online/2017     0 Kommentare
 Homematic Scriptprogrammierung Teil 2b – Objekte, Datenpunkte und erste Scripte

Inhalt des Fachbeitrags

PDF- / Onlineversion herunterladen

Im zweiten Teil der Artikelserie über die Scriptprogrammierung beschäftigen wir uns mit Objekten und Datenpunkten und wir schreiben die ersten Scripte.

Schreiben eines Scripts

Starten Sie die WebUI der Homematic Zentrale. Klicken Sie im Menü unter „Programme und Verknüpfungen“ auf den Untermenüpunkt „Programme und Zentralenverknüpfung“.

Nachdem die Konfigurationsdaten geladen wurden, können Sie ein Zentralenprogramm erstellen, indem Sie unten auf den Button „Neu“ klicken.

Mit dem Klick auf „Neues Programm“ können Sie Ihrem Programm einen Namen geben, durch Klicken auf das grüne Plus-Zeichen (+) unter Wenn ... erstellen Sie die Startbedingung für Ihr Script, und ein Klick auf das grüne Plus-Zeichen (+) unter Dann ... führt Sie zur Auswahlmöglichkeit der Scriptprogrammierung.


Ein Mausklick auf „Script erstellen“ öffnet den Scripteditor:

In dem geöffneten Scriptfenster können Sie Ihr Script schreiben. Ein Mausklick auf „Fehlerprüfung“ prüft Ihr Script auf Syntaxfehler, und der Button „OK“ speichert das Script und beendet den Editor. Danach müssen Sie noch das Zentralenprogramm mit einem Klick auf „OK“ speichern.

Das Testen von Scripten

WICHTIG: Beachten Sie, dass bei den folgenden Beispielen zwischen Scriptvariablen, also jenen Variablen, welche Sie in Ihrem selbst geschriebenen Script verwenden, und den CCU-Systemvariablen, welche über die WebUI unter Einstellungen -> Systemvariable erstellt wurden, zu unterscheiden ist.

Um Scripte zu testen bzw. um Variableninhalte von in Scripten verwendeten Variablen sichtbar zu machen, können Sie die Werte der Variablen entweder mit dem Befehl „WriteLine“ direkt beim Testen des Scripts ausgeben lassen oder die Scriptvariablen in CCU-Systemvariablen übergeben, um sie dann anzusehen.

Ausgabe von Variableninhalten mittels WriteLine:
Schreiben Sie in ein Script folgende Zeilen:
string Variablenwert="Hallo Welt";
WriteLine(Variablenwert);


Variablenwert ist die Scriptvariable, deren Wert Sie anschauen möchten und die mit dem WriteLine-Befehl ausgegeben wird. Wenn Sie den Scripteditor beenden (nicht den Programmeditor beenden!) und den Button „Script testen“ anklicken, öffnet sich daraufhin ein Fenster „Script testen“, in dem Sie nach dem Klick auf den Button „Ausführen“ folgende Ausgabe sehen:

Ausgabe bzw. Übergabe von Variableninhalten in eine CCU-Systemvariable:
Zunächst legen Sie eine Systemvariable über Einstellungen -> Systemvariable -> neu an. Der Variablen geben Sie einen Namen, z. B. sTEST, als Variablentyp wählen Sie „Zeichenkette“ (Textvariable).

In Ihrem Script schreiben Sie folgende Zeilen:
string Variablenwert ="Dieser Text wird übergeben";
dom.GetObject("sTEST").State(Variablenwert);
"sTEST" ist also der Name der CCU-Systemvariablen, die Sie zum Testen ansehen wollen – bitte den Namen genauso schreiben, wie Sie ihn beim Anlegen über die Weboberfläche geschrieben haben. Der Name steht in Ihrem Script zwischen Doppel-Hochkommata. Wenn Sie den Namen falsch schreiben, dann gibt es an der betreffenden Stelle im Script einen Fehler und das Script bricht ab. Variablenwert ist die Scriptvariable, deren Wert Sie anschauen möchten.
Bei einer CCU-Systemvariablen vom Typ Zeichenkette (Text) könnte man für Variablenwert z. B. verwenden:
sTestausgabe= "dies steht dann in der CCU-Systemvariablen";
(s vor Testausgabe steht für engl. String = Text)
Bei einer CCU-Systemvariablen vom Typ Zahl könnte man für Variablenwert z. B. verwenden:
iWerteausgabe = 242;
(i vor Werteausgabe steht für Integer = Ganzzahl)

Die Variablenkennzeichnung (s bzw. i) vor dem eigentlichen Variablennamen kann verwendet werden, damit in längeren Scripten auch weit entfernt von der Deklarationsstelle der Variablentyp erkennbar ist. Wollen Sie beispielsweise die weiter oben beschriebene Methode .Year() testen, dann können Sie, nachdem Sie eine CCU-Systemvariable mit dem Namen iTEST und dem Typ Zahl angelegt haben, folgendes Script schreiben:
time t = @2008-12-24 18:30:00@;
integer iJahr = t.Year();
dom.GetObject(“iTEST“).State(iJahr);

Die Scripte können Sie z. B. durch einen Zeitpunkt der Zeitsteuerung oder einen Tastendruck eines Handsenders starten lassen, auch ein direktes Ausführen von Scripten ohne die Erstellung eines Zentralenprogramms ist über den Button „Skript testen“ möglich. Wenn Sie die Variable iTEST in der WebUI unter Status und Bedienung -> Systemvariablen anschauen, sollte diese zu dem Zeitpunkt der Scriptausführung den Wert 2008 angenommen haben. Neben der Übergabe von Werten aus einem Script in eine CCU-Systemvariable ist es auch möglich, den Inhalt von CCU-Systemvariablen per Script auszulesen, um diesen dann im Script weiter zu verarbeiten.

Inhalt einer CCU-Systemvariablen lesen:
var inhalt = dom.GetObject("name_der_CCU_Systemvariable").State();
(name_der_CCU_Systemvariable ist – wie oben beschrieben – der Name der CCU-Systemvariablen, exakt so geschrieben wie beim Anlegen der Systemvariablen über die Weboberfläche.)

Script: Ansteuerung der LED-Statusanzeige

Die LED-Statusanzeige dient dazu, Status mit 16 LEDs anzuzeigen, wobei jede LED die drei Farben Rot, Grün oder Gelb annehmen kann. Natürlich kann man jede LED in einem Zentralenprogramm ansteuern, dies macht bei 16 LEDs 16 Programme. Die Ansteuerung mehrerer Kanäle über ein Programm mit einer WENN–DANN–SONST–Logik wird nicht optimal funktionieren, da eine Gleichzeitigkeit von Statuswechseln eventuell nicht richtig angezeigt wird. Die LED-Anzeige im Beispiel soll den Namen Anzeige_Wohnzimmer haben. Die Kanäle heißen dann z. B.: Anzeige_Wohnzimmer:1, Anzeige_Wohnzimmer:2, Anzeige_Wohnzimmer:3 usw. Die Ansteuerung der LEDs erfolgt nun folgendermaßen:


Wie wir bereits wissen, setzt die Methode .State(wert) einen Kanal mit dem Wert wert. Das Script besteht aus 16 Blöcken, einer für jede LED. Die Blöcke können, je nachdem welches Element/Gerät abgefragt wird, ein unterschiedliches Aussehen haben. Bevor eine LED eines Kanals auf einen anderen Zustand umgeschaltet wird, wird abgefragt, ob sie nicht eventuell bereits den Zielzustand hat – in diesem Fall erfolgt keine Ansteuerung! Im Beispielscript werden lediglich drei LEDs angesteuert, die LEDs 1, 7 und 9. Die Elemente, deren Zustände angezeigt werden sollen, sind eine CCU-Systemvariable, ein Drehgriffschalter sowie ein Unterputz-Aktor. Im Einzelnen:

LED 1 zeigt den Zustand der Systemvariablen Bewässerungsautomatik Terrasse an (Zeile 1 bis 17):
Bewässerungsautomatik Terrasse = true -> LED 1 Rot ein
Bewässerungsautomatik Terrasse = false -> LED 1 Grün ein

LED 7 zeigt den Zustand eines Fenster-Drehgriffschalters Musikzimmer*Fensterkontakt*01 an (Zeile 18 bis 57):
Musikzimmer*Fensterkontakt*01 = verriegelt -> LED 7 Grün ein
Musikzimmer*Fensterkontakt*01 = gekippt -> LED 7 Rot ein
Musikzimmer*Fensterkontakt*01 = offen -> LED 7 Rot ein
Musikzimmer*Fensterkontakt*01 = Batterie leer -> LED 7 Orange ein

LED 9 zeigt den Zustand eines Unterputz-Aktors Terrassenbewaesserung an (Zeile 58 bis 74):
Terrassenbewaesserung = EIN -> LED 9 Rot ein
Terrassenbewaesserung = AUS -> LED 9 Grün ein

Für die LED 1 (Anzeige der Zustände einer CCU-Systemvariablen) gibt es zwei Anzeigemöglichkeiten, da es sich um eine boolesche Variable handelt: true und false. Insofern reicht es aus, z. B. den Zustand false abzufragen (Zeile 4) und den anderen möglichen Zustand (true) dann einfach im ELSE-Zweig zu verarbeiten (Zeile 12 bis 16).

Beim Drehgriffkontakt (Fensterkontakt) sollen eine leere Batterie mit der Farbe Orange, die Zustände geschlossen mit Grün und sowohl gekippt als auch offen mit Rot angezeigt werden. Die Anzeige des Batteriezustands (im Fehlerfall!) soll Vorrang haben, insofern die Zeile 21 mit der Abfrage auf LOWBAT am Anfang steht und die Alternativen dann jeweils mit ELSE angeschlossen werden.


Im dritten Beispiel gibt es beim Unterputz-Aktor – wie bei der booleschen CCU-Systemvariablen auch – lediglich die Zustände true und false. Die Struktur ist demnach gleich wie beim Beispiel LED 1. Gestartet wird das Script durch die gleichen Elemente, die im Script auch verarbeitet werden, im Beispiel also:


Ausblick

Im dritten Teil dieser Reihe werden wir uns mit dem Namensraum-System beschäftigen sowie weitere Beispiele für Scripte zeigen.

Fachbeitrag als PDF-Download herunterladen

Inhalt

Sie erhalten den Artikel in 1 Version:

pdf  als PDF (6 Seiten)

Sie erhalten folgende Artikel:
  • Homematic Scriptprogrammierung Teil 2b – Objekte, Datenpunkte und erste Scripte


Hinterlassen Sie einen Kommentar:
(Anmeldung erforderlich)
  Name
  E-Mail
KATEGORIEN
DAS KÖNNTE SIE AUCH INTERESSIEREN