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; } };