Alle Lichter an bzw. ausschalten (Je Raum)

Allgemeines zur HomeMatic Haussteuerung

Moderator: Co-Administratoren

dtp
Beiträge: 10655
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:32

alchy hat geschrieben: Nö, hätte es nicht. :roll:
Es hätte *IMHO* einen SyntaxError geworfen und fertig.
Hast natürlich Recht. Man sollte nicht mehrere Dinge parallel machen. :roll:
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.

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, 17:07

Danke Jungs!
Auf Euch ist echt Verlass. :D
Da wäre ich niemals darauf gekommen, dass es intern einen anderen Namen für das Gewerk gibt, als der mir im WebUI angezeigte.
Wie kann man sowas nur programmieren, das verwirrt die User doch nur unnütz.

Hat sich das mit den Namen denn geändert in letzter Zeit?
Bei der alten CCU, die ich Ende 2015 am alten Wohnort gelassen hatte, funktionierte es, die standardmässigen Gewerke mit dem im WebUI angezeigten Namen abzufragen, da gab es keine unterschiedlichen Namen.

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

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

Beitrag von alchy » 30.03.2017, 17:22

Das Problem taucht hier immer wieder mal auf. Irgendwo hab ich das schon mal ausführlich beschrieben. Es macht Sinn die Listen immer mal zu checken und ggf. Wie beschrieben zu überarbeiten.

Was da das ursächliche Problem ist, hab ich noch nicht untersucht. Geschuldet der Tatsache, daß ich es bei mir nicht habe.
Ich denke das kam mit der Umstellung der Űbersetzung auf mehrere Dateien verteilt. Ist aber schon ne Weile her.

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: 10655
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 » 02.04.2017, 13:00

Hi,

ich habe das Skript noch mal ein wenig an meine Bedürfnisse angepasst, da ich es eigentlich nur für das Ausschalten beim Abschließen brauche, aber einige Verbraucher, wie die Waschmaschine und den Trockner vom automatischen Ausschalten ausschließen wollte. Am Ende des Skripts lasse ich mir noch eine Push-Nachricht aller ausgeschalteten Kanäle schicken.

Code: Alles auswählen

! Aktoren für bestimmte Gewerke und Räume bei Abwesenheit ausschalten
! Version 1.2, Autor: dtp 

string tradeList = "Licht\tVerbraucher"; ! Liste der Gewerke (trennen mit "\t", alle Gewerke: "alle")   
string roomList = "alle"; ! Liste der Räume (trennen mit "\t", alle Räume: "alle")
string exList = "DG Schlafzimmer Dimmer Kanal 2\tUG Hobbyraum Dimmer Kanal 2\tUG HWR Waschmaschine Schalter\tUG HWR Trockner Schalter"; ! Liste der Kanäle, die nicht ausgeschaltet werden dürfen (trennen mit "\t")

! +++++ Variablendeklaration +++++
string tradeIndex; string roomIndex; string channelIndex; string functionIndex; string device;
string list = ""; string message;
var channel;

! +++++ Setzen der Priorität für die Push-Nachricht +++++
dom.GetObject("CCU SV Push Prio").State("-1");

! +++++ Sound für Pushover-Nachricht +++++
if(dom.GetObject("CCU SV Pushover Sound")){dom.GetObject("CCU SV Pushover Sound").State("none");}

! +++++ Skriptkern +++++
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);
        device = dom.GetObject(channel.Device());
        foreach(functionIndex, channel.ChnFunction()){
          if(dom.GetObject(functionIndex).Name() == tradeIndex){
            if((exList.Find(channel.Name())).ToInteger() == -1){
              if(channel.DPByHssDP("STATE").Value()){channel.DPByHssDP("STATE").State(0); list = list#"\n"#channel.Name();}
              if(channel.DPByHssDP("LEVEL").Value()){channel.DPByHssDP("LEVEL").State(0.0); list = list#"\n"#channel.Name();}
            }
          }
        }
      }
    }
  }
}

! +++++ Erzeugen der Nachricht +++++
message = "Geräte-Kanäle bei Abwesenheit ausgeschaltet!";

if(list != ""){
  message = message#list;

  ! +++++ Programm "CCU PRG Push-Nachrichten" ausführen +++++
  dom.GetObject("CCU SV Push Text").State(message);
  dom.GetObject("CCU PRG Push-Nachrichten").ProgramExecute();
}
Und hier das zugehörige Programm.
2017-04-02_17h14_17.png
Den zugehörigen CUxD-Timer starte und stoppe ich übrigens mit folgendem Programm. Dies nur der Vollständigkeit halber. ;)
2017-04-02_17h16_10.png
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.

Karlinho
Beiträge: 42
Registriert: 13.12.2016, 17:45

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

Beitrag von Karlinho » 02.05.2017, 18:29

Hallo Zusammen,

seit dem Wochenende (evtl. nach Neustart) werden meine Osram Lampen (A60 RGBW und FLEX RGBW) nicht mehr über das Skript ausgeschaltet.

Code: Alles auswählen

    ! Aktoren für bestimmte Gewerke und Räume bei Abwesenheit ausschalten
    ! Version 1.2, Autor: dtp

    string tradeList = "Licht\tVerbraucher"; ! Liste der Gewerke (trennen mit "\t", alle Gewerke: "alle")   
    string roomList = "alle"; ! Liste der Räume (trennen mit "\t", alle Räume: "alle")
    string exList = "Wohnzimmer Funk-Schaltaktor Tablet 1\tArbeitszimmer Funk-Schaltaktor DiskStation 1"; ! Liste der Kanäle, die nicht ausgeschaltet werden dürfen (trennen mit "\t")

    ! +++++ Variablendeklaration +++++
    string tradeIndex; string roomIndex; string channelIndex; string functionIndex; string device;
    string list = ""; string message;
    var channel;

    ! +++++ Setzen der Priorität für die Push-Nachricht +++++
    dom.GetObject("CCU SV Push Prio").State("-1");

    ! +++++ Sound für Pushover-Nachricht +++++
    if(dom.GetObject("CCU SV Pushover Sound")){dom.GetObject("CCU SV Pushover Sound").State("none");}

    ! +++++ Skriptkern +++++
    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);
            device = dom.GetObject(channel.Device());
            foreach(functionIndex, channel.ChnFunction()){
              if(dom.GetObject(functionIndex).Name() == tradeIndex){
                if((exList.Find(channel.Name())).ToInteger() == -1){
                  if(channel.DPByHssDP("STATE").Value()){channel.DPByHssDP("STATE").State(0); list = list#"\n"#channel.Name();}
                  if(channel.DPByHssDP("LEVEL").Value()){channel.DPByHssDP("LEVEL").State(0.0); list = list#"\n"#channel.Name();}
                }
              }
            }
          }
        }
      }
    }

    ! +++++ Erzeugen der Nachricht +++++
    message = "Geräte-Kanäle bei Abwesenheit ausgeschaltet!";

    if(list != ""){
      message = message#list;

      ! +++++ Programm "CCU PRG Push-Nachrichten" ausführen +++++
      dom.GetObject("CCU SV Push Text").State(message);
      dom.GetObject("CCU PRG Push-Nachrichten").ProgramExecute();
    }
Jemand eine Idee woran es liegen kann?

Gruß Karl

Benutzeravatar
joni-blue
Beiträge: 1171
Registriert: 04.01.2012, 12:20
System: CCU
Wohnort: Hannover
Hat sich bedankt: 6 Mal
Danksagung erhalten: 1 Mal

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

Beitrag von joni-blue » 02.01.2018, 17:59

Hallo Alchy,

Fragt dieses Script die Aktoren aktiv ab oder schaut es nach dem letzten bekannten Wert in der CCU um das Sendeaufkommen zu minimieren?

Lg aus Hannover
Zuletzt geändert von alchy am 18.01.2018, 20:15, insgesamt 1-mal geändert.
Grund: Scriptcopy gelöscht
Reboot tut gut ! ! !

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

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

Beitrag von alchy » 02.01.2018, 18:05

die Scripte verwerten den der CCU bekannten Status.

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.

greatone1
Beiträge: 100
Registriert: 09.12.2007, 11:56
Hat sich bedankt: 5 Mal
Danksagung erhalten: 1 Mal

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

Beitrag von greatone1 » 18.02.2018, 08:21

Hallo Alchy,

ich wollte mich nur für Deine immense Unterstützung der Homematic User hier im Forum bedanken. Dein Script hier zum Ein-/und Ausschalten ist große Klasse. Es hat mir viel Arbeit und Zeit gespart direkt auf so eine tolle Resource zurückgreifen zu können. Vielen Dank für Deine Zeit die Du hier spendierst, Deine absolut professionelle Arbeit und Deine schier unendliche Geduld!

Ewald

FraKo
Beiträge: 58
Registriert: 23.11.2016, 14:34
Danksagung erhalten: 2 Mal

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

Beitrag von FraKo » 19.02.2018, 10:12

Moin Moin,

ich bin gerade auf der Suche nach einem Script, das alle Lampen aus den Gewerk "Licht_Innen" und "Licht_Außen" einfach nur ausschaltet. Ich hätte nun das hier von Alchy genommen:


Nun meine Frage(n): Fragt dieser Script die Aktoren nach deren aktuellen Status direkt ab oder schaut es nur in die CCU? Und wie sieht es hier mit der "Funkpflege" aus? Normalerweise lasse ich in meinen Programmen, wenn ich mehrere Aktoren schalten möchte (wie meine 11 Rollläden), immer 2-3 Sekunden Pause, damit auch wirklich alle Aktoren reagieren. Wie kann eine solche Zeitverzögerung in einem Script realisiert werden? Oder muss man beim schalten mehrerer Aktoren eines Gwerkes über Scripte keine Funkpflege beachten? Neben den ganz normalen HM-Schaltaktoren, habe ich auch noch 3 HMIP-BSM Schalt-Mess-Aktoren die Lichter aus und ein schalten. Die müssen ja sicherlich ob im Code auch noch aufgenommen werden, oder?

Fragen über Fragen :?

Ich würde mich sehr über eine kurz Rückantwort freuen.

Munter
Frank
Zuletzt geändert von alchy am 19.02.2018, 10:26, insgesamt 1-mal geändert.
Grund: Scriptcopy gelöscht

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

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

Beitrag von alchy » 19.02.2018, 10:23

Bitte immer >> H I E R << nach der aktuellen Version des Scriptes schauen.

Und bitte immer lieber das Script verlinken, als es als Copy irgendwo zu posten. Ich lösche solche Scriptcopys immer im Forum.


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“