// Return an array of all alarms exports.getAlarms = function() { return require("Storage").readJSON("sched.json",1)||[]; }; // Write a list of alarms back to storage exports.setAlarms = function(alarms) { return require("Storage").writeJSON("sched.json",alarms); }; // Return an alarm object based on ID exports.getAlarm = function(id) { return exports.getAlarms().find(a=>a.id==id); }; // Given a list of alarms from getAlarms, return a list of active alarms for the given time (or current time if time not specified) exports.getActiveAlarms = function(alarms, time) { if (!time) time = new Date(); var currentTime = (time.getHours()*3600000)+(time.getMinutes()*60000)+(time.getSeconds()*1000) +10000;// get current time - 10s in future to ensure we alarm if we've started the app a tad early return alarms.filter(a=>a.on&&(a.ta.t-b.t); } // Set an alarm object based on ID. Leave 'alarm' undefined to remove it exports.setAlarm = function(id, alarm) { var alarms = exports.getAlarms().filter(a=>a.id!=id); if (alarm !== undefined) { alarm.id = id; if (alarm.dow===undefined) alarm.dow = 0b1111111; if (alarm.on!==false) alarm.on=true; if (alarm.timer) { // if it's a timer, set the start time as a time from *now* var time = new Date(); var currentTime = (time.getHours()*3600000)+(time.getMinutes()*60000)+(time.getSeconds()*1000); alarm.t = currentTime + alarm.timer; } alarms.push(alarm); } exports.setAlarms(alarms); }; /// Get time until the given alarm (object). Return undefined if alarm not enabled, or if 86400000 or more, alarm could be *more* than a day in the future exports.getTimeToAlarm = function(alarm, time) { if (!alarm) return undefined; if (!time) time = new Date(); var currentTime = (time.getHours()*3600000)+(time.getMinutes()*60000)+(time.getSeconds()*1000); var active = alarm.on && (alarm.dow>>((time.getDay()+(alarm.t { hrs, mins } exports.decodeTime = function(t) { t = 0 | t; // sanitise let hrs = 0 | (t / 3600000); return { hrs: hrs, mins: Math.round((t - hrs * 3600000) / 60000) }; } // time in { hrs, mins } -> ms exports.encodeTime = function(o) { return o.hrs * 3600000 + o.mins * 60000; } exports.formatTime = function(t) { let o = exports.decodeTime(t); return o.hrs + ":" + ("0" + o.mins).substr(-2); }