Guest User

Untitled

a guest
Jul 5th, 2017
417
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. //sudo /sbin/ip link set can0 up type can bitrate 500000
  3. var can = require('socketcan');
  4. var buffer = require('buffer');
  5. var request = require('request');
  6.  
  7.  
  8. var exec = require('child_process').exec;
  9. var cmd = 'sudo /sbin/ip link set can0 up type can bitrate 500000';
  10. exec(cmd, function(error, stdout, stderr) {
  11. // command output is in stdout
  12. console.log('vamos');
  13. main();
  14. });
  15.  
  16.  
  17. var holder={};
  18.  
  19. var the_interval = 10 * 1000;
  20.  
  21. setInterval(function() {
  22. console.log("envio datos");
  23. var cuerpo="bms "+preparacadena(holder);
  24. request.post({
  25. headers: {'content-type' : 'application/x-www-form-urlencoded'},
  26. url: 'http://192.168.1.205:8086/write?db=logger',
  27. body: cuerpo
  28. }, function(error, response, body){
  29. console.log(body);
  30. });
  31. var cuerpo2="bms2 "+preparacadena(holder2);
  32. request.post({
  33. headers: {'content-type' : 'application/x-www-form-urlencoded'},
  34. url: 'http://192.168.1.205:8086/write?db=logger',
  35. body: cuerpo2
  36. }, function(error, response, body){
  37. console.log(body);
  38. });
  39. holder={};
  40. }, the_interval);
  41.  
  42. function main()
  43. {
  44. var channel = can.createRawChannel("can0", true /* ask for timestamps */);
  45. channel.start();
  46. channel.addListener("onMessage", dumpPacket);
  47. }
  48. function toHex(number) {
  49. return ( number.toString(16)).slice(-8);
  50. }
  51.  
  52. function dumpPacket(msg) {
  53.  
  54. var mensaje=toHex(msg.id).toUpperCase() + '#' + msg.data.toString('hex').toUpperCase();
  55. console.log('(' + (msg.ts_sec + msg.ts_usec / 1000000).toFixed(6) + ') ' +
  56. toHex(msg.id).toUpperCase() + '#' + msg.data.toString('hex').toUpperCase());
  57. factoriza(mensaje)
  58.  
  59. }
  60.  
  61. function letodec(stringbad)
  62. {
  63. string=stringbad.substr(2,2)+stringbad.substr(0,2)
  64. if(!string) return undefined;
  65. var len = string.length;
  66. var bigEndianHexString = "0x";
  67. for(var i = 0; i < len/2; i++)
  68. {
  69. bigEndianHexString += string.substring((len-((i+1)*2)),(len-(i*2)));
  70. }
  71. return parseInt(bigEndianHexString);
  72. }
  73.  
  74. function factoriza(cadena)
  75. {
  76. if (cadena.length==19 ) {
  77. bms(0,cadena,holder);
  78. }
  79. }
  80.  
  81.  
  82.  
  83. function bms(offset,cadena,objeto)
  84. {
  85. var messageid=cadena.substr(0+offset,2);
  86. var mensaje=cadena.substr(3+offset,16);
  87. console.log("mensaje "+mensaje+ " messageid="+messageid);
  88. if (messageid==31) {
  89. objeto["state_of_charge"]=parseInt(mensaje.substr(0,2),16);
  90. objeto["battery_pack_voltage"]=letodec(mensaje.substr(2,4));
  91. var corriente=letodec(mensaje.substr(6,4));
  92. if (corriente > 32767) {
  93. corriente=(65535-corriente)*-1;
  94. }
  95. console.log("corriente=",corriente);
  96. objeto["battery_pack_current"]=corriente
  97. objeto["battery_max_temperature"]=parseInt(mensaje.substr(10,2),16);
  98. objeto["error_number"]=parseInt(mensaje.substr(12,1),16);
  99. objeto["error_cell_number"]=parseInt(mensaje.substr(13,1),16);
  100.  
  101. }
  102. if (messageid==32) {
  103. objeto["high_cell_voltage"]=letodec(mensaje.substr(0,4));
  104. objeto["low_cell_voltage"]=letodec(mensaje.substr(4,4));
  105. objeto["high_cell_number"]=letodec(mensaje.substr(8,2));
  106. objeto["low_cell_number"]=letodec(mensaje.substr(10,2));
  107. objeto["bms_temperature"]=parseInt(mensaje.substr(12,2),16);
  108. objeto["state_of_health"]=parseInt(mensaje.substr(14,2),16);
  109. }
  110. if (messageid==33) {
  111. objeto["cell1"]=letodec(mensaje.substr(0,4));
  112. objeto["cell2"]=letodec(mensaje.substr(4,4));
  113. objeto["cell3"]=letodec(mensaje.substr(8,4));
  114. objeto["cell4"]=letodec(mensaje.substr(12,4));
  115. }
  116. if (messageid==34) {
  117. objeto["cell5"]=letodec(mensaje.substr(0,4));
  118. objeto["cell6"]=letodec(mensaje.substr(4,4));
  119. objeto["cell7"]=letodec(mensaje.substr(8,4));
  120. objeto["cell8"]=letodec(mensaje.substr(12,4));
  121. }
  122. if (messageid==35) {
  123. objeto["cell9"]=letodec(mensaje.substr(0,4));
  124. objeto["cell10"]=letodec(mensaje.substr(4,4));
  125. objeto["cell11"]=letodec(mensaje.substr(8,4));
  126. objeto["cell12"]=letodec(mensaje.substr(12,4));
  127. }
  128. if (messageid==36) {
  129. objeto["cell13"]=letodec(mensaje.substr(0,4));
  130. objeto["cell14"]=letodec(mensaje.substr(4,4));
  131. objeto["cell15"]=letodec(mensaje.substr(8,4));
  132. objeto["cell16"]=letodec(mensaje.substr(12,4));
  133. }
  134.  
  135. }
  136.  
  137. function preparacadena(objeto)
  138. {
  139.  
  140. var cadena="";
  141. cadena =cadena +"state_of_charge="+objeto['state_of_charge'];
  142. cadena =cadena +",battery_pack_voltage="+objeto['battery_pack_voltage'];
  143. cadena =cadena +",battery_pack_current="+objeto['battery_pack_current'];
  144. cadena =cadena +",battery_max_temperature="+objeto['battery_max_temperature'];
  145. cadena =cadena +",error_number="+objeto['error_number'];
  146. cadena =cadena +",error_cell_number="+objeto['error_cell_number'];
  147. cadena =cadena +",high_cell_voltage="+objeto['high_cell_voltage'];
  148. cadena =cadena +",low_cell_voltage="+objeto['low_cell_voltage'];
  149. cadena =cadena +",high_cell_number="+objeto['high_cell_number'];
  150. cadena =cadena +",low_cell_number="+objeto['low_cell_number'];
  151. cadena =cadena +",bms_temperature="+objeto['bms_temperature'];
  152. cadena =cadena +",state_of_health="+objeto['state_of_health'];
  153. cadena =cadena +",cell1="+objeto['cell1'];
  154. cadena =cadena +",cell2="+objeto['cell2'];
  155. cadena =cadena +",cell3="+objeto['cell3'];
  156. cadena =cadena +",cell4="+objeto['cell4'];
  157. cadena =cadena +",cell5="+objeto['cell5'];
  158. cadena =cadena +",cell6="+objeto['cell6'];
  159. cadena =cadena +",cell7="+objeto['cell7'];
  160. cadena =cadena +",cell8="+objeto['cell8'];
  161. cadena =cadena +",cell9="+objeto['cell9'];
  162. cadena =cadena +",cell10="+objeto['cell10'];
  163. cadena =cadena +",cell11="+objeto['cell11'];
  164. cadena =cadena +",cell12="+objeto['cell12'];
  165. cadena =cadena +",cell13="+objeto['cell13'];
  166. cadena =cadena +",cell14="+objeto['cell14'];
  167. cadena =cadena +",cell15="+objeto['cell15'];
  168. cadena =cadena +",cell16="+objeto['cell16'];
  169. return cadena;
  170. }
RAW Paste Data