Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - Nachdimmen Plugin funktioniert nicht

Einklappen
Dieses Thema ist geschlossen.
X
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [wiregate] - √ - Nachdimmen Plugin funktioniert nicht

    Hallo,

    ich möchte in meinem Bad nachts das Licht, mit Hilfe des unten stehenden Plugins, gedimmt einschalten lassen. Allerdings ist es nun so das das Licht immer gedimmt eingeschaltet wird, egal zu welcher Uhrzeit, bzw. welche Schaltzeiten ich eingegeben habe.
    Ich denke mal das irgendwo nur ein Tippfehler oder ähnliches ist, allerdings kann ich den absolut nicht finden .....

    Vielleicht kann ja mal jemand drüber schauen.
    Danke schon mal.

    Gruß
    Plusch

    Code:
    ### Definitionen 
    ### Hier werden die Werte/Gruppenadressen definiert
    my $lichtein_ga = "3/2/31";  # Gruppenadresse Licht Ein/Aus
    my $lichtdim_ga  = "3/2/7";   # Gruppenadresse Licht Dimmwert
    my $dimvalue = 3;   # Dimmwert
    my $starthour = 19;   # Stunde, ab der gedimmt werden soll
    my $endhour = 6;   # 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
    Hi,

    wenn du die Variable $crthour ausgibst, kommt da

    date \"+%H\"

    Und das verwertet Perl scheinbar als >=19, somit geht er immer in den If-Zweig.

    Probier mal, die Stunden folgendermaßen zu ermitteln, sollte eigentlich gehen:

    Code:
    my ($Sekunden, $Minuten, $Stunden, $Monatstag, $Monat,
        $Jahr, $Wochentag, $Jahrestag, $Sommerzeit) = localtime(time);
    $crthour = $Stunden +1;
    Viele Grüße
    Christian

    Kommentar


      #3
      Da gibt es einen Tippfehler oder so ich wollte das schon mal im svn korrigieren.

      Der Code funktioniert auf jeden Fall:

      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/2/20";  # Gruppenadresse Licht Ein/Aus
      my $lichtdim_ga  = "1/2/23";   # Gruppenadresse Licht Dimmwert
      my $dimvalue = 15;   # Dimmwert
      my $starthour = 23;   # Stunde, ab der gedimmt werden soll
      my $endhour = 7;   # Stunde, ab der nicht mehr gedimmt werden soll
      ### Ende Definitionen
      
      my ($second, $minute, $hour, $dayOfMonth, $month, $yearOffset, $dayOfWeek, $dayOfYear, $daylightSavings);
         ($second, $minute, $hour, $dayOfMonth, $month, $yearOffset, $dayOfWeek, $dayOfYear, $daylightSavings) = localtime();
      
      # 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
      # Nur bei einer gesendeten 1 reagieren
      if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $lichtein_ga && $msg{'value'} == '1' ) {
        
          if ($hour >= $starthour || $hour <$endhour) {
              knx_write($lichtdim_ga,$dimvalue,5); # Dimmwert senden
              return "Gedimmt $hour Uhr";
          }
      }
      
      # Kein Log
      return 0;
      Ich hab auch ewig gebraucht um den Fehler zu finden, habs aber vergessen wo das war. Irgendwelche Anführungszeichen oder sowas hab ich noch im Kopf.
      Umgezogen? Ja! ... Fertig? Nein!
      Baustelle 2.0 !

      Kommentar


        #4
        Danke für die Hinweise. Habe den Tippfehler leider nicht gefunden. Mit dem geposteten Plugin von JuMi funktioniert es nun wie gewünscht.

        Danke euch beiden !

        Gruß Plusch

        Kommentar


          #5
          Code:
          my $crthour = `date \"+%H\"`
          Die einfachen Anführungszeichen sind keine Anführungszeichern sondern statt '. Also beim Programmieren hat jemand ALT statt SHIFT gedrückt.

          Ich versuchs mal im SVN zu ändern.
          Umgezogen? Ja! ... Fertig? Nein!
          Baustelle 2.0 !

          Kommentar


            #6
            Ich versuchs mal im SVN zu ändern.
            Sollte kien Problem sein Hast du TortoiseSVN?
            Gruss Patrik alias swiss

            Kommentar


              #7
              bin dabei ... mit smartsvn (Mac-User)
              Umgezogen? Ja! ... Fertig? Nein!
              Baustelle 2.0 !

              Kommentar


                #8
                Ach soo... OK
                Gruss Patrik alias swiss

                Kommentar


                  #9
                  So, ist gefixed -> SourceForge.net Repository - [openautomation] Contents of /wiregate/plugin/generic/Nacht-Nachdimmen
                  Da war noch ein kleiner Bug ... oder Feature:

                  Code:
                  if ($crthour >= $starthour || $crthour <=$endhour)
                  Hat bei $endhour = 7 bis 7:59 Uhr gedimmt, irgendwie unlogisch

                  Also jetzt:
                  Code:
                  if ($crthour >= $starthour || $crthour <$endhour)
                  Damit wird bei $endhour = 7 bis 6:59 gedimmt, finde ich schlüssiger.

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

                  Kommentar


                    #10
                    Ich hab mir das Plugin nochmal zur Brust genommen um eine Minutengenaue Schaltung zur realisieren.
                    Vorab es funktioniert, jedoch erhalte ich folgende Fehlermeldung:

                    PHP-Code:
                    Undefined subroutine &main::mktime called at (eval 25line 40 
                    Grund scheint mktime zu sein, beim entwickeln hat das Ergenis von mktime aber gestimmt und auch keine Fehlermeldung ausgegeben.

                    Wenn das behoben ist würde ich es wieder ins SVN schieben...und vielleicht noch eine .conf implementieren

                    Code:
                    #return;
                    #$plugin_info{$plugname.'_cycle'} = 0;
                    # Nachts Licht nur gedimmt einschalten.
                    # Plugin hört auf GA des Ein-Befehles und schickt Dimmwert hinterher.
                    # V1.0 2012-07-20
                    # Minutengenaues dimmen möglich
                    # JuMi2006 -> knx-user-forum.de
                    
                    ### Definitionen 
                    ### Hier werden die Werte/Gruppenadressen definiert
                    my $lichtein_ga = "1/2/20";  # Gruppenadresse Licht Ein/Aus
                    my $lichtdim_ga  = "1/2/23";   # Gruppenadresse Licht Dimmwert
                    my $dimvalue = 15;   # Dimmwert
                    my $start = "22:00";   # Uhrzeit, ab der gedimmt werden soll
                    my $end = "06:30";   # Uhrzeit, ab der nicht mehr gedimmt werden soll
                    ### Ende Definitionen
                    
                    
                    my ($sec, $min, $hour, $day, $mon, $year, $wday, $yday) = localtime();
                    
                    my ($sh,$sm,$eh,$em);
                    # 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 = mktime (0,$sm,$sh,$day,$mon,$year); #Start-Zeit in Unixzeit
                    my $eu = mktime (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
                    	return "Gedimmt $hour:$min Uhr";
                    	knx_write($lichtdim_ga,$dimvalue,5); # Dimmwert senden
                    	}else{}
                    	
                    	if ($sm > $em && $sh == $eh) 
                    	{
                    	#DIMMEN
                    	return "Gedimmt $hour:$min Uhr";
                    	knx_write($lichtdim_ga,$dimvalue,5); # Dimmwert senden
                    	}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 $hour:$min Uhr";
                    	}else{}
                    	
                    	if ($time < $eu)
                    	{
                    	#DIMMEN
                    	knx_write($lichtdim_ga,$dimvalue,5); # Dimmwert senden
                    	return "Gedimmt $hour:$min Uhr";
                    	}else{}
                    	
                    	}
                    
                    }
                    return;
                    Umgezogen? Ja! ... Fertig? Nein!
                    Baustelle 2.0 !

                    Kommentar


                      #11
                      Ich hab zwischen PL29-32 möglichst viele externe Module entfernt, weil die alle (leider ausnahmslos) alle k*** sind; Sorry.

                      Fehlende Funktionen lassen sich leicht nachbilden, wenn man weiss was.. Meist für 1/10 der Resourcen.

                      Makki
                      EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
                      -> Bitte KEINE PNs!

                      Kommentar


                        #12
                        Und wie in diesem Fall? Ich möchte aus Jahr, Monat, Tag, Stunde und Minute einen Unix Timestamp erzeugen.
                        Umgezogen? Ja! ... Fertig? Nein!
                        Baustelle 2.0 !

                        Kommentar


                          #13
                          Mit Verlaub, das kostet 2 Minuten gurgeln: Let me google that for you
                          Sollte man das kopieren oder einfach lesen?

                          Makki
                          EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
                          -> Bitte KEINE PNs!

                          Kommentar


                            #14
                            Nee schon o.k. Die Suchergebnisse 3 bis 7 waren ja schon von mir "Lila" angesurft.
                            Umgezogen? Ja! ... Fertig? Nein!
                            Baustelle 2.0 !

                            Kommentar


                              #15
                              Geht trotzdem nicht:

                              Code:
                              my $su = mktime (0,$sm,$sh,$day,$mon,$year); #Start-Zeit in Unixzeit
                              ->Undefined subroutine &main::mktime

                              und

                              Code:
                              my $su = timelocal (0,$sm,$sh,$day,$mon,$year); #Start-Zeit in Unixzeit
                              ->Undefined subroutine &main::timelocal

                              oder muss es dann DateTime sein, oder Date::Parse ???
                              Oder ist es dann das Suchergebnis 1432 ??? Ich frag nicht ohne bereits Google bemüht zu haben, aber wenn die ersten 100 Ergebnisse auf timelocal oder mktime verweisen ...
                              Umgezogen? Ja! ... Fertig? Nein!
                              Baustelle 2.0 !

                              Kommentar

                              Lädt...
                              X