Ankündigung

Einklappen
Keine Ankündigung bisher.

Logik Problem -zeitabhängiges Dimmen

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

    Logik Problem -zeitabhängiges Dimmen

    Hallo zusammen,
    möchte meine Spots nicht nur zeitabhängig dimmen, sondern morgens auch separat nach WERKTAGS und WOCHENENDE.
    Dazu habe ich mir folgende Logik gebastelt, die aber nicht funktioniert.

    Problem:
    Morgens, auch am WE wird immer um 05:00:00 auf 90% gedimmt, so als wenn die WOCHENENDE Bedingung gar nicht ausgeführt wird.....
    Für Tipps wie ich das ans Laufen kriege wäre ich sehr dankbar.......

    vielen Dank, Paul.

    Code:
    //Flur- Badlicht Spots zeitabhängig dimmen, Handbuch S.51
    Dimmer=90%
    BewegungsMelderFlur="Flur Licht-Kanal 1 Ein/Aus-6/0/7"
    BewegungsMelderBad="Bad Licht-Kanal 1 Ein/Aus-6/0/9"
    
    if(htime(20,00,00)) then Dimmer=15% endif
    if(htime(23,00,00)) then Dimmer=2% endif
    
    TypeOfDay = WERKTAGS
    HrStartUpWeekday = 05u08
    MinStartUpWeekday = 0u08
    HrStartUpWeekend = 07u08
    MinStartUpWeekend = 0u08
    HrStartUp = 0u08
    MinStartUp = 0u08
    hTimeActivated = 0u08
    
    if TypeOfDay == WERKTAGS then {
        HrStartUp = HrStartUpWeekday;
        MinStartUp = MinStartUpWeekday
    } endif
    if TypeOfDay == WOCHENENDE then {
        HrStartUp = HrStartUpWeekend;
        MinStartUp = MinStartUpWeekend
    } endif
    
    if(htime(HrStartUp,MinStartUp,00)) then Dimmer=90%; hTimeActivated=1u08 endif
    
    if(systemstart()) then read('6/0/7'b01); read('6/0/9'b01) endif
    if(BewegungsMelderFlur==EIN) then write("Flur 8Spots Raumlicht schalten-1/1/0",EIN);\\
    write("Flur 8Spots Raumlicht Wert-1/3/0",Dimmer) endif
    if(BewegungsMelderFlur==AUS) then write("Flur 8Spots Raumlicht schalten-1/1/0",AUS) endif
    if(BewegungsMelderBad==EIN) then write("Bad 6Spots Raumlicht schalten-1/1/22", EIN);\\
    write("Bad 6Spots Raumlicht Wert-1/3/22",Dimmer) endif
    if(BewegungsMelderBad==AUS) then write("Bad 6Spots Raumlicht schalten-1/1/22",AUS) endif



    #2
    Dein TypeOfDay ist ja auch konstant! Schau Dir mal die dayofweek() Funktion an...

    Definier's doch so ähnlich:

    Code:
    isWeekend = dayofweek() == SONNTAG or dayofweek() == SAMSTAG
    Dann gibt es noch das Problem der Feiertage - auch das ist lösbar...
    Zuletzt geändert von klaus_kraemer; 30.10.2017, 14:21.

    Kommentar


      #3
      Hallo Klaus,
      vielen Dank für die Antwort.

      Zitat von klaus_kraemer Beitrag anzeigen

      Code:
      isWeekend = dayofweek() == SONNTAG or dayofweek() == SAMSTAG
      Dann gibt es noch das Problem der Feiertage - auch das ist lösbar...
      Ich teste das und die Feiertage kommen dann später, Eins nach dem Anderen.......
      Danke, Gruß, Paul.

      Kommentar


        #4
        Hallo zusammen,
        muss diesen Thread nochmal rauskramen, denn ich komme nicht weiter und hoffe auf eure Hilfe.
        Der Code funktioniert nicht richtig:
        Der Samstag verhält sich wie ein normaler Wochentag, der Sonntag funktioniert so wie geplant......
        Kann mir jemand sagen, wo der Fehler in der Logik ist?

        Danke und Gruß, Paul

        Code:
        //Flur- Badlicht Spots zeit- u. tagesabhängig dimmen, Handbuch S.51
        Dimmer=90%
        BewegungsMelderFlur="Flur Licht-Kanal 1 Ein/Aus-6/0/7"
        BewegungsMelderBad="Bad Licht-Kanal 1 Ein/Aus-6/0/9"
        
        if(htime(21,00,00)) then Dimmer=10% endif
        if(htime(23,00,00)) then Dimmer=2% endif
        
        isWeekend = dayofweek() == SONNTAG OR dayofweek() == SAMSTAG
        isWeekday = dayofweek() == MONTAG OR dayofweek() == DIENSTAG OR dayofweek() == MITTWOCH OR dayofweek() == DONNERSTAG OR dayofweek() == FREITAG
        
        HrStartUp = 0u08
        MinStartUp = 0u08
        HrStartUpWeekday = 05u08
        MinStartUpWeekday = 0u08
        HrStartUpWeekend = 07u08
        MinStartUpWeekend = 0u08
        
        if isWeekend then {
        HrStartUp = HrStartUpWeekend;
        MinStartUp = MinStartUpWeekend
        } endif
        
        if isWeekday then {
        HrStartUp = HrStartUpWeekday;
        MinStartUp = MinStartUpWeekday
        } endif
        
        if(htime(HrStartUp,MinStartUp,00)) then Dimmer=90% endif
        
        if(systemstart()) then read('6/0/7'b01); read('6/0/9'b01) endif
        if(BewegungsMelderFlur==EIN) then write("Flur 8Spots Raumlicht schalten-1/1/0",EIN);\\
        write("Flur 8Spots Raumlicht Wert-1/3/0",Dimmer) endif
        if(BewegungsMelderFlur==AUS) then write("Flur 8Spots Raumlicht schalten-1/1/0",AUS) endif
        if(BewegungsMelderBad==EIN) then write("Bad 6Spots Raumlicht schalten-1/1/22", EIN);\\
        write("Bad 6Spots Raumlicht Wert-1/3/22",Dimmer) endif
        if(BewegungsMelderBad==AUS) then write("Bad 6Spots Raumlicht schalten-1/1/22",AUS) endif
        Zuletzt geändert von PaulM; 17.12.2017, 18:17.

        Kommentar


          #5
          Hallo Paul,

          im Code kann ich erstmal keinen Fehler feststellen. Wird den die Variable "isWeekend" bereits am Samstag auf "EIN" gesetzt oder erst am Sonntag?

          Ansonsten versuchs doch mal so (Beispiel nur für den Flur) und berichte:

          Code:
          Dimmer = 90%
          
          if htime(21,00,00) then Dimmer = 10% endif
          if htime(23,00,00) then Dimmer = 2% endif
          
          if htime(05,00,00) and !(dayofweek() = SAMSTAG or dayofweek() = SONNTAG) then Dimmer = 90% endif
          if htime(07,00,00) and (dayofweek() = SAMSTAG or dayofweek() = SONNTAG) then Dimmer = 90% endif
          
          initga("Flur Licht-Kanal 1 Ein/Aus-6/0/7")
          
          if event("Flur Licht-Kanal 1 Ein/Aus-6/0/7") and "Flur Licht-Kanal 1 Ein/Aus-6/0/7") then {
             write("Flur 8Spots Raumlicht schalten-1/1/0", EIN);
             write("Flur 8Spots Raumlicht Wert-1/3/0", Dimmer)
          } endif
          
          if event("Flur Licht-Kanal 1 Ein/Aus-6/0/7") and !"Flur Licht-Kanal 1 Ein/Aus-6/0/7") then {
             write("Flur 8Spots Raumlicht schalten-1/1/0", AUS)
          } endif
          Gruß,
          Eike
          ViP - Verteilerplanung in Perfektion
          www.verteilerplanung-in-perfektion.de

          Kommentar


            #6
            Das sollte auch so gehen:
            Code:
             isWeekend = dayofweek() > FREITAG
            isWeekday= dayofweek() < SAMSTAG
            Beim Umschalten des htime gab es ja ein Bugfix. Hast Du die aktuelle Patch-Version eingespielt?
            Die Oderverknüpfungen zum exakten Zeitpunkt der Umschaltung von Freitag auf Samstag auf beiden Variablen is.... könnten zu einem Logik-Glitch führen.
            eike3091 Vorschlag finde ich persönlich etwas einfacher zu lesen, aber das ist am Ende wohl auch Geschmacksache.
            offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
            Enertex Produkte kaufen

            Kommentar


              #7
              vielen Dank für eure Rückmeldungen und Vorschläge.
              Habe den Patch eingespielt, die Änderungen von Eike durchgeführt (kompakter Code!!)
              Berichte dann, ob es klappt.....
              Danke, Paul.

              Kommentar


                #8
                Funktioniert jetzt einwandfrei.....
                Vielen Dank für die Infos!!
                Für alle, die es nachbauen wollen, hier der Code:

                Code:
                //Flur- Badlicht Spots zeit- u. tagesabhängig dimmen, siehe Handbuch S.51
                Dimmer = 90%
                if htime(21,00,00) then Dimmer = 10% endif
                if htime(23,00,00) then Dimmer = 2% endif
                
                if htime(05,00,00) and (dayofweek() < SAMSTAG) then Dimmer = 90% endif
                if htime(07,00,00) and (dayofweek() > FREITAG) then Dimmer = 90% endif
                
                initga("Flur Licht-Kanal 1 Ein/Aus-6/0/7")
                initga("Bad Licht-Kanal 1 Ein/Aus-6/0/9")
                
                if event("Flur Licht-Kanal 1 Ein/Aus-6/0/7") and ("Flur Licht-Kanal 1 Ein/Aus-6/0/7") then {
                   write("Flur 8Spots Raumlicht schalten-1/1/0", EIN);
                   write("Flur 8Spots Raumlicht Wert-1/3/0", Dimmer)
                } endif
                
                if event("Flur Licht-Kanal 1 Ein/Aus-6/0/7") and !("Flur Licht-Kanal 1 Ein/Aus-6/0/7") then {
                   write("Flur 8Spots Raumlicht schalten-1/1/0", AUS)
                } endif
                
                if event("Bad Licht-Kanal 1 Ein/Aus-6/0/9") and ("Bad Licht-Kanal 1 Ein/Aus-6/0/9") then {
                   write("Bad 6Spots Raumlicht schalten-1/1/22", EIN);
                   write("Bad 6Spots Raumlicht Wert-1/3/22", Dimmer)
                } endif
                
                if event("Bad Licht-Kanal 1 Ein/Aus-6/0/9") and !("Bad Licht-Kanal 1 Ein/Aus-6/0/9") then {
                   write("Bad 6Spots Raumlicht schalten-1/1/22", AUS)
                } endif

                Kommentar


                  #9
                  Zitat von enertegus Beitrag anzeigen
                  Das sollte auch so gehen:
                  Code:
                   isWeekend = dayofweek() > FREITAG
                  isWeekday= dayofweek() < SAMSTAG
                  Sicher ?
                  Bei diesem Code wäre doch nur Samstags Wochenende, da SONNTAG ja den Wert "0" hat !?

                  Gruß
                  Michael

                  Kommentar


                    #10
                    Wozu 2 Variable, die auch noch unabhängig (und damit fehlerträchtig) programmiert sind? Das käme mir nicht unbedingt in den Code.

                    Es würde doch reichen "isWeekend" zu definieren und im Code mit der Verneinung "!isWeekend" zu arbeiten, wenn ein Wochentag gemeint ist.

                    Wenn es unbedingt sein muss, dann halt "isWeekday = !isWeekend" und eine potentielle Fehlerquelle weniger im Code. Aber genau diese Zuweisung zeigt auch, wie unnötig die Definition zweier Variabler mit lediglich inversem Inhalt ist...

                    Kommentar


                      #11
                      Sicher ?
                      Bei diesem Code wäre doch nur Samstags Wochenende, da SONNTAG ja den Wert "0" hat !?
                      Michael, du hast natürlich Recht, ich war zu voreilig......sorry!!!!

                      Ich habe das jetzt so realisiert wie "Eike" vorgeschlagen hat, nur habe ich 2 Gleichheitszeichen bei der Wertzuweisung gesetzt, jetzt läuft es.....

                      Code:
                      if htime(05,00,00) and !(dayofweek() == SAMSTAG or dayofweek() == SONNTAG) then Dimmer = 90% endif
                      if htime(07,00,00) and (dayofweek() == SAMSTAG or dayofweek() == SONNTAG) then Dimmer = 90% endif
                      vielen Dank an alle.....
                      Gruß, Paul

                      Kommentar

                      Lädt...
                      X