data.js 44 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846
  1. const MAGIC = 0xdead;
  2. const PKT_TYPE = function() {
  3. var len = 0;
  4. return {
  5. PKT_TYPE_ACK: len++,
  6. PKT_TYPE_PARAS: len++,
  7. PKT_TYPE_POWER_CH: len++, //power_ch_t
  8. PKT_TYPE_POWER_TOTAL: len++, //power_total_t
  9. PKT_TYPE_POWER_RESET: len++,
  10. PKT_TYPE_CH_ALL: len++,
  11. PKT_TYPE_SCAN: len++,
  12. PKT_TYPE_FACTORY: len++,
  13. PKT_TYPE_ALARM: len++,
  14. PKT_TYPE_SENSOR: len++,
  15. PKT_TYPE_BREAKER: len++,
  16. PKT_TYPE_STAT: len++,
  17. PKT_TYPE_MESG: len++,
  18. PKT_TYPE_FILE: len++,
  19. PKT_TYPE_SLAVE_LIST: len++,
  20. }
  21. }();
  22. const SUB_TYPE = function() {
  23. var len = 0;
  24. return {
  25. SUB_TYPE_POWER_SWITCH: len++, //通道关闭开启
  26. SUB_TYPE_POWER_ALARM: len++,
  27. SUB_TYPE_POWER_THRESHOLD: len++, //power_ch_t // 阈值设置
  28. SUB_TYPE_POWER_OPEN_DELAY: len++, //power_total_t
  29. SUB_TYPE_POWER_CLOSE_DELAY: len++,
  30. SUB_TYPE_PARAS_SYS: len++,
  31. SUB_TYPE_PARAS_MODBUS: len++,
  32. SUB_TYPE_PARAS_MISC: len++,
  33. SUB_TYPE_PARAS_PROD: len++,
  34. SUB_TYPE_PARAS_SERV: len++,
  35. SUB_TYPE_PARAS_NETWORK: len++,
  36. SUB_TYPE_PARAS_SNMP: len++,
  37. SUB_TYPE_PARAS_NTP: len++,
  38. SUB_TYPE_POWER_CONSUMER_CLEAR: len++,
  39. SUB_TYPE_SENSORE_SET: len++,
  40. }
  41. }();
  42. const PDU_TYPE = function() {
  43. var len = 0;
  44. return {
  45. PDU_AC_I1O1: len++,
  46. PDU_DC_I1O1: len += 2,
  47. PDU_AC_I3O3: len++,
  48. PDU_AC_I3O1: len++,
  49. PDU_AC_I3O1_H: len++,
  50. }
  51. }();
  52. const ALARM_ACT = function() {
  53. var len = 1;
  54. return {
  55. ALARM_ACT_CLOSE_CH: len++,
  56. ALARM_ACT_MESG: len++,
  57. ALARM_ACT_CLOSE_CHALL: len++,
  58. }
  59. }();
  60. const IP_MODE = function() {
  61. var len = 0;
  62. return {
  63. IP_MODE_DHCP: len++,
  64. IP_MODE_STATIC: len++,
  65. }
  66. }();
  67. const IP_VER = function() {
  68. var len = 0;
  69. return {
  70. IP_VER_ERR: len++,
  71. IP_VER_V4: len++,
  72. IP_VER_V6: len++,
  73. }
  74. }();
  75. const MODBUS_MODE = function() {
  76. var len = 0;
  77. return {
  78. MODBUS_MASTER: len++,
  79. MODBUS_SLAVE: len++,
  80. }
  81. }();
  82. const LANG_ID = function() {
  83. var len = 0;
  84. return {
  85. LANG_ID_CHINESE: len++,
  86. LANG_ID_ENGLISH: len++,
  87. LANG_ID_RUSSIAN: len++,
  88. LANG_ID_SPANISH: len++,
  89. LANG_ID_PORTYGYESE: len++,
  90. LANG_ID_GERMAN: len++,
  91. LANG_ID_FRENCH: len++,
  92. LANG_ID_ITALIAN: len++,
  93. LANG_ID_JAPANESE: len++,
  94. LANG_ID_MAX: len++,
  95. }
  96. }();
  97. ///////////////////////////////////////////////////////
  98. function array_to_string(data) {
  99. const decoder = new TextDecoder();
  100. return decoder.decode(new Uint8Array(data));
  101. }
  102. function array_set(array, str, offset) {
  103. const encoder = new TextEncoder(); // Ĭ��'utf-8'����
  104. const buffer = encoder.encode(str);
  105. array.set(buffer, offset);
  106. //array.fill(0, offset, buffer.length);
  107. }
  108. function string_to_array(data, len) {
  109. const encoder = new TextEncoder(); // Ĭ��'utf-8'����
  110. const buffer = encoder.encode(data);
  111. const fixedArray = new Uint8Array(len);
  112. fixedArray.set(buffer);
  113. fixedArray.fill(0, buffer.length);
  114. return fixedArray.buffer;
  115. }
  116. function array_cat(a1, a2) {
  117. var tlen = a1.byteLength + a2.byteLength;
  118. var buffer = new ArrayBuffer(tlen);
  119. var vw = new Uint8Array(buffer);
  120. var vw1 = new Uint8Array(a1);
  121. for (var i = 0; i < a1.byteLength; i++) {
  122. vw[i] = vw1[i];
  123. }
  124. var vw2 = new Uint8Array(a2);
  125. for (var i = 0; i < a2.byteLength; i++) {
  126. vw[i + a1.byteLength] = vw2[i];
  127. }
  128. return buffer;
  129. }
  130. function mk_hdr_bin(addr, type, subtype, nack, flag, dlen) {
  131. var tmp, length = 0;
  132. var buffer = new ArrayBuffer(14);
  133. tmp = new DataView(buffer, length);
  134. var t = MAGIC;
  135. tmp.setUint16(0, t, true); //magic
  136. length += 2;
  137. tmp = new DataView(buffer, length);
  138. tmp.setUint8(0, addr, true); //addr
  139. length += 1;
  140. tmp = new DataView(buffer, length);
  141. tmp.setUint8(0, type, true); //type
  142. length += 1;
  143. tmp = new DataView(buffer, length);
  144. tmp.setUint8(0, subtype, true); //subtype
  145. length += 1;
  146. tmp = new DataView(buffer, length);
  147. tmp.setUint8(0, nack, true); //nack
  148. length += 1;
  149. tmp = new DataView(buffer, length);
  150. tmp.setUint32(0, flag, true); //flag
  151. length += 4;
  152. tmp = new DataView(buffer, length);
  153. tmp.setUint32(0, dlen, true); //dlen
  154. length += 4;
  155. return buffer;
  156. }
  157. function mk_hdr_obj(addr, type, subtype, nack, flag, dlen) {
  158. this.magic = MAGIC;
  159. this.addr = addr;
  160. this.type = type;
  161. this.subtype = subtype;
  162. this.flag = flag;
  163. this.dlen = dlen;
  164. }
  165. function pkt_to_bin(addr, type, subtype, nack, flag, js) {
  166. var tmp;
  167. var buffer = new mk_hdr_bin(addr, type, subtype, nack, flag, js.len);
  168. switch (type) {
  169. case PKT_TYPE.PKT_TYPE_POWER_CH:
  170. tmp = new powerc_to_bin(js);
  171. break;
  172. case PKT_TYPE.PKT_TYPE_POWER_TOTAL:
  173. tmp = new powert_to_bin(js);
  174. break;
  175. case PKT_TYPE.PKT_TYPE_ALARM:
  176. tmp = new alarm_to_bin(js);
  177. break;
  178. case PKT_TYPE.PKT_TYPE_PARAS:
  179. {
  180. switch (subtype) {
  181. case SUB_TYPE.SUB_TYPE_PARAS_SYS:
  182. {
  183. tmp = new sys_to_bin(js);
  184. }
  185. break;
  186. case SUB_TYPE.SUB_TYPE_PARAS_MODBUS:
  187. {
  188. tmp = new modbus_to_bin(js);
  189. }
  190. break;
  191. case SUB_TYPE.SUB_TYPE_PARAS_MISC:
  192. {
  193. tmp = new misc_to_bin(js);
  194. }
  195. break;
  196. case SUB_TYPE.SUB_TYPE_PARAS_PROD:
  197. {
  198. tmp = new prod_to_bin(js);
  199. }
  200. break;
  201. case SUB_TYPE.SUB_TYPE_PARAS_SERV:
  202. {
  203. tmp = new serv_to_bin(js);
  204. }
  205. break;
  206. case SUB_TYPE.SUB_TYPE_PARAS_NETWORK:
  207. {
  208. tmp = new network_to_bin(js);
  209. }
  210. break;
  211. case SUB_TYPE.SUB_TYPE_PARAS_SNMP:
  212. {
  213. tmp = new snmp_to_bin(js);
  214. }
  215. break;
  216. }
  217. }
  218. break;
  219. default:
  220. return tmp;
  221. }
  222. return array_cat(buffer, tmp);
  223. }
  224. function bin_to_pkt(bin) {
  225. var hdr = new bin_to_hdr(bin);
  226. var data = bin.slice(hdr.len);
  227. if (data.byteLength > 0) {
  228. switch (hdr.type) {
  229. case PKT_TYPE.PKT_TYPE_POWER_CH:
  230. hdr.powerc = new bin_to_powerc(data);
  231. break;
  232. case PKT_TYPE.PKT_TYPE_POWER_TOTAL:
  233. hdr.powert = BIN.powert.b2j(data);
  234. break;
  235. case PKT_TYPE.PKT_TYPE_ALARM:
  236. hdr.alarmd = BIN.alarmd.b2j(data);
  237. break;
  238. case PKT_TYPE.PKT_TYPE_ALARM:
  239. hdr.alarmd = BIN.alarmd.b2j(data);
  240. break;
  241. case PKT_TYPE.PKT_TYPE_SLAVE_LIST:
  242. hdr.slaves = BIN.alarmd.b2j(data);
  243. break;
  244. default:
  245. console.log("wrong hdr type: " + hdr.type);
  246. }
  247. }
  248. return hdr;
  249. }
  250. ///////////////////////////////////////////////////
  251. function bin_to_hdr(bin) {
  252. var tmp, length = 0;
  253. tmp = new DataView(bin, length);
  254. this.magic = tmp.getUint16(0, true);
  255. length += 2;
  256. tmp = new DataView(bin, length);
  257. this.addr = tmp.getUint8(0, true);
  258. length += 1;
  259. tmp = new DataView(bin, length);
  260. this.type = tmp.getUint8(0, true);
  261. length += 1;
  262. tmp = new DataView(bin, length);
  263. this.subtype = tmp.getUint8(0, true);
  264. length += 1;
  265. tmp = new DataView(bin, length);
  266. this.nack = tmp.getUint8(0, true);
  267. length += 1;
  268. tmp = new DataView(bin, length);
  269. this.flag = tmp.getUint32(0, true);
  270. length += 4;
  271. tmp = new DataView(bin, length);
  272. this.dlen = tmp.getUint32(0, true);
  273. length += 4;
  274. this.len = length;
  275. }
  276. function bin_to_info(bin) {
  277. var tmp, length = 0;
  278. this.name = array_to_string(bin.slice(length, 16));
  279. length += 16;
  280. tmp = new DataView(bin, length);
  281. this.type = tmp.getUint8(0, true);
  282. length += 1;
  283. tmp = new DataView(bin, length);
  284. this.addr = tmp.getUint8(0, true);
  285. length += 1;
  286. tmp = new DataView(bin, length);
  287. this.ch = tmp.getUint8(0, true);
  288. length += 1;
  289. tmp = new DataView(bin, length);
  290. this.sch = tmp.getUint8(0, true);
  291. length += 1;
  292. tmp = new DataView(bin, length);
  293. this.ph_id = tmp.getUint8(0, true);
  294. length += 1;
  295. tmp = new DataView(bin, length);
  296. this.ph_val = tmp.getUint8(0, true);
  297. length += 1;
  298. tmp = new DataView(bin, length);
  299. this.start_delay = tmp.getUint8(0, true);
  300. length += 1;
  301. tmp = new DataView(bin, length);
  302. this.stop_delay = tmp.getUint8(0, true);
  303. length += 1;
  304. this.len = length;
  305. }
  306. function bin_to_power(bin) {
  307. var tmp, length = 0;
  308. tmp = new DataView(bin, length);
  309. this.voltage = tmp.getUint16(0, true);
  310. length += 2;
  311. tmp = new DataView(bin, length);
  312. this.current = tmp.getUint16(0, true);
  313. length += 2;
  314. tmp = new DataView(bin, length);
  315. this.power = tmp.getUint32(0, true);
  316. length += 4;
  317. tmp = new DataView(bin, length);
  318. this.freq = tmp.getUint16(0, true);
  319. length += 2;
  320. tmp = new DataView(bin, length);
  321. this.factor = tmp.getUint8(0, true);
  322. length += 1;
  323. tmp = new DataView(bin, length);
  324. this.consump = tmp.getUint32(0, true);
  325. length += 4;
  326. // tmp = new DataView(bin, length);
  327. // this.active = tmp.getFloat32(0, true);
  328. // length += 4;
  329. // tmp = new DataView(bin, length);
  330. // this.reactive = tmp.getFloat32(0, true);
  331. // length += 4;
  332. // tmp = new DataView(bin, length);
  333. // this.ph_out = tmp.getUint8(0, true);
  334. // length += 1;
  335. // tmp = new DataView(bin, length);
  336. // this.status = tmp.getUint8(0, true);
  337. // length += 1;
  338. // tmp = new DataView(bin, length);
  339. // this.nwire = tmp.getUint8(0, true);
  340. // length += 1;
  341. this.len = length;
  342. }
  343. function bin_to_alarm(bin) {
  344. var tmp, length = 0;
  345. tmp = new DataView(bin, length);
  346. var val = tmp.getUint16(0, true);
  347. length += 2;
  348. this.v_upper = (val & 0x1);
  349. this.v_lower = (val & 0x2);
  350. this.c_upper = (val & 0x4);
  351. this.p_upper = (val & 0x8);
  352. this.w_upper = (val & 0x10);
  353. this.ph_loss1 = (val & 0x00);
  354. this.ph_loss2 = (val & 0x00);
  355. this.ph_loss3 = (val & 0x00);
  356. // this.v_upper = tmp.uint16_t(0, true);
  357. // length += 1;
  358. // tmp = new DataView(bin, length);
  359. // this.v_lower = tmp.getUint8(0, true);
  360. // length += 1;
  361. // tmp = new DataView(bin, length);
  362. // this.c_upper = tmp.getUint8(0, true);
  363. // length += 1;
  364. // tmp = new DataView(bin, length);
  365. // this.p_upper = tmp.getUint8(0, true);
  366. // length += 1;
  367. // tmp = new DataView(bin, length);
  368. // this.w_upper = tmp.getUint8(0, true);
  369. // length += 1;
  370. // tmp = new DataView(bin, length);
  371. // this.ph_loss = tmp.getUint8(0, true);
  372. // length += 1;
  373. this.len = length;
  374. }
  375. function bin_to_thrval(bin) {
  376. var tmp, length = 0;
  377. tmp = new DataView(bin, length);
  378. this.en = tmp.getUint16(0, true);
  379. length += 2;
  380. tmp = new DataView(bin, length);
  381. this.v_upper = tmp.getUint16(0, true);
  382. length += 2;
  383. tmp = new DataView(bin, length);
  384. this.v_lower = tmp.getUint16(0, true);
  385. length += 2;
  386. this.c_upper = tmp.getUint16(0, true);
  387. length += 2;
  388. this.p_upper = tmp.getUint32(0, true);
  389. length += 4;
  390. this.w_upper = tmp.getUint32(0, true);
  391. length += 4;
  392. // tmp = new DataView(bin, length);
  393. // this.act = tmp.getUint8(0, true);
  394. // length += 1;
  395. // this.act_para = [];
  396. // tmp = new DataView(bin, length);
  397. // for (var i = 0; i < 14; i++) {
  398. // this.act_para[i] = tmp.getUint8(i, true);
  399. // }
  400. // length += 14;
  401. this.len = length;
  402. }
  403. function bin_to_thr(bin) {
  404. var tmp, length = 0;
  405. tmp = new DataView(bin, length);
  406. this.en = tmp.getUint8(0, true);
  407. length += 1;
  408. tmp = new DataView(bin, length);
  409. this.v_upper = tmp.getUint16(0, true);
  410. console.log(this.v_upper)
  411. length += 2;
  412. tmp = new DataView(bin, length);
  413. this.v_lower = tmp.getUint16(0, true);
  414. length += 2;
  415. tmp = new DataView(bin, length);
  416. this.c_upper = tmp.getUint16(0, true);
  417. length += 2;
  418. tmp = new DataView(bin, length);
  419. this.p_upper = tmp.getUint32(0, true);
  420. length += 4;
  421. tmp = new DataView(bin, length);
  422. this.w_upper = tmp.getUint32(0, true);
  423. length += 4;
  424. //this.thr = new bin_to_thrval(bin.slice(length));
  425. //length += this.thr.len;
  426. // this.v_lower = new bin_to_thrval(bin.slice(length));
  427. // length += this.v_lower.len;
  428. // this.c_upper = new bin_to_thrval(bin.slice(length));
  429. // length += this.c_upper.len;
  430. // this.p_upper = new bin_to_thrval(bin.slice(length));
  431. // length += this.p_upper.len;
  432. // this.w_upper = new bin_to_thrval(bin.slice(length));
  433. // length += this.w_upper.len;
  434. this.len = length;
  435. }
  436. ////////////////////////////////
  437. function bin_to_ver(bin) {
  438. var tmp, length = 0;
  439. this.ver = array_to_string(bin.slice(length, 16));
  440. length += 16;
  441. this.addr = array_to_string(bin.slice(length, 32));
  442. length += 32;
  443. this.len = length;
  444. }
  445. // function bin_to_sys(bin) {
  446. // var tmp, length = 0;
  447. // tmp = new DataView(bin, length);
  448. // this.lang = tmp.getUint8(0, true);
  449. // length += 1;
  450. // tmp = new DataView(bin, length);
  451. // this.tzone = tmp.getInt8(0, true);
  452. // length += 1;
  453. // this.sys_time = array_to_string(bin.slice(length, 32));
  454. // length += 32;
  455. // // 版本号
  456. // this.version_number = array_to_string(bin.slice(length, 10));
  457. // length += 10;
  458. // this.len = length;
  459. // }
  460. function bin_to_modbus(bin) {
  461. var tmp, length = 0;
  462. tmp = new DataView(bin, length);
  463. this.mode = tmp.getUint8(0, true);
  464. length += 1;
  465. tmp = new DataView(bin, length);
  466. this.addr = tmp.getUint8(0, true);
  467. length += 1;
  468. tmp = new DataView(bin, length);
  469. this.baud = tmp.getUint32(0, true);
  470. length += 4;
  471. this.len = length;
  472. }
  473. function bin_to_misc(bin) {
  474. var tmp, length = 0;
  475. tmp = new DataView(bin, length);
  476. this.watchdog = tmp.getUint8(0, true);
  477. length += 1;
  478. tmp = new DataView(bin, length);
  479. this.fliptime = tmp.getUint32(0, true);
  480. length += 4;
  481. tmp = new DataView(bin, length);
  482. this.led = tmp.getUint8(0, true);
  483. length += 1;
  484. tmp = new DataView(bin, length);
  485. this.beep = tmp.getUint8(0, true);
  486. length += 1;
  487. tmp = new DataView(bin, length);
  488. this.rotate = tmp.getUint16(0, true);
  489. length += 2;
  490. this.len = length;
  491. }
  492. function bin_to_prod(bin) {
  493. var tmp, length = 0;
  494. tmp = new DataView(bin, length);
  495. this.id = tmp.getUint8(0, true);
  496. length += 1;
  497. this.pname = array_to_string(bin.slice(length, 32));
  498. length += 32;
  499. this.pnumber = array_to_string(bin.slice(length, 32));
  500. length += 32;
  501. this.status = array_to_string(bin.slice(length, 32));
  502. length += 32;
  503. this.name = array_to_string(bin.slice(length, 32));
  504. length += 32;
  505. this.number = array_to_string(bin.slice(length, 32));
  506. length += 32;
  507. this.date = array_to_string(bin.slice(length, 32));
  508. length += 32;
  509. this.batch = array_to_string(bin.slice(length, 32));
  510. length += 32;
  511. tmp = new DataView(bin, length);
  512. this.type = tmp.getUint8(0, true);
  513. length += 1;
  514. tmp = new DataView(bin, length);
  515. this.samptime = tmp.getUint32(0, true);
  516. length += 4;
  517. tmp = new DataView(bin, length);
  518. this.savetime = tmp.getUint32(0, true);
  519. length += 4;
  520. tmp = new DataView(bin, length);
  521. this.ph_group = tmp.getUint16(0, true);
  522. length += 2;
  523. tmp = new DataView(bin, length);
  524. this.ch_delay = tmp.getUint16(0, true);
  525. length += 2;
  526. this.len = length;
  527. }
  528. function bin_to_serv(bin) {
  529. var tmp, length = 0;
  530. this.name = array_to_string(bin.slice(length, 256));
  531. length += 256;
  532. this.site = array_to_string(bin.slice(length, 256));
  533. length += 256;
  534. this.mail = array_to_string(bin.slice(length, 256));
  535. length += 256;
  536. this.addr = array_to_string(bin.slice(length, 256));
  537. length += 256;
  538. this.tele = array_to_string(bin.slice(length, 32));
  539. length += 32;
  540. this.len = length;
  541. }
  542. function bin_to_network(bin) {
  543. var tmp, length = 0;
  544. tmp = new DataView(bin, length);
  545. this.mode = tmp.getUint8(0, true);
  546. length += 1;
  547. this.ipaddr = array_to_string(bin.slice(length, 48));
  548. length += 48;
  549. this.mask = array_to_string(bin.slice(length, length + 48));
  550. length += 48;
  551. this.gateway = array_to_string(bin.slice(length, length + 48));
  552. length += 48;
  553. this.dns1 = array_to_string(bin.slice(length, length + 48));
  554. length += 48;
  555. this.dns2 = array_to_string(bin.slice(length, length + 48));
  556. length += 48;
  557. // this.dhcp = array_to_string(bin.slice(length, 48));
  558. // length += 48;
  559. this.len = length;
  560. }
  561. function bin_2_sensor_info(bin) {
  562. var tmp, length = 0;
  563. tmp = new DataView(bin, length);
  564. this.name = array_to_string(bin.slice(length, 32));
  565. length += 32;
  566. this.type = tmp.getUint8(length, true);
  567. length += 1;
  568. this.addr = tmp.getUint8(length, true);
  569. length += 1;
  570. this.num_val = tmp.getUint8(length, true);
  571. length += 1;
  572. this.status = tmp.getUint8(length, true);
  573. length += 1;
  574. this.check_count = tmp.getUint8(length, true);
  575. length += 1;
  576. this.len = length;
  577. }
  578. function bin_2_sensor_th(bin) {
  579. var tmp, length = 0;
  580. tmp = new DataView(bin, length);
  581. this.enable = tmp.getUint8(length, true);
  582. length += 1;
  583. this.thr_max = tmp.getFloat32(length, true);
  584. length += 4;
  585. this.thr_min = tmp.getFloat32(length, true);
  586. length += 4;
  587. this.act = tmp.getUint8(length, true);
  588. length += 1;
  589. this.para = bin.slice(length, length + 14);
  590. length += 14;
  591. this.len = length;
  592. }
  593. function bin_2_sensor(bin) {
  594. var tmp, length = 0;
  595. tmp = new DataView(bin, length);
  596. this.thr = new bin_2_sensor_th(bin);
  597. length += this.thr.len;
  598. this.s_alarm = tmp.getUint8(length, true);
  599. length += 1;
  600. this.val = tmp.getFloat32(length, true);
  601. length += 4;
  602. this.len = length;
  603. }
  604. function bin_to_sensorc(bin) {
  605. var length = 0;
  606. this.info = new bin_2_sensor_info(bin);
  607. length += this.info.len;
  608. this.sensor_val = [];
  609. for (var i = 0; i < 2; i++) {
  610. this.sensor_val[i] = new bin_2_sensor(bin.slice(length));
  611. length += this.sensor_val[i].len;
  612. }
  613. this.len = length;
  614. }
  615. ////////////////////////////////
  616. function bin_to_powerc(bin) {
  617. var tmp, bin2, length = 0;
  618. this.info = new bin_to_info(bin);
  619. length += this.info.len;
  620. this.power = [];
  621. for (var i = 0; i < 3; i++) {
  622. this.power[i] = new bin_to_power(bin.slice(length));
  623. length += this.power[i].len;
  624. }
  625. this.thr = new bin_to_thr(bin.slice(length));
  626. length += this.thr.len;
  627. this.alarm = new bin_to_alarm(bin.slice(length));
  628. length += this.alarm.len;
  629. tmp = new DataView(bin, length);
  630. this.status = tmp.getUint8(0, true);
  631. length += 1;
  632. tmp = new DataView(bin, length);
  633. this.nwire = tmp.getUint8(0, true);
  634. length += 1;
  635. tmp = new DataView(bin, length);
  636. this.pbrd = tmp.getUint32(0, true);
  637. length += 4;
  638. // tmp = new DataView(bin, length);
  639. // this.time = tmp.getUint32(0, true);
  640. // length += 4;
  641. // tmp = new DataView(bin, length);
  642. // this.pbrd = tmp.getUint32(0, true);
  643. // length += 4;
  644. this.len = length;
  645. }
  646. function bin_to_total(bin) {
  647. var tmp, length = 0;
  648. tmp = new DataView(bin, length);
  649. this.voltage = tmp.getFloat32(0, true);
  650. length += 4;
  651. tmp = new DataView(bin, length);
  652. this.current = tmp.getFloat32(0, true);
  653. length += 4;
  654. tmp = new DataView(bin, length);
  655. this.power = tmp.getFloat32(0, true);
  656. length += 4;
  657. tmp = new DataView(bin, length);
  658. this.freq = tmp.getFloat32(0, true);
  659. length += 4;
  660. tmp = new DataView(bin, length);
  661. this.factor = tmp.getFloat32(0, true);
  662. length += 4;
  663. tmp = new DataView(bin, length);
  664. this.consump = tmp.getFloat32(0, true);
  665. length += 4;
  666. tmp = new DataView(bin, length);
  667. this.active = tmp.getFloat32(0, true);
  668. length += 4;
  669. tmp = new DataView(bin, length);
  670. this.reactive = tmp.getFloat32(0, true);
  671. length += 4;
  672. this.len = length;
  673. }
  674. function bin_to_powert(bin) {
  675. var tmp, length = 0;
  676. tmp = new DataView(bin, length);
  677. this.type = tmp.getUint8(0, true);
  678. length += 1;
  679. this.total = [];
  680. for (var i = 0; i < 3; i++) {
  681. this.total[i] = new bin_to_total(bin.slice(length));
  682. length += this.total[i].len;
  683. }
  684. this.len = length;
  685. }
  686. function bin_to_alarmd(bin) {
  687. var tmp, length = 0;
  688. tmp = new DataView(bin, length);
  689. this.ch = tmp.getUint8(0, true);
  690. length += 1;
  691. this.alarm = new bin_to_alarm(bin.slice(length));
  692. length += this.alarm.len;
  693. tmp = new DataView(bin, length);
  694. this.time = tmp.getUint32(0, true);
  695. length += 4;
  696. this.len = length;
  697. }
  698. function bin_to_paras(bin) {
  699. var tmp, length = 0;
  700. this.lang = new bin_to_sys(bin.slice(length));
  701. length += this.lang.len;
  702. this.ver = new bin_to_ver(bin.slice(length));
  703. length += this.ver.len;
  704. this.cas = new bin_to_modbus(bin.slice(length));
  705. length += this.cas.len;
  706. this.misc = new bin_to_misc(bin.slice(length));
  707. length += this.misc.len;
  708. this.prod = new bin_to_prod(bin.slice(length));
  709. length += this.prod.len;
  710. this.serv = new bin_to_serv(bin.slice(length));
  711. length += this.serv.len;
  712. this.network = new bin_to_network(bin.slice(length));
  713. length += this.network.len;
  714. this.snmp = new bin_to_snmp(bin.slice(length));
  715. length += this.snmp.len;
  716. this.len = length;
  717. }
  718. function bin_to_slist(bin) {
  719. var tmp, length = 0;
  720. tmp = new DataView(bin, length);
  721. this.cnt = tmp.getUint8(0, true);
  722. length += 1;
  723. this.addr = [];
  724. tmp = new DataView(bin, length);
  725. for (var i = 0; i < this.cnt; i++) {
  726. this.addr[i] = tmp.getUint8(i, true);
  727. }
  728. length += this.cnt;
  729. this.len = length;
  730. }
  731. ///////////////////////////////////////////////////
  732. function hdr_to_bin(js) {
  733. var tmp, length = 0;
  734. var buffer = new ArrayBuffer(js.len);
  735. tmp = new DataView(buffer, length);
  736. tmp.setUint16(0, js.magic, true);
  737. length += 2;
  738. tmp = new DataView(buffer, length);
  739. tmp.setUint8(0, js.addr, true);
  740. length += 1;
  741. tmp = new DataView(buffer, length);
  742. tmp.setUint8(0, js.type, true);
  743. length += 1;
  744. tmp = new DataView(buffer, length);
  745. tmp.setUint8(0, js.subtype, true);
  746. length += 1;
  747. tmp = new DataView(buffer, length);
  748. tmp.setUint8(0, js.nack, true);
  749. length += 1;
  750. tmp = new DataView(buffer, length);
  751. tmp.setUint32(0, js.flag, true);
  752. length += 4;
  753. tmp = new DataView(buffer, length);
  754. tmp.setUint32(0, js.dlen, true);
  755. length += 4;
  756. return buffer;
  757. }
  758. function info_to_bin(js) {
  759. var tmp, length = 0;
  760. var name = string_to_array(js.name, 16);
  761. var buffer = new ArrayBuffer(js.len - name.byteLength);
  762. tmp = new DataView(buffer, length);
  763. tmp.setUint8(0, js.type, true);
  764. length += 1;
  765. tmp = new DataView(buffer, length);
  766. tmp.setUint8(0, js.addr, true);
  767. length += 1;
  768. tmp = new DataView(buffer, length);
  769. tmp.setUint8(0, js.ch, true);
  770. length += 1;
  771. tmp = new DataView(buffer, length);
  772. tmp.setUint8(0, js.sch, true);
  773. length += 1;
  774. tmp = new DataView(buffer, length);
  775. tmp.setUint8(0, js.ph_id, true);
  776. length += 1;
  777. tmp = new DataView(buffer, length);
  778. tmp.setUint8(0, js.ph_val, true);
  779. length += 1;
  780. tmp = new DataView(buffer, length);
  781. tmp.setUint8(0, js.start_delay, true);
  782. length += 1;
  783. tmp = new DataView(buffer, length);
  784. tmp.setUint8(0, js.stop_delay, true);
  785. length += 1;
  786. return array_cat(name, buffer);
  787. }
  788. function power_to_bin(js) {
  789. var tmp, length = 0;
  790. var buffer = new ArrayBuffer(js.len);
  791. tmp = new DataView(buffer, length);
  792. tmp.setInt16(0, js.voltage * 10, true);
  793. length += 2;
  794. tmp = new DataView(buffer, length);
  795. tmp.setInt16(0, js.current, true);
  796. length += 2;
  797. tmp = new DataView(buffer, length);
  798. tmp.setInt32(0, js.power, true);
  799. length += 4;
  800. tmp = new DataView(buffer, length);
  801. tmp.setInt16(0, js.freq, true);
  802. length += 2;
  803. tmp = new DataView(buffer, length);
  804. tmp.setInt8(0, js.factor, true);
  805. length += 1;
  806. tmp = new DataView(buffer, length);
  807. tmp.setUint32(0, js.consump, true);
  808. length += 4;
  809. // tmp = new DataView(buffer, length);
  810. // tmp.setFloat32(0, js.active, true);
  811. // length += 4;
  812. // tmp = new DataView(buffer, length);
  813. // tmp.setFloat32(0, js.reactive, true);
  814. // length += 4;
  815. // tmp = new DataView(buffer, length);
  816. // tmp.setUint8(0, js.ph_put, true);
  817. // length += 1;
  818. // tmp = new DataView(buffer, length);
  819. // tmp.setUint8(0, js.status, true);
  820. // length += 1;
  821. // tmp = new DataView(buffer, length);
  822. // tmp.setUint8(0, js.nwire, true);
  823. // length += 1;
  824. return buffer;
  825. }
  826. function alarm_to_bin(js) {
  827. var tmp, length = 0;
  828. var buffer = new ArrayBuffer(js.len);
  829. //tmp = new DataView(buffer, length);
  830. // tmp = new DataView(buffer, length);
  831. // tmp.setUint8(0, js.v_upper, true);
  832. // length += 1;
  833. // tmp = new DataView(buffer, length);
  834. // tmp.setUint8(0, js.v_lower, true);
  835. // length += 1;
  836. // tmp = new DataView(buffer, length);
  837. // tmp.setUint8(0, js.c_upper, true);
  838. // length += 1;
  839. // tmp = new DataView(buffer, length);
  840. // tmp.setUint8(0, js.p_upper, true);
  841. // length += 1;
  842. // tmp = new DataView(buffer, length);
  843. // tmp.setUint8(0, js.w_upper, true);
  844. // length += 1;
  845. // tmp = new DataView(buffer, length);
  846. // tmp.setUint8(0, js.ph_loss, true);
  847. // length += 1;
  848. return buffer;
  849. }
  850. function thrval_to_bin(js) {
  851. var tmp, length = 0;
  852. var buffer = new ArrayBuffer(js.len);
  853. tmp = new DataView(buffer, length);
  854. tmp.setUint8(0, js.en, true);
  855. length += 1;
  856. tmp = new DataView(buffer, length);
  857. tmp.setFloat32(0, js.val, true);
  858. length += 4;
  859. tmp = new DataView(buffer, length);
  860. tmp.getUint8(0, js.act, true);
  861. length += 1;
  862. tmp = new DataView(buffer, length);
  863. for (var i = 0; i < 14; i++) {
  864. tmp.setUint8(i, js.act_para[i], true);
  865. }
  866. length += 14;
  867. return buffer;
  868. }
  869. function thr_to_bin(js) {
  870. var bin, tmp, length = 0;
  871. var buffer = new ArrayBuffer(js.len);
  872. tmp = new DataView(buffer, length);
  873. tmp.setUint8(0, js.en, true);
  874. length += 1;
  875. tmp = new DataView(buffer, length);
  876. tmp.setUint16(0, js.v_upper, true);
  877. length += 2;
  878. tmp = new DataView(buffer, length);
  879. tmp.setUint16(0, js.v_lower, true);
  880. length += 2;
  881. tmp = new DataView(buffer, length);
  882. tmp.setUint16(0, js.c_upper, true);
  883. length += 2;
  884. tmp = new DataView(buffer, length);
  885. tmp.setUint32(0, js.p_upper, true);
  886. length += 4;
  887. tmp = new DataView(buffer, length);
  888. tmp.setUint32(0, js.w_upper, true);
  889. length += 4;
  890. // bin = thrval_to_bin(js.v_upper);
  891. // tmp = thrval_to_bin(js.v_lower);
  892. // bin = array_cat(bin, tmp);
  893. // tmp = thrval_to_bin(js.c_upper);
  894. // bin = array_cat(bin, tmp);
  895. // tmp = thrval_to_bin(js.p_upper);
  896. // bin = array_cat(bin, tmp);
  897. // tmp = thrval_to_bin(js.w_upper);
  898. // bin = array_cat(bin, tmp);
  899. return buffer;
  900. }
  901. ////////////////////////////////
  902. // function sys_to_bin(js) {
  903. // var tmp, length = 0;
  904. // var buffer = new ArrayBuffer(js.len);
  905. // tmp = new DataView(buffer, length);
  906. // tmp.setUint8(0, js.lang, true);
  907. // length += 1;
  908. // tmp = new DataView(buffer, length);
  909. // tmp.setInt8(0, js.tzone, true);
  910. // length += 1;
  911. // return buffer;
  912. // }
  913. function modbus_to_bin(js) {
  914. var tmp, length = 0;
  915. var buffer = new ArrayBuffer(js.len);
  916. tmp = new DataView(buffer, length);
  917. tmp.setUint8(0, js.mode, true);
  918. length += 1;
  919. tmp = new DataView(buffer, length);
  920. tmp.setUint8(0, js.addr, true);
  921. length += 1;
  922. tmp = new DataView(buffer, length);
  923. tmp.setUint32(0, js.baud, true);
  924. length += 4;
  925. return buffer;
  926. }
  927. function misc_to_bin(js) {
  928. var tmp, length = 0;
  929. var buffer = new ArrayBuffer(js.len);
  930. tmp = new DataView(buffer, length);
  931. tmp.setUint8(0, js.watchdog, true);
  932. length += 1;
  933. tmp = new DataView(buffer, length);
  934. tmp.setUint8(0, js.fliptime, true);
  935. length += 1;
  936. tmp = new DataView(buffer, length);
  937. tmp.setUint8(0, js.led, true);
  938. length += 1;
  939. tmp = new DataView(buffer, length);
  940. tmp.setUint8(0, js.beep, true);
  941. length += 1;
  942. tmp = new DataView(buffer, length);
  943. tmp.setUint16(0, js.rotate, true);
  944. length += 2;
  945. return buffer;
  946. }
  947. function prod_to_bin(js) {
  948. var tmp, length = 0;
  949. var buffer = new ArrayBuffer(js.len);
  950. tmp = new DataView(buffer, length);
  951. tmp.setUint32(0, js.id, true);
  952. length += 4;
  953. array_set(buffer, js.pname, length);
  954. length += 32;
  955. array_set(buffer, js.pnumber, length);
  956. length += 32;
  957. array_set(buffer, js.status, length);
  958. length += 32;
  959. array_set(buffer, js.name, length);
  960. length += 32;
  961. array_set(buffer, js.number, length);
  962. length += 32;
  963. array_set(buffer, js.date, length);
  964. length += 32;
  965. array_set(buffer, js.batch, length);
  966. length += 32;
  967. tmp = new DataView(buffer, length);
  968. tmp.setUint8(0, js.type, true);
  969. length += 1;
  970. tmp = new DataView(buffer, length);
  971. tmp.setUint8(0, js.count, true);
  972. length += 1;
  973. tmp = new DataView(buffer, length);
  974. tmp.setUint32(0, js.samptime, true);
  975. length += 4;
  976. tmp = new DataView(buffer, length);
  977. tmp.setUint32(0, js.savetime, true);
  978. length += 4;
  979. tmp = new DataView(buffer, length);
  980. tmp.setUint16(0, js.ph_group, true);
  981. length += 2;
  982. tmp = new DataView(buffer, length);
  983. tmp.setUint16(0, js.ch_delay, true);
  984. length += 2;
  985. return buffer;
  986. }
  987. function serv_to_bin(js) {
  988. var tmp, length = 0;
  989. var buffer = new ArrayBuffer(js.len);
  990. array_set(buffer, js.name, length);
  991. length += 256;
  992. array_set(buffer, js.site, length);
  993. length += 256;
  994. array_set(buffer, js.mail, length);
  995. length += 256;
  996. array_set(buffer, js.addr, length);
  997. length += 256;
  998. array_set(buffer, js.tele, length);
  999. length += 32;
  1000. return buffer;
  1001. }
  1002. function network_to_bin(js) {
  1003. var tmp, length = 0;
  1004. var buffer = new ArrayBuffer(js.len);
  1005. tmp = new DataView(buffer, length);
  1006. tmp.setUint8(0, js.mode, true);
  1007. length += 1;
  1008. array_set(new Uint8Array(buffer), js.ipaddr, length);
  1009. length += 48;
  1010. array_set(new Uint8Array(buffer), js.mask, length);
  1011. length += 48;
  1012. array_set(new Uint8Array(buffer), js.gateway, length);
  1013. length += 48;
  1014. array_set(new Uint8Array(buffer), js.dns1, length);
  1015. length += 48;
  1016. array_set(new Uint8Array(buffer), js.dns2, length);
  1017. length += 48;
  1018. return buffer;
  1019. }
  1020. function sys_to_bin(js) {
  1021. var tmp, length = 0;
  1022. var buffer = new ArrayBuffer(js.len);
  1023. tmp = new DataView(buffer, length);
  1024. tmp.setUint8(0, js.lang, true);
  1025. length += 1;
  1026. tmp = new DataView(buffer, length);
  1027. tmp.setInt8(0, js.tzone, true);
  1028. length += 1;
  1029. tmp = new DataView(buffer, length);
  1030. tmp.setUint16(0, js.route, true);
  1031. length += 2;
  1032. array_set(new Uint8Array(buffer), js.ver, length);
  1033. length += 16;
  1034. array_set(new Uint8Array(buffer), js.sys_time, length);
  1035. length += 32;
  1036. return buffer;
  1037. }
  1038. function snmp_to_bin(js) {
  1039. var tmp, length = 0;
  1040. //var uint8Array = new ArrayBuffer(js.len);
  1041. var buffer = new ArrayBuffer(js.len);
  1042. //
  1043. tmp = new DataView(buffer, length);
  1044. tmp.setUint8(0, js.mode, true);
  1045. length += 1;
  1046. tmp = new DataView(buffer, length);
  1047. tmp.setUint8(0, js.version, true);
  1048. length += 1;
  1049. array_set(new Uint8Array(buffer), js.publics, length);
  1050. length += 10;
  1051. tmp = new DataView(buffer, length);
  1052. tmp.setUint8(0, js.trapmode, true);
  1053. length += 1;
  1054. array_set(new Uint8Array(buffer), js.trap_ip, length);
  1055. length += 32;
  1056. //
  1057. // array_set(buffer, js.rzmm, length);
  1058. // length += 20;
  1059. //
  1060. // array_set(buffer, js.jmmm, length);
  1061. // length += 20;
  1062. return buffer;
  1063. }
  1064. ////////////////////////////////
  1065. function powerc_to_bin(js) {
  1066. var bin, tmp, length = 0;
  1067. bin = new info_to_bin(js.info);
  1068. for (var i = 0; i < 3; i++) {
  1069. tmp = new power_to_bin(js.power[i]);
  1070. bin = array_cat(bin, tmp);
  1071. }
  1072. tmp = new thr_to_bin(js.thr);
  1073. bin = array_cat(bin, tmp);
  1074. tmp = new alarm_to_bin(js.alarm);
  1075. bin = array_cat(bin, tmp);
  1076. var buf = new ArrayBuffer(6);
  1077. tmp = new DataView(buf, 0);
  1078. tmp.setUint32(0, js.status, true);
  1079. tmp.setUint32(1, js.nwire, true);
  1080. tmp.setUint32(2, js.pbrd, true);
  1081. // tmp.setUint32(0, js.time, true);
  1082. // tmp.setUint32(4, js.pbrd, true);
  1083. bin = array_cat(bin, buf);
  1084. return bin;
  1085. }
  1086. function total_to_bin(js) {
  1087. var tmp, length = 0;
  1088. var buffer = new ArrayBuffer(js.len);
  1089. tmp = new DataView(buffer, length);
  1090. tmp.setFloat32(0, js.voltage, true);
  1091. length += 4;
  1092. tmp = new DataView(buffer, length);
  1093. tmp.setFloat32(0, js.current, true);
  1094. length += 4;
  1095. tmp = new DataView(buffer, length);
  1096. tmp.setFloat32(0, js.power, true);
  1097. length += 4;
  1098. tmp = new DataView(buffer, length);
  1099. tmp.setFloat32(0, js.freq, true);
  1100. length += 4;
  1101. tmp = new DataView(buffer, length);
  1102. tmp.setFloat32(0, js.factor, true);
  1103. length += 4;
  1104. tmp = new DataView(buffer, length);
  1105. tmp.setFloat32(0, js.consump, true);
  1106. length += 4;
  1107. tmp = new DataView(buffer, length);
  1108. tmp.setFloat32(0, js.factor, true);
  1109. length += 4;
  1110. tmp = new DataView(buffer, length);
  1111. tmp.setFloat32(0, js.active, true);
  1112. length += 4;
  1113. tmp = new DataView(buffer, length);
  1114. tmp.setFloat32(0, js.reactive, true);
  1115. length += 4;
  1116. return buffer;
  1117. }
  1118. function powert_to_bin(js) {
  1119. var tmp, bin2, length = 0;
  1120. var bin = new ArrayBuffer(1);
  1121. tmp = new DataView(bin, length);
  1122. tmp.setUint8(0, js.type, true);
  1123. length += 4;
  1124. for (var i = 0; i < 3; i++) {
  1125. bin2 = total_to_bin(js.total[i]);
  1126. bin = array_cat(bin, bin2);
  1127. }
  1128. return bin;
  1129. }
  1130. function alarmd_to_bin(js) {
  1131. var tmp, length = 0;
  1132. var bin, buffer = new ArrayBuffer(1);
  1133. tmp = new DataView(buffer, 0);
  1134. tmp.setUint8(0, js.ch, true);
  1135. var alarm = alarm_to_bin(js.alarm);
  1136. bin = array_cat(buffer, alarm);
  1137. buffer = new ArrayBuffer(4);
  1138. tmp = new DataView(buffer, 0);
  1139. tmp.setUint32(0, js.time, true);
  1140. return array_cat(bin, buffer);
  1141. }
  1142. function bin_to_sys(bin) {
  1143. var tmp, length = 0;
  1144. tmp = new DataView(bin, length);
  1145. this.lang = tmp.getUint8(0, true);
  1146. length += 1;
  1147. tmp = new DataView(bin, length);
  1148. this.tzone = tmp.getInt8(0, true);
  1149. length += 1;
  1150. tmp = new DataView(bin, length);
  1151. this.route = tmp.getUint16(0, true);
  1152. length += 2;
  1153. this.ver = array_to_string(bin.slice(length, length + 16));
  1154. length += 16;
  1155. this.sys_time = array_to_string(bin.slice(length, length + 32));
  1156. length += 32;
  1157. this.len = length;
  1158. }
  1159. function bin_to_his_alarm(bin) {
  1160. var tmp, length = 0;
  1161. tmp = new DataView(bin, length);
  1162. this.type = tmp.getUint8(0, true);
  1163. length += 1;
  1164. this.date = array_to_string(bin.slice(length, length + 32));
  1165. length += 32;
  1166. this.waning_context = array_to_string(bin.slice(length, length + 64));
  1167. length += 64;
  1168. this.len = length;
  1169. }
  1170. function bin_to_snmp(bin) {
  1171. var tmp, length = 0;
  1172. tmp = new DataView(bin, length);
  1173. this.mode = tmp.getUint8(0, true);
  1174. length += 1;
  1175. tmp = new DataView(bin, length);
  1176. this.version = tmp.getUint8(0, true);
  1177. length += 1;
  1178. this.publics = array_to_string(bin.slice(length, length + 10));
  1179. length += 10;
  1180. tmp = new DataView(bin, length);
  1181. this.trapmode = tmp.getUint8(0, true);
  1182. length += 1;
  1183. // this.yhm = array_to_string(bin.slice(length, 20));
  1184. // length += 20;
  1185. // this.rzmm = array_to_string(bin.slice(length, 20));
  1186. // length += 20;
  1187. // this.jmmm = array_to_string(bin.slice(length, 20));
  1188. // length += 20;
  1189. this.trap_ip = array_to_string(bin.slice(length, length + 32));
  1190. length += 32;
  1191. this.len = length;
  1192. }
  1193. //////////////////////////////////////////////////////////////
  1194. // websocket推送二进制解析方法开始
  1195. var power_ch_start = 0;
  1196. var power_ch_end = 0;
  1197. var index = 0;
  1198. var temp = [];
  1199. function bin_parse(bin) {
  1200. var tmp, h = new bin_to_hdr(bin);
  1201. if (h.nack == 1) {
  1202. //tmp = myBinary.ack.bin2js(bin,this.h.len,true);
  1203. //myLog('log',tmp);
  1204. //var data = tmp.data;
  1205. }
  1206. if (h.type == PKT_TYPE.PKT_TYPE_POWER_CH) {
  1207. if (h.flag == 1) {
  1208. power_ch_start = 1;
  1209. temp.length = 0;
  1210. index = 0;
  1211. power_ch_end = 0;
  1212. }
  1213. if (h.flag == 0xFFFFFFFF) {
  1214. if (power_ch_start == 0) {
  1215. temp.length = 0;
  1216. index = 0;
  1217. }
  1218. power_ch_start = 0;
  1219. power_ch_end = 1;
  1220. }
  1221. }
  1222. var data = bin.slice(h.len);
  1223. if (data.byteLength > 0 && h.dlen == data.byteLength) {
  1224. switch (h.type) {
  1225. case PKT_TYPE.PKT_TYPE_POWER_CH:
  1226. {
  1227. var length = 0;
  1228. for (var i = index;; i++) {
  1229. temp[i] = new bin_to_powerc(data.slice(length));
  1230. length += temp[i].len;
  1231. if (length >= data.byteLength) {
  1232. index = i + 1;
  1233. break;
  1234. }
  1235. }
  1236. if (power_ch_end) {
  1237. h.powerc = temp;
  1238. }
  1239. }
  1240. break;
  1241. case PKT_TYPE.PKT_TYPE_POWER_TOTAL:
  1242. h.powert = new bin_to_powert(data);
  1243. break;
  1244. case PKT_TYPE.PKT_TYPE_ALARM:
  1245. {
  1246. var length = 0;
  1247. var tmp = [];
  1248. for (var i = 0;; i++) {
  1249. tmp[i] = new bin_to_his_alarm(data.slice(length));
  1250. length += tmp[i].len;
  1251. if (length >= data.byteLength) {
  1252. break;
  1253. }
  1254. }
  1255. h.his_alarmd = tmp;
  1256. }
  1257. break;
  1258. case PKT_TYPE.PKT_TYPE_SLAVE_LIST:
  1259. //h.alarmd = new bin_to_slist(data);
  1260. break;
  1261. case PKT_TYPE.PKT_TYPE_PARAS:
  1262. //h.paras = new bin_to_paras(data);
  1263. {
  1264. switch (h.subtype) {
  1265. case SUB_TYPE.SUB_TYPE_PARAS_MODBUS:
  1266. h.cas = new bin_to_modbus(data);
  1267. break;
  1268. case SUB_TYPE.SUB_TYPE_PARAS_NETWORK:
  1269. h.network = new bin_to_network(data);
  1270. break;
  1271. case SUB_TYPE.SUB_TYPE_PARAS_SNMP:
  1272. h.snmp = new bin_to_snmp(data);
  1273. break;
  1274. case SUB_TYPE.SUB_TYPE_PARAS_SYS:
  1275. h.sys = new bin_to_sys(data);
  1276. break;
  1277. }
  1278. }
  1279. break;
  1280. case PKT_TYPE.PKT_TYPE_SENSOR:
  1281. {
  1282. var tmp = [],
  1283. length = 0;
  1284. for (var i = 0;; i++) {
  1285. tmp[i] = new bin_to_sensorc(data.slice(length));
  1286. length += tmp[i].len;
  1287. if (length >= data.byteLength) {
  1288. break;
  1289. }
  1290. }
  1291. h.sensorc = tmp;
  1292. }
  1293. break;
  1294. default:
  1295. console.log("wrong hdr type: " + h.type);
  1296. break;
  1297. }
  1298. }
  1299. return h;
  1300. };
  1301. //////////////////////////////////////////
  1302. function LOG() {
  1303. var data = [];
  1304. for (var i = 1, len = arguments.length; i < len; i++) {
  1305. data.push(arguments[i])
  1306. }
  1307. console.log(data);
  1308. }
  1309. function WS(url, fn) {
  1310. this.url = url;
  1311. this.name = 'myWebs';
  1312. this.open = _open;
  1313. this.reopen = _reopen;
  1314. this.close = _close;
  1315. this.send = _send;
  1316. this.state = _state;
  1317. this.setcb = _setcb;
  1318. this.closeCount = 0;
  1319. this.maxConnect = 100;
  1320. var his = this;
  1321. this.open();
  1322. function _open() {
  1323. console.log("____url: ", his.url);
  1324. his.ws = new WebSocket(his.url);
  1325. his.ws.binaryType = 'arraybuffer';
  1326. his.ws.onopen = _onopen;
  1327. his.ws.onclose = _onclose;
  1328. his.ws.onmessage = _onmsg;
  1329. his.ws.onerror = _onerror;
  1330. }
  1331. function _reopen() {
  1332. _close();
  1333. _open(his.url);
  1334. }
  1335. function _close() {
  1336. his.ws.close();
  1337. }
  1338. function _send(msg) {
  1339. if (his.ws.readyState != WebSocket.OPEN)
  1340. return;
  1341. his.ws.send(msg);
  1342. }
  1343. function _state() {
  1344. return his.ws.readyState;
  1345. }
  1346. function _setcb(tp, f) {
  1347. switch (tp) {
  1348. case "open":
  1349. his.ws.onopen = f;
  1350. break;
  1351. case "close":
  1352. his.ws.onclose = f;
  1353. break;
  1354. case "msg":
  1355. his.ws.onmessage = f;
  1356. break;
  1357. case "err":
  1358. his.ws.onerror = f;
  1359. break;
  1360. }
  1361. }
  1362. function loop_send() {
  1363. console.log("PKT_TYPE_POWER_CH request");
  1364. _send(mk_hdr(PKT_TYPE.PKT_TYPE_POWER_CH));
  1365. setTimeout(loop_send, 400);
  1366. }
  1367. function _onopen(evt) {
  1368. his.closeCount = 0;
  1369. console.log("___ ws.onopen");
  1370. function1();
  1371. //setTimeout(loop_send, 2000);
  1372. }
  1373. function _onclose(evt) {
  1374. LOG("ws.onclose");
  1375. setTimeout(_reopen, 3000);
  1376. his.closeCount += 1;
  1377. }
  1378. function _onmsg(evt) {
  1379. console.log("___ ws.onmsg,websocket消息接收");
  1380. if (evt.data instanceof ArrayBuffer) {
  1381. var obj = bin_parse(evt.data);
  1382. if (obj.type == PKT_TYPE.PKT_TYPE_POWER_CH) {
  1383. if (power_ch_end == 1) {
  1384. fn(obj);
  1385. }
  1386. } else {
  1387. fn(obj);
  1388. }
  1389. }
  1390. }
  1391. function _onerror(evt) {
  1392. console.log("___ ws.onerror");
  1393. //write_scr('<span style="color: red;">ERROR:</span> '+ evt.data);
  1394. }
  1395. }