Ankündigung

Einklappen
Keine Ankündigung bisher.

emx_uhr.pl: Sonnenauf/untergangs-abhängige Schltungen

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

    #61
    emx_uhr.pl: Sonnenauf/untergangs-abhängige Schltungen

    Ich habe es gerade mit undef ausprobiert und es hat funktioniert. Anschließend habe ich es wieder mit einer Stundenangabe probiert und es funktionierte nicht. Dann dachte es mir, es liegt vielleicht an "Sommerzeit/Winterzeit" und habe die Stunde im Conf File eine Stunde früher als gewünscht definiert und es hat funktioniert!
    Die Zeit des WG ist geht richtig. Die Zeitzonen stehen in der Conf Datei auf ihren Default Werten des Demo Files (CET und CEST).

    Kommentar


      #62
      Nunja, die Angaben für die Zeitzonen müssen in der Berliner Zeitzone auch so stehen bleiben.

      Aber im zuvor von Dir gezeigten Konfigurationseintrag steht fraglos 'CET'. Probiere es (im Schalteintrag) mal ganz ohne Zonenangabe, und auch mal mit 'CEST'.
      Kein Support per PN: Fragen bzw. Fehlermeldungen bitte im Forum posten.

      Kommentar


        #63
        emx_uhr.pl: Sonnenauf/untergangs-abhängige Schltungen

        Ich habe es mit CEST und ohne Eintrag getestet, beides funktioniert.
        Also lasse ich diesen Eintrag jetzt weg und hoffe, dass damit alles richtig funktioniert. Mir ist noch nicht ganz klar, warum man diesen Zoneneintrag in der Befehlszeile setzen kann.
        Danke für das tolle Plugin!

        Kommentar


          #64
          Hm, wenn ich es richtig programmiert habe, müsste 'CET' die Sommerzeit ignorieren, und 'CEST' sie berücksichtigen. Wenn also 'CET' dort steht, müsste die Schaltung immer um 'Winterzeit' stattfinden (also um die 'normale' Zeit, ohne die vorgestellte Stunde). Wenn da also im Sommer 10 Uhr steht, müsste 'CET' dazu führen, dass es erst um 11 Uhr ausgeführt wird (weil es ja erst dann 'real' 10 Uhr wäre).

          Jetzt gerade, wo ich diesen Eintrag schreibe, ist es ja z.b. 20:35 Sommerzeit. Erst in einer Stunde ist es ja 'wirklich' 20:35 Uhr. Eine für die jetzige Uhrzeit angelegte Schaltung sollte mit der Zone 'CET' also erst in einer Stunde erfolgen.

          Ich habs jetzt aber nicht kontrolliert.
          Kein Support per PN: Fragen bzw. Fehlermeldungen bitte im Forum posten.

          Kommentar


            #65
            emx_uhr.pl: Sonnenauf/untergangs-abhängige Schltungen

            Ja, so wie du es beschrieben hast hat es sich bei mir auch verhalten. Dann ist ja alles richtig. Habe mich nur gefragt, wozu man diesen Parameter gebrauchen kann, aber dafür gibt es sicherlich Anwendungsfälle. Ich lasse ihn jetzt weg.

            Aber noch eine ganz andere Frage: ich würde über die Schaltuhr gerne meine RTRs von Komfort auf Nacht umschalten. Dazu muss ich aber das Komfort-Bit auf 0 und das Nacht-Bit auf 1 setzten. Am Morgen dann das gleiche Spiel in umgekehrter Reihenfolge. Dies würde wohl nur über je zwei Schaltbefehle im Abstand von einer Minute funktionieren, oder? Das macht die ganze Sache etwas unübersichtlich und das Ändern der Zeiten mühsam. Lässt sich diese Anforderung noch eleganter lösen?

            Kommentar


              #66
              Ich kenne Deine RTR nicht, aber wenn es zwei Bits erfordert, dann ist das eben so. Zwei unterschiedliche Werte erfordern eben zwei unterschiedliche Schaltungen. Müsste ich eine Anwendung NUR für diesen Zweck schreiben, wüsste ich evt. Eleganteres, aber Plugins sind generisch und ergo keine besonders eleganten Spezialisten. Wenn Du die Schaltbefehle optisch etwas gruppierst, ist es gar nicht so schlimm.

              Eine letzte Anmerkung: Wenn Du für z.B. 15 RTR nun für jedes Nacht- bzw. Komfortbit eine eigene GA vergeben hast, dann wären das tatsächlich 30 Adressen entsprechend 30 Ein- und 30 Ausschaltungen, also 60 Einträge.

              Die Übersicht muss darunter nicht leiden, nur würde ich mir in diesem Fall mal Gedanken über meine Konzepte machen. Man kann ja diversen RTR möglicherweise die selbe GA für Komfort bzw. Nacht geben, weil die Nacht ist ja für alle gleich. Und auch Komfort kann sicher in Wohnbereich/Schlafbereich usw. unterteilt werden, und muss nicht für jeden Raum eine extra Adresse haben.

              Nur so als Anregung.
              Kein Support per PN: Fragen bzw. Fehlermeldungen bitte im Forum posten.

              Kommentar


                #67
                emx_uhr.pl: Sonnenauf/untergangs-abhängige Schltungen

                Danke für die schnelle Rückmeldung. Ich habe auch nur zwei GAs für die ganzen RTRs, so wie auch von dir vorgeschlagen. Somit ist es natürlich gar nicht so unübersichtlich, wie ich es vielleicht beschrieben habe. Ich suche gerade nach einer praktikablen Lösung zur RTR Betriebsmodusumschaltung und diese Schaltuhr ist für mich im Moment die beste Lösung, da zentral und ohne ETS einstellbar. Vielleicht gibt es aber elegantere Lösungen die ich nicht kenne oder es spricht gar etwas gehen diese Idee, was ich jetzt nicht sehe. Nutzt das vielleicht jemand so und kann seine Erfahrung mitteilen?

                Kommentar


                  #68
                  @emax:

                  Mal eine Frage an den Entwickler:

                  wäre es möglich der Konfiguration eine Option "Sperre" mitzugeben, um die Ausführung des entsprechenden Schaltpunktes dann zu verhindern? Sperrobjekt sollte eine bestimmte GA sein; wenn Wert=1 -> dann wird dieser Schaltpunkt nicht abgearbeitet.

                  z.B.

                  Code:
                  { Name=>'Garten Licht an',             Aktiv=>'1', Std=>&sonnUntHH(10/60),     Min=>&sonnUntMM(10/60),     MTag=>undef, Mon=>undef, WTag=>undef, Wert=>'1', DPT=>'1', GA=>'4/1/20',  [COLOR=Red]Sperre=>'13/0/0'[/COLOR],   Log=>'1' },
                  Hintergrund wäre der, dass ich bei Abwesenheit natürlich einige der Schaltpunkte nicht ausführen lassen möchte und deshalb bei Abwesenheit die Sperre aktivieren möchte.

                  Viele Grüße

                  Jens
                  Viele Grüße Jens

                  Kommentar


                    #69
                    Im Prinzip ja.

                    Aber damit würde die Uhr zum Logikprozessor. Was vermutlich eine endlose Kette an Zusatzwünschen auslösen dürfte. Die Idee mit der 'Sperre' passt zwar grundsätzlich, aber es kommt so sicher wie das Amen in der Kirche der Wunsch nach 'nicht Sperre', also Sperre dann, wen die GA nicht aktiv ist. Und so dürften immer mehr, duchaus auch gute, Ideen dazukommen. Das ist aber nicht die Aufgabe einer Schaltuhr, da müsste vielmehr ein Konzept her.

                    Zum Beipiel in der Weise, dass emx_uhr (bzw. Plugins im Allgemeinen) nicht direkt schaltet, sondern den 'Schaltwunsch' an konfigurierbare Postprozessoren weitergibt. Das wäre dann eine richtig solide Lösung.

                    Deshalb ist mein erstes Gefühl: lieber nicht.

                    ABER: Man könnte in der Konfigurationsdatei den Wert für 'Aktiv' durch eine Funktion rechnen lassen, so wie das z.B. ja bereits für Stunde und Minute möglich ist. Beispiel:

                    Code:
                    { Name=>'Garten Licht an', Aktiv=>&checkGA('13/0/0', '1'),  Std=>&sonnUntHH(10/60),     Min=>&sonnUntMM(10/60),     MTag=>undef, Mon=>undef, WTag=>undef, Wert=>'1', DPT=>'1', GA=>'4/1/20', Log=>'1' },
                    Die Funktion &checkGA müsste dann prüfen, ob 13/0/0 den Wert '1' liefert.

                    Ich werde das die Tage mal bereitstellen.
                    Kein Support per PN: Fragen bzw. Fehlermeldungen bitte im Forum posten.

                    Kommentar


                      #70
                      @ emax: Danke für die Erläuterungen. bin gespannt auf Deinen Lösungsansatz!

                      Jens
                      Viele Grüße Jens

                      Kommentar


                        #71
                        Zitat von jensgulow Beitrag anzeigen
                        bin gespannt auf Deinen Lösungsansatz!
                        Nur einen Ansatz kann ich nicht bieten. Dafür aber eine komplette Lösung. Hier isse (Erläuterungen am Ende des Beitrags):

                        Code:
                        # Konfigurationsbeispiel fuer Sonenabhaengige Schaltungen
                        #
                        # License: GPL (v2)
                        # $Id: emx_uhr.conf.sample2 $
                        # Copyright: Edgar (emax) Hermanns, forum at hermanns punkt net
                        #----------------------------------------------------------------------
                        # extra Funktionen
                        # 
                        # Die Funktionen erlauben die Rueckgabe von Werten relativ zum Sonnenauf- 
                        # bzw. -untergang. 
                        #
                        # ACHTUNG:   Das funktioniert nur, wenn dass 'emx_sonne.pl' Plugin aktiv 
                        #            ist, welches ein mal taeglich den Sonnenaufgang und den 
                        #            Sonnenuntergang berechnet und in %plugin_info abspeichert.
                        #
                        # Funktionen:
                        #
                        # checkGA:   Prueft den Wert einer GA.
                        #            Uebergabeparameter: 
                        #                        GA     - Gruppenadresse in der Form '1/2/2',
                        #                                 In Hochkommata anzugeben.
                        #                                 Erforderlich.
                        #                        Wert   - Vergleichswert, vorzugsweise in
                        #                                 Hochkommata
                        #                                 Erforderlich.
                        #                        DPT    - der EIB Datentyp. Es reicht der Haup-
                        #                                 typ, also z.B. '5' anstatt '5.001'
                        #                                 In Hochkommata.
                        #                                 Erforderlich.
                        #                        Alter  - Fuer den aktuellen Zustand '0' angeben.
                        #                                 Fuer alle anderen Werte Michael Markstaller
                        #                                 fragen, ich verwende seine Funktion 
                        #                                 'knx_read' und kenne die Bedeutung nicht 
                        #                                 genau. In Hochkommata angeben.
                        #                                 Optional, '0' wird angenommen.#                                 
                        #
                        #            Wenn der GA-Wert dem angegebenen Vergleichswert Wert entpricht, 
                        #            wird 'true' zurueckgegeben.
                        #            Man kann damit den Eintrag 'Aktiv' fuer jede Schaltung steuern,
                        #            und so die Schaltung vom Wert einer anderen GA abhaengig machen.
                        #            Das Beispiel 'CheckGATest1' in der Schalttabelle unten wird 
                        #            in jeder Minute einmal ausgefuehrt und macht Folgendes:
                        #              Gruppenadressen: 
                        #                   -   1/1/120: Deckenlicht
                        #                   -   1/1/121: Wandlicht
                        #              Deckenlicht aus: Wandlicht wird eingeschaltet  (CheckGATest1a)
                        #              Deckenlicht an:  Wandlicht wird ausgeschaltet. (CheckGATest1b)
                        #
                        #            Es brennt also immer genau eines der beiden Lichter, natuerlich
                        #            mit der Ueberlappung von maximal einer Minute, in der beide an
                        #            oder aus sein koennen.
                        #
                        #            Diese Funktion laesst sich beliebig kombinieren, in Beispiel zwei
                        #            (CheckGATest2) wird das Wandlicht ausgeschaltet, wenn Licht 1
                        #            ODER Licht 2 eingeschaltet ist.
                        #             
                        #            Der zugehoerige Operator ist '||' (zwei mal das Pipe-Zeichen).
                        #            Fuer eine UND verknuepfung ist '&&' zu verwenden (zwei Ampersand),
                        #            
                        # sonnUntHH: gibt die Stunde des Sonnenuntergangs plus $1 zurueck.
                        #            Moechte z.B. man die Stunde um 1:45 _vor_ Sonnenuntergang 
                        #            erhalten, ruft man 'sonnUntHH(-1.75)' auf.
                        #            Die Funktion gibt nur die Stunde zurueck. 
                        #            ACHTUNG: Es muss trotzdem die komplette Zeitangabe
                        #                     inklusive Stundenbruchteil als Parameter angegeben 
                        #                     werden.
                        #
                        #            Beispiel: Sonnenuntergang um 18:15 Uhr
                        #                      Geplante Schaltzeit 1,5 Stunden vorher
                        #
                        #                      Aufruf:       sonnUntHH(-1.5);
                        #                      Rueckgabewert: 16   (= 18:15 minus 1:30 = 16:45)
                        #           
                        #            Positive Werte ergeben natuerlich eine spaetere Schaltzeit:
                        #        
                        #                      Aufruf:       sonnUntHH(1.75)
                        #                      Rueckgabewert: 20   (= 18:15 plus 1.75 = 20:00)
                        #
                        #            Die Dezimalwerte fuer die Stundenbruchteile muss man nicht 
                        #            ausrechnen, das macht perl von selber. Wer zum Beispiel
                        #            Eine Stunde und 13 Minuten vorher Schalten moechte,
                        #            kann das so schreiben:
                        # 
                        #                     Aufruf:        sonnUntHH(-1.216667)
                        #
                        #            oder einfacher auch so:
                        #
                        #                     Aufruf:        sonnUntHH(-(1.0 + 13/60))
                        #
                        # sonnUntHH: gibt die Minute des Sonnenuntergangs plus $1 zurueck.
                        #            Es gelten die gleichen Regeln wie oben.
                        # 
                        # sonnAufHH: dto. fuer Sonnenaufgangs-Stunde
                        # sonnAufMM: dto. fuer Minute.
                        #
                        #----------------------------------------------------------------------
                        
                        sub sonnUntHH()
                        {
                            # Rueckgabe Sonnenuntergangs-Stunde + $1 Std
                            # Die Angabe $1 muss die vollstaendig abzuziehende/addierende Zeit 
                            # in HH.MM (als float) beinhalten, auch die Minuten!
                            # Beipiel: Eindreiviertel Stunden = 1:45 = 1.75
                            # Es wird nur die Stunde zurueckgegeben.
                        
                            my $offset = shift || return int($plugin_info{'emx_sonne.pl.unt'});
                            $offset = int($offset * 1000);
                            ($offset < 0) and $offset = 24000 + ($offset % 24000);
                            return  int ((($plugin_info{'emx_sonne.pl.unt'} * 1000 + $offset) % 24000) / 1000);
                        } # sonnUntHH
                        
                        sub sonnUntMM()
                        {
                            # Rueckgabe Sonnenuntergangs-Minute + $1 Offset
                        
                            my $offset = shift || return $plugin_info{'emx_sonne.pl.untMM'};
                            $offset = int($offset * 1000);
                            ($offset < 0) and $offset = 24000 + ($offset % 24000);
                            return  int ((($plugin_info{'emx_sonne.pl.unt'} * 1000 + $offset) % 1000) * 60 / 1000 );
                        } # sonnUntMM
                        
                        sub sonnAufHH()
                        {
                            # Rueckgabe Sonnenaufgangs-Stunde + $1 Std
                            # Die Angabe $1 muss die vollstaendig abzuziehende/addierende Zeit 
                            # in HH.MM (als float) beinhalten
                            # Es wird nur die Stunde zurueckgegeben.
                        
                            my $offset = shift || return int($plugin_info{'emx_sonne.pl.auf'});
                            $offset = int($offset * 1000);
                            ($offset < 0) and $offset = 24000 + ($offset % 24000);
                            return  int ((($plugin_info{'emx_sonne.pl.auf'} * 1000 + $offset) % 24000) / 1000);
                        } # sonnUntHH
                        
                        
                        sub sonnAufMM()
                        {
                            # Rueckgabe Sonnenaufgangs-Minute + $1 Offset
                        
                            my $offset = shift || return $plugin_info{'emx_sonne.pl.aufMM'};
                            $offset = int($offset * 1000);
                            ($offset < 0) and $offset = 24000 + ($offset % 24000);
                            return  int ((($plugin_info{'emx_sonne.pl.auf'} * 1000 + $offset) % 1000) * 60 / 1000 );
                        } # sonnAufMM
                        
                        sub checkGA()
                        {
                            my ($ga, $value, $dpt, $age  ) = @_;
                            (!$ga  || !defined $value || !defined $dpt) and return 0;
                            (! defined $age) and $age = 0;
                            plugin_log($plugname, "GA[$ga],value[$value],dpt[$dpt],age[$age]");
                            my $res = knx_read($ga, $age, $dpt);
                            plugin_log($plugname, "res[$res]");
                            return ($res eq $value);
                        } # checkGA
                        
                        
                        #-----------------------------------------------------------------------------
                        # Einstellungen (Beipiele)
                        #-----------------------------------------------------------------------------
                        
                        $LokaleZeitZone = "CET";          # lokale Zeitzone
                        $LokaleSommerZeitZone="CEST";     # lokale Zeitzone im Sommer
                        
                        @Zeiten = 
                            (
                             # Schaltung abhaengig vom Wert einer GA:
                             { Name=>'CheckGATest1a', Aktiv=>&checkGA('1/1/120', '0', '1'), Wert=>'1', DPT=>'1', GA=>'1/1/121', Log=>'1' },
                             { Name=>'CheckGATest1b', Aktiv=>&checkGA('1/1/120', '1', '1'), Wert=>'0', DPT=>'1', GA=>'1/1/121', Log=>'1' },
                        
                             # Pruefung zweier GA, Bedingung ODER -> ||
                             { Name=>'CheckGATest2',  Aktiv=>&checkGA('1/1/120', '1', '1') || &checkGA('1/1/119', '1', '1'), Wert=>'0', DPT=>'1', GA=>'1/1/121', Log=>'1' }, 
                        
                             # Pruefung zweier GA, Bedingung UND ->  &&
                             { Name=>'CheckGATest2',  Aktiv=>&checkGA('1/1/120', '1', '1') && &checkGA('1/1/122', '1', '1'), Wert=>'0', DPT=>'1', GA=>'1/1/123', Log=>'1' }, 
                        
                             # Werkstatt Ventilator an, taeglich, 1 std. vor sonnenaufgang
                             { Name=>'WS_Ventilator', Aktiv=>'1', Std=>&sonnAufHH(-1.0), Min=>&sonnAufMM(-1.0), 
                               MTag=>undef, Mon=>undef, WTag=>undef, Wert=>'1', DPT=>'1', GA=>'1/2/34', Log=>'1' }, 
                             
                             # Werkstatt Ventilator aus, taeglich, 11 minuten spaeter als 1 std. vor sonnenaufgang
                             { Name=>'WS_Ventilator', Aktiv=>'1', Std=>&sonnAufHH(-1.0 + 11/60), Min=>&sonnAufMM(-1.0 + 11/60), 
                               MTag=>undef, Mon=>undef, WTag=>undef, Wert=>'0', DPT=>'1', GA=>'1/2/34', Log=>'1' }, 
                        
                             # Rollaeden runter fahren, Kueche 13 Minuten nach Sonneuntergang, Terrasse 14 Minuten nach Sonnenuntergang
                             { Name=>'EG_RollKuecheAb',       Aktiv=>'1', Std=>&sonnUntHH(13/60), Min=>&sonnUntMM(13/60), Wert=>'1', DPT=>'1', GA=>'4/5/67', Log=>'1' }, 
                             { Name=>'EG_RollTerrasseAuf',    Aktiv=>'1', Std=>&sonnUntHH(14/60), Min=>&sonnUntMM(14/60), Wert=>'1', DPT=>'1', GA=>'4/5/67', Log=>'1' }, 
                            );
                        
                        #-----------------------------------------------------------------------------
                        # $slotEnd definiert die Sekunde, ab der neu synchronisiert wird   
                        # ACHTUNG: Sollte nicht kleiner als 1 Sekunde sein.
                        #-----------------------------------------------------------------------------
                        $slotEnd = 3; 
                        
                        #-----------------------------------------------------------------------------
                        # ENDE Einstellungen
                        #-----------------------------------------------------------------------------
                        
                        1;
                        
                        # emacs setting
                        # ;;; Local Variables: ***
                        # ;;; mode:perl ***
                        # ;;; End: ***
                        Das ist das neue emx_uhr.conf.sample2 script. Die neue Funktion checkGA ist im Code dokumentiert. Aktuell nur für DPT 1 getestet, funktioniert bei mir bestens. Ich habe zwei Beispiele in der Schalttabelle konfiguriert.

                        Was man tun muss um das zu verwenden:
                        1. Die Funktion 'checkGA' in seine eigene Konfigurationsdatei kopieren.
                        2. Entsprechende Schalteinträge erstellen wie im Beispiel gezeigt.


                        Bitte beachten: Die Parameterbeschreibungen im Code geben an, dass die Übergabewerte an checkGA in Hochkommata sein müssen. Das ist auch so gemeint ;-)

                        Wenn ich hier positive Rückmeldungen bekomme, setzte ich die Datei ins SVN. Rückmeldungen sind aber in jedem Fall erwünscht, obs nun klemmt oder rennt.
                        Kein Support per PN: Fragen bzw. Fehlermeldungen bitte im Forum posten.

                        Kommentar


                          #72
                          Bin begeistert. Macht bisher genau das, was ich gesucht hatte. Danke!

                          Jens
                          Viele Grüße Jens

                          Kommentar


                            #73
                            Sehr schön.

                            Ist im Prinzip ja Teamwork: War ne gute Idee.

                            Und immer schön testen :-)
                            Kein Support per PN: Fragen bzw. Fehlermeldungen bitte im Forum posten.

                            Kommentar


                              #74
                              emx_uhr.pl: Sonnenauf/untergangs-abhängige Schltungen

                              Und wenn es jetzt noch die von mir vorgeschlagene Funktion "nicht vor X Uhr" (z.B. für Rollläden) unterstützen würde... :-) Aber das ist vermutlich deutlich komplizierter umzusetzen, ich kann das nicht beurteilen.

                              Kommentar


                                #75
                                Zitat von Elo Beitrag anzeigen
                                Und wenn es jetzt noch die von mir vorgeschlagene Funktion "nicht vor X Uhr" (z.B. für Rollläden) unterstützen würde... :-) Aber das ist vermutlich deutlich komplizierter umzusetzen, ich kann das nicht beurteilen.
                                Mit einem kleinen Kunstgriff tut es dass doch bereits

                                Erstelle dir zwei Hilfs-GAs:
                                1) Sonne_ist_aufgegangen_GA
                                2) Es_Ist_Nach_Sieben_Uhr_GA

                                Dann
                                3) Fülle die GAs sinnvoll.

                                4) Erstelle eine Rollo-Hoch-Aktion um sieben Uhr mit CheckGA=Sonne_ist_aufgegangen_GA
                                5) Erstelle eine Rollo-Hoch-Aktion bei Sonnenaufgang mit CheckGA=Es_Ist_Nach_Sieben_Uhr_GA

                                So müsste es auf jeden Fall gehen.

                                Wenn ich mich nicht irre, dann müsste man die Uhrzeit sogar direkt über CheckGA abfragen können (sofern die Uhrzeit auf dem Bus ist), so dass die 2. Hilfs-GA nicht notwendig wäre.

                                Grüße
                                Guste, der genau das die nächsten Tage umsetzen will.

                                Kommentar

                                Lädt...
                                X