• Recent
    • Tags
    • Popular
    • Register
    • Login

    Please Note This forum exists for community support for the Mango product family and the Radix IoT Platform. Although Radix IoT employees participate in this forum from time to time, there is no guarantee of a response to anything posted here, nor can Radix IoT, LLC guarantee the accuracy of any information expressed or conveyed. Specific project questions from customers with active support contracts are asked to send requests to support@radixiot.com.

    Radix IoT Website Mango 3 Documentation Website Mango 4 Documentation Website Mango 5 Documentation Website

    Script to convert from Hex to Dec

    How-To
    3
    4
    1.3k
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • J
      Jorge Gonzalez
      last edited by

      Hello, the snmp device send the data in hexadecimal format for example: Battery voltage = 12:7D, I want to solve it with a Metadata Source, but I dont have information how I can create a script.
      Please could You Help me with this script and could you share information about how to create scripts???.
      In advance, thanks so much

      Jorge G

      1 Reply Last reply Reply Quote 0
      • CraigWebC
        CraigWeb
        last edited by

        Hi Jorge

        you can use parseInt for this:
        return parseInt(p.value, 16)

        1 Reply Last reply Reply Quote 0
        • J
          Jorge Gonzalez
          last edited by

          @craigweb said in Script to convert from Hex to Dec:

          return parseInt(p.value, 16)

          Thanks so much Craig, but it didnt work. please let me to explain You:
          the hex data is arriving as 13:32 (it is Hex 1332, so must be in Dec Value=4194)
          With your Script I got the Dec value from just the first number (Hex13 =Dec19)
          this device send a string like 13:30:27:14:01:33:02:6c:02:76.
          then I need to get
          13:32:4194
          27:14=10000
          01:33=307
          02:6c=620
          02:76=630

          After i get the values, then we will need to scale it:
          41950,01=41,95
          (10000
          0.1)-1000=0
          3070.1=30,7
          (620
          0.1)-40=22
          (630*0.1)-40=23

          I understand how to define a script to multiply, but some data need to be multiply and the final result will be minus 40, for example:
          Data 02:76 = Hex630= ((630*0,1)-40)=23

          As you can see im in a problem, please could you support me

          In advance thanks so much
          Jorge G

          1 Reply Last reply Reply Quote 0
          • ThomasEinastoT
            ThomasEinasto
            last edited by ThomasEinasto

            @jorge-gonzalez said in Script to convert from Hex to Dec:

            13:32

            @Jorge-Gonzalez, documentation to solve your problems.

            Firstly see what parseInt does - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt

            There you can see that the hexdecimal value has to be in correct format be it with 0x or without. Your string splits 2 bytes in the hexdecimal format by using a colon. You need to remove it. Simply do it by utilizing .replace method on a string before putting it into parseInt. Or if you have a string which contains multiple values utilize .split method on a string and then put the bytes together before putting the value into parseInt.

            Replace method explanation
            https://www.w3schools.com/jsref/jsref_replace.asp

            Split method explanation
            https://www.w3schools.com/jsref/jsref_split.asp

            Following function is following the detailed explanation you provided in the post.

            function stringsplitter (string) {
            
            var result = {};
            
            // This contains the bytes of data
            result.arrayofbytes = string.split(':');
            
            // Get byte count of data inside the string
            result.bytecount = result.arrayofbytes.length;
            
            // Start at the beginning
            var variablecounter = 0;
            
            result.hexdata = [];
            result.decimaldata = [];
            
            // Loop over the array, but taking into account that we have 2 byte data, use try/catch so that function will return if something should fail
            try{
            for (var x = 0;x < result.bytecount / 2;x++){
             
            result.hexdata[x] = result.arrayofbytes[variablecounter] + result.arrayofbytes[variablecounter+1];
            result.decimaldata[x] = parseInt(result.hexdata[x],16);
            variablecounter += 2;
            
            }
            }catch(err){
             return err
            }
            
            
            
            
            // return object with all our data which includes hexdecimal data, decimaldata and byte count inside the string
            return result;
            
            }
            
            // Example usage
            
            var devicestring = '13:30:27:14:01:33:02:6c:02:76';
            
            var data = stringsplitter(devicestring);
            
            //get array in hexdecimal and decimal format
            var hexdata = data.hexdata;
            var decimaldata = data.decimaldata;
            
            // first value in hexdecimal and decimal format
            var firstvaluehex = hexdata[0];
            var firstvaluedecimal = decimaldata[0];
            
            // Second value in hexdecimal and decimal format
            var secondvaluehex = hexdata[1];
            var secondvaluedecimal = decimaldata[1];
            
            // Following that your post had used an example with the last value
            
            var lastvalue = decimaldata[4];
            
            // Should be 23
            var lastvaluecorrected = lastvalue * 0.1 - 40;
            
            

            Thomas

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