Ich möchte in einem Skript alle eingeschalteten Geräte zählen, die in einer bestimmten Etage und dem Gewerk Licht sind.
Dabei gehe ich durch alle Etagen (Keller, Erdgeschoss, Obergeschoss, Dachgeschoss), suche nach möglichen Aktoren (Schaltaktoren bzw. Dimmer) und prüfe dann, ob diese im entsprechenden Gewerk sind. Das Script wird noch so erweitert, dass jeweils Systemvariablen für jede Etage mit der Anzahl der eingeschalteten Lichter belegt werden (ist im Code noch nicht drin).
Grundsätzlich funktioniert mein Skript auch, aber vermutlich kann man es noch optimieren.
Daher meine Frage/Bitte an die Skriptprofis, ob es einen eleganteren Weg gibt?
Code: Alles auswählen
! Eingeschaltete Lichter zählen
string temp_f = "Keller\tErdgeschoss\tObergeschoss\tDachgeschoss";
string temp_g;
foreach (temp_g, temp_f) {
WriteLine("Suche in "# temp_g);
var temp_a = dom.GetObject(temp_g);
string temp_b;
integer temp_c;
temp_c = 0;
foreach(temp_b, temp_a.EnumUsedIDs())
{
var temp_d = dom.GetObject(temp_b);
if (temp_d.IsTypeOf(OT_CHANNEL))
{
var temp_e = dom.GetObject(temp_d.Device());
if ((temp_e.HssType() == "HM-LC-Sw1PBU-FM") || (temp_e.HssType() == "HM-LC-Sw1-FM") || (temp_e.HssType() == "HM-LC-Sw2-FM") || (temp_e.HssType() == "HM-LC-Dim1TPBU-FM"))
{
WriteLine("Gerät gefunden");
string temp_h;
foreach(temp_h, temp_d.ChnFunction()) {
var temp_i = dom.GetObject(temp_h);
WriteLine(temp_i.Name());
if (((temp_i.Name() == "Licht") || (temp_i.Name() == "${funcLight}") ) && (temp_d.State() != 0) ){
temp_c = temp_c + 1.00;
}
}
}
}
}
WriteLine("Gefunden: "# temp_c);
}
Gerti