sokolov-sbs-flowserver/flow/timesetter.js
2025-08-07 21:49:01 +02:00

129 lines
4.2 KiB
JavaScript

exports.id = 'timesetter';
exports.title = 'Timesetter';
exports.group = 'Worksys';
exports.color = '#656D78';
exports.input = true;
exports.output = 1;
exports.author = 'Rastislav Kovac';
exports.icon = 'code';
exports.version = '1.0.0';
exports.readme = `
This component can be installed just on controllers without direct internet access!
'project_id' variable needs to be set for every project!!
Timesetter sends requests once a day to service-prod01.worksys.io to get
actual date and time. It sets unipi's system timedate
`;
//! SET project_id
const project_id = 39;
const { exec } = require('child_process');
exports.install = function(instance) {
instance.on('data', function(flowdata) {
RESTBuilder.make(function(builder) {
if(!builder) return;
builder.method('GET');
//FLOW.OMS_edge_fw_version
builder.url(`http://192.168.252.2:8004/gettime?projects_id=${project_id}`);
builder.callback(function(err, response, output) {
if (err) {
console.log(err);
return;
}
instance.send(0, "RESTBuilder timedatectl response");
const res = output.response;
try {
const obj = JSON.parse(res);
let d = new Date(obj.date);
const now = new Date();
//offset in minutes - convertUTCDateToLocalDate
let diffInMinutes = now.getTimezoneOffset();
//d.setMinutes( d.getMinutes() + diffInMinutes );
//let converted = convertUTCDateToLocalDate(d);
console.log("---->TimezoneOffset", diffInMinutes);
if(d instanceof Date)
{
console.log("current js date:", d, d.getHours());
let year = d.getFullYear();
let month = addZeroBefore(d.getMonth() + 1);
let day = addZeroBefore(d.getDate());
//-2 hodiny!!!!
let hours = addZeroBefore( d.getHours() );
let minutes = addZeroBefore(d.getMinutes() );
let seconds = addZeroBefore(d.getSeconds());
let timestamp = `${year}${month}${day} ${hours}:${minutes}:${seconds}`;
let dstr = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
//TODO - poslat notifikaciu a nastav hw cas
//timedatectl set-timezone "Europe/Bratislava"
//hwclock --set --date="2021-08-24 15:02:00" --localtime
//https://www.tecmint.com/set-time-timezone-and-synchronize-time-using-timedatectl-command/
//timedatectl set-time "2022-04-27 09:13:00"
{
let year = d.getUTCFullYear();
let month = addZeroBefore(d.getUTCMonth() + 1);
let day = addZeroBefore(d.getUTCDate());
let hours = addZeroBefore( d.getUTCHours() );
let minutes = addZeroBefore(d.getUTCMinutes() );
let seconds = addZeroBefore(d.getUTCSeconds());
let UTCstr = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
exec(`sudo timedatectl set-time "${UTCstr}"`, (err, stdout, stderr) => {
if (err || stderr) {
console.error(err);
console.log(stderr);
console.log(UTCstr);
}
else
{
console.log(`UTC: timedatectl set-time "${UTCstr}"`);
}
});
}
}
} catch(e) {
console.log(e)
}
})
})
})
function addZeroBefore(n) {
return (n < 10 ? '0' : '') + n;
}
};