Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [gelöst]Convertierung HEX->DEC

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    [gelöst]Convertierung HEX->DEC

    This topic has been deleted. Only users with topic management privileges can see it.
    • S
      stoffel67 last edited by

      hallo,

      ich lese HEX-Werte von meiner Heizung:

      und rechne so um:

       DECwert = (parseInt( HEXwert, 16 ) / 256 ).toFixed( 2 );
      

      zb. Rücklauf: 26C0 ergibt: 38,75

      aber bei der Aussentempp stimmt meine Rechnung nicht

      ich bekomme F924 das ergibt: 249,14 es sollte aber -6,86

      was ist an meiner Rechnung hier falsch, wie erkenne ich negative Werte?

      LG

      Stef

      1 Reply Last reply Reply Quote 0
      • P
        pafra last edited by

        Hi Stef,

        ist F924 wirklich die ganze Antwort?

        Damit bekommst Du aber kein Vorzeichen hin.

        Die Antwort ist nicht vielleicht eher 0xc0dbf924?

        Sind die Werte vielleicht IEEE-754?

        Dann schau mal hier:

        https://www.h-schmidt.net/FloatConverter/IEEE754.htmll

        Gruß

        Franz

        1 Reply Last reply Reply Quote 0
        • Thisoft
          Thisoft last edited by

          Also, du musst erstmal 1 von deinem Hexwert subtrahieren (ist zwar in diesem Fall wegen dem anschließenden "/256" nicht so wichtig, aber irgendwie so festgelegt…) und anschließend von HEX in Binär umwandeln

          F923 -> 1111 1001 0010 0011

          Dann bedeutet das höchstwertige (linke) Bit das Vorzeichen, wenn "1" dann Minus.

          Anschließend musst du die Binärzahl invertieren:

          1111 1001 0010 0011 -> 0000 0110 1101 1100

          Dann kannst du die Binärzahl in Dezimal konvertieren (dabei aber das höchstwertige Bit ignorieren bzw. vorher auf 0 setzen) und durch 256 teilen.

          Ob's dafür jetzt in Javascript eine halbwegs komfortable Funktion gibt oder ob du das "zu Fuss" machen musst entzieht sich momentan meiner Kenntnis, kann auch gerade nicht testen...

          1 Reply Last reply Reply Quote 0
          • BuZZy
            BuZZy last edited by

            Ich vermute fast, dass es sich bei den Werten um die Widerstandswerte der Temperaturfühler handelt?

            Wenn es wirklich Widerstandswerte sind dann gehe ich aufgrund deines Beispiels mit den Temperaturen und den Hex Werten davon aus, dass es sich bei den Fühlern um NTC Widerstände handelt.

            (NTC = je kleiner die Temperatur, desto höher der Widerstand)

            26C0 in Dec ergibt 9920 (Ohm?)..

            F924 in Dec ergibt 63780 (Ohm?)..

            Wenn ich mit meiner Vermutung richtig liege,..

            Dann ist ohne den Typ von dem NTC zu kennen ein ausrechnen der Temperatur aus dem Widerstand "sehr schwer" bzw. unmöglich da der Widerstand in einem NTC nicht linear zur Temperatur verläuft..

            EDIT: Mein Tipp war wohl nicht korrekt. :? :lol:

            Der Mihaeru hat die richtige Antwort unter diesem Beitrag geschrieben. :!:

            Gruß

            1 Reply Last reply Reply Quote 0
            • M
              Mihaeru last edited by

              Wie thisoft geschrieben hat, ist das höchstwertige Bit ausschlaggebend. Dieses liegt bei 16 Bit Werten bei hex 0x8000. Wenn das bit gesetzt ist, ziehst du einfach 0x1000 ab.

              So kannst du die Berechnung bei 16 Bit Werten umsetzen:

              DECwert = parseInt(HEXwert, 16);
              DECwert = (( DECwert >= 0x8000 ? DECwert - 0x10000 : DECwert) / 256).toFixed(2);
              

              oder:

              DECwert = parseInt(HEXwert, 16);
              DECwert = (( DECwert & 0x8000 ? DECwert - 0x10000 : DECwert) / 256).toFixed(2);
              

              Edit: DECwert > 0x8000 geändert in DECwert >= 0x8000

              …und Beispiel um gezielt das Bit abzufragen

              1 Reply Last reply Reply Quote 0
              • S
                stoffel67 last edited by

                jepp, damit geht's

                DECwert = parseInt(HEXwert, 16);
                DECwert = (( DECwert >= 0x8000 ? DECwert - 0x10000 : DECwert) / 256).toFixed(2);
                
                

                Vielen Dank, sowas hab ich gesucht…

                1 Reply Last reply Reply Quote 0
                • First post
                  Last post

                Support us

                ioBroker
                Community Adapters
                Donate

                650
                Online

                31.7k
                Users

                79.8k
                Topics

                1.3m
                Posts

                5
                6
                562
                Loading More Posts
                • Oldest to Newest
                • Newest to Oldest
                • Most Votes
                Reply
                • Reply as topic
                Log in to reply
                Community
                Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                The ioBroker Community 2014-2023
                logo