Ankündigung

Einklappen
Keine Ankündigung bisher.

RGB Fader

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

    RGB Fader

    Hallo,

    Habe meine erste Logic fertig und möchte die für andere bereitstellen.
    Ist nur ein einfacher RGB Fader der solang das watch_item aktiv ist die drei Grundfarben durchfadet.

    Bin Python Anfänger und beruflich komm ich aus der SPS welt, deshalb hätte ich gern Feedback ob das so passt.

    logic.conf
    Code:
    [seq1]
        filename = sequencer.py
        watch_item = tb.licht.seq1
        channel_items = tb.licht.rgb.r, tb.licht.rgb.g, tb.licht.rgb.b
        stepping = 2
        timedelta = 0.02
        next_step = 6
    über die Parameter stepping und Timedelta kann man die Länge eines Fadevorganges einstellen und mit next_step nach wievielen Sekunden der nächste startet

    sequencer.py
    Code:
    #!/usr/bin/env python
    #
    
    step = trigger['value']
    on = 255
    off = 0
    stepping = int(logic.stepping)
    timedelta = float(logic.timedelta)
    next_step = int(logic.next_step)
    id = logic.name
    next_time = sh.now() + dateutil.relativedelta.relativedelta(seconds=next_step)
    items = logic.channel_items
    
    if sh.return_item(logic.watch_item[0])() :    #wenn watch_item gesetzt ist startet Ablauf (1-2-3-4-2-3-4-2-3-4-.....)
        if step == 1:
            sh.return_item(items[0]).fade(on,stepping,timedelta)
            step = 2  
        elif step == 2:
            sh.return_item(items[1]).fade(on,stepping,timedelta)
            sh.return_item(items[0]).fade(off,stepping,timedelta)
            step = 3    
        elif step == 3:
            sh.return_item(items[2]).fade(on,stepping,timedelta)
            sh.return_item(items[1]).fade(off,stepping,timedelta)
            step = 4    
        elif step == 4:
            sh.return_item(items[0]).fade(on,stepping,timedelta)
            sh.return_item(items[2]).fade(off,stepping,timedelta)
            step = 2
        sh.scheduler.change(id, next=next_time, value=step)     #nächsten Aufruf setzen 
    else:
        for i in items:
            sh.return_item(i)(off)
    item.conf (Einrückungen Passen nicht)

    Code:
    [[[rgb]]]
                    name = Ambiant Light
                    type = bool
                    visu = yes
                    sv_widget = " {{ basic.colordisc('item', 'item.r', 'item.g', 'item.b') }} {{ basic.checkbox('tb.licht.seq1', 'tb.licht.seq1','sequenz1') }} "
                    [[[[r]]]]
                        type = num
                        visu = yes
                        dmx_ch = 0
                    [[[[g]]]]
                        type = num
                        visu = yes
                        dmx_ch = 1
                    [[[[b]]]]
                        type = num
                        visu = yes
                        dmx_ch = 2
                [[[seq1]]]
                    type = num
                    visu = yes
    Funktioniert bis jetzt in meiner Testumgebung sehr gut nur hätte ich gern eine Meinung von den Erfahrenen Programmierern dazu.

    Danke und lg
    Rudi

    #2
    Hallo Rudi,

    schöne Logik.
    Zitat von ruuud Beitrag anzeigen
    Bin Python Anfänger
    Freut mich das der Einstieg so gut gelungen ist.


    Zwei Dinge würde ich noch Berücksichtigen:
    Ich würde für step noch eine Fehlerbehandlung einbauen. Was passiert wenn step nicht ein Wert von 1-4 ist? Einfach ein
    Code:
    else:
      logger.warning("....")
    nach dem letzten elif.

    Weiterhin würde ich aus (ästhetischen) Gründen das item seq1 unter rgb hängen und es als bool definieren.
    Dann kannst Du einfach
    Code:
    if sh.rgb.seq() == True:
    anstelle des
    Code:
    if sh.return_item(logic.watch_item[0])()
    verwenden. Das "== True" könnte man dabei auch weglassen.
    Dann könnte man auch einfach mit parent arbeiten und sich so "channel_items = tb.licht.rgb.r, tb.licht.rgb.g, tb.licht.rgb.b" ersparen.

    hth

    Marcus

    Kommentar


      #3
      Hallo Marcus,

      Urlaub vorbei?

      Danke für das nette Feedback werde deine Vorschläge probieren umzusetzen und werde das Ergebnis dann hier wieder Posten.

      lg rudi

      Kommentar


        #4
        hi,

        was ist denn in python3 der ersatz für .fade() ?

        wollte den fader eben testen:

        Code:
        2013-11-28 14:48:31,532 ERROR    seq3         Logic: seq3, File: /usr/smarthome/logics/sequencer.py, Line: 16, Method: <module>, Exception: 'NoneType' object has no attribute 'fade' -- scheduler.py:_task:334
        Traceback (most recent call last):
          File "/usr/smarthome/lib/scheduler.py", line 327, in _task
            exec(obj.bytecode)
          File "/usr/smarthome/logics/sequencer.py", line 16, in <module>
            sh.return_item(items[0]).fade(on,stepping,timedelta)
        AttributeError: 'NoneType' object has no attribute 'fade'

        Kommentar


          #5
          Hab es leider noch nicht probiert mit dem neuen release.
          Laut docu sollte aber fade noch funktionieren.

          Möglicherweise ist der Fehler das die Items mit | anstatt mit , getrennt werden müssen.

          mfg rudi

          Kommentar


            #6
            ja, mit | klappts auch bei aktuellem release.

            super, danke

            Kommentar


              #7
              btw, wenn der fader für länger ezeit läuft (paar min) lässt er sich bei mir nimmer abschalten.

              Kommentar


                #8
                Wenns gelöst ist ruuud, wäre die finale Version hier sicherlich ganz gut aufgehoben
                Derzeit zwischen Kistenauspacken und Garten anlegen.
                Baublog im Profil.

                Kommentar


                  #9
                  Hallo zusammen,
                  ich habe den RGB fade heute auch mal eingebaut und mit meinem Stripe getestet. Die erzeugte Last (vermutlich durch den dauernden Statusupdate) ist jedoch so groß, dass die Visu schon bald nicht mehr reagiert. Für die Steuerung mit Dali vermutlich daher in dieser Form so nicht geeignet, insbesondere, wenn man die Statusobjekte nutzt.
                  Viele Grüße
                  Dieter

                  Kommentar


                    #10
                    Hi Dieter,

                    die timedelta = 0.02 sind auch ein bisschen sportlich für langsame Bussysteme.

                    Schreib hier timedelta = 1 rein, dann wartet die Logik eine Sekunde zwischen den Wertänderungen.


                    Bis bald

                    Marcus

                    Kommentar


                      #11
                      kann jemand eine finale Version zur Verfügung stellen?

                      Danke

                      Kommentar


                        #12
                        Ich hab da nicht mehr weitergemacht da ich es nicht brauche. Bin gerade in der Rohbauphase, werde aber dann ein KNX-DMX Gateway einsetzen welches Sequenzen kann.

                        Bin aber auch der Meinung das so eine Funktion dem System noch fehlt. Man kann nur hoffen das es mal ein Programmierer braucht und zur Verfügung stellt. Ich bin leider keiner.

                        Mfg rudi

                        Kommentar


                          #13
                          Das heißt du verwendest ein knx dmx gateway und dann einen DMX RGB controller?
                          Welches Gateway willst du verwenden?

                          Kommentar


                            #14
                            Ja genau. Ich werde das bab-tec duo verwenden.
                            BAB-TEC 12120 DUODMX GATEWAY KNX/TP SR online kaufen im Voltus Elektro Shop

                            Und als Treiber Eldoled

                            Das Paket ist schon unterwegs, also nächste Woche kann ich berichten.

                            Lg rudi

                            Kommentar


                              #15
                              Hallo zusammen,

                              ich habe kürzlich nen 08/15-LED-Stripe an einem Raspberry angestöpselt; das Ganze läuft mit "piblaster", sollte also sicherlich irgendwie zusammenführbar sein.
                              Momentan steuere ich zum Testen den LED-Raspi per SSH über ein Wiregate-Plugin von KNX aus an...

                              Hier mal ein paar Links (ich hoffe mal, ein Link zu nem anderen Forum stört nicht):
                              http://popoklopsi.github.io/RaspberryPi-LedStrip/
                              pi-blaster Installation
                              CU,
                              Mathias

                              Kommentar

                              Lädt...
                              X