Ankündigung

Einklappen
Keine Ankündigung bisher.

1Byte in 2Byte wandeln (DPT5 in DPT9)

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

    1Byte in 2Byte wandeln (DPT5 in DPT9)

    Hallo,

    leider mag die Anbindung der UVR1611 an den KNX Bus ("CAN-BC-E") nur DPT1 und DPT9. Ich würde jedoch gerne einen DPT5 senden.

    Hat jemand eine Idee, wie das ohne externe Logik machbar ist? Mit ein Wenig Glück würden ja die höherwertigen Bits einfach keine Wirkung haben, aber ich fürchte, so einfach ist das nicht, oder?

    Gruß,
    Hendrik

    #2
    Zitat von henfri Beitrag anzeigen
    Hallo,

    leider mag die Anbindung der UVR1611 an den KNX Bus ("CAN-BC-E") nur DPT1 und DPT9. Ich würde jedoch gerne einen DPT5 senden.

    Hat jemand eine Idee, wie das ohne externe Logik machbar ist? Mit ein Wenig Glück würden ja die höherwertigen Bits einfach keine Wirkung haben, aber ich fürchte, so einfach ist das nicht, oder?

    Gruß,
    Hendrik
    Nein, das funktioniert aus mehreren Gründen nicht. DPT5 und DPT9 haben verschiedene Kodierungen (einfach nur Bits abschneiden ist zu einfach), und die Telegrammlänge ist in den Header kodiert.

    Max

    Kommentar


      #3
      Ok, danke.

      Gruß,
      Hendrik

      Kommentar


        #4
        Hallo Zusammen,
        ich hab das in meinem script für DPT1, DPT5 und DPT9 folgendermassen gelöst:

        Code:
        convertDpt1() {
        
        # Convert the HEX String to decimal value
        echo $((16#$1))
        
        }
        
        convertDpt5() {
        
        # Convert the HEX String to decimal value and convert to percentage
        echo $(($((16#$1))*100/255))
        
        }
        
        convertDpt9() {
        
        # convert the HEX String to binary format, extract exponent and mantissa and calculate float result
        binOctets=$(echo $1 | xxd -r -p | xxd -b)
        
        #00000000: 00000101 01101110 .n
        bin=${binOctets:10:8}${binOctets:19:8}
        
        # MEEEEMMMMMMMMMMM
        manDec=$((2#${bin:0:1}${bin:5:11}))
        expDec=$((2#${bin:1:4}))
        
        # Result = 0,01 * M * 2^E
        result=$(awk -v mult=0.01 -v temp=$((manDec*2**expDec)) 'BEGIN{result=(mult * temp); print result;}')
        
        echo $result
        
        }
        Ich hoffe ich habe keinen Fehler bei der Konvertierung gemacht.
        LG

        Clem

        Kommentar


          #5
          Und Du meinst, das das nach 6 Jahren noch interessant ist?

          Kommentar

          Lädt...
          X