Ankündigung

Einklappen
Keine Ankündigung bisher.

Zeitschaltuhrplugin

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

  • alexmosel
    antwortet
    ...noch ne Sache, die ich nicht verstehe.

    in den KNX Grundeinstellungen des WG ist als lokale KNX Adresse 1.1.254 eingetrtagen.

    Wenni ch ejtzt in der ETS den Gruppenmonitor mitlaufen lasse, protokolliert dieser aber, dass die Befehle von 15.15.11 abgesetzt werden.

    Prinzipiell nicht schlimm, aber woher rührts ?

    Einen Kommentar schreiben:


  • alexmosel
    antwortet
    ...der FEHLER war, dass die 8 eine führende 0 voran hatte, was sie...warum auch immer.... nicht haben darf !

    puh

    Einen Kommentar schreiben:


  • swiss
    antwortet
    Du hast die Urälteste Version erwischt die es von dem Plugin gibt...

    Ich würde mal die etwas neuere Version 0.5 versuchen:

    Code:
    # Plugin zum Zeit abhängigem schaten von GA's (Schaltuhr)
    # Version 0.5 BETA 03.07.2011
    # Copyright: swiss (https://knx-user-forum.de/members/swiss.html)
    # License: GPL (v2)
    # Aufbau möglichst so, dass man unterhalb der Einstellungen nichts verändern muss!
    
    
    ####################
    ###Einstellungen:###
    ####################
    my @Schaltzeiten;
    
    #Pro Schaltpunkt einfach den unten stehenden Eintrag kopieren und anpassen.
    
    push @Schaltzeiten, { name => "bewässerung_ein", montag => 1, dienstag => 1, mittwoch => 1, donnerstag => 1, freitag => 1, samstag => 0, sonntag => 1, Stunden => 21, Minuten => 02, Wert => 1, DPT => 1, ga => '2/0/0', KW => '', Monat => '' };
    
    push @Schaltzeiten, { name => "bewässerung_aus", montag => 1, dienstag => 1, mittwoch => 1, donnerstag => 1, freitag => 1, samstag => 0, sonntag => 1, Stunden => 21, Minuten => 03, Wert => 0, DPT => 1, ga => '2/0/0', KW => '', Monat => '' };
    
    ######################
    ##ENDE Einstellungen##
    ######################
    
    use POSIX;
    use Time::Local;
    
    # Eigenen Aufruf-Zyklus auf 20sek. setzen
    $plugin_info{$plugname.'_cycle'} = 20;
    
    #Hier wird ein Array angelegt, um die Wochentagsnummer von localtime zu übersetzen
    my @Wochentag = ('sonntag', 'montag', 'dienstag', 'mittwoch', 'donnerstag', 'freitag', 'samstag');
    
    my $sec; #Sekunde
    my $min; # Minute
    my $hour; #Stunde
    my $mday; #Monatstag
    my $mon; #Monatsnummer
    my $year; #Jahr
    my $wday; #Wochentag 0-6
    my $yday; #Tag ab 01.01.xxxx
    my $isdst;
    
    ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
    $year += 1900;
    $mon += 1;
    
    my $kw = getWeekNumber($year, $mon, $mday);
    
    foreach my $element (@Schaltzeiten) {
        if (knx_read($element->{ga},0,$element->{DPT}) ne $element->{Wert}) {
            if ($element->{$Wochentag[$wday]} == 1 && $element->{Stunden} == $hour && $element->{Minuten} == $min && $element->{KW} ne '') {
                if ($element->{KW} == $kw) {
                    knx_write($element->{ga},$element->{Wert},$element->{DPT});
                    next;
                } else {
                    next;
                }
            } elsif ($element->{$Wochentag[$wday]} == 1 && $element->{Stunden} == $hour && $element->{Minuten} == $min && $element->{Monat} ne '') {
                if ($element->{Monat} == $mon) {
                    knx_write($element->{ga},$element->{Wert},$element->{DPT});
                    next;
                } else {
                    next;
                }
            } elsif ($element->{$Wochentag[$wday]} == 1 && $element->{Stunden} == $hour && $element->{Minuten} == $min && $element->{KW} eq '' && $element->{Monat} eq '') {
                knx_write($element->{ga},$element->{Wert},$element->{DPT});
                next;
            }
        }    
    next;
    }
    
    sub getWeekNumber {
    my ($year, $month, $day) = @_;
    my $weekNumber = checkWeekNumber($year, $month, $day);
    # wenn Wochennummer gleich 0, dann ist das aktuelle Datum
    # in der Woche vor dem 4. Januar
    # also in der letzten Woche des letzten Jahres
    if ($weekNumber eq 0)
    {
    # Wochennummer des letzten Woche des letzten Jahres suchen
    $weekNumber = checkWeekNumber(($year - 1), 12, 31);
    
    # wenn die Wochennummer größer als 52 ist
    # dann prüfen ob diese Wochennummer korrekt ist oder
    # sie bereits die erste Woche des aktuellen Jahres ist
    if ($weekNumber gt 52)
    {
    $weekNumber = checkWeekNumber($year, 1, 1);
    # wenn der 1. Januar des aktuellen Jahres in der Woche 0 liegt
    # dann ist es die Woche 53
    if ($weekNumber eq 0)
    {
    $weekNumber = 53;
    }
    }
    }
    # wenn die Wochennummer größer als 52 ist
    # dann prüfen ob diese Wochennummer korrekt ist oder
    # sie bereits die erste Woche des nächsten Jahres ist
    elsif ($weekNumber gt 52)
    {
    $weekNumber = checkWeekNumber(($year + 1), 1, 1);
    # wenn der 1. Januar des nächsten Jahres in der Woche 0 liegt
    # dann ist es die Woche 53
    if ($weekNumber eq 0)
    {
    $weekNumber = 53;
    }
    }
    
    return ($weekNumber);
    }
    
    sub checkWeekNumber {
    my ($year, $month, $day) = @_;
    
    # 4. Januar als erste Woche erstellen
    my $firstDateTime = timelocal(0, 0, 12, 4, 0, $year);
    # Wochentag des 4. Januar ermitteln
    my $dayOfWeek = (localtime($firstDateTime))[6];
    $dayOfWeek = abs((($dayOfWeek + 6) % 7));
    # geh zu Wochenanfang (Montag) zurück
    $firstDateTime -= ($dayOfWeek * 3600 * 24);
    
    # aktuelles Datum erstellen
    my $currentDateTime = timelocal(0, 0, 14, $day, ($month - 1),$year);
    
    # Differenz in Tagen berechnen
    my $diffInDay = ($currentDateTime - $firstDateTime) / 3600 / 24;
    # Anzahl der Wochen zwischen aktuellem Datum und 4. Januar berechnen
    my $weekNumber = floor($diffInDay / 7) + 1;
    
    return ($weekNumber);
    }
    Die Version 0.1 hatte noch einige Fehler drin...

    Einen Kommentar schreiben:


  • alexmosel
    antwortet
    Habs jetzt gerade nochmal mit dem ursprünglichen Plugin versucht,

    https://knx-user-forum.de/forum/supp...wiregate/15278

    selbst da tut sich nix, gestern abend hat das jedoch funktioniert...

    Das Wiregate setzt auch immer 60 sekunden als ausführungszeit, anstelle der 20

    Ich verstehe es nicht, warum das WG mich nicht mag

    Einen Kommentar schreiben:


  • swiss
    antwortet
    Hallo. Das nix passiert ist seltsam... Aber diw Ausführungszeit von 20 Sekunden solltest du auf keinen Fall ändern. Das Plugin wird dabei sehr wohl alle 20 Sekunden aufgerufen aber nur 1 mal pro Minute abgearbeitet. Das ist bewusst so gelöst. Aber das ausfürlich zu erklären ist am Handy echt mühsam einzutippen...

    Das Problem wird daran liegen, dass du Sonderzeichen (scharfes Doppel s) verwendet hast. Erlaubt sind nur UTF-8 zeichen ohne Umlaute und Sonderzeichen.

    Einen Kommentar schreiben:


  • alexmosel
    hat ein Thema erstellt [wiregate] Zeitschaltuhrplugin.

    Zeitschaltuhrplugin

    Hallo, habe versucht gestern abend das Zeitschaltuhrplugin für meine Rolladen zu verwenden.
    Später möchte ich es ggf. erweitern um auf der Südseite die Rolladen auf ca 50% fahren zu können, wenn die Sonne einen gewissen Wert erreicht hat (da weiss ich noch nicht wie)

    Heute morgen passierte NIX

    Davon abgesehen scheint es dem Wiregate egal zu sein, ob da Scriptausführungszeit 20 oder 60 Sekunden steht, denn er führt es trotzdem alle 60 aus...

    Code:
    # Plugin zum Zeit abhängigem schaten von GA's (Schaltuhr)
    # Version 0.1 03.07.2011
    # Copyright: swiss (https://knx-user-forum.de/members/swiss.html)
    # License: GPL (v2)
    # Aufbau möglichst so, dass man unterhalb der Einstellungen nichts verändern muss!
    
    
    ####################
    ###Einstellungen:###
    ####################
    my @Schaltzeiten;
    
    push @Schaltzeiten, { name => "Wohnzimmer groß", montag => 1, dienstag => 1, mittwoch => 1, donnerstag => 1, freitag => 1, samstag => 1, sonntag => 1, Stunden => 08, Minuten => 00, Befehl => 0, ga => '5/0/4' };
    push @Schaltzeiten, { name => "Wohnzimmer groß", montag => 1, dienstag => 1, mittwoch => 1, donnerstag => 1, freitag => 1, samstag => 1, sonntag => 1, Stunden => 19, Minuten => 00, Befehl => 1, ga => '5/0/4' };
    
    push @Schaltzeiten, { name => "Wohnzimmer links", montag => 1, dienstag => 1, mittwoch => 1, donnerstag => 1, freitag => 1, samstag => 1, sonntag => 1, Stunden => 08, Minuten => 00, Befehl => 0, ga => '5/0/8' };
    push @Schaltzeiten, { name => "Wohnzimmer links", montag => 1, dienstag => 1, mittwoch => 1, donnerstag => 1, freitag => 1, samstag => 1, sonntag => 1, Stunden => 19, Minuten => 00, Befehl => 1, ga => '5/0/8' };
    
    push @Schaltzeiten, { name => "Wohnzimmer mitte", montag => 1, dienstag => 1, mittwoch => 1, donnerstag => 1, freitag => 1, samstag => 1, sonntag => 1, Stunden => 08, Minuten => 00, Befehl => 0, ga => '5/0/12' };
    push @Schaltzeiten, { name => "Wohnzimmer mitte", montag => 1, dienstag => 1, mittwoch => 1, donnerstag => 1, freitag => 1, samstag => 1, sonntag => 1, Stunden => 19, Minuten => 00, Befehl => 1, ga => '5/0/12' };
    
    push @Schaltzeiten, { name => "Wohnzimmer rechts", montag => 1, dienstag => 1, mittwoch => 1, donnerstag => 1, freitag => 1, samstag => 1, sonntag => 1, Stunden => 08, Minuten => 00, Befehl => 0, ga => '5/0/16' };
    push @Schaltzeiten, { name => "Wohnzimmer rechts", montag => 1, dienstag => 1, mittwoch => 1, donnerstag => 1, freitag => 1, samstag => 1, sonntag => 1, Stunden => 19, Minuten => 00, Befehl => 1, ga => '5/0/16' };
    
    push @Schaltzeiten, { name => "Küche", montag => 1, dienstag => 1, mittwoch => 1, donnerstag => 1, freitag => 1, samstag => 1, sonntag => 1, Stunden => 08, Minuten => 00, Befehl => 0, ga => '5/0/20' };
    push @Schaltzeiten, { name => "Küche", montag => 1, dienstag => 1, mittwoch => 1, donnerstag => 1, freitag => 1, samstag => 1, sonntag => 1, Stunden => 19, Minuten => 00, Befehl => 1, ga => '5/0/20' };
    
    ######################
    ##ENDE Einstellungen##
    ######################
    
    use POSIX;
    
    # Eigenen Aufruf-Zyklus auf 20sek. setzen
    $plugin_info{$plugname.'_cycle'} = 20;
    
    #Hier wird ein Array angelegt, um die Wochentagsnummer von localtime zu übersetzen
    my @Wochentag = ('sonntag', 'montag', 'dienstag', 'mittwoch', 'donnerstag', 'freitag', 'samstag');
    
    my $sec;
    my $min;
    my $hour;
    my $mday;
    my $mon;
    my $year;
    my $wday;
    my $yday;
    my $isdst;
    
    
    foreach my $element (@Schaltzeiten) {
    
    ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
        $year += 1900;
    
        if ($element->{$Wochentag[$wday]} == 1 && $element->{Stunden} == $hour && $element->{Minuten} == $min) {
            knx_write($element->{ga},$element->{Befehl},1);
        }
    next;
    }
Lädt...
X