Ankündigung

Einklappen
Keine Ankündigung bisher.

Knx dpt 5.003

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

    Knx dpt 5.003

    Guten Morgen

    ich habe einen neuen LED Dimmer (den neuen Enertex). Für den absoluten Dimmwert für H beim HSV Farbraum ist der DPT offiziell 5.003, was das KNX Plugin aber nicht kann. Ich schätze, ich muss da zwangsläufig 5 nehmen. Jetzt ist das natürlich nur ein 0-255 Wert. Muss ich da - auch im Zusammenhang mit der smartVISU - selber umrechnen um 360° mit 8 Bit abzubilden? Oder wie löst man das?

    Gruß, Martin
    Zuletzt geändert von Sipple; 02.11.2021, 11:48.

    #2
    Je nachdem wie sauber Du das lösen willst:
    • ein Hilfsitem für die Visu anlegen und zwischen den beiden Items per on_change umrechnen
    • Die Umrechnungsformel für das knx Plugin erstellen (encode und decode) und in der dpts.py des knx Plugins als DPT 5003 und 5.003 hinzufügen. Diese geänderte Version des knx Plugins sollte dann als Pull Request eingesteuert werden, damit alle was davon haben.
    Viele Grüße
    Martin

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

    Kommentar


      #3
      Zusätzlich wäre da noch die Frage, was der basic.color in der smartVISU mit colormodel hsv für den H Wert sendet. 0-360 (0-359?) oder bereits 0-255. Ist aber ne Frage für das smartVISU Forum.

      Die dpts.py schau ich mir grad an. Wenn ich da durchblicke, kann ich's evtl. erweitern.

      Gruß, Martin

      Kommentar


        #4
        Schau Dir mal die 5.001 (also de5001 und en5001) an. Das ist die Umrechnung für Prozente.
        Viele Grüße
        Martin

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

        Kommentar


          #5
          Mach ich grad, scheint jetzt keine Raketenwissenschaft zu sein. Wenn das alles ist, bekomme ich's wohl hin. Muss das nur erst richtig durchdenken und mit dem basic.color testen.

          Als Schnellschuss:

          Code:
          def en5003(value):
              if value < 0:
                  value = 0
              elif value > 360:
                  value = 360
              return [0, int(value * 255.0 / 360) & 0xff]
          
          
          def de5003(payload):
              if len(payload) != 1:
                  return None
              return round(struct.unpack('>B', payload)[0] * 360.0 / 255, 1)
          
          ...............
          
          decode = {
          
              '5': de5,
              '5001': de5001,
              '5.001': de5001,
              '5003': de5003,     #DPT_Angle [0..360] °
              '5.003': de5003,    #DPT_Angle [0..360] °
          
          ................
          
          encode = {
          
              '5': en5,           #One Byte: unsigned value
              '5001': en5001,     #DPT_Scaling [0 ... 100] %
              '5.001': en5001,    #DPT_Scaling [0 ... 100] %
              '5003': en5003,     #DPT_Angle [0..360] °
              '5.003': en5003,    #DPT_Angle [0..360] °
          Aber um es mit Elton zu sagen: "das ist mir zu einfach"

          Kommentar


            #6
            Schaut doch gut aus. Sollte auch so einfach sein. Du solltest nur schauen, wie der Wertebereich ist. 0 <= Wert <= 360 ist etwas zu groß. Sinnvoll wäre evtl. 0 <= Wert < 360 (denn 360° entspricht 0°).
            Viele Grüße
            Martin

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

            Kommentar


              #7
              Ja, das stört mich schon lange. Überall wo man schaut ist immer die Rede von 0...360°, was ich für falsch halte. KNX DPT Beschreibung, basic.color Widgetcode, Beschreibung des Dimmers...
              Weil das so konsequent ist, bin ich davon ausgegangen, dass ich da nen Denkfehler habe und/oder bei diesen Farbmodellen tatsächlich 0 bis 360° definiert sind.

              Kommentar


                #8
                Ja aber 0° bis 360° schreibt sich einfach besser als 0° bis 359,9999999999999999999999°.
                Viele Grüße
                Martin

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

                Kommentar


                  #9
                  Dafür hat die Mathematik die Intervalle erfunden:
                  [0;360[
                  Aber das kann dann wieder noch jeder korrekt lesen...

                  Gruß, Waldemar
                  OpenKNX www.openknx.de

                  Kommentar


                    #10
                    Schon klar.

                    Wär dann das nicht sinnvoll?

                    Code:
                    def en5003(value):
                        if value < 0:
                            value = 0
                        elif value >= 360:
                            value = 0
                        return [0, int(value * 255.0 / 360) & 0xff]

                    Kommentar


                      #11
                      Man könnte bei >= 360° den Rest der ganzzahligen Division nehmen.
                      Das wäre richtiger als 0°: 730° -> 10° (also etwas mehr als 2 Umdrehungen)
                      Viele Grüße
                      Martin

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

                      Kommentar


                        #12
                        Du meinst so?

                        Code:
                        def en5003(value):
                            if value < 0:
                                value = 0
                            elif value >= 360:
                                value = value % 360
                            return [0, int(value * 255.0 / 360) & 0xff]
                        bzw. kann man dann gleich auf die if's verzichten:

                        Code:
                        def en5003(value):
                            value = value % 360
                            return [0, int(value * 255.0 / 360) & 0xff]
                        Die Frage ist für mich aktuell, ob man den DPT wirklich braucht. Das smartVISU Widget basic.color liefert z.B die Werte schon umgerechnet, daher darf ich einen 5.003 gar nicht verwenden, weil dann der Wert nochmal verändert wird. Ich muss also einfach DPT 5 nehmen.
                        Wenn jemand ne eigene Logik oder ein Plugin schreibt, oder wenn eine andere Visu die Werte nicht bereits auf 8 Bit umrechnet, macht der DPT natürlich Sinn. Muss in der Doku dann halt sauber beschrieben werden.
                        Zuletzt geändert von Sipple; 04.11.2021, 08:04.

                        Kommentar


                          #13
                          Ja so ähnlich hatte ich mir das vorgestellt.

                          und ja, auch wenn das sv Widget umrechnet, gibt es ja usecases für 5.003.
                          (weitere DPTs können nie schaden )
                          Viele Grüße
                          Martin

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

                          Kommentar

                          Lädt...
                          X