Ankündigung

Einklappen
Keine Ankündigung bisher.

Zeit- und Helligkeitsgesteuerte Aussenbeleuchtung

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Zeit- und Helligkeitsgesteuerte Aussenbeleuchtung

    Hallo,
    ich hab von meiner Frau den Aufrag bekommen, die Weihnachtsbeleuchtung vor Haus mittels Zeit- & Helligkeitssteuerung ein bzw. auszuschalten. Gestern hab ich dann entdeckt, dass die Helligkeitssteuerung wie gewünscht funktioniert, aber die Zeitabfrage fürs Einschalten in der Früh (4:45 Uhr) und das Ausschalten am Abend (22:15) leider nicht. Darf man denn htime() nicht mit anderen Variablen in einem if-Statement verknüpfen, oder kann es passieren, das der EibPC htime(22,15,00) und htime(4,45,00) nicht "aufösen" kann?

    Anbei mein Code. Hat von euch jemand eine Idee, was ich da falsch mache, dass die definierten Zeitpunkte nicht schlagend werden?

    Code:
    //****  HAPPY X-MAS ************************
    boolXMASSeason=AUS
    boolXMASLight=AUS
    if (month(1,12)) then {
    	boolXMASSeason=EIN
    } endif
    if (month(15,1)) then {
    	boolXMASSeason=AUS
    } endif
    
    if htime(04,45,00) and boolXMASSeason==EIN and boolXMASLight==AUS then {
    	write("HS1-10/4/3", EIN);
    	write("AS2-10/4/2", EIN);
    	boolXMASLight=EIN;
    } endif
    
    if boolXMASSeason==EIN and "Helligkeit-0/2/0" > 520f16 and boolXMASLight==EIN then {
    	write("HS1-10/4/3", AUS);
    	write("AS2-10/4/2", AUS);
    	boolXMASLight=AUS;
    } endif
    
    if boolXMASSeason==EIN and "Helligkeit-0/2/0" < 100f16 and boolXMASLight==AUS then {
    	write("HS1-10/4/3", EIN);
    	write("AS2-10/4/2", EIN);
    	boolXMASLight=EIN;
    } endif
    
    
    if htime(22,15,02) and boolXMASSeason==EIN and boolXMASLight==EIN then {
    	write("HS1-10/4/3", AUS);
    	write("AS2-10/4/2", AUS);
    	boolXMASLight=AUS;
    } endif
    Ich bin für jeden Tipp dankbar. Auch für solche, die sagen, dass ganze könnte man noch viel besser lösen

    Danke,

    Peter

    #2
    Hallo Peter,

    wenn das nicht einmal Over-Engineering ist, die Weihnachtsbeleuchtung Helligkeitsgesteuert zu schalten (Uhrzeit wäre auch ok).

    Dein Code läßt sich auf jeden Fall deutlich verkürzen:

    [highlight=epc]
    Weihnachtszeit = month(1,12) and !month(15,1)

    if Weihnachtszeit == EIN \\
    and "Helligkeit-0/2/0" > 520f16 then \\
    write("HS1-10/4/3", EIN); \\
    write("AS2-10/4/2", EIN) \\
    endif

    if Weihnachtszeit == EIN \\
    and "Helligkeit-0/2/0" < 100f16 then \\
    write("HS1-10/4/3", AUS); \\
    write("AS2-10/4/2", AUS) \\
    endif
    [/highlight]

    Viele Grüße

    Michael

    Kommentar


      #3
      Ah, die "Falle" vom Seminar:
      [highlight=epc]
      // Achtung Fehler:
      Weihnachtszeit = month(1,12) and !month(15,1)
      [/highlight]
      month(1,12) ist vom 1.12 bis 31.12 auf EIN
      !month(15,1) ist vom 1.1. bis 15.1 auf EIN
      => die UND-Verknüpfung ist nie auf EIN
      [highlight=epc]
      // So ist's richtig: Mit "OR"
      Weihnachtszeit = month(1,12) or !month(15,1)
      [/highlight]
      Aber
      :
      [highlight=epc]
      // Hier "and"
      Sommer = month(1,4) and !month(1,10)
      [/highlight]
      offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
      Enertex Produkte kaufen

      Kommentar


        #4
        Naja das mit der Helligkeit funktioniert ja. Auch mit dem Flagsetzen der XmasSeason.

        Nur möchte ich, dass sich das Licht um 22:15 Uhr wieder ausschaltet und um 4:45 wieder einschaltet. Leider werden die beiden If-Statements, scheint es, nie ausgewertet oder eben so ausgewertet, dass der Zustand nie eintrtitt. Und das kann ich mir leider nicht erklären.

        versteh ich vl htime() falsch? bei htime(4,45,00) erwarte ich mir, dass genau zu diesem Zeitpunkt was passiert. Darf ich vl pro Zeitpunkt nur ein htime() im Code verwenden? weil htime(22,15,00) verwende ich schon, um im bad das licht zu dimmen? Wird dann ein zweites If-Statement mit htime(22,15,00) nicht mehr ausgwertet?

        Zitat von enertegus Beitrag anzeigen
        [highlight=epc]
        // So ist's richtig: Mit "OR"
        Weihnachtszeit = month(1,12) or !month(15,1)
        [/highlight]
        Aber
        :
        [highlight=epc]
        // Hier "and"
        Sommer = month(1,4) and !month(1,10)
        [/highlight]
        Das versteh ich noch nicht ganz. Wird bei jedem Durchlauf month(1,12) or !month(15,1) ausgewertet? Wie lange ist month(1,12) denn valide? ist das nicht zu einem Zeitpunkt gültig, nämlich dem ersten Dezember? Und warum wird einmal mit AND und einmal mit OR verknüpft?

        lg, Peter

        Kommentar


          #5
          Das versteh ich noch nicht ganz. Wird bei jedem Durchlauf month(1,12) or !month(15,1) ausgewertet? Wie lange ist month(1,12) denn valide? ist das nicht zu einem Zeitpunkt gültig, nämlich dem ersten Dezember? Und warum wird einmal mit AND und einmal mit OR verknüpft?
          Der Punkt ist, dass die erste Bedingung am 1.1. ungültig wird, genau wie die Tegesschaltuhr nach 24:00 Uhr übrigens.

          Kommentar


            #6
            Zitat von Kahler Beitrag anzeigen
            Der Punkt ist, dass die erste Bedingung am 1.1. ungültig wird, genau wie die Tegesschaltuhr nach 24:00 Uhr übrigens.
            Ja aber warum wird das genau am 1.1 ungültig? ist month(1,12) denn den ganzen Dezember gültig?? und der Ausdruck month(15,12) wäre dann ab 15. Dezember bis 1. Jänner gültig?

            lg, Peter

            Kommentar


              #7
              Ja, genau so ist das, steht übrigens auch im Handbuch:

              Mit dem Beginn eines neuen
              Jahres (Januar, 1) geht der Ausgang auf 0b01, bis der Monat und Tag den eingestellten
              Wert erreichen.

              Kommentar


                #8
                Morgen,
                Zitat von Kahler Beitrag anzeigen
                Ja, genau so ist das, steht übrigens auch im Handbuch:
                das hätte ich so verstanden, dass dann bei month (1,12) genau am 1. Dezember month quasi WAHR zurückliefert und zb am 2. Dezember wieder FALSCH. Also dass immer der exakte Wert relevant ist und nicht "nur" das Monat

                lg, Peter

                Kommentar


                  #9
                  Hallo,

                  kann mir jemand das Snippet aus dem Handbuch erklären? Warum liefert

                  Code:
                  Sommer=month(01,05) and !month(30,09)
                  einen Zeitraum von 1. Mai bis 30. September? Bei meinem Programmierverständnis würde dieses Statement nur am 1. Mai WAHR zurückliefern? Ab einschließlich 2. Mai wäre für mein Verständnis das immer FALSCH.

                  Warum ist dem nicht so?

                  lg, Peter

                  Kommentar


                    #10
                    month(01,05) ist vom 1.5. bis 31.12. = EIN

                    month(30,09) ist vom 30.9. bis 31.12. = EIN

                    Die Invertierung !month(30,09) ist vom 1.1. bis 30.9. = EIN

                    Also ist die gesamte Und-Verknüpfte Logik vom 1.5. bis zum 30.9. = EIN.

                    Kommentar


                      #11
                      Aha, so läuft der Hase.

                      month(01,05) heisst übersetzt Datum >= 1.5 und Datum <= 31.12 oder einfach ab 1.5. bis Ende des Jahres.

                      Bin bis jetzt immer davon ausgegangen, dass es sich EXAKT um den einen Tag handelt.

                      lg, Peter

                      Kommentar


                        #12
                        noch eine frage dazu. verhält sich das bei htime() und den anderen zeitschaltuhren auch so? bei htime() ist es bis 23:59:59 gültig? bei minuten bis 50min? usw?

                        lg, Peter

                        Kommentar


                          #13
                          Zitat von ppfeifer Beitrag anzeigen
                          noch eine frage dazu. verhält sich das bei htime() und den anderen zeitschaltuhren auch so? bei htime() ist es bis 23:59:59 gültig? bei minuten bis 50min? usw?
                          Siehe Beschreibung chtime und htime in Handbuch: htime gibt einen Impuls aus, chtime bis 23:59:59.
                          offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                          Enertex Produkte kaufen

                          Kommentar

                          Lädt...
                          X