- //взял отсюда https://g...content-available-to-author-only...b.com/patrick--/node-omron-fins 
- const fins = require('omron-fins');  
- const furnaceConst = require('./checkOmronConst.js'); 
-   
- const http = require('http'); 
- const port = 6500; 
-   
- const bcd2number = function(bcd) { 
-   let d0 = (bcd & 0xF); 
-   let d1 = (bcd & 0xF0) >> 4; 
-   let d2 = (bcd & 0xF00) >> 8; 
-   let d3 = (bcd & 0xF000) >> 12; 
-   return (d3*1000 + d2*100 + d1*10 + d0); 
- } 
-   
- const getOmron = function(adr, tags0, callback){ 
-   //подготовка выходного массива  
-   let tags = tags0.map(t => {return { "tagNum":  Number(String(t.tag).slice(2)),  
-           "tag": t.tag, "value":null, "lastTime":null, "name": t.name, "units": t.units, "k": t.k}});   
-   
-   //объединение подряд идущих ячеек 
-   let tagsS = []; //сокращенный массив без подряд-идущих значений 
-   for (let pos=tags.length-2, cnt=1; pos>=-1; pos--, cnt++) //с конца в начало 
-     if (pos<0   ||   tags[pos].tagNum != tags[pos+1].tagNum-1) //pos==-1 чтобы сработало для [0]-элемента 
-       { tagsS.push({"tagNum": tags[pos+1].tagNum, "cnt": cnt, "index": pos+1}); cnt=0;} 
-   
-   let pos = 0; 
-   reqOmron();  
-   function reqOmron(){ 
-     let client = fins.FinsClient(9600, adr); 
-     client.on('error',function(error) {console.log('Error: ', error); }); 
-     client.on('reply',function(msg) { 
-       if (msg.values && msg.values.length) //иногда считывается "ничего"(wi-fi плохой) 
-         msg.values.forEach( (t, i) => { tags[tagsS[pos-1].index + i].value=bcd2number(t) }); 
-       client.close(); 
-       if (pos<=tagsS.length) reqOmron(); 
-     });   
-     client.on('timeout', function() { client.close(); if (pos<=tagsS.length) reqOmron();  }) 
-   
-     if (pos<tagsS.length) { //пока не закончился сокращенный массив 
-       client.read('D' +String(tagsS[pos].tagNum), tagsS[pos].cnt); //запрос      
-       pos++; 
-     } else { 
-       pos = tagsS.length+1; //чтобы клиент не срабатывал лишний раз 
-       callback(tags);      
-     } 
-   }  
- } 
-   
- var furnace4data = furnaceConst.furnace4const.map( function(t){ return {"tag": t.tag, "value":null, "name": t.name, "units": t.units, "k": t.k}} );  
-   
- setInterval(() => { 
-   getOmron("192.168.0.69", furnaceConst.furnace4const, function(tags){ 
-     let dt = new Date();      
-     console.log (dt.toLocaleString([], {hour12: false}) +"> "+ (tags.filter(t=> t.value).length)+'/'+tags.length); 
-     tags.forEach( function(t,i){ if (t.value) furnace4data[i].value = (t.value*t.k);});     
-   }) 
- }, 30000); 
-   
- function humanize(x){ 
-   return (x ? x.toFixed(3).replace(/\.?0*$/,'') : null); 
- } 
-   
- let serverJSON = new http.Server(); 
- serverJSON.listen(6501, (err) => { 
-   if (err) { return console.log('server JSON error!', err);  } 
- }); 
- serverJSON.on('request', function(req, res){  
-   let t = {"data" : furnace4data.map( (t)=>{return {'tag': t.tag, 'value': humanize(t.value)}})}; 
-   res.end(  JSON.stringify( t ) ); 
- }); 
				Ly/QstC30Y/QuyDQvtGC0YHRjtC00LAgaHR0cHM6Ly9nLi4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi5iLmNvbS9wYXRyaWNrLS0vbm9kZS1vbXJvbi1maW5zCmNvbnN0IGZpbnMgPSByZXF1aXJlKCdvbXJvbi1maW5zJyk7IApjb25zdCBmdXJuYWNlQ29uc3QgPSByZXF1aXJlKCcuL2NoZWNrT21yb25Db25zdC5qcycpOwoKY29uc3QgaHR0cCA9IHJlcXVpcmUoJ2h0dHAnKTsKY29uc3QgcG9ydCA9IDY1MDA7Cgpjb25zdCBiY2QybnVtYmVyID0gZnVuY3Rpb24oYmNkKSB7CiAgbGV0IGQwID0gKGJjZCAmIDB4Rik7CiAgbGV0IGQxID0gKGJjZCAmIDB4RjApID4+IDQ7CiAgbGV0IGQyID0gKGJjZCAmIDB4RjAwKSA+PiA4OwogIGxldCBkMyA9IChiY2QgJiAweEYwMDApID4+IDEyOwogIHJldHVybiAoZDMqMTAwMCArIGQyKjEwMCArIGQxKjEwICsgZDApOwp9Cgpjb25zdCBnZXRPbXJvbiA9IGZ1bmN0aW9uKGFkciwgdGFnczAsIGNhbGxiYWNrKXsKICAvL9C/0L7QtNCz0L7RgtC+0LLQutCwINCy0YvRhdC+0LTQvdC+0LPQviDQvNCw0YHRgdC40LLQsCAKICBsZXQgdGFncyA9IHRhZ3MwLm1hcCh0ID0+IHtyZXR1cm4geyAidGFnTnVtIjogIE51bWJlcihTdHJpbmcodC50YWcpLnNsaWNlKDIpKSwgCiAgICAgICAgICAidGFnIjogdC50YWcsICJ2YWx1ZSI6bnVsbCwgImxhc3RUaW1lIjpudWxsLCAibmFtZSI6IHQubmFtZSwgInVuaXRzIjogdC51bml0cywgImsiOiB0Lmt9fSk7ICAKCiAgLy/QvtCx0YrQtdC00LjQvdC10L3QuNC1INC/0L7QtNGA0Y/QtCDQuNC00YPRidC40YUg0Y/Rh9C10LXQugogIGxldCB0YWdzUyA9IFtdOyAvL9GB0L7QutGA0LDRidC10L3QvdGL0Lkg0LzQsNGB0YHQuNCyINCx0LXQtyDQv9C+0LTRgNGP0LQt0LjQtNGD0YnQuNGFINC30L3QsNGH0LXQvdC40LkKICBmb3IgKGxldCBwb3M9dGFncy5sZW5ndGgtMiwgY250PTE7IHBvcz49LTE7IHBvcy0tLCBjbnQrKykgLy/RgSDQutC+0L3RhtCwINCyINC90LDRh9Cw0LvQvgogICAgaWYgKHBvczwwICAgfHwgICB0YWdzW3Bvc10udGFnTnVtICE9IHRhZ3NbcG9zKzFdLnRhZ051bS0xKSAvL3Bvcz09LTEg0YfRgtC+0LHRiyDRgdGA0LDQsdC+0YLQsNC70L4g0LTQu9GPIFswXS3RjdC70LXQvNC10L3RgtCwCiAgICAgIHsgdGFnc1MucHVzaCh7InRhZ051bSI6IHRhZ3NbcG9zKzFdLnRhZ051bSwgImNudCI6IGNudCwgImluZGV4IjogcG9zKzF9KTsgY250PTA7fQoKICBsZXQgcG9zID0gMDsKICByZXFPbXJvbigpOyAKICBmdW5jdGlvbiByZXFPbXJvbigpewogICAgbGV0IGNsaWVudCA9IGZpbnMuRmluc0NsaWVudCg5NjAwLCBhZHIpOwogICAgY2xpZW50Lm9uKCdlcnJvcicsZnVuY3Rpb24oZXJyb3IpIHtjb25zb2xlLmxvZygnRXJyb3I6ICcsIGVycm9yKTsgfSk7CiAgICBjbGllbnQub24oJ3JlcGx5JyxmdW5jdGlvbihtc2cpIHsKICAgICAgaWYgKG1zZy52YWx1ZXMgJiYgbXNnLnZhbHVlcy5sZW5ndGgpIC8v0LjQvdC+0LPQtNCwINGB0YfQuNGC0YvQstCw0LXRgtGB0Y8gItC90LjRh9C10LPQviIod2ktZmkg0L/Qu9C+0YXQvtC5KQogICAgICAgIG1zZy52YWx1ZXMuZm9yRWFjaCggKHQsIGkpID0+IHsgdGFnc1t0YWdzU1twb3MtMV0uaW5kZXggKyBpXS52YWx1ZT1iY2QybnVtYmVyKHQpIH0pOwogICAgICBjbGllbnQuY2xvc2UoKTsKICAgICAgaWYgKHBvczw9dGFnc1MubGVuZ3RoKSByZXFPbXJvbigpOwogICAgfSk7ICAKICAgIGNsaWVudC5vbigndGltZW91dCcsIGZ1bmN0aW9uKCkgeyBjbGllbnQuY2xvc2UoKTsgaWYgKHBvczw9dGFnc1MubGVuZ3RoKSByZXFPbXJvbigpOyAgfSkKCiAgICBpZiAocG9zPHRhZ3NTLmxlbmd0aCkgeyAvL9C/0L7QutCwINC90LUg0LfQsNC60L7QvdGH0LjQu9GB0Y8g0YHQvtC60YDQsNGJ0LXQvdC90YvQuSDQvNCw0YHRgdC40LIKICAgICAgY2xpZW50LnJlYWQoJ0QnICtTdHJpbmcodGFnc1NbcG9zXS50YWdOdW0pLCB0YWdzU1twb3NdLmNudCk7IC8v0LfQsNC/0YDQvtGBICAgICAKICAgICAgcG9zKys7CiAgICB9IGVsc2UgewogICAgICBwb3MgPSB0YWdzUy5sZW5ndGgrMTsgLy/Rh9GC0L7QsdGLINC60LvQuNC10L3RgiDQvdC1INGB0YDQsNCx0LDRgtGL0LLQsNC7INC70LjRiNC90LjQuSDRgNCw0LcKICAgICAgY2FsbGJhY2sodGFncyk7ICAgICAKICAgIH0KICB9IAp9Cgp2YXIgZnVybmFjZTRkYXRhID0gZnVybmFjZUNvbnN0LmZ1cm5hY2U0Y29uc3QubWFwKCBmdW5jdGlvbih0KXsgcmV0dXJuIHsidGFnIjogdC50YWcsICJ2YWx1ZSI6bnVsbCwgIm5hbWUiOiB0Lm5hbWUsICJ1bml0cyI6IHQudW5pdHMsICJrIjogdC5rfX0gKTsgCgpzZXRJbnRlcnZhbCgoKSA9PiB7CiAgZ2V0T21yb24oIjE5Mi4xNjguMC42OSIsIGZ1cm5hY2VDb25zdC5mdXJuYWNlNGNvbnN0LCBmdW5jdGlvbih0YWdzKXsKICAgIGxldCBkdCA9IG5ldyBEYXRlKCk7ICAgICAKICAgIGNvbnNvbGUubG9nIChkdC50b0xvY2FsZVN0cmluZyhbXSwge2hvdXIxMjogZmFsc2V9KSArIj4gIisgKHRhZ3MuZmlsdGVyKHQ9PiB0LnZhbHVlKS5sZW5ndGgpKycvJyt0YWdzLmxlbmd0aCk7CiAgICB0YWdzLmZvckVhY2goIGZ1bmN0aW9uKHQsaSl7IGlmICh0LnZhbHVlKSBmdXJuYWNlNGRhdGFbaV0udmFsdWUgPSAodC52YWx1ZSp0LmspO30pOyAgICAKICB9KQp9LCAzMDAwMCk7CgpmdW5jdGlvbiBodW1hbml6ZSh4KXsKICByZXR1cm4gKHggPyB4LnRvRml4ZWQoMykucmVwbGFjZSgvXC4/MCokLywnJykgOiBudWxsKTsKfQoKbGV0IHNlcnZlckpTT04gPSBuZXcgaHR0cC5TZXJ2ZXIoKTsKc2VydmVySlNPTi5saXN0ZW4oNjUwMSwgKGVycikgPT4gewogIGlmIChlcnIpIHsgcmV0dXJuIGNvbnNvbGUubG9nKCdzZXJ2ZXIgSlNPTiBlcnJvciEnLCBlcnIpOyAgfQp9KTsKc2VydmVySlNPTi5vbigncmVxdWVzdCcsIGZ1bmN0aW9uKHJlcSwgcmVzKXsgCiAgbGV0IHQgPSB7ImRhdGEiIDogZnVybmFjZTRkYXRhLm1hcCggKHQpPT57cmV0dXJuIHsndGFnJzogdC50YWcsICd2YWx1ZSc6IGh1bWFuaXplKHQudmFsdWUpfX0pfTsKICByZXMuZW5kKCAgSlNPTi5zdHJpbmdpZnkoIHQgKSApOwp9KTs=
				
				
				
				
				
			 
			
				
			
			
				
	
		
		
	
	
		
	 
	
		
	
	
        js: "prog.js", line 18: syntax error
js:   let tags = tags0.map(t => {return { "tagNum":  Number(String(t.tag).slice(2)), 
js: ...........................^
js: "prog.js", line 19: syntax error
js:           "tag": t.tag, "value":null, "lastTime":null, "name": t.name, "units": t.units, "k": t.k}});  
js: ................^
js: "prog.js", line 34: syntax error
js:         msg.values.forEach( (t, i) => { tags[tagsS[pos-1].index + i].value=bcd2number(t) });
js: .....................................^
js: "prog.js", line 52: syntax error
js: setInterval(() => {
js: .............^
js: "prog.js", line 55: syntax error
js:     console.log (dt.toLocaleString([], {hour12: false}) +"> "+ (tags.filter(t=> t.value).length)+'/'+tags.length);
js: ...............................................................................^
js: "prog.js", line 58: syntax error
js: }, 30000);
js: ^
js: "prog.js", line 65: syntax error
js: serverJSON.listen(6501, (err) => {
js: ................................^
js: "prog.js", line 66: missing ; before statement
js:   if (err) { return console.log('server JSON error!', err);  }
js: ...........^
js: "prog.js", line 66: syntax error
js:   if (err) { return console.log('server JSON error!', err);  }
js: .............................................................^
js: "prog.js", line 67: syntax error
js: });
js: .^
js: "prog.js", line 69: syntax error
js:   let t = {"data" : furnace4data.map( (t)=>{return {'tag': t.tag, 'value': humanize(t.value)}})};
js: ...........................................^
js: "prog.js", line 1: Compilation produced 11 syntax errors.