Seite 1 von 10

Alle Lichter an bzw. ausschalten (Je Raum)

Verfasst: 06.07.2015, 23:36
von Fuma
Hallo zusammen bin mit dem Skripten total neu und hoffe hier im Forum Unterstützung zu bekommen.

Code: Alles auswählen

Ich habe nachfolgendes Skript entdeckt und wollte dies bei  mir anwenden. 
var i = dom.GetObject("Licht");

string itemID;

foreach(itemID, i.EnumUsedIDs()) 
{
    var item = dom.GetObject(itemID);
    WriteLine(item.Name()); 
    WriteLine(item.State());
    if (item.IsTypeOf(OT_CHANNEL)) 
    {
        var device = dom.GetObject(item.Device());
        if ((device.HssType().Find("HM-LC-Sw") > 0) && (item.State() == 0)) { item.State(1); }
        if ((device.HssType().Find("HM-LC-Dim") > 0) && (item.State() == 0)) { item.State(1.00); }
    }
}
WriteLine("Ende");
Ziel sollte hier sein, dass alle Lichter an gehen. Aber irgendwie klappt das nicht
Nachfolgende Ausgabe des Skript testings:

Code: Alles auswählen

HM-LC-Dim1TPBU-FM JEQ0204135:2
0.000000
HM-LC-Dim1TPBU-FM JEQ0204135:3
0.000000
HM-LC-Dim1TPBU-FM JEQ0204155:2
0.000000
HM-LC-Dim1TPBU-FM JEQ0204155:3
0.000000
HM-LC-Dim1TPBU-FM JEQ0204156:2
0.000000
HM-LC-Dim1TPBU-FM JEQ0204156:3
0.000000
HM-LC-Sw1PBU-FM LEQ1170372:1
false
HM-LC-Sw1PBU-FM LEQ1170377:1
false
HM-LC-Sw1PBU-FM LEQ1170451:1
false
HM-LC-Sw1PBU-FM LEQ1170457:1
false
HM-LC-Sw1PBU-FM LEQ1170460:1
false
HM-LC-Sw1PBU-FM LEQ1170551:1
false
HM-LC-Sw1PBU-FM LEQ1170557:1
false
HM-LC-Sw1PBU-FM LEQ1170566:1
false
HM-LC-Sw1PBU-FM LEQ1311547:1
false
HM-LC-Sw1PBU-FM LEQ1312688:1
false
HM-PB-2-FM LEQ1332720:1

HM-PB-2-FM LEQ1332720:2

HM-PB-2-FM MEQ0164378:1

HM-PB-2-FM MEQ0164378:2

HM-PB-2-FM MEQ0164432:1

HM-PB-2-FM MEQ0164432:2

HM-PB-2-FM MEQ0164951:1

HM-PB-2-FM MEQ0164951:2

HM-PB-2-FM MEQ0164962:1

HM-PB-2-FM MEQ0164962:2

HM-PB-2-FM MEQ0164987:1

HM-PB-2-FM MEQ0164987:2

Licht Abstellkammer
false
Licht Fitness
false
Licht Flur Wohnzimmer
false
Licht Heizraum
false
Licht Terasse
false
Licht Treppenhaus von Eingang
false
Licht Waschraum
false
Licht Werkzeugraum
false
Licht Wohnzimmer Couch
1.000000
Licht Wohnzimmer Esstisch
1.000000
Licht Wohnzimmer Mitte
1.000000
Ende
Final würde ich gerne je nach Raum alle Lichter ein bzw. ausschalten und dies mit einem Skript realisieren.
Hoffe mir kann hier jemand weiterhelfen. Wie gesagt.....Bin ungeübt....ich bitte dementsprechend um Rücksicht.

Gruß Thomas

Re: Alle Lichter an bzw. ausschalten (Je Raum)

Verfasst: 07.07.2015, 08:02
von alchy
Fuma hat geschrieben: Final würde ich gerne je nach Raum alle Lichter ein bzw. ausschalten und dies mit einem Skript realisieren.
Hoffe mir kann hier jemand weiterhelfen. Wie gesagt.....Bin ungeübt....ich bitte dementsprechend um Rücksicht.
Definiere: je nach Raum :!:

Folgendes Script sollte alle Dimmer und Schalter die sich im Gewerk/Raum/Favoriten Licht befinden einschalten.
Um alles abzuschalten einfach im Script die Anweisung .State(1) und State(1.0) zu .State(0) ändern.
Ich verzichte hier auf die Abfrage ob schon ein oder auch ausgeschaltet.
Könnte man noch einbauen um Funkhygiene zu gewährleisten.
Ich wollte es kurz halten, weil auf dem Handy so weniger Wirrwarr entsteht.

Code: Alles auswählen

  Script entfernt by Alchy da neuere Version
https://homematic-forum.de/forum/viewtopic.php?f=19&t=25794#p223998
Alchy

Re: Alle Lichter an bzw. ausschalten (Je Raum)

Verfasst: 07.07.2015, 18:07
von Fuma
Hallo Alchy

Erstmal vielen dank. Das skript klappt erstmal wie ich das wollte.
Ich will das skript nun auf Räume beschrencken. Habe die Aktoren ja dem Gewerk Licht und einem Raum z.B. Wohnzimmer,Küche usw zugeordnet.
Nun will ich, dass eben die Lichter nur in den Räumen Wohnzimmer, Küche, Gang usw angehen und in den restlichen Räumen nicht.

LG Fuma

Re: Alle Lichter an bzw. ausschalten (Je Raum)

Verfasst: 07.07.2015, 18:27
von maloross
Dank an Alchy für's Skript...
Da ich noch programmier-unerfahren bin, würde ich Räume mit

Code: Alles auswählen

object sec = dom.GetObject("Raumname");
ansteuern, oder?

und wenn ich die Prüfung des aktuellen Zustandes einbauen möchte, geht das mit diesem Befehl??

Code: Alles auswählen

if ((device.HssType().Find("Switch") == 0) && (item.State())) { item.State(1); }
Bitte entschuldigt meine Anfängerfragen hier, aber dieser Thread passte grad in meine Programmierung...

Re: Alle Lichter an bzw. ausschalten (Je Raum)

Verfasst: 07.07.2015, 18:33
von alchy
Ich habe es geahnt :mrgreen:

Ein Workaround wäre, statt dem Gewerk Licht den Raum im Script einzutragen.
Wenn dir das nicht reicht, sag Bescheid, dann schreib ich dir ein entsprechendes Script.

Alchy

Re: Alle Lichter an bzw. ausschalten (Je Raum)

Verfasst: 07.07.2015, 22:57
von Fuma
Na ja Alachy. Wie beschrieben Fuma ---> Anfänger :-D
Wäre also super wenn du mir dieses Skript erstellen könntest.
Top Angebot von dir!

Mfg

Fuma

Re: Alle Lichter an bzw. ausschalten (Je Raum)

Verfasst: 07.07.2015, 23:31
von alchy
Hast Du mal probiert den Raum einzutragen statt dem Gewerk Licht ?

Alchy

Re: Alle Lichter an bzw. ausschalten (Je Raum)

Verfasst: 08.07.2015, 13:22
von alchy
Auf die Schnelle 2 Scripte die zur Anforderung von Fuma passen sollten.
Schalten von Aktoren in verschiedenen Räumen.
Habe gleich noch die Abfrage eingebaut, nur wenn ein dann ausschalten und umgedreht.

Achtung: Ihr seid selbst dafür verantwortlich, welche Kanäle Ihr mit dem Script schaltet.
Dem Script ist es egal, ob an dem Aktor eine Waschmaschine hängt, oder eine kleine Beleuchtung.

Übertreibt es nicht mit den Kanälen, welche Ihr in einem Rutsch durch das Script schalten lasst.
Man kann das Script auch mit weniger Kanälen, 2 mal mit Verzögerung starten.

Besser als die Schaltungen mittels den Scripten, ist die Einrichtung von Direktverknüpfungen.
Da Direktverknüpfunegn nicht immer machbar sind, gibt es dieses Script. :mrgreen:

Einschalten:

Code: Alles auswählen

! Alle Aktoren in wählbaren verschiedenen Gewerken/Favoriten (trennen mit \t )    
! mit HssType des Items einschalten wenn ausgeschalten  
! https://homematic-forum.de/forum/viewtopic.php?t=25794#p223998
! v 0.8 (c) by Alchy
string liste = "Licht\tWohnzimmer";
! Dont touch behind this Line
string index;       
foreach (index, liste) {
object sec = dom.GetObject(index);
if (sec) {
string itemId;
foreach(itemId, sec.EnumUsedIDs()) {
var item = dom.GetObject(itemId);
if (item.IsTypeOf(OT_CHANNEL)) {
var device = dom.GetObject(item.Device());
var hssType = item.HssType();
if ( (hssType == "SWITCH") && (!item.DPByHssDP("STATE").Value()) ) {item.DPByHssDP("STATE").State(1);}
if ( (hssType == "DIMMER") && (!item.DPByHssDP("LEVEL").Value()) ) {item.DPByHssDP("LEVEL").State(1.0);}
if ( (hssType == "SWITCH_VIRTUAL_RECEIVER") && (!item.DPByHssDP("STATE").Value()) ) {item.DPByHssDP("STATE").State(1);}
if ( (hssType == "DIMMER_VIRTUAL_RECEIVER") && (!item.DPByHssDP("LEVEL").Value()) ) {item.DPByHssDP("LEVEL").State(1.0);}
if ( (hssType == "VIRTUAL_DIMMER") && (!item.DPByHssDP("LEVEL").Value()) ) {item.DPByHssDP("LEVEL").State(1.0);}
if ( (hssType == "DIGITAL_OUTPUT") && (!item.DPByHssDP("STATE").Value()) ) {item.DPByHssDP("STATE").State(1);}
}
}
}else{WriteLine(index #" ist nicht vorhanden");} 
}
Ausschalten:

Code: Alles auswählen

! Alle Aktoren in wählbaren verschiedenen Gewerken/Favoriten (trennen mit \t ) 
! mit HssType des Items ausschalten wenn eingeschalten  
! https://homematic-forum.de/forum/viewtopic.php?t=25794#p223998
!  v 0.8 (c) by Alchy
string liste = "Licht\tWohnzimmer";
! Dont touch behind this Line
string index;       
foreach (index, liste) {
object sec = dom.GetObject(index);
if (sec) {
string itemId;
foreach(itemId, sec.EnumUsedIDs()) {
var item = dom.GetObject(itemId);
if (item.IsTypeOf(OT_CHANNEL)) {
var device = dom.GetObject(item.Device());
var hssType = item.HssType();
if ( (hssType == "SWITCH") && (item.DPByHssDP("STATE").Value()) ) {item.DPByHssDP("STATE").State(0);}
if ( (hssType == "DIMMER") && (item.DPByHssDP("LEVEL").Value()) ) {item.DPByHssDP("LEVEL").State(0.0);}
if ( (hssType == "SWITCH_VIRTUAL_RECEIVER") && (item.DPByHssDP("STATE").Value()) ) {item.DPByHssDP("STATE").State(0);}
if ( (hssType == "DIMMER_VIRTUAL_RECEIVER") && (item.DPByHssDP("LEVEL").Value()) ) {item.DPByHssDP("LEVEL").State(0);}
if ( (hssType == "VIRTUAL_DIMMER") && (item.DPByHssDP("LEVEL").Value()) ) {item.DPByHssDP("LEVEL").State(0);}
if ( (hssType == "DIGITAL_OUTPUT") && (item.DPByHssDP("STATE").Value()) ) {item.DPByHssDP("STATE").State(0);}
}
}
}else{WriteLine(index #" ist nicht vorhanden");} 
}

Und um die Zuordnung einfach mal anzuzeigen bzw. bei Problemen:

Code: Alles auswählen

! Testscript für Zuordnung der Kanäle
! v0.1 (c) by Alchy
var FUNCTIONS = "Lichte"; 
!++++++ DONT TOUCH BEHIND THIS LINE +++++++++
string i;string slist;
var sec=dom.GetObject(FUNCTIONS);
if (sec){
    foreach(i,sec.EnumUsedIDs()) {
    object item = dom.GetObject(i);
if (item.IsTypeOf(OT_CHANNEL)) {
var dev = dom.GetObject(item.Device());
slist=slist #"Gerät: "#dev.Name() #"\n DeviceTyp: "#dev.HssType() #"\n Kanal: "#item.Name() #"\n KanalTyp: " # item.HssType() #"\n\n"; 
}else{slist = slist#" \n!!!!! "#item.Name() # "!!!!!!\n\n" ; }
}}else{WriteLine(FUNCTIONS # " ist nicht vorhanden");}
WriteLine(slist);

Alchy

@maloross
entschuldige, deine Fragen sind ein bisschen untergegangen.
Mittlerweile mitbekommen?

Re: Alle Lichter an bzw. ausschalten (Je Raum)

Verfasst: 08.07.2015, 22:28
von Fuma
Alchy du bist top.
Werde es morgen gleich mal probieren.
Schonmal besten Dank für deinen Aufwand.

Lg fuma

Re: Alle Lichter an bzw. ausschalten (Je Raum)

Verfasst: 10.08.2015, 16:05
von eiGelbGeek
Ich habe das ganze mal auf eine Beschattung mit Rolladen umgeschrieben ;)
Ich gehe bei der Beschattung von 40% Verschluß der Rolladen aus!
Ich habe meine Rolladen in 3 Gewerken aufgeteilt (auf der Südseite habe ich keine Fenster ;) )

PS: Eigentlich in 4 Gewerken, denn auf der West-Seite habe ich eine Balkontür, damit ich mich nicht ausschliesse habe ich diese nicht dem Gewerk Rolladen-West hinzugefügt, Jedoch möchte ich diesen Rolladen trotzdem in einen anderen Programm (Alle Rolladen verschliessen, die mehr als 0% geöffnet sind verschliessen) nutzen, deswegen das 4te Gewerk indem sich alle Rolladen befinden!

Jenachdem welche Gewerke man in den String Gewerke schreibt, diese werden dann auch an gesprochen! So wie das Script hier nun steht werden alle Rolladen geschlossen. Ich habe dann jeweils noch 3 weitere Programme erstellt für Nord, West und Ost und jeweils logischerweise den String Gewerke angepasst ;)

Jetzt fehlt mir nur noch ein Sonnenstand Sensor, der der CCU sagt, wo gerade die Sonne steht bzw. ob überhaupt Sonne vorhanden ist ;) derzeit löse ich die Programme einfach Manuell aus ...

Vielleicht hilft es irgendwem weiter , wollte für das Anpassen kein neues Thema anfangen ;)




Code: Alles auswählen

string gewerke = "Rolladen-Nord\tRolladen-West\tRolladen-Ost";

string objekte;       

foreach (objekte, gewerke) {

object sec = dom.GetObject(""#objekte#"");

string itemId;

foreach(itemId, sec.EnumUsedIDs())
   {
      var item = dom.GetObject(itemId);
      if (item.IsTypeOf(OT_CHANNEL))
   {
      var dp = item.DPByHssDP("LEVEL");
          if (dp && dp.Value() !=0.40) 
   {
      dp.State(0.40);
      }

   }
   }
   }