Ankündigung

Einklappen
Keine Ankündigung bisher.

Licht Nachts Gedimmt einschalten

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [WireGate-Plugin] Licht Nachts Gedimmt einschalten

    Hallo,

    da ich in den Code-Schnipseln nichts gefunden habe, hier mal ein simples Plugin, dass Nachts (zwischen zwei zu definierenden Uhrzeiten) beim Einschalten eines Lichts einen Dimmwert hinterherschickt.

    Bei mir läuft es mit einem PM im Flur. Wenn es dann irgendwann endlich eine Schlafen-Szene gibt, muss es es dann darauf reagieren. Oder man könnte eigentlich auch den Helligskeitswert vom PM abfragen und sich danach richten...

    Code:
    # Nachts Licht nur gedimmt einschalten.
    # Plugin hört auf GA des Ein-Befehles und schickt Dimmwert hinterher.
    # V0.5 2011-03-06
    
    ### Definitionen 
    ### Hier werden die Werte/Gruppenadressen definiert
    my $lichtein_ga = "1/1/11";  # Gruppenadresse Licht Ein/Aus
    my $lichtdim_ga  = "1/3/65";   # Gruppenadresse Licht Dimmwert
    my $dimvalue = 25;   # Dimmwert
    my $starthour = 21;   # Stunde, ab der gedimmt werden soll
    my $endhour = 7;   # Stunde, ab der nicht mehr gedimmt werden soll
    ### Ende Definitionen
    
    # Eigenen Aufruf-Zyklus auf 1x täglich setzen, hört ja auf GA
    $plugin_info{$plugname.'_cycle'} = 86400;
    
    # Plugin an Gruppenadresse "anmelden"
    $plugin_subscribe{$lichtein_ga}{$plugname} = 1;
    
    # Nur bei einer gesendeten 1 reagieren
    if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $lichtein_ga && defined $msg{'value'} && $msg{'value'} == "1" ) {
        # Aktuelle Stunde
        my $crthour = `date \"+%H\"`;
        # Wenn innerhalb des Zeitraumes
        if ($crthour >= $starthour || $crthour <=$endhour) {
            knx_write($lichtdim_ga,$dimvalue,5); # Dimmwert senden
            #return "Gedimmt";
        }
    }
    
    # Kein Log
    return 0;

    #2
    Sieht einfach und verständlich aus das Plugin, nur eine Frage, Dimmer, und dimmbare Lampen vorausgesetzt, oder?

    René

    Kommentar


      #3
      Licht Nachts Gedimmt einschalten

      das frage ich mich auch...
      EPIX
      ...und möge der Saft mit euch sein...
      Getippt von meinen Zeigefingern auf einer QWERTZ Tastatur

      Kommentar


        #4
        Zitat von NeubauRe Beitrag anzeigen
        Sieht einfach und verständlich aus das Plugin, nur eine Frage, Dimmer, und dimmbare Lampen vorausgesetzt, oder?
        Ja, ein Dimmer brauchst Du schon. Und das passende Leuchtmittel ebenfalls.

        Gruß

        Kommentar


          #5
          Eine kurze Ergänzung zum Verständnis:

          Da beim Vergleich der $endhour mit einem <= gearbeitet wurde,
          wird hier in dem Beispiel bis einschliesslich 7:59 gedimmt. Erst
          ab 8:00 wird der Vergleich fehlschlagen und die normale Helligkeit
          verwendet.
          Da mich das etwas verwirrt hat, habe ich bei mir den Vergleich geändert
          (ohne das '=' bei $endhour):

          Code:
          if ($crthour >= $starthour || $crthour <$endhour)
          Das war für mich näher an den 21-7 Uhr, die ich im Sinn hatte.

          luigi

          Kommentar


            #6
            Sowohl im SVN als auch im Obigen Code sind 2 Anführungszeichen oder wie immer die heißen falsch:

            Code:
             my $crthour = `date \"+%H\"`;
            ersetzen durch

            Code:
             my $crthour = 'date \"+%H\"';
            Gruß Mirko
            Umgezogen? Ja! ... Fertig? Nein!
            Baustelle 2.0 !

            Kommentar


              #7
              Update

              Weil es hier gut aufgehoben ist, der Hinweis auf eine neue Version.

              Probleme wurden bislang hier besprochen: https://knx-user-forum.de/wiregate/2...ert-nicht.html

              NEU:
              - Auslagerung der Konfiguration in /etc/wiregate/plugin/generic/conf.d
              - Minutengenaues Dimmen möglich

              Link ins SVN: SourceForge.net Repository - [openautomation] Log of /wiregate/plugin/generic/Nacht-Nachdimmen

              conf_sample
              Code:
              # Nachts Licht nur gedimmt einschalten.
              # Plugin hört auf GA des Ein-Befehles und schickt Dimmwert hinterher.
              # Autor: kleinklausi -> knx-user-forum.de
              # V1.0 2012-07-20
              # Minutengenaues dimmen möglich
              # Auslagerung der Konfiguration in .conf file /etc/wiregate/plugin/generic/conf.d
              # JuMi2006 -> knx-user-forum.de
              
              ### Definitionen 
              ### Hier werden die Werte/Gruppenadressen definiert
              $lichtein_ga = "1/2/20";  	# Gruppenadresse Licht Ein/Aus
              $lichtdim_ga  = "1/2/23";   # Gruppenadresse Licht Dimmwert
              $dimvalue = 15;   			# Dimmwert
              $start = "22:00";   		# Stunde, ab der gedimmt werden soll
              $end = "6:30";   			# Stunde, ab der nicht mehr gedimmt werden soll
              ### Ende Definitionen
              Plugin
              Code:
              # Nachts Licht nur gedimmt einschalten.
              # Plugin hört auf GA des Ein-Befehles und schickt Dimmwert hinterher.
              # Autor: kleinklausi -> knx-user-forum.de
              # V1.0 2012-07-20 
              # Minutengenaues dimmen möglich
              # Auslagerung der Konfiguration in .conf file /etc/wiregate/plugin/generic/conf.d
              # update: JuMi2006 -> knx-user-forum.de
              
              ### Variablen Einlesen/Deklarieren
              
              use Time::Local;
              my ($sec, $min, $hour, $day, $mon, $year, $wday, $yday) = localtime();
              my $now = sprintf ("%02d:%02d",$hour,$min);
              my ($lichtein_ga,$lichtdim_ga,$dimvalue,$start,$end);
              my ($sh,$sm,$eh,$em);
              &readConf;
              
              # Eigenen Aufruf-Zyklus auf 1x täglich setzen, hört ja auf GA
              $plugin_info{$plugname.'_cycle'} = 86400;
              # Plugin an Gruppenadresse "anmelden"
              $plugin_subscribe{$lichtein_ga}{$plugname} = 1;
              
              if ($start =~/(\w{1,})\:(\w{1,})/)
              {
              $sh = $1;
              $sm = $2;
              }
              
              if ($end =~/(\w{1,})\:(\w{1,})/)
              {
              $eh = $1;
              $em = $2;
              }
              
              my $su = timelocal (0,$sm,$sh,$day,$mon,$year); #Start-Zeit in Unixzeit
              my $eu = timelocal (0,$em,$eh,$day,$mon,$year); #End-Zeit in Unixzeit
              
              my $time = time ();
              
              if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $lichtein_ga && $msg{'value'} == '1' ) {
              
              ###Startzeit vor Endzeit z.B. 14-18 Uhr
              	if ($sh <= $eh) ###Startzeit vor Endzeit z.B. 14-18 Uhr
              	{
              	
              	if ($time < $eu && $time > $su)
              	{
              	#DIMMEN
              	knx_write($lichtdim_ga,$dimvalue,5); # Dimmwert senden
              	return "Gedimmt $now Uhr";
              	}else{}
              	
              	if ($sm > $em && $sh == $eh) 
              	{
              	#DIMMEN
              	knx_write($lichtdim_ga,$dimvalue,5); # Dimmwert senden
              	return "Gedimmt $now Uhr";
              	}else{}
              	
              	}
              
              ### Startzeit nach Endzeit z.B. 18-7 Uhr
              	if ($sh > $eh) ### Startzeit nach Endzeit z.B. 18-7 Uhr
              	{
              	
              	if ($time > $su)
              	{
              	#DIMMEN
              	knx_write($lichtdim_ga,$dimvalue,5); # Dimmwert senden
              	return "Gedimmt $now Uhr";
              	}else{}
              	
              	if ($time < $eu)
              	{
              	#DIMMEN
              	knx_write($lichtdim_ga,$dimvalue,5); # Dimmwert senden
              	return "Gedimmt $now Uhr";
              	}else{}
              	
              	}
              
              }
              return;
              
              ### READ CONF ###
              sub readConf
              {
                  my $confFile = '/etc/wiregate/plugin/generic/conf.d/'.basename($plugname,'.pl').'.conf';
                  if (! -f $confFile)
                  {
                      plugin_log($plugname, "no conf file [$confFile] found."); 
                  }
                  else
                  {
                      #plugin_log($plugname, "reading conf file [$confFile]."); 
                      open(CONF, $confFile);
                      my @lines = <CONF>;
                      close($confFile);
                      my $result = eval("@lines");
                      #($result) and plugin_log($plugname, "conf file [$confFile] returned result[$result]");
                      if ($@) 
                      {
                          plugin_log($plugname, "ERR: conf file [$confFile] returned:");
                          my @parts = split(/\n/, $@);
                          plugin_log($plugname, "--> $_") foreach (@parts);
                      }
                  }
              }
              Umgezogen? Ja! ... Fertig? Nein!
              Baustelle 2.0 !

              Kommentar


                #8
                Hi Mirko,

                Vielen Dank. Finde ich super!

                Eine Bitte. Könntest Du bitte das plugin_subscribe noch auf 0 setzen. Eigentlich brauchen wir ja gar keinen zyklischen Aufruf. Damals wusste ich noch nicht, dass das geht.

                Code:
                $plugin_subscribe{$lichtein_ga}{$plugname} = 0;
                Danke und Gruß,
                Moritz

                Kommentar


                  #9
                  Ja könnte man machen, schadet aber auch nicht Wird ja weder irgendwas ins log geschrieben noch wahnsinnig Ressourcen verbrannt .

                  Hol ich noch nach.
                  Umgezogen? Ja! ... Fertig? Nein!
                  Baustelle 2.0 !

                  Kommentar


                    #10
                    Hi,

                    hab mir das Plugin mal kurz angesehen ... muss das für jedes Licht, das ich nachdimmen will, einmal eingebunden werden? War nicht besser, wenn man da einfach eine Liste von Lichtern definiert, die nachgedimmt werden sollen?

                    LG

                    Kommentar


                      #11
                      könnte man auch machen, aber dann mit hashes damit du für jede GA einen anderen Wert und andere Zeiten angeben kannst. Irgendwann spielen dann aber auch wieder Laufzeiten eine Rolle. Ich hatte als Schalt-GA mal eine Rückmelde-GA vom Dimmer (I/O) und da kam es zu Verzögerungen (logisch) und wildem Lichtspiel

                      Tob dich aus !

                      Gruß Mirko
                      Umgezogen? Ja! ... Fertig? Nein!
                      Baustelle 2.0 !

                      Kommentar


                        #12
                        Ja klar, dass da jedes Licht einzeln konfiguriert werden können muss. Im Prinzip war aber dasselbe, wie bei meiner Beschattungssteuerung, oder bei der Zeitschaltuhr.

                        Evtl. setzt ich mich am Abend mal dazu, sollte ja relativ schnell gemacht sein.

                        Kommentar


                          #13
                          Ja das wär was, ich schaffs momentan nicht. Ich hab bloß erstmal committed damit es nicht untergeht.
                          Umgezogen? Ja! ... Fertig? Nein!
                          Baustelle 2.0 !

                          Kommentar


                            #14
                            Gut, dann schau ichs mir mal an.

                            Kommentar


                              #15
                              So, hab mir das jetzt mal angeschaut und umgebaut. Nachdem ich aber ca. 500km von daheim weg sitz tu ich mir gerade schwer mit testen. Und so ein Guru, dass ich grundsätzlich fehlerfreien Code produzier, bin ich nun mal nicht.

                              Deshalb nun hier mal das geänderte Plugin. Ins SVN check ichs dann am Fr ein, sobald ichs getestet hab.

                              Conf-File
                              Code:
                              # Nachts Licht nur gedimmt einschalten.
                              # Plugin hört auf GA des Ein-Befehles und schickt Dimmwert hinterher.
                              # Autor: kleinklausi -> knx-user-forum.de
                              # V1.0 2012-07-20
                              # Minutengenaues dimmen möglich
                              # Auslagerung der Konfiguration in .conf file /etc/wiregate/plugin/generic/conf.d
                              # JuMi2006 -> knx-user-forum.de
                              
                              # Updates:
                              # 20120814, mclb
                              # - Umbau auf Liste von Hashes, damit das Plugin auch für mehrere Lichter funktioniert.
                              
                              ### Definitionen 
                              ### Hier werden die Werte/Gruppenadressen definiert
                              $debug = 1;
                              # gaEin:     Gruppenadresse Licht Ein/Aus
                              # gaDimm:    Gruppenadresse Licht Dimmwert
                              # valueDimm: Dimmwert
                              # start:     Zeitpunkt, ab dem gedimmt werden soll (Format: hh:mm)
                              # end:       Zeitpunkt, ab dem nicht mehr gedimmt werden soll (Format: hh:mm)
                              push @lichter, { gaEin => "1/2/20", gaDimm => "1/2/23", valueDimm => 15, start => "22:00", end => "6:30" };
                              ### Ende Definitionen
                              Plugin
                              Code:
                              # Nachts Licht nur gedimmt einschalten.
                              # Plugin hört auf GA des Ein-Befehles und schickt Dimmwert hinterher.
                              # Autor: kleinklausi -> knx-user-forum.de
                              # V1.0 2012-07-20 
                              # Minutengenaues dimmen möglich
                              # Auslagerung der Konfiguration in .conf file /etc/wiregate/plugin/generic/conf.d
                              # update: JuMi2006 -> knx-user-forum.de
                              
                              # Updates:
                              # 20120814, mclb
                              # - Umbau auf Liste von Hashes, damit das Plugin auch für mehrere Lichter funktioniert.
                              
                              ### Variablen Einlesen/Deklarieren
                              
                              use Time::Local;
                              my ($sec, $min, $hour, $day, $mon, $year, $wday, $yday) = localtime();
                              my $now = sprintf ("%02d:%02d",$hour,$min);
                              my ($lichtein_ga,$lichtdim_ga,$dimvalue,$start,$end);
                              my ($sh,$sm,$eh,$em);
                              my {$su, $eu, $time};
                              my $debug = 0;
                              my @lichter;
                              &readConf;
                              
                              # Eigenen Aufruf-Zyklus auf 1x täglich setzen, hört ja auf GA
                              $plugin_info{$plugname.'_cycle'} = 86400;
                              # Plugin an Gruppenadresse "anmelden"
                              $plugin_subscribe{$lichtein_ga}{$plugname} = 1;
                              
                              # Zeit nur einmal berechnen
                              $time = time ();
                              
                              foreach $licht (@lichter) {
                               if ($licht->{start} =~/(\w{1,})\:(\w{1,})/) {
                                $sh = $1;
                                $sm = $2;
                               }
                               
                               if ($licht->{end} =~/(\w{1,})\:(\w{1,})/) {
                                $eh = $1;
                                $em = $2;
                               }
                              
                               $su = timelocal (0,$sm,$sh,$day,$mon,$year); #Start-Zeit in Unixzeit
                               $eu = timelocal (0,$em,$eh,$day,$mon,$year); #End-Zeit in Unixzeit
                              
                               if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $licht->{gaEin} && $msg{'value'} == '1' ) {
                              
                              ###Startzeit vor Endzeit z.B. 14-18 Uhr
                                if ($sh <= $eh) { ###Startzeit vor Endzeit z.B. 14-18 Uhr
                                 if ($time < $eu && $time > $su) {
                              	#DIMMEN
                              	knx_write($licht->{gaDimm},$licht->{valueDimm},5); # Dimmwert senden
                              	if ($debug == 1) { plugin_log($plugname,"Gedimmt $now Uhr"); }
                                 }
                              	
                                 if ($sm > $em && $sh == $eh) {
                              	#DIMMEN
                              	knx_write($licht->{gaDimm},$licht->{valueDimm},5); # Dimmwert senden
                              	if ($debug == 1) { plugin_log($plugname,"Gedimmt $now Uhr"); }
                                 }
                                }
                              
                              ### Startzeit nach Endzeit z.B. 18-7 Uhr
                                if ($sh > $eh) { ### Startzeit nach Endzeit z.B. 18-7 Uhr
                                 if ($time > $su) {
                              	#DIMMEN
                              	knx_write($licht->{gaDimm},$licht->{valueDimm},5); # Dimmwert senden
                              	if ($debug == 1) { plugin_log($plugname,"Gedimmt $now Uhr"); }
                                 }
                              
                                 if ($time < $eu) {
                                  #DIMMEN
                              	knx_write($licht->{gaDimm},$licht->{valueDimm},5); # Dimmwert senden
                              	if ($debug == 1) { plugin_log($plugname,"Gedimmt $now Uhr"); }
                                 }
                                }
                               }
                              }
                              return;
                              
                              ### READ CONF ###
                              sub readConf
                              {
                               my $confFile = '/etc/wiregate/plugin/generic/conf.d/'.basename($plugname,'.pl').'.conf';
                               if (! -f $confFile) {
                                plugin_log($plugname, "no conf file [$confFile] found."); 
                               } else {
                                #plugin_log($plugname, "reading conf file [$confFile]."); 
                                open(CONF, $confFile);
                                my @lines = <CONF>;
                                close($confFile);
                                my $result = eval("@lines");
                                #($result) and plugin_log($plugname, "conf file [$confFile] returned result[$result]");
                                if ($@) {
                                 plugin_log($plugname, "ERR: conf file [$confFile] returned:");
                                 my @parts = split(/\n/, $@);
                                 plugin_log($plugname, "--> $_") foreach (@parts);
                                }
                               }
                              }
                              Wer Fehler findet, darf sie gern posten.

                              LG
                              Marcus

                              Kommentar

                              Lädt...
                              X