Ankündigung

Einklappen
Keine Ankündigung bisher.

Sequenzer für Farbbeleuchtung

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

    #16
    henfri Könntest du deine finale HSV Logik hier noch posten, damit alles beisammen ist? Vielen Dank!

    Kommentar


      #17
      Hallo,

      na klar!
      Code:
      #!/usr/bin/env python3
      
      
      #my_sequencer=sh.eg.Wohnzimmer.Voute
      
      my_sequencer=sh.return_item(logic.my_sequencer)
      
      logger.info("[Sequencer] Starting for {0}. Status is {1}".format(my_sequencer, my_sequencer.sequencer()))
      if my_sequencer.sequencer():
          def hsv2rgb(h,s,v):
              try:
                  import colorsys as cs
              except:
                  logger.error("could not import colorsys")
              return tuple(round(i * 100) for i in cs.hsv_to_rgb(h,s,v))
      
          h=my_sequencer.sequencer.h()
          s=my_sequencer.sequencer.s()/100.0
          v=my_sequencer.sequencer.v()/100.0
          logger.info('[HSV] h={0}, s={1}, v={2}'.format(h,s,v))
      
          r,g,b=hsv2rgb(h,s,v)
          logger.info('[HSV] r={0}, g={1}, b={2}'.format(r,g,b))
          my_sequencer.R.Dimmwert(r)
          my_sequencer.G.Dimmwert(g)
          my_sequencer.B.Dimmwert(b)
      
          if h>1:
              h=0
          my_sequencer.sequencer.h(h+0.05)
      else:
       if trigger['source'] is not None:
        if logic.my_sequencer in trigger['source']:
          logger.info("[Sequencer] HSV Switching off now")
          my_sequencer.R.Dimmwert(0)
          my_sequencer.G.Dimmwert(0)
          my_sequencer.B.Dimmwert(0)
      Beispiel-Item:
      Code:
              Voute:
                  
                  sequencer:
                      knx_dpt: 1
                      knx_cache: 10/3/1
                      visu_acl: rw
                      type: bool
      
                      h:
                          visu_acl: rw
                          type: num
                          cache: 'True'
      
                      s:
                          visu_acl: rw
                          type: num
                          cache: 'True'
      
                      v:
                          visu_acl: rw
                          type: num
                          cache: 'True'
      
      
                  B:
                      type: bool
                      knx_cache: 1/1/174
                      knx_send: 1/1/173
                      knx_dpt: 1
      
                      Dimmwert:
                          type: num
                          knx_cache: 1/1/176
                          knx_send: 1/1/175
                          knx_dpt: '5.001'
      
                  G:
                      type: bool
                      knx_cache: 1/1/170
                      knx_send: 1/1/169
                      knx_dpt: 1
      
                      Dimmwert:
                          type: num
                          knx_cache: 1/1/172
                          knx_send: 1/1/171
                          knx_dpt: '5.001'
      
                          
                  R:
                      type: bool
                      knx_cache: 1/1/166
                      knx_send: 1/1/165
                      knx_dpt: 1
      
                      Dimmwert:
                          type: num
                          knx_cache: 1/1/168
                          knx_send: 1/1/167
                          knx_dpt: '5.001'


      Gruß,
      Hendrik

      Kommentar


        #18
        Okay, und die Logik wird durch einen Cycle alle x Sekunden aufgerufen und das sanfte Hin- und Herblenden macht der Aktor, ja?
        Unklar ist mir die erste Zeile
        my_sequencer=sh.return_item(logic.my_sequencer)

        Was genau soll hier passieren? logic.mysequencer gibt's ja nicht? Soll das nicht eher items.return_item(trigger['source']).return_parent() heißen?
        Oder

        Code:
        if not hasattr(logic, 'my_sequencer'):
            logic.my_sequencer = items.return_item(trigger['source']).return_parent()
            
        my_sequencer=logic.my_sequencer
        Kannst du vielleicht auch den logic.yaml Abschnitt posten? Danke!
        Zuletzt geändert von Onkelandy; 30.11.2020, 21:41.

        Kommentar


          #19
          Zitat von Onkelandy Beitrag anzeigen
          Okay, und die Logik wird durch einen Cycle alle x Sekunden aufgerufen und das sanfte Hin- und Herblenden macht der Aktor, ja?
          Ja, genau.

          Unklar ist mir die erste Zeile
          my_sequencer=sh.return_item(logic.my_sequencer)

          Was genau soll hier passieren? logic.mysequencer gibt's ja nicht? Soll das nicht eher items.return_item(trigger['source']).return_parent() heißen?
          Doch, siehe logic.yaml.
          Sorry, die hätte ich gleich posten sollen.
          Ich fänd übrigens gut, wenn wir solche Logiken im github sammeln und kollektiv verbessern würden:
          - Item Struct
          - logic.yaml
          - logic.py

          Dafür muss man natürlich allgemeiner arbeiten als wenn man nur für sich eine Logik schreibt. Aber das klappt ja beim HS und Edomi auch.


          Oder

          Code:
          if not hasattr(logic, 'my_sequencer'):
          logic.my_sequencer = items.return_item(trigger['source']).return_parent()
          
          my_sequencer=logic.my_sequencer
          Code:
          Ja, das sollte klappen... 
          Wobei ich gerade nicht mehr sicher bin, warum ich ein watch_item habe... Braucht man das überhaupt, wenn eh zyklisch aufgerufen wird? Und was ist trigger['source'] beim zyklischem Aufruf?
          Kannst du vielleicht auch den logic.yaml Abschnitt posten? Danke!
          Klaro
          Code:
          hsv:
              filename: hsv.py
              cycle: 10
              my_sequencer: eg.Wohnzimmer.Voute
              watch_item: eg.Wohnzimmer.Voute.sequencer
          Gruß,
          Hendrik

          Kommentar


            #20
            Okay, klar, das ist ein etwas anderer Ansatz. Aber du hast Recht, bei Cycle macht das mit dem Trigger Source wohl tatsächlich wenig Sinn, das ist dann nämlich None.

            Im Prinzip gehört das Ganze hier rein, oder? https://www.smarthomeng.de/user/beis...ache-beispiele

            Kommentar


              #21
              Ich weiß nicht... Das sind eher Beispiele um die Dokumentation zu erläutern.

              Ich denke einfach an eine Sammlung von "Logikbausteinen" wie es 'drüben' heißt.
              Die Dokumentation ist mir dazu zu "formell". Da hätte ich immer Hemmungen, dass die Qualität nicht ausreichend ist.

              Gruß,
              Hendrik

              Kommentar


                #22
                Wie wäre es mit einem Blog Artikel?
                Viele Grüße
                Martin

                There is no cloud. It's only someone else's computer.

                Kommentar


                  #23
                  Wäre schon auch eine Option. Ich glaube henfri meinte aber eher eine "lose Sammlung" zB auf github wie es sie zB für die smartvisu gibt. https://github.com/smartVISU-newstuff/widgets
                  Da könnte man dann gemeinsam drüberbügeln. In letzter Konsequenz wäre es vielleicht auch eine Überlegung wert, die besten/häufigsten genutzten Logiken im Admininterface in einem Tab "Beispiellogiken" hier http://10.0.0.152:8383/admin/logics bereitzustellen. Mit nem + zum Live-Laden der Logik...?

                  Kommentar


                    #24
                    Hallo,

                    ja, ein Blog Artikel ist halt eine recht hohe Hürde. Das macht dann doch wieder nur 1/10 aller, die etwas zu teilen hätten.
                    Eine Logik kann ich in meinem Github bereitstellen und zwar in 10^-6s. Für einen Blog-Artikel brauche ich ne Stunde.

                    Daher würde ich stark zu einer Lösung wie von Andy tendieren.

                    Gruß,
                    Hendrik

                    Kommentar


                      #25
                      Dann muss sich nur jemand zum moderieren finden. Wir werden kein Wiki mit allgemeinen Schreibrechten aufsetzen, dass enthält dann nach kurzer Zeit nur noch Spam.

                      Auf der Blog Website schaffen es Spammer sogar von Zeit zu Zeit durch das Google Captcha durchzukommen...

                      Der einfachste Weg wäre hier einen Thread dafür aufzumachen. Dann kümmern sich andere um die Spam Thematik (vielen Dank an die Forum Admins). Die besten Beispiele könnte man dann immer noch in ein Wiki oder in einen Blog Artikel überführen. Die wären dann auch qualitätsgesichert und funktionieren auch wirklich.
                      Zuletzt geändert von Msinn; 06.12.2020, 18:06.
                      Viele Grüße
                      Martin

                      There is no cloud. It's only someone else's computer.

                      Kommentar


                        #26
                        Hallo,

                        das verstehe ich. Aber in einem Thread gibt es keine Übersicht. Das bringt doch nicht, wenn wir dann den nächsten 40 Seiten Thread haben, in dem von der gleichen Logik 4 Varianten zu finden sind, wobei die Variante 3 den Vorteil A udn die Variante 2 das Feature X hat.

                        Warum nicht einfach Beispiel-Logiken im github und PRs annehmen?

                        Gruß,
                        Hendrik

                        Kommentar

                        Lädt...
                        X