Licht aus, Fenster zu

Mit diesem WebUI-Programm kann mit einem einzelnen Tastendruck das Licht im ganzen Haus ausgeschaltet oder auch die Fenster geschlossen werden

2816 Zeichen
Score aktualisiert
100%
Code: 73e63003cad843c08874091b5284aba9
Token in Entwicklung nicht aktualisiert
img-Tag in Entwicklung deaktiviert

Abends im Bett oder vor Verlassen des Hauses reicht dank der HomeMatic ein einziger Tastendruck, um im ganzen Haus das Licht auszuschalten. Genau dafür hat man eine CCU!

Das gesamte Programm ist sehr einfach und damit auch für Anfänger leicht verständlich.

In der WebUI wird ein Programm erstellt, das bei Tastendruck ein Script ausführt.

Um das folgende Script einzufügen, bitte komplett markieren, in der WebUI auf den den Button „Script“ klicken und den gesamten Text einfügen. Nachdem das Script eingefügt wurde, sieht man wie in meinem Screenshot oben den Anfang des Codes.

! HomeMatic-Script
! LICHT AUS, FENSTER ZU
! http://www.christian-luetgens.de/homematic/programmierung/beleuchtung/lichtaus/Licht_aus.htm

string l = dom.GetObject("Licht").EnumUsedIDs();
string i;
object o;

foreach (i, l) {
  o = dom.GetObject(i);
  if ((o.HssType() == "SWITCH") && (o.DPs().GetAt(0).Value())) {
    o.State(false);
  }
  if ((o.HssType() == "DIMMER") && (o.DPs().GetAt(0).Value() > 0)) {
    o.State (0.0);
  }
}

!  Ende des Scripts

Variablen in HomeMatic-Scripten

Die CCU hatte früher ein Limit von maximal 200 Variablen, das mit Firmware-Version 2.29.18 aufgehoben wurde. Dieses Limit bezog sich auf alle Variablen, die in allen Scripten verwendet werden. Gemeint sind Variablen, die direkt im Script definiert werden: object x; object y; var z;

Wenn Scripte nicht mehr funktionieren und bei der Prüfung unerklärliche Syntax-Fehler auftreten, sollte versuchsweise dieses Programm wieder gelöscht oder deaktiviert werden – oder, noch besser, auf die aktuelle Firmware-Version aktualisiert werden.

Strings in HomeMatic-Scripten

Durch String-Verwendung in HomeMatic-Scripten kann die CCU fehlerhaft arbeiten, instabil werden oder sogar abstürzen. Grundsätzlich gilt: Je öfter mit Strings hantiert wird, desto eher führt dies zu Problemen.

Ich empfehle daher, nach Umsetzung dieser Anleitung die CCU unter Beobachtung zu halten.

Programmlogik

Das Programm geht alle Kanäle durch, die dem Gewerk „Licht“ zugeordnet sind. Alle Geräte, die entweder ein Schaltaktor (Switch) oder ein Dimmer sind, werden ausgeschaltet, wenn sie nicht schon aus sind. Das war’s.

Damit das Programm funktioniert, muss natürlich das Gewerk „Licht“ vorhanden und die Kanäle korrekt zugeordnet sein. Ist die Beleuchtung in einem anderen Gewerk, kann das Script entsprechend angepasst werden.

Licht an!

Mit wenigen Handgriffen kann man aus dem Licht-aus-Script ein Licht-an-Script machen.

! HomeMatic-Script
! LICHT AUS, FENSTER ZU
! http://www.christian-luetgens.de/homematic/programmierung/beleuchtung/lichtaus/Licht_aus.htm

string l = dom.GetObject("Licht").EnumUsedIDs();
string i;
object o;

foreach (i, l) {
  o = dom.GetObject(i);
  if ((o.HssType() == "SWITCH") && (!o.DPs().GetAt(0).Value())) {
    o.State(true);
  }
  if ((o.HssType() == "DIMMER") && (o.DPs().GetAt(0).Value() == 0)) {
    o.State (1.0);
  }
}

!  Ende des Scripts

Auch hier wird das Gewerk der Reihe nach abgearbeitet. Bei Schaltaktoren wird auf false geprüft, bei Dimmern auf 0. In beiden Fällen wird dann jeweils das betreffende Objekt eingeschaltet.

Fenster schließen

Das Script kann leicht für andere Gewerke und andere Funktionen angepasst werden. Hier ist zum Beispiel die Variante, um alle Fenster im Haus zu schließen.

! HomeMatic-Script
! LICHT AUS, FENSTER ZU
! http://www.christian-luetgens.de/homematic/programmierung/beleuchtung/lichtaus/Licht_aus.htm

string s_fenster;
object o_fenster;
foreach (s_fenster, dom.GetObject("Fenster").EnumUsedIDs()) {
  o_fenster = dom.GetObject (s_fenster);
  if (o_fenster.HssType() == "WINMATIC") {
    if (o_fenster.DPByHssDP("LEVEL").Value() >= 0) {
      o_fenster.DPByHssDP("SPEED").State (0.25);
      o_fenster.DPByHssDP("LEVEL").State (-0.05);
    }
  }
}

!  Ende des Scripts

Das Programm bearbeitet alle Objekte im Gewerk „Fenster“. Wenn es sich um eine WinMatic handelt, wird der aktuelle Öffnungswinkel geprüft. Ist das Fenster nicht verriegelt (also Öffnungswinkel kleiner als 1), wird eine niedrige Geschwindigkeit gewählt und das Fenster geschlossen.

Navigation