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.
Script to convert from Hex to Dec
-
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 muchJorge G
-
Hi Jorge
you can use parseInt for this:
return parseInt(p.value, 16)
-
@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=630After i get the values, then we will need to scale it:
41950,01=41,95
(100000.1)-1000=0
3070.1=30,7
(6200.1)-40=22
(630*0.1)-40=23I 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)=23As you can see im in a problem, please could you support me
In advance thanks so much
Jorge G -
@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.aspSplit method explanation
https://www.w3schools.com/jsref/jsref_split.aspFollowing 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