HmIP-BSL per Skript schalten um Zustand der Fenster/Türen zu visualisieren

Homematic-, TCL- und Shell-Script, Toolchain, C, etc.

Moderator: Co-Administratoren

Antworten
Mirko77
Beiträge: 1
Registriert: 03.10.2018, 20:52

HmIP-BSL per Skript schalten um Zustand der Fenster/Türen zu visualisieren

Beitrag von Mirko77 » 25.01.2019, 21:36

Hallo Zusammen,
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
configSchalter.png
configSchalter.png (20.04 KiB) 159 mal betrachtet
Das Programm:
Programm.png
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!");

Antworten

Zurück zu „Softwareentwicklung für die HomeMatic CCU“