nachdem ich hier schon eine Weile mitlese, ist es an der Zeit mein Erstes Skript zu veröffentlichen. Evtl. findet der ein oder andere Interesse daran.
Das Skript läuft funktioniert wie folgt, wenn der Kontakt HMIP-SWDO "FLUR1_Tuer" geöffnet wird:
1. Frage den Zustand aller Aktoren im Gewerke "Verschluß" ab.
2. Setze die Systemvariable "Verschluss_Fenster_Tueren" auf true/alles zu oder false/mind. eins offen.
3. Visualisiere am HmIP-BSL "FLUR1_Schalter" mit den Farben grün/alles zu oder rot/mind. eins offen.
Das Skript enthält Kommentare und Debug-Ausgaben, es sollte also einfach zu verstehen sein.
Grüße,
Mirko
Hier die entsprechenden Bilder:
Konfiguration HmIP-BSL Das Programm: Das Skript:
Code: Alles auswählen
! Prüft den Zustand (OFFEN/Verschlossen) aller Fenster-/Türkontakte in der Gruppe "Verschluss"
! Setzt die Variable "Verschluss_Fenster_Tueren" auf true (alle Verschlossen) oder false (mindestens eins Offen)
! Schaltet den HmIP-BSL Schalter "FLUR1_Schalter" entsprechend Zustand auf Grün/geschlossen oder Rot/offen für 10sec.
string itemId;
boolean Zustand;
var myObjects = dom.GetObject("Verschluss");
WriteLine("Es wurden "+myObjects.Count().ToString(1)+" Geräte in der Gruppe Veschluss gefunden.");
foreach(itemId, myObjects.EnumUsedIDs())
{
var item = dom.GetObject(itemId);
WriteLine(item.Name()+" ID: "+item.Device());
if (item.IsTypeOf(OT_CHANNEL))
{
var device = dom.GetObject(item.Device());
if (device.HssType() == "HMIP-SWDO")
{
if (item.State() == 0 )
{
WriteLine("Zustand Verschlossen!");
}
else
{
WriteLine("Zustand OFFEN!");
}
Zustand=Zustand||item.State();
}
}
}
Zustand=!Zustand;
WriteLine("Variable Verschluss_Fenster_Tueren konnte schreiben: "+dom.GetObject("Verschluss_Fenster_Tueren").State(Zustand));
! Lichtschalter Farbe schalten
var myDevice = dom.GetObject("FLUR1_Schalter");
var myChannel8 = dom.GetObject(myDevice.Name()+":8");
var myChannel12 = dom.GetObject(myDevice.Name()+":12");
WriteLine(myChannel8.Name());
if (Zustand==true) {
WriteLine("Alles Geschlossen: -> Schalter GRÜN für 10sec")
!Obere hälfte Grün
!Achtung Reihenfolge beachten
myChannel8.DPByHssDP("DURATION_UNIT").State(0);
myChannel8.DPByHssDP("COLOR").State(2);
myChannel8.DPByHssDP("LEVEL").State(1);
myChannel8.DPByHssDP("DURATION_VALUE").State(10);
!Untere hälfte Grün
!Achtung Reihenfolge beachten
myChannel12.DPByHssDP("DURATION_UNIT").State(0);
myChannel12.DPByHssDP("COLOR").State(2);
myChannel12.DPByHssDP("LEVEL").State(1);
myChannel12.DPByHssDP("DURATION_VALUE").State(10);
}
else
{
WriteLine("Irgendwas ist noch auf?: -> Schalter ROT für 10sec")
!Obere hälfte Rot
!Achtung Reihenfolge beachten
myChannel8.DPByHssDP("DURATION_UNIT").State(0);
myChannel8.DPByHssDP("COLOR").State(4);
myChannel8.DPByHssDP("LEVEL").State(1);
myChannel8.DPByHssDP("DURATION_VALUE").State(10);
!Untere hälfte Rot
!Achtung Reihenfolge beachten
myChannel12.DPByHssDP("DURATION_UNIT").State(0);
myChannel12.DPByHssDP("COLOR").State(4);
myChannel12.DPByHssDP("LEVEL").State(1);
myChannel12.DPByHssDP("DURATION_VALUE").State(10);
}
WriteLine("ENDE!");