Ankündigung

Einklappen
Keine Ankündigung bisher.

Logik: DMX langsam aufdimmen...

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

    Logik: DMX langsam aufdimmen...

    Hallo zusammen,

    ich steuer per DMX einige Dimmer und würde diese gerne per KNX GA langsam aufdimmen lassen. Also im Detail:
    Ich hab eine GA an die ich eine "1" sende und die Logik soll das DMX-Item langsam auf 255 erhöhen und das ganze dann natürlich auch umgekehrt.

    Wäre eigentlich nur ein Do..While mit einen Sleep, aber wie setzte ich das in einer Logik um und wie binde ich diese dann ein?


    vielen dank für Eure Hilfe!

    #2
    Da kannst du die fade() Methode nutzen: Configuration ? SmartHome.py 1.0 documentation
    Hier mal was ähnliches für RGB wo du abschauen kannst: https://knx-user-forum.de/smarthome-...rgb-fader.html
    Mit freundlichen Grüßen
    Niko Will

    Logiken und Schnittstelle zu anderen Systemen: smarthome.py - Visualisierung: smartVISU
    - Gira TS3 - iPhone & iPad - Mobotix T24 - ekey - Denon 2313 - Russound C5 (RIO over TCP Plugin) -

    Kommentar


      #3
      Hi,

      das war genau das was ich gesucht hab... Funktioniert auch klasse.
      Wir würde ich den jetzt einem Item Anlegen, welche auf einer KNX Adresse lauscht und bei einer
      1: sh.Wohnzimmer.Sockelleiste.fade(255,3,0.01)
      und bei einer
      0: sh.Wohnzimmer.Sockelleiste.fade(0,3,0.01)

      ausführt...?

      Kann ich das "Wohnzimmer.Sockelleiste" auch mit 0-100 per KNX ansteuern? Müsste ich ja nur per eval direkt umrechnen...?


      danke für eure Hilfe!
      Martin

      Kommentar


        #4
        Zitat von martinh12 Beitrag anzeigen
        Wir würde ich den jetzt einem Item Anlegen, welche auf einer KNX Adresse lauscht und bei einer ... ausführt...?
        Außer einer Logik fällt mir da spontan nichts schönes ein. Die Logik dann evtl. mit Wildcards in den watch_items (SuFu erklärt das genauer).

        Zitat von martinh12 Beitrag anzeigen
        Kann ich das "Wohnzimmer.Sockelleiste" auch mit 0-100 per KNX ansteuern? Müsste ich ja nur per eval direkt umrechnen...?
        Wenn du für 0 - 100 einfach knx_dpt = 5 verwendest, dann wird das mit 0 - 255 dekodiert. Das sollte also einfach so funktionieren.
        Mit freundlichen Grüßen
        Niko Will

        Logiken und Schnittstelle zu anderen Systemen: smarthome.py - Visualisierung: smartVISU
        - Gira TS3 - iPhone & iPad - Mobotix T24 - ekey - Denon 2313 - Russound C5 (RIO over TCP Plugin) -

        Kommentar


          #5
          Hey,

          also das mit den 0-100% funktioniert schon mal. DANKE!

          Wenn ich jetzt einen "bool" Item anlegen:

          [[[AnAus]]]
          type = bool
          visu = yes
          visu_acl = rw
          knx_listen = 1/3/72
          knx_dpt = 1
          eval=sh.Wohnzimmer.Sockelleiste.r.fade(0,3,0.01) if value == 0 else sh.Wohnzimmer.Sockelleiste.r.fade(255,3,0.01)
          Funktioniert das per KNX, aber über die Visu nur in eine Richtigung... Also per KNX kann ich eine 1 und 0 senden und er dimmer auf bzw ab. Klick ich in der Visu auf den Button geht es nur an, aber nicht mehr aus...

          Kommentar


            #6
            Ziel soll eine KNX->DMX Dimmer sein. Also An/Aus mit langsamen auf bzw ab dimmen, direktes senden einen Wertes 0-100%, Rückgabeelement für Dimmerwert bei Änderung. Statuselement für An/Aus, also Dimmwert größer 0%, Status gleich true...

            Hat sowas nicht schon mal jemand gemacht? Vielleicht einfach als Ideenspender


            danke

            Kommentar


              #7
              Das ganze schreit fast nach einer Logik mit Wildcards

              Zumindest bei der Anforderung wirst du mit eval wohl schnell unglücklich werden.
              Mit freundlichen Grüßen
              Niko Will

              Logiken und Schnittstelle zu anderen Systemen: smarthome.py - Visualisierung: smartVISU
              - Gira TS3 - iPhone & iPad - Mobotix T24 - ekey - Denon 2313 - Russound C5 (RIO over TCP Plugin) -

              Kommentar


                #8
                Hi,

                Ich bin jetzt mal in die praktische Testphase gegangen, so mit Brett voller LED-Streifen, nem RasPi, Lin180D2, DMX4All-Interface, etc. Und da ich zu dem Thema noch keine Lösung gefunden habe, hab ich's halt mal selbst versucht. Vielen Dank schon mal für dieses wunderbare Stück Software das ihr ihr geschafft habt.

                Also ich hab das mal versucht folgendermaßen anzupacken.

                ACHTUNG: Ich habe bis vor zwei Wochen noch kein Python programmiert und bin da Autodidakt unterwegs. Vermutlich lässt sich einiges eleganter lösen.

                Was bisher geht:
                • Vorgabe Dim-Wert (auch wenn aus) über lc_level
                • An/Aus über lc_switch
                • Langsames An- und Ausdimmen über lc_fade_switch
                • Direktes andimmen eines Wertes über lc_direct_fade
                • Einstellung der Dimmgeschwindigkeit über lc_fade_switch_speed und lc_direct_fade_speed
                • Status An/Aus sowie aktueller Dimmwert über lc_state und lc_state_level

                Durch die Wildcards kann einfach der ganze Satz Items kopiert werden, lediglich der DMX-Kanal bei lc_control muss angepasst werden.

                Soweit so gut. Mal sehen was ich daraus noch basteln kann.

                logic.conf:
                Code:
                ...
                [ledcontrol_w]
                    filename = ledcontrol_w.py
                    watch_item = *.lc_*
                ...
                items.conf:
                Code:
                [dmx]    
                    [[licht]]
                        [[[lc_control]]]            #Kontrolliert den eigentlichen DMX-Kanal
                            type = num
                            dmx_ch = 6
                        [[[lc_state]]]                #Zur Statusrückmeldung, wird von der Logik gesetzt. Manuelles ändern bringt nichts.
                            type = bool
                        [[[lc_state_level]]]        #Zur Rückmeldung des aktuellen Dimmwertes, wird von der Logik gesetzt. Manuelles ändern bringt nichts.
                            type = num
                        [[[lc_level]]]                #Der Eingestellte Dimmwert. Bei Änderung während die Leuchte an ist, wird er direkt gesetzt.
                            type = num
                            value = 255
                        [[[lc_switch]]]                #Setzt lc_control auf den Wert von lc_level (EIN) bzw. auf -0- (AUS)
                            type = bool
                            enforce_updates = on
                        [[[lc_fade_switch]]]        #Das gleiche wie lc_switch, aber es wird langsam angedimmt.
                            type = bool
                            enforce_updates = on
                        [[[lc_fade_switch_speed]]]    #Die Schrittweite, in der bei lc_fade_switch angedimmt wird.
                            type = num
                            value = 5
                        [[[lc_direct_fade]]]        #Dimmt den übergebenen Wert direkt an, schaltet die Leuchte an (lc_state) falls sie aus war. Ändert lc_level NICHT.s
                            type = num
                            enforce_updates = on
                        [[[lc_direct_fade_speed]]]    #Die Schrittweite, in der bei lc_direct_fade angedimmt wird.
                            type = num
                            value = 5
                ledcontrol_w.py:
                Code:
                #!/usr/bin/env python
                #
                
                item = sh.return_item(trigger['source'])
                parent = item.return_parent()
                
                
                if trigger['source'].endswith("lc_switch"):
                    if trigger['value'] == 1:
                        parent.lc_control(parent.lc_level())
                        parent.lc_state('on')
                        parent.lc_state_level(parent.lc_level())
                    if trigger['value'] == 0:
                        parent.lc_control(0)
                        parent.lc_state('off')
                        parent.lc_state_level(0)
                    
                if trigger['source'].endswith("lc_level"):
                    if parent.lc_state():
                ist (lc_state=1) wird der level direkt gesetzt, ansonsten nur gespeichert
                        parent.lc_control(parent.lc_level())
                        parent.lc_state_level(parent.lc_level())
                
                if trigger['source'].endswith("lc_fade_switch"):
                    if trigger['value'] == 1:
                        parent.lc_control.fade(parent.lc_level(), parent.lc_fade_switch_speed(), 0.01)
                        parent.lc_state('on')
                        parent.lc_state_level(parent.lc_level())
                    if trigger['value'] == 0:
                        parent.lc_control.fade(0, parent.lc_fade_switch_speed(), 0.01)
                        parent.lc_state('off')
                        parent.lc_state_level(0)
                        
                if trigger['source'].endswith("lc_direct_fade"):
                    if not(parent.lc_state()):
                        parent.lc_control(0)
                        parent.lc_state('on')
                        parent.lc_control.fade(trigger['value'], parent.lc_direct_fade_speed(), 0.01)
                        parent.lc_state_level(parent.lc_level())
                    if parent.lc_state():
                        parent.lc_control.fade(trigger['value'], parent.lc_direct_fade_speed(), 0.01)
                        parent.lc_state_level(0)
                Vielleicht hilft es dem ein oder anderen.

                Beste Grüße

                Matthias

                Kommentar


                  #9
                  Find ich super. Damit ist man bei jedem Channel flexibel mit der Ansteuerung.
                  Das was smarthome.py noch fehlt ist ein ordentlicher Sequenzer.

                  Mfg rudi

                  Kommentar

                  Lädt...
                  X