Alle Lichter an bzw. ausschalten (Je Raum)

Allgemeines zur HomeMatic Haussteuerung

Moderator: Co-Administratoren

dtp
Beiträge: 10658
Registriert: 21.09.2012, 08:09
System: CCU
Wohnort: Stuttgart
Hat sich bedankt: 320 Mal
Danksagung erhalten: 501 Mal

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

Beitrag von dtp » 23.03.2017, 20:51

mwe25 hat geschrieben:Ach so. Und wenn ich nur die Geräte des Gewerk "Test" im Wohnzimmer schalten möchte ?
Versuch's mal damit.

Code: Alles auswählen

! Aktoren für bestimmte Gewerke und Räume ein- oder ausschalten
! by Alchy und dtp

string switch = "an"; ! Verbraucher einschalten: "an", Verbraucher ausschalten: "aus"
string tradeList = "Licht"; ! Liste der Gewerke (trennen mit "\t", alle Gewerke: "alle")   
string roomList = "EG Wohnzimmer"; ! Liste der Räume (trennen mit "\t", alle Räume: "alle") 

! +++++ Variablendeklaration +++++
string tradeIndex; string roomIndex; string channelIndex; string functionIndex;
var channel;

if(roomList == "alle"){roomList = dom.GetObject(ID_ROOMS).EnumNames();}
if(tradeList == "alle"){tradeList = dom.GetObject(ID_FUNCTIONS).EnumNames();}

foreach(tradeIndex, tradeList){
  foreach(roomIndex, roomList){
    if((dom.GetObject(tradeIndex)) && (dom.GetObject(roomIndex))){
      foreach(channelIndex, dom.GetObject(roomIndex).EnumUsedIDs()){
        channel = dom.GetObject(channelIndex);
        foreach(functionIndex, channel.ChnFunction()){
          if(dom.GetObject(functionIndex).Name() == tradeIndex){
            if(switch == "an"){
              if(!channel.DPByHssDP("STATE").Value()){channel.DPByHssDP("STATE").State(1);}
              if(!channel.DPByHssDP("LEVEL").Value()){channel.DPByHssDP("LEVEL").State(1.0);}
            }
            if(switch == "aus"){
              if(channel.DPByHssDP("STATE").Value()){channel.DPByHssDP("STATE").State(0);}
              if(channel.DPByHssDP("LEVEL").Value()){channel.DPByHssDP("LEVEL").State(0.0);}
            }
          }
        }
      }
    }
  }
}
Ich hoffe, Alchy hat nichts dagegen, dass ich das Skript etwas modifiziert habe. Nun kann man dasselbe Skript zum ein- oder ausschalten verwenden, wobei es auf bestimmte Gewerke (tradeList) UND Räume (roomList) beschränkt werden kann.

Gruß,

Thorsten
CCU3 mit stets aktueller FW und den Addons "CUxD" und "Programmedrucken", ioBroker auf Synology DiskStation DS718+ im Docker-Container;
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.

mwe25
Beiträge: 74
Registriert: 04.01.2010, 19:16
Hat sich bedankt: 1 Mal

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

Beitrag von mwe25 » 29.03.2017, 11:47

Danke für eure Mühe. Werde mich die Tage mal an die Arbeit machen ...
CCU2, Rolladenaktoren, Fensterkontakte, Raumthermostate, Regensensor ...

nicolas-eric
Beiträge: 3302
Registriert: 07.01.2015, 23:26
Wohnort: Scheeßel
Hat sich bedankt: 21 Mal
Danksagung erhalten: 11 Mal

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

Beitrag von nicolas-eric » 29.03.2017, 15:09

Komisch.
Das von dtp gepostete Script macht bei mir gar nichts.

Code: Alles auswählen

! Aktoren für bestimmte Gewerke und Räume ein- oder ausschalten
! by Alchy und dtp

string switch = "aus"; ! Verbraucher einschalten: "an", Verbraucher ausschalten: "aus"
string tradeList = "Licht"; ! Liste der Gewerke (trennen mit "\t", alle Gewerke: "alle")   
string roomList = "Wohnung"; ! Liste der Räume (trennen mit "\t", alle Räume: "alle") 

! +++++ Variablendeklaration +++++
string tradeIndex; string roomIndex; string channelIndex; string functionIndex;
var channel;

if(roomList == "alle"){roomList = dom.GetObject(ID_ROOMS).EnumNames();}
if(tradeList == "alle"){tradeList = dom.GetObject(ID_FUNCTIONS).EnumNames();}

foreach(tradeIndex, tradeList){
  foreach(roomIndex, roomList){
    if((dom.GetObject(tradeIndex)) && (dom.GetObject(roomIndex))){
      foreach(channelIndex, dom.GetObject(roomIndex).EnumUsedIDs()){
        channel = dom.GetObject(channelIndex);
        foreach(functionIndex, channel.ChnFunction()){
          if(dom.GetObject(functionIndex).Name() == tradeIndex){
            if(switch == "an"){
              if(!channel.DPByHssDP("STATE").Value()){channel.DPByHssDP("STATE").State(1);}
              if(!channel.DPByHssDP("LEVEL").Value()){channel.DPByHssDP("LEVEL").State(1.0);}
            }
            if(switch == "aus"){
              if(channel.DPByHssDP("STATE").Value()){channel.DPByHssDP("STATE").State(0);}
              if(channel.DPByHssDP("LEVEL").Value()){channel.DPByHssDP("LEVEL").State(0.0);}
            }
          }
        }
      }
    }
  }
}
Setze ich bei Gewerk "alle" ein, schaltet es alle im Raum "Wohnung" aus.
Sobald ich aber ein Gewerk setze, anstatt "alle" passiert nichts.
Natürlich sind in diesen Gewerken auch Autoren vorhanden, z.B. Gewerk "Licht"

Das alte Script von Alchy macht im selben Gewerk/Raum alles Licht aus.

[EDIT BY ALCHY]
Bitte zukünftig lieber verlinken statt hier einfügen >> H I E R <<
Wenn ich das Script mal anpasse, geistern mir zuviele Kopien rum.
Danke
[/EDIT]
Zuletzt geändert von alchy am 29.03.2017, 15:25, insgesamt 1-mal geändert.
Grund: siehe [EDIT]

dtp
Beiträge: 10658
Registriert: 21.09.2012, 08:09
System: CCU
Wohnort: Stuttgart
Hat sich bedankt: 320 Mal
Danksagung erhalten: 501 Mal

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

Beitrag von dtp » 30.03.2017, 11:56

Was liefert denn bei Dir folgendes Skript für einen Output?

Code: Alles auswählen

string tradeIndex; string roomIndex;

string roomList = dom.GetObject(ID_ROOMS).EnumNames();
string tradeList = dom.GetObject(ID_FUNCTIONS).EnumNames();

foreach(tradeIndex, tradeList){
  WriteLine(tradeIndex);
}
foreach(roomIndex, roomList){
  WriteLine(roomIndex);
}
Zuletzt geändert von dtp am 30.03.2017, 16:12, insgesamt 1-mal geändert.
CCU3 mit stets aktueller FW und den Addons "CUxD" und "Programmedrucken", ioBroker auf Synology DiskStation DS718+ im Docker-Container;
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.

alchy
Beiträge: 10754
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 673 Mal

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

Beitrag von alchy » 30.03.2017, 15:26

dtp hat geschrieben: Was liefert denn bei Dir folgendes Skript für einen Output?
Es liefert gar keinen Output.
Es sei denn er korrigiert die Zeile:

foreach(roonIndex, roomList){

Alchy

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

nicolas-eric
Beiträge: 3302
Registriert: 07.01.2015, 23:26
Wohnort: Scheeßel
Hat sich bedankt: 21 Mal
Danksagung erhalten: 11 Mal

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

Beitrag von nicolas-eric » 30.03.2017, 16:06

Das Script mit M statt N (danke Alchy) liefert folgendes Ergebnis:

Code: Alles auswählen

funcButton
funcCentral
funcClimateControl
funcEnergy
funcEnvironment
funcHeating
funcLight
funcLock
funcSecurity
funcWeather
roomBathroom
roomBedroom
roomHWR
roomKitchen
roomLivingRoom
roomTerrace
Wohnung
Ich hatte halt extra den Raum "Wohnung" angelegt und da alle Lichter rein gepackt, weil das Script ein Gewerk nicht schalten wollte und sobald ein Gewerk mit drin steht und nicht "alle" schaltet es auch nichts.

dtp
Beiträge: 10658
Registriert: 21.09.2012, 08:09
System: CCU
Wohnort: Stuttgart
Hat sich bedankt: 320 Mal
Danksagung erhalten: 501 Mal

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

Beitrag von dtp » 30.03.2017, 16:13

alchy hat geschrieben: Es liefert gar keinen Output.
Doch. Für die Gewerke hätte es einen Output geliefert. ;)

Trotzdem Danke für den Hinweis. Hab's oben korrigiert.

Gruß,

Thorsten
CCU3 mit stets aktueller FW und den Addons "CUxD" und "Programmedrucken", ioBroker auf Synology DiskStation DS718+ im Docker-Container;
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.

alchy
Beiträge: 10754
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 673 Mal

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

Beitrag von alchy » 30.03.2017, 16:16

Die Gewerkelisteund analog dazu Raumliste überarbeiten.

Alchy

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

dtp
Beiträge: 10658
Registriert: 21.09.2012, 08:09
System: CCU
Wohnort: Stuttgart
Hat sich bedankt: 320 Mal
Danksagung erhalten: 501 Mal

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

Beitrag von dtp » 30.03.2017, 16:18

Hallo nicolas-eric,

dann führe das Skript noch mal "funcLight" statt "Licht" aus oder überarbeite die Gewerkliste, wie von alchy angeregt.

Gruß,

Thorsten
CCU3 mit stets aktueller FW und den Addons "CUxD" und "Programmedrucken", ioBroker auf Synology DiskStation DS718+ im Docker-Container;
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.

alchy
Beiträge: 10754
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 673 Mal

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

Beitrag von alchy » 30.03.2017, 16:25

dtp hat geschrieben:
alchy hat geschrieben: Es liefert gar keinen Output.
Doch. Für die Gewerke hätte es einen Output geliefert. ;)
Nö, hätte es nicht. :roll:
Es hätte *IMHO* einen SyntaxError geworfen und fertig.


Alchy

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

Antworten

Zurück zu „HomeMatic allgemein“