Zurzeit habe ich mich wieder ziemlich viel mit Programmierung beschäftigt. Unter anderem sind auch ein paar neue Skripts für meine Hauszentrale, die Homematic CCU2 von eQ-3 entstanden.

Es gibt Phasen, in denen ich gerne programmiere – und es gibt Phasen, da programmiere ich wirklich nur, wenn ich – z.B. aufgrund eines Kundenprojektes muss. In der letzten Zeit habe ich mich gerne mit der Skriptsprache für die Homematic CCU2 beschäftigt und beschlossen, gelegentlich das ein oder andere Skript hier zu teilen – um anderen Interessierten weiterzuhelfen. Als ich begann, mich mit der Thematik auseinanderzusetzen, war ich auch froh, solche Inhalte online gefunden zu haben.

Mit dem nachfolgenden Skript werden entweder a) ALLE Aktoren eines Gewerks, einer Favoritengruppe oder eines Raumes geschaltet werden oder b) nur die Aktoren eines Objekttyps, (bzw. max. dreier verschiedener Objekttypen geschaltet werden. Möglich ist AN, AUS oder TOGGLE (Geräte die an sind, werden ausgeschaltet – und Geräte die aus sind, werden angeschaltet).

Angegeben werden müssen lediglich die Bezeichnung des Gewerks, der Favoritengruppe oder des Raumes [1.], ob alle dort enthaltenen Geräte geschaltet werden [JA/NEIN bei 2A.], falls nicht alle Geräte geschaltet werden sollen die Objekttyp-IDs (z.B. HM-LC- Sw1-Pl-2) [2B.] Und in welchem Zustand die Geräte gebracht werden sollen („AN“/“AUS“/““ für TOGGLE) [3.].
 
! START ======================================================
! ===[ 1.]==========
! Die Aktoren WELCHES OBJEKTS (Gewerk, Favoritengruppe, ...)
! sollen geschaltet werden?

var Objekt = "Beleuchtung";

! ===[ 2A.]==========
! Sollen ALLE AKTOREN geschaltet werden?
! > Auswahl aus "JA"/"NEIN"

var AlleTypen = "JA";

!===[ 2B.]==========
! Falls NEIN:
: WELCHE GERÄTETYPEN sollen geschaltet werden?

var Typ1 = "HM-LC-Sw1-Pl-2";
var Typ2 = "";
var Typ3 = "";

!===[ 3.]==========
! In welchen NEUEN ZUSTAND soll geschaltet werden?
! > Auswahl aus "AN"/ "AUS" / "T"=Toggle

var Schaltung = "AUS";

! ===================================================================
! Ab hier sollten keine Änderungen mehr vorgenommen werden, sollten
! Sie keine Programmierroutine haben!
! ===================================================================

var Durchsuchen = dom.GetObject(Objekt);
var Zaehlen = "NEIN";
var count = 0;

if (Schaltung == "AN") { var Neu = 1;}
if (Schaltung == "AUS") { var Neu = 0;}
string itemId;
foreach(itemId, Durchsuchen.EnumUsedIDs())
{
var item = dom.GetObject(itemId);
if (item.IsTypeOf(OT_CHANNEL)) {
var device = dom.GetObject(item.Device());

! ===[1. AlleTypen = JA]==============================================
if (AlleTypen == "JA") {
if (Schaltung=="") {
var Ist = item.State();
var dev = dom.GetObject(item);
if (Ist==0) {
Neu = 1;
item.State(Neu);
}
if (Ist==1) {
Neu = 0;
item.State(Neu);
}
WriteLine("Toggle: schalte " # dev # " von " # Ist # " zu " # Neu # ".");
}

if (Schaltung=="AN") {
Neu = 1;
item.State(Neu);
}

if (Schaltung=="AUS") {
Neu = 0;
item.State(Neu);
}
Zaehlen = "JA";
}

! ===[2. AlleTypen = NEIN]============================================
if (AlleTypen == "NEIN") {

! ---[2.1 Typ1]------------------------------------------------------
if (device.HssType() == Typ1) {
if (Schaltung=="") {
var Ist = item.State();
var dev = dom.GetObject(item);
if (Ist==0) {
Neu = 1;
item.State(Neu);
}
if (Ist==1) {
Neu = 0;
item.State(Neu);
}
WriteLine("Toggle: schalte " # dev # " von " # Ist # " zu " # Neu # ".");
}

if (Schaltung=="AN") {
Neu = 1;
item.State(Neu);
}

if (Schaltung=="AUS") {
Neu = 0;
item.State(Neu);
}
Zaehlen = "JA";
}

! ---[2.2 Typ2]------------------------------------------------------
if (device.HssType() == Typ2) {
if (Schaltung=="") {
var Ist = item.State();
var dev = dom.GetObject(item);
if (Ist==0) {
Neu = 1;
item.State(Neu);
}
if (Ist==1) {
Neu = 0;
item.State(Neu);
}
WriteLine("Toggle: schalte " # dev # " von " # Ist # " zu " # Neu # ".");
}

if (Schaltung=="AN") {
Neu = 1;
item.State(Neu);
}

if (Schaltung=="AUS") {
Neu = 0;
item.State(Neu);
}
Zaehlen = "JA";
}

! ---[2.3 Typ3]------------------------------------------------------
if (device.HssType() == Typ3) {
if (Schaltung=="") {
var Ist = item.State();
var dev = dom.GetObject(item);
if (Ist==0) {
Neu = 1;
item.State(Neu);
}
if (Ist==1) {
Neu = 0;
item.State(Neu);
}
WriteLine("Toggle: schalte " # dev # " von " # Ist # " zu " # Neu # ".");
}

if (Schaltung=="AN") {
Neu = 1;
item.State(Neu);
}

if (Schaltung=="AUS") {
Neu = 0;
item.State(Neu);
}
Zaehlen = "JA";
}
}
}

if (Zaehlen == "JA") {
count = count + 1;
Zaehlen = "NEIN";
}
}

WriteLine("OK!\n" # count # " Aktoren " # Schaltung # ".");
! ENDE =======================================================

Photo by luis gomes from Pexels