//взял отсюда 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.