[Codeschnipsel] – HOMEMATIC: Mehrere Aktoren gleichzeitig AN oder AUS oder TOGGLE

Veröffentlicht am

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

Meine Wohnung kann denken und twittern

Veröffentlicht am

Meine Wohnung wird von Tag zu Tag schlauer. Schuld ist die Homematic. Täglich lernt mein Haussystem neue Funktionen. Seit gestern kann es twittern.

Über 200 verschiedene Tweets wurden bisher eingebunden. Außerdem flexible Tweets, wie z.B. die Temperatur im Wohnzimmer, die Temperatur im Schlafzimmer oder die Außentemperatur.

Somit ist meine Wohnung die erste deutsche Wohnung, mit dieser Funktion. Inspiriert hat mich ein Artikel in der Zeitschrift t3n (aktuell leider nur im Heft, aber bald hier verfügbar: http://t3n.de/magazin/sensoren-apis-algorithmen-leben-veraendern-big-234083/ ).

Dort wird von einem Haussystem von Tom Coates berichtet, dessen Haus das auch kann. Allerdings nicht schön umgesetzt (https://twitter.com/houseofcoates).

Mir ist klar, dass das eine Spielerei ist, die man nicht braucht. Aber ich sehe diese Funktion als Experiment, um zu demonstrieren, was heute schon möglich ist – besonders für Menschen, die sich noch gar nicht mit so einer Art von Technik beschäftigt haben.

ZU MEINER TWITTERNDEN WOHNUNG:
>>>> https://twitter.com/DominiksWohnung

Nachtrag: Ich bitte darum, mir nicht zu erzählen, wie gefährlich das ganze ist und was das für den Datenschutz bedeutet. Ich sehe das ganze als Experiment. Außerdem wird meine Wohnung von einem privaten Sicherheitsdienst überwacht und ist alarmgesichert.