Ankündigung

Einklappen
Keine Ankündigung bisher.

UZSU Widget für Lüftung

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

    #31
    hey, es läuft !!! cool
    vielen Dank tom und wolfram

    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
    noch ne Ergänzung:

    wenn man boost während boost erneut aktiviert, passiert nichts, wie du es schon erklärt hast wolfram.

    Zuletzt geändert von KF55W; 20.11.2016, 19:43.

    Kommentar


      #32
      Glückwunsch, gern geschehen! Nur so aus Neugier:

      Zitat von KF55W Beitrag anzeigen
      Code:
      eval = sh.kwl.level_alt() if sh.kwl.level.changed_by() == 'Init' else sh.kwl.level.prev_value()
      Hast Du mal geprüft, ob das ordnungsgemäß funktioniert (also sowohl nach dem Einschalten als auch mit verschiedenen Lüftungsstufen als Ausgangspunkt)?

      /tom

      Kommentar


        #33
        hi tom,

        ja, ich hatte es geprüft.
        wenn das sh läuft und ich eine Stufe setze, dann wurde diese immer nach dem Boost wieder angefahren.

        Nach dem starten ohne eine STufe zu setzen und dann boost, war es nicht ganz korrekt.
        ich denke der hatte da null als STufe wieder angefahren...

        Kommentar


          #34
          Das liegt denke ich daran, dass Du level_alt beim Erststart im eval auf sh.kwl.level_alt() setzt. Ich hätte sh.kwl.level() vorgeschlagen, weil dessen Wert ja beim Init aus der GA gelesen wird.

          Gruß Wolfram

          Kommentar


            #35
            Zitat von wvhn Beitrag anzeigen
            Ich hätte sh.kwl.level() vorgeschlagen, weil dessen Wert ja beim Init aus der GA gelesen wird.
            Hast Du doch auch. Müsste passen ...
            /tom

            Kommentar


              #36

              KF55W, schau mal, was Tom hier angezettelt hat: https://knx-user-forum.de/forum/supp...f-fremde-items .
              Am Ende ist eine interessante Lösung von smai für Dein Problem heraus gekommen.

              Gruß Wolfram

              Kommentar


                #37
                smai's Lösung hat den Vorteil, dass redundante Level-Items vermieden werden und man die Stosslüftung auch direkt über das Level-Item herunterfahren kann, wenn sie mal versehentlich aktiviert wurde (z.B. über die Visu oder ein Bedienteil).

                Ist z.B. 'ne Macke der werksseitig eingebauten Stosslüftung meiner Helios - wenn die einmal läuft, muss man schon tief in die Trickkiste greifen, um sie wieder abzubrechen.

                Außerdem ist die Lösung ein schönes Beispiel für das elegante Schreiben auf fremde Items (grinsduckwechrenn).

                Die letzte Zeile müsste übrigens IMHO eval_trigger = kwl.level heissen.

                Wie kann man eigentlich den aktuellen Timer-Wert (Restzeit) aus [[boost]] auslesen? boost.autotimer() dürfte gemäss Doku wohl nicht gehen ...

                /tom

                Kommentar


                  #38
                  Ja, das mit der letzten Zeile ist mir auch aufgefallen. Wollte es erst nicht korrigieren, habe ich nun aber trotzdem getan.

                  Wenn das schon als Referenzlösung hinhalten soll, habe ich sie noch etwas weiter verschönert:
                  Code:
                     [kwl]
                         [[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
                  1. Das level_alt habe ich unter das level geschoben, weil es eigentlich eine direkte Eigenschaft davon ist. Ausserdem habe ich es auf "alt" gekürzt und im eval von boost entsprechend level.alt statt level_alt geschrieben
                  2. im eval des alt habe ich die absolute Referenz auf sich selbst durch self() und auf level durch self.return_parent() ersetzt. Dadurch spielt es keine Rolle, wo das Item im Baum ist und wie es heisst

                  Ab SmartHomeNG 1.3 wird es dann noch eleganter gehen, weil dort relative Referenzen per Punkt möglich sind.
                  Code:
                     [kwl]
                         [[boost]]
                             type = bool
                             visu_acl = w
                             autotimer = 25 = 0
                             eval = sh...level(204) if value else sh...level(sh...level.alt())
                         [[level]]
                             type = num
                             [[[alt]]]
                                type = num
                                cache = True
                                eval = sh..() if sh...changed_by() == 'Init' else sh...prev_value()
                                eval_trigger = ..
                  Zuletzt geändert von smai; 25.11.2016, 09:22.

                  Kommentar


                    #39
                    Super smai - hab gestern Abend auch noch dran getüftelt, um zu einer Universallösung inkl. Visu-Anbindung zu kommen (Einstellung Laufzeit, Einstellung Level, Abbruch-Button usw).

                    Kann da auch von der Visu-Seite noch was beisteuern, das ich schon im vergangenen Jahr entwickelt hatte (z.B. Radio-Auswahl im 'Button Style' zur Zeit-/Leveleinstellung sowie 'show_if_not_zero' Items (Text/Icon Anzeige nur, wenn Item nicht 0 ist, d.h. wenn Restzeit > 0 dann Anzeige als Lüfter-Icon sowie Restzeit als Text, sonst nix anzeigen)).

                    Vielleicht wird's ja ein 'universeller Treppenlichtautomat mit Stosslüftungsfunktion'.

                    Bin noch nicht ganz durch, aber ich kann heute Abend schon mal was posten, knabber derzeit neben anderen Sachen auch an der Restzeit von autotimer (siehe oben) ...

                    /tom

                    Kommentar


                      #40
                      Keine Ahnung, ob ich den Code richtig lese und das funktioniert, aber versuch's mal mit sh.scheduler.return_next('kwl.boost-Timer') oder evtl. sh.scheduler.return_next('sh.kwl.boost-Timer')

                      Kommentar


                        #41
                        Steh grad auf dem Schlauch - heisst die bei autotimer ausgeführte Logik nicht auch 'autotimer'? Also sh.scheduler.return_next('sh.kwl.boost.autotimer')? Ich glaub, ich brauch mehr Kaffee ...

                        /tom

                        Kommentar


                          #42
                          Ich habe meine Aussage aus der Zeile 510 von item.py geschlossen, welche auf Zeile 402 durch den Autotimer aufgerufen wird.
                          Aber wie gesagt, ich kann mich auch irren, weil ich da keinen ganzheitlichen Durchblick habe.

                          Kommentar


                            #43
                            Zitat von Tom Bombadil Beitrag anzeigen
                            smai's Lösung hat den Vorteil, dass redundante Level-Items vermieden werden und man die Stosslüftung auch direkt über das Level-Item herunterfahren kann, wenn sie mal versehentlich aktiviert wurde (z.B. über die Visu oder ein Bedienteil).
                            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

                            Kommentar


                              #44
                              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
                              Zuletzt geändert von Tom Bombadil; 25.11.2016, 18:43.

                              Kommentar


                                #45
                                Zitat von wvhn Beitrag anzeigen
                                Das liegt denke ich daran, dass Du level_alt beim Erststart im eval auf sh.kwl.level_alt() setzt. Ich hätte sh.kwl.level() vorgeschlagen, weil dessen Wert ja beim Init aus der GA gelesen wird.

                                Gruß Wolfram
                                Hi Wolfram,

                                ich hatte deinen Vorschlag auch geprüft.
                                der ist auch auf Stufe 0 nach Boost gegangen.

                                Jetzt muss ich mich durch die Menge neuer spannenden Beiträge lesen

                                Kommentar

                                Lädt...
                                X