125 lines
4.2 KiB
JavaScript
125 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 = 29;
|
|
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;
|
|
}
|
|
|
|
};
|
|
|