Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - Zeitschaltuhr Plugin?

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

    #76
    Vorhin habe ich mal mal etwas ausprobiert, was der Zeitschaltuhr neue Möglichkeiten eröffnet: Variable Konfigurationseinträge. Dazu muss am Plugin nichts geändert werden, es ist nur eine Frage der Konfigurationsdatei.

    Beispiel: Rollläden sollen nicht immer um 17 Uhr runter gefahren werden, sondern jeden Tag um eine andere Uhrzeit. Das sollte problemlos mit der Zeitschaltuhr gehen.

    Die Lösung: Anstatt feste Werte in die @Zeiten Tabelle einzutragen, trägt man Codereferenzen ein. Das sieht dann z.B. so aus:

    Code:
    [FONT="Courier New"]
    @Zeiten = 
        (
         { Name=>'RolladenWohnFenstAb', Aktiv=>'1', Std=>[COLOR="Blue"]&SunsetHH[/COLOR], Min=>[COLOR="Blue"]&SunsetMM[/COLOR], Wert=>'1', DPT=>'1', GA=>'3/1/91', Log=>'1' }, 
         { Name=>'RolladenEsszimmerAb', Aktiv=>'1', Std=>[COLOR="Blue"]&SunsetHH[/COLOR], Min=>[COLOR="Blue"]&SunsetMM[/COLOR], Wert=>'1', DPT=>'1', GA=>'3/1/92', Log=>'1' }, 
        );
    [/FONT]
    Hier blau dargestellt.

    Nun muss man die entsprechenden Funktionen nur noch zur Verfügung stellen, hier eine sehr vereinfachte Version:
    Code:
    [FONT="Courier New"]
    sub SunsetHH
    {
        (!defined $plugin_info{'[COLOR="Red"]Sun.pl[/COLOR].setHH'}) and  return 17;
        return $plugin_info{'Sun.pl.setHH'};
    }
    
    sub SunsetMM
    {
        (!defined $plugin_info{'[COLOR="Red"]Sun.pl[/COLOR].setMM'}) and  return 30;
        return $plugin_info{'[COLOR="Red"]Sun.pl[/COLOR].setMM'};
    }
    
    [/FONT]
    Das ist alles.

    In den Funktionen wird in diesem Beispiel übrigens auf den Wert eines 'fremden' Plugins zugegriffen: Sun.pl. Das kann ein Plugin sein, welches z.B. ein mal am Tag laufen könnte, um die Sonnen Auf-/Untergangszeiten zu berechnen und in %plugin_info zu speichern. Ich nenne dieses Konzept jetzt mal 'Cross-Plugin-Variablen'. Aber vielleicht wird das woanders ja auch schon gemacht, da habe ich keinen Überblick.

    Die Funktionen SunsetHH und SunsetMM müssten natürlich in die Konfigurationsdatei geschrieben werden, und zwar VOR der Tabelle @Zeiten. Auf diese Art kann jeder seine ganz persönlichen Funktionen für variable Tabelleneinträge umsetzen.


    PS: Es sollte auch möglich sein, die @Zeiten Tabelle direkt mit plugin_info{...} Referenzen zu besetzen, allerdings hat man dann nicht die Möglichkeit, deren Existenz vorher zu testen um nötigenfalls statt dessen einen Default-Wert zurückzugeben, so wie oben demonstriert.
    Kein Support per PN: Fragen bzw. Fehlermeldungen bitte im Forum posten.

    Kommentar


      #77
      Hat das denn mal jemand ausprobiert? 18 Downloads ... ?

      Ich würde das gerne einchecken :-)
      Kein Support per PN: Fragen bzw. Fehlermeldungen bitte im Forum posten.

      Kommentar


        #78
        Ich habs kurz ausprobiert, geht, was soll man mehr sagen als &
        Wegen mir -> definitiv: Commit

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

        Kommentar


          #79
          Hallo emax,
          ich habe es mal mit einfachen Schalt und Dimmvorgängen getestet. Es läuft! Klasse!

          Bzgl. Sonnenauf.- untergang habe ich dir mal eine PN geschrieben mit einer Nachfrage? Passt hier nicht so ganz in den Thread.

          Kommentar


            #80
            Danke für die Blumen allerseits :-)

            @Tim: Vielleicht ist das doch ein Thema für diesen Thread, das kommt darauf an, was Du mit Deinem Script erreichen möchtest. Dazu stelle ich jetzt erst mal ein paar Fragen per PN, und wenn es ein Fall für die Zeitschaltuhr wird, machen wir hier weiter.
            Kein Support per PN: Fragen bzw. Fehlermeldungen bitte im Forum posten.

            Kommentar


              #81
              Eine klitzekleine Anmerkung: eine PM ist hier IMHO fast immer Zeitverschwendung.
              Für den Fragenden (weil er vielleicht keine AW erhält) und für den Antwortenden (weil von der AW nur einer was hat)

              -> Bitte! Es gibt keine dummen Fragen, nur dumme Antworten. Also nichts, was man nicht auch so fragen könnte - und sei es auch noch so speziell, vielleicht meldet sich ein dritter mit einer tollen Idee. Oder man liest es nur und zieht Wochen später schlüsse daraus.
              Nur mal so: Wir machen hier OSS/GPL, keine Geheimware, die absolute Öffentlichkeit/transparenz ist dabei kein Unfall sondern Teil des Plans
              Nur mal so 5ct dazu..

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

              Kommentar


                #82
                Die Bitte geht in diesem Fall an Tim. Ich bin auf die Anfrage zwar eingegangen, weil ich nicht niemanden gegen seinen Willen auf die Bühne schleppen will, aber Makki hat Recht: Deshalb full ACK.
                Kein Support per PN: Fragen bzw. Fehlermeldungen bitte im Forum posten.

                Kommentar


                  #83
                  Ich hab das jetzt auch mal in meine Signatur geschrieben: Bitte Fragen im Forum stellen, das nützt allen.
                  Kein Support per PN: Fragen bzw. Fehlermeldungen bitte im Forum posten.

                  Kommentar


                    #84
                    @Makki -> thumbs up!
                    Vollkommen gleicher Meinung. Leider bin ich in letzter Zeit viel am Fragen und es handelt sich häufig um Basics, sodass es mir einwenig peinlich ist!

                    Hier meiner Frage an emax:

                    Hallo Emax,
                    wie im Beitrag erwähnt habe ich ordentlich geschaltet und gedimmt. Das funktioniert soweit, ich es testen konnte zu 100%.

                    Bzgl Sonnenaufgang und Untergang habe ich aber noch eine Verständnisfrage. Ich habe hier mal im Forum ein Plugin gefunden, welches ich so geändert habe, dass es mit in eine Gruppenadresse 0 oder 1 je Zustand schreibt.

                    Code:
                    use Math::Trig;
                      $plugin_info{$plugname.'_cycle'} = 300;
                       
                      # Diese Daten müssen eingepflegt werden; Längengrad und Breitengrad, sowie die Zeitzone
                      # (localtime)[8] gibt an, ob gerade Sommerzeit ist und addiert entsprechend +1 dazu
                      # *************************************************************************************
                      my $lat = 53.115867;
                      my $lon = 8.193105;
                      my $timezone = (localtime)[8];
                      # *************************************************************************************
                      my $h = -0.0145; 
                      my $RAD = pi/180.0;
                      my $B = $lat * $RAD;
                      my $DOY = ((localtime)[7]+1);  # DOY = Day Of Year
                      my $timecalc = -0.171 * sin(0.0337 * $DOY + 0.465) - 0.1299 * sin(0.01787 * $DOY - 0.168);
                      my $declination = 0.4095 * sin(0.016906 * ($DOY - 80.086));
                      my $tmp = (sin($h) - (sin($B) * sin($declination))) / (cos($B) * cos($declination));
                      my $timediff = 12* acos($tmp)/pi;
                      my $timenow = ((localtime)[2] + (localtime)[1]/60);
                       
                     # Prüft, ob aktuelle Zeit > Sonnenaufgangszeit ist und < Sonnenuntergangszeit
                      if ($plugin_info{$plugname."_status"}!=1 and $timenow > sunrise() and $timenow < sunset() ) {
                         plugin_log($plugname,"Jetzt ist es Sonnenaufgang");
                         $plugin_info{$plugname."_status"} = 1;
                         knx_write( "12/4/7",1 );
                         knx_write( "12/4/9",0 );
                         
                      }
                      # Prüft, ob aktuelle Zeit > Sonnenuntergangszeit ist 
                      if ($plugin_info{$plugname."_status"}!=0 and $timenow > sunset() ) {
                         plugin_log($plugname,"Jetzt ist es Sonnenuntergang");
                         $plugin_info{$plugname."_status"} = 0;
                         knx_write( "12/4/9",1 );
                         knx_write( "12/4/7",0 );
                      }
                    
                      return  $plugin_info{$plugname."_status"}; 
                       
                      sub sunrise{
                            my $sunrise = 12 - $timediff - $timecalc + (15-$lon)*4/60 + $timezone;
                            return $sunrise;
                      }     
                       
                      sub sunset{
                            my $sunset = 12 + $timediff - $timecalc + (15-$lon)*4/60 + $timezone;
                            return $sunset;
                      }
                       
                      return;
                    Wie kombiniere ich jetzt deine Abfrage mit meinem Skript, im Detail:

                    Code:
                    [FONT=Courier New]sub SunsetHH {     (!defined $plugin_info{'[COLOR=Red]Sun.pl[/COLOR].setHH'}) and  return 17;     return $plugin_info{'Sun.pl.setHH'}; }[/FONT]
                    Mir fehlen leider fundierte Perl-Anwender-Erfahrungen.
                    Gruß Tim


                    Und seine Antwort:
                    Soweit ich es verstehe, führst Du alle fünf Minuten eine Funktion aus, die je nachdem, ob es vor oder nach Sonnenauf/untergang ist, gegensätzliche Dinge tut:
                    Code:
                    $plugin_info{$plugname.'_cycle'} = 300;
                    Wenn Du damit nun Rolläden fährst, funktioniert das zwar, aber so würdest Du rund hundert Mal am Tag offene Rolläden hochfahren, und geschlossene schließen, was natürlich etwas unelegant ist. Das wäre dann ein Thema für die Zeitschaltuhr, was ja auch mit variablen Zeiten funktioniert, insbesondere mit meinem neuen Sonnenaufgangs-Plugin.

                    Genrell kannst Du aber so oder so auf die Berechnung verzichten, wenn Du das 'emx_sonne.pl' Plugin verwendest. Dieses speichert in %plugin_info einmal am Tag die Zeiten.

                    In Deinem Script kannst Du diese so verwenden:

                    bisheriger Code: ... and $timenow > sunrise() and $timenow < sunset()
                    neuer Code: ... and $timenow > $plugin_info{'emx_sonne.pl.auf'} and $timenow < $plugin_info{'emx_sonne.pl.unt'}

                    Du kannst die Werte aus %plugin_info auch erst einer Variablen zuweisen, und dann im script weiterverwenden, das macht es etwas übersichtlicher:

                    my $sonnAuf = $plugin_info{'emx_sonne.pl.auf'};
                    my $sonnAnt = $plugin_info{'emx_sonne.pl.unt'};
                    ...
                    und dann so weiter machen:
                    ... and $timenow > $sonnAuf and $timenow < $sonnUnt ) ...

                    Wenn Du die Gruppenandressem aber eigentlich nur ein mal am Tag ein- und einmal ausschalten willst, dann würde ich das per Zeitschaltuhr machen, ich kann Dir gerne zeigen wie.

                    Kommentar


                      #85
                      Hallo zusammen,

                      wie editert ihr den die Config Dateien?
                      Über den Root Zugang > Sonstiges > Dateimanager > Bearbeiten?

                      Danke
                      Sascha

                      Kommentar


                        #86
                        Genau so wie man auch ein Plugin editieren würde: Mit dem Editor Deiner Wahl, bei mir ist es der emacs. Da es Dateien unterhalb /etc sind, muss man das als root machen, es sei denn, man hat die conf Dateien für alle schreibbar gemacht:

                        chmod go+w /etc/wiregate/plugin/generic/conf.d/*conf
                        Kein Support per PN: Fragen bzw. Fehlermeldungen bitte im Forum posten.

                        Kommentar


                          #87
                          Sorry, das verstehe ich nicht.

                          Plugins editiere ich in der Wiregate Konfig Seite unter Plugins. Für das Config Verzeichnis gibt es da ein leeres Plugin. Ist ja das Verzeichnis.

                          Wie komme ich da an die Config ohne umständlich über den Datei-Explorer zu gehen?

                          Was löst die Befehlszeile genau aus?
                          Wo sollte ich dann die Config Dateien im Webmin editieren können?

                          Danke
                          Sascha

                          Kommentar


                            #88
                            Vielleicht ein Mißveständnis.
                            Zitat von haegar80 Beitrag anzeigen
                            Plugins editiere ich in der Wiregate Konfig Seite unter Plugins.
                            Was editierst Du denn da? Änderst Du am Code?
                            Kein Support per PN: Fragen bzw. Fehlermeldungen bitte im Forum posten.

                            Kommentar


                              #89
                              Bei Plugin ja, bei den Config Dateien will ich ja diese editieren.
                              Im Datei-Explorer kann ich die ja bearbeiten. Geht das auch eleganter?
                              - im Webmin
                              - sonst irgendwie

                              Kommentar


                                #90
                                Nein, es gibt (noch?) keine andere Methode.

                                Auf Dauer lässt sich das vielleicht auch über das Webinterface machen. Eigentlich müsste 'conf.d' beim Klick nur als Verzeichnis geöffnet werden, dann ginge das bereits. Aber da bin ich der Falsche, vielleicht kann Makki das ja mal in Angriff nehmen. Aber dem ist in der Regel auch nicht langweilig ;-)
                                Kein Support per PN: Fragen bzw. Fehlermeldungen bitte im Forum posten.

                                Kommentar

                                Lädt...
                                X