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

  • renzge
    antwortet
    Guten Abend
    Also ich hab jetzt das Plugin von Plusch getestet -> funktioniert

    und dann mit den geänderten Werten das von hier:
    SourceForge.net Repository - [openautomation] Log of /wiregate/plugin/generic/Nacht-Nachdimmen
    -> funkt auch

    das einzige was ich ändern hab müssen:

    von $msg{'value'} == '1'
    auf $msg{'value'} == '$01'

    jetzt funktioniert es

    danke und lg rene

    Einen Kommentar schreiben:


  • makki
    antwortet
    Dann sollten wir das doch als "funktioniert einfach ohne Tricks und Kniffe" auch ins SVN legen ?

    Makki

    Einen Kommentar schreiben:


  • Plusch
    antwortet
    Wenn Du das Plugin von Sourceforge hast funktioniert es nicht. Dies steht allerdings auch als Kommentar direkt dahinter.
    Unten stehend mal mein funktionierendes Plugin. Kannst ja mal dieses testen.
    Hat dein WG denn die aktuelle Uhrzeit? Hast Du eine Verbindung ins Internet?
    Das WG sollte, so weit ich Makki kenne, zwar auch ohne eine Verbindung die genaue Uhrzeit kennen, aber überprüfen kann man es ja 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 = 2;   # Dimmwert
    my $starthour = 23;   # Stunde, ab der gedimmt werden soll
    my $endhour = 6;   # 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;

    Einen Kommentar schreiben:


  • renzge
    antwortet
    Guten Morgen,
    Leider bekomme ich das Plugin nicht zum Laufen

    Zur Theorie: das Plugin überwacht den Busverkehr und schickt bei Erkennen einer in der .conf-Datei definierten GA einen Dimmwert hinterher - verstehe ich das richtig.

    Im Busmonitor erkennt ich jedoch kein solches Verhalten - Es wird lediglich die Aktion vom PM registriert.

    Muss ich bei der Installation des Plugins noch etwas beachten (aktivieren)?
    Ich habe den Plugin-Code unter dem Namen "DALI Abend gedimmt" und den Konfigurationscode in "config" gespeichert.


    Eine mögliche Ursache:
    In den "Plugin Debug-Infos":

    Datum Uhrzeit vom Bus_last ->
    1304319419.87022

    Datum Uhrzeit vom Bus_result ->
    Fehler beim lesen von Datum/Uhrzeit von 0/0/2 / 0/0/1!

    Bitte um Hilfe
    lg Rene

    Einen Kommentar schreiben:


  • JuMi2006
    antwortet
    Neue Version für minutengenaues Einstellen der Start- und Endzeit liegt im SVN.
    Also 11:25 - 22:30 und 20:15 - 6:15 ist jetzt auch möglich.

    Gruß Mirko

    Einen Kommentar schreiben:


  • JuMi2006
    antwortet
    o.k. ... er will also partout das
    Code:
    use Time::Local;
    Hätte gedacht das ist schon im wiregated implementiert.
    Damit läufts nun.

    Einen Kommentar schreiben:


  • JuMi2006
    antwortet
    Der wesentliche Punkt im o.g. Code ist doch:

    Code:
    my $time = timelocal($sec,$min,$hour,$mday,$mon-1,$year);
    ist das gleiche wie mein:

    Code:
    my $su = timelocal (0,$sm,$sh,$day,$mon,$year);
    Auf den falschen Monat ist jetzt mal gesch....
    Oder seh ich das falsch?

    Das bringt mir eben den o.g. Fehler

    0 entspricht der $sec
    $sm lege ich fest (Start-Minute)
    $sh lege ich fest (Start-Stunde)
    $day kommt aus localtime()
    $mon kommt aus localtime()
    $year kommt aus localtime()

    Jetzt erschlagt mich aber ich sehe da keinen Fehler...bis auf den Monat...

    Einen Kommentar schreiben:


  • makki
    antwortet
    Na gut

    Code:
    use Time::Local;
    
    my $date = '23.10.2011  11:35:00';
    my ($mday,$mon,$year,$hour,$min,$sec) = split(/[\s.:]+/, $date);
    my $time = timelocal($sec,$min,$hour,$mday,$mon-1,$year);
    return $time . " as unix timestamp is " . scalar localtime $time;
    Hab ich da gefunden

    Makki

    Einen Kommentar schreiben:


  • JuMi2006
    antwortet
    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 ...

    Einen Kommentar schreiben:


  • JuMi2006
    antwortet
    Nee schon o.k. Die Suchergebnisse 3 bis 7 waren ja schon von mir "Lila" angesurft.

    Einen Kommentar schreiben:


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

    Makki

    Einen Kommentar schreiben:


  • JuMi2006
    antwortet
    Und wie in diesem Fall? Ich möchte aus Jahr, Monat, Tag, Stunde und Minute einen Unix Timestamp erzeugen.

    Einen Kommentar schreiben:


  • makki
    antwortet
    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

    Einen Kommentar schreiben:


  • JuMi2006
    antwortet
    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;

    Einen Kommentar schreiben:


  • JuMi2006
    antwortet
    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ß

    Einen Kommentar schreiben:

Lädt...
X