Ankündigung

Einklappen
Keine Ankündigung bisher.

UZSU Widget für Lüftung

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

    #46
    Zitat von wvhn Beitrag anzeigen

    Letzteres kann "unsere" Lösung auch, weil das eval nur vom Zustandswechsel von [boost] getriggert wird. Man kann dann den Level per Visu oder am Lüftungsgerät verstellen und damit die Stoßlüftung abbrechen. So müsste es in der Theorie sein. Vielleicht kann KF55W das mal testen.

    Gruß Wolfram
    Wolfram hat recht.
    Man kann jederzeit einen anderen Wert setzen.
    Boost wird damit nicht deaktiviert.
    Nach ablauf boost stellt sich ein Wert ein, der änhlich dem kwl.level_alt() wert war, machmal eine Stufe drüber, macnhmal eine Stufe drunter....

    man müsste mit setzen von kwl.level den kwl.level_alt() wert überschreiben.

    Kommentar


      #47
      Klingt nach 'ein bisschen schwanger'.

      Hier mal eine erste Idee, wo ich gern mit der ganzen Sache hinkommen würde. Ich hab's grad erst neu runtergeschrieben und noch nicht ausprobiert, also für offensichtliche Fehler bitte nicht gleich hauen.

      Code:
      # Universaltimer für Geräte - Kriterien:
      # - Aktivierung einer bestimmten Schaltstufe für ein item 'level' über KNX-Taster oder Visu
      # - Automatische Rückstellung auf den vorher eingestellten Wert nach erreichter Laufzeit
      # - Abbruch bei manueller Eingabe einer anderen Stufe über KNX, Bedienteil, Visu, ...
      # - Optionales Item für "Stop" (Rückkehr zur vorher eingestellten Stufe) über KNX oder Visu
      # - Optionales Item für Einstellung der Dauer (Visu)
      # - Optionales Item für Restzeit in Minuten (Visu)
      
      [kwl]
      
          [[boost]]
              type = bool
              visu_acl = w
              autotimer = sh.kwl.boost.visu.boostduration() = 0
              eval = sh.kwl.boost.visu.boostlevel() if value else sh.kwl.level(sh.kwl.level.alt())
              knx_dpt = 1
              knx_cache = 0/4/8
              # ToDo:
              # Doku: Jede erneute Aktivierung erneuert den autotimer???
              # Allgemein: Was passiert mit autotimer bei Abbruch und erneuter Aktivierung?
      
          [[level]]
              type = num
              knx_dpt = 5
              knx_send = 0/4/9
      
              [[[alt]]]
                  type = num
                  cache = True
                  eval = self() if self.return_parent().changed_by() == 'Init' else self.return_parent().prev_value()
                  eval_trigger = kwl.level
      
          [[visu]]
              type = foo  
      
              [[[boostlevel]]]  # Konnektor für Slider oder Radiobuttons - Level
                  type = num
                  value = 204
                  autotimer = 120 = 204
                  visu_acl = rw
      
              [[[boostduration]]]  # Konnektor für Slider oder Radiobuttons - Zeit
                  type = num
                  value = 25
                  visu_acl = rw
      
              [[[stop_boost]]]
                  type = foo
                  eval = "sh.kwl.boost.autotimer();sh.kwl.boost(0)"  # unschön, aber wohl konform
                  eval_trigger = sh.kwl.visu.stop_boost.button
      
                  [[[[button]]]]  # Konnektor für Button - Abbruch Stoßlüftung
                      type = foo
      
              [[[remaining_mins]]]  # Restzeit für Anzeige in der Visu
                  type = num
                  eval = __import__('math').ceil(sh.scheduler.return_next('sh.kwl.boost-Timer')/60)
                  # eval_trigger =  # ToDo: Woher nehmen?
      /tom
      Zuletzt geändert von Tom Bombadil; 25.11.2016, 19:49.

      Kommentar


        #48
        Zitat von Tom Bombadil Beitrag anzeigen
        Ich glaube, so einfach ist das nicht - 'boost' wird durch eine reine Änderung von 'level' über Visu/Bedienteil ja nicht geändert. Der autotimer tickt also weiter, irgenwann fällt 'boost' auf 0, und es wird auf 'level_alt' gestellt, wenn Level sich über boost triggert ...

        @smai: Mit dem Namen für den autotimer scheinst Du recht zu haben, soweit war ich in der item.py noch nicht vorgedrungen.

        /tom

        Edit:

        Hier nochmal die Unterschiede:

        "Wir":

        Code:
        [[boost]]
        type = bool
        visu_acl = rw
        autotimer = 25 = 0
        knx_dpt = 1
        knx_cache = 0/4/8
        
        [[[level]]]
        type = num
        eval = 204 if sh.kwl.boost() == 1 else sh.kwl.level_alt()
        eval_trigger = kwl.boost
        knx_dpt = 5
        knx_send = 0/4/9
        sqlite = no
        
        [[level_alt]]
        type = num
        knx_dpt = 5
        visu_acl = rw
        cache = True
        eval = sh.kwl.level_alt() if sh.kwl.level.changed_by() == 'Init' else sh.kwl.level.prev_value()
        eval_trigger = kwl.boost.level
        smai:
        Code:
        [[boost]]
        type = bool
        visu_acl = w
        autotimer = 25 = 0
        eval = sh.kwl.level(204) if value else sh.kwl.level(sh.kwl.level.alt())
        
        [[level]]
        type = num
        
        [[[alt]]]
        type = num
        cache = True
        eval = self() if self.return_parent().changed_by() == 'Init' else self.return_parent().prev_value()
        eval_trigger = kwl.level
        Wird noch'n Hackathon hier.

        /tom

        scheint nicht so direkt zu funktionieren.
        2016-11-25 19:34:47 DEBUG __init__ Main 192.168.100.68:64742 sent '{"cmd":"item","id":"kwl.boost","val":"1"}' -- __init__.py:json_parse:329
        2016-11-25 19:34:47 DEBUG scheduler Main Triggering kwl.boost-eval - by: Visu source: 192.168.100.68:64742 dest: None value: {'caller': 'Visu', 'value': '1', 'dest': -- scheduler.py:trigger:165
        2016-11-25 19:34:47 INFO item kwl.boost-eval Item kwl.boost: evaluating sh.kwl.levelb(204) if value else sh.kwl.levelb(sh.kwl.levelb.alt()) returns None -- item.py:__run_eval:441

        Kommentar


          #49
          Da ist ein "b" zu viel:

          Code:
          evaluating sh.kwl.level[COLOR=#FF0000]b[/COLOR](204)
          Weiter hinten auch ...

          /tom

          Kommentar


            #50
            Hier mal meine komplette conf:
            Code:
            [kwl]
                [[level]]                                  #setzt die div Level per basic.button (value)
                    type = num
                    visu_acl = rw
                    knx_dpt = 5
                    knx_cache = 0/4/10
                    knx_send = 0/4/9
                    sqlite = no
                    [[[uzsu1]]]                       #setzt die div Level per Zeitschaltuhr
                    type=dict
                    uzsu_item=kwl.level
                    visu_acl=rw
                    cache = True    
                [[boost]]                           # Boost-Mode
                      type = bool       
                      visu_acl = rw
                      autotimer = 45m = 0
                      knx_dpt = 1
                      knx_cache = 0/4/0     #WICHTIG, wird benötigt um die Taster im Haus zu belauschen, und im Falle einer '1' Boost-Mode zu aktivieren
                      [[[level]]]
                          type = num
                          eval = 204 if sh.kwl.boost() == 1 else sh.kwl.level_alt()  
                          eval_trigger = kwl.boost
                          knx_dpt = 5
                          knx_send = 0/4/9
                          sqlite = no
                  [[level_alt]]
                      type = num
                      knx_dpt = 5
                      visu_acl = rw
                      cache = True
                      eval = sh.kwl.level() if sh.kwl.level.changed_by() == 'Init' else sh.kwl.level.prev_value()
                      eval_trigger = kwl.boost.level
            
            
            NEU
                [[boost-abbruch]]
                   type = num
                    knx_dpt = 5
                    visu_acl = rw
                    cache = True
                    eval =               # Wenn  Boost abgebrochen werden soll durch Taster (kw.level), dann setze diesen wert als kwl.level_alt()  Wie lautet korrekte Schreibweise?
                    eval_trigger = kwl.level
            recht rudimentär.
            bräuchte ich nur die korrekte schreibweise, dann würde es funktionieren, mit Abbruch.
            Kann mir die einer von euch sagen?

            Kommentar


              #51
              Zitat von Tom Bombadil Beitrag anzeigen
              Da ist ein "b" zu viel:

              Code:
              evaluating sh.kwl.level[COLOR=#FF0000]b[/COLOR](204)
              Weiter hinten auch ...

              /tom
              Hi tom,
              da ich Level schon benutzt habe, hab ich für das neue Level noch das b angehangen.
              im post drüber siehst du meine conf.

              Kommentar


                #52
                Schnellschuss für Deine config: eval = "sh.kwl.boost.autotimer();sh.kwl.boost(0);sh.kwl.l evel(sh.kwl.level_alt())".
                Ich würde trotzdem die andere Variante ausprobieren, siehe oben. Damit ist 'level' auch noch frei.
                /tom
                Zuletzt geändert von Tom Bombadil; 25.11.2016, 20:02.

                Kommentar


                  #53
                  Zitat von Tom Bombadil Beitrag anzeigen
                  Schnellschuss für Deine config: eval = "sh.kwl.boost.autotimer();sh.kwl.boost(0);sh.kwl.l evel(sh.kwl.level_alt())".
                  Ich würde trotzdem die andere Variante ausprobieren, siehe oben. Damit ist 'level' auch noch frei.
                  /tom
                  danke dir

                  ich werde deine Variante auch noch testen.

                  Aktuell ist aber der wurm drin.
                  die erprobte hängt nun nach dem ganzen umgestelle...
                  neustart

                  Kommentar

                  Lädt...
                  X