[sleeplogalarm] Add triger, widget code
parent
ffa26233d8
commit
716b2e454a
|
|
@ -0,0 +1,75 @@
|
|||
exports = function(now, tNow) {
|
||||
// define settings
|
||||
var settings = Object.assign({
|
||||
from: 4, // 0400
|
||||
to: 8, // 0800
|
||||
earlier: 6E4 * 30,
|
||||
msgAsPrefix: true,
|
||||
disableOnAlarm: false, // !!! not available if alarm is at the next day
|
||||
msg: "...\n",
|
||||
vibrate: "..",
|
||||
as: true
|
||||
}, require("Storage").readJSON("sleeplogalarm.settings.json", true) || {});
|
||||
|
||||
// calculate then date
|
||||
var then = new Date(now + settings.earlier);
|
||||
|
||||
// load library
|
||||
var sched = require("sched");
|
||||
|
||||
// define function to return first active alarm in range to come
|
||||
function firstActiveAlarm(allAlarms) {
|
||||
return (sched.getActiveAlarms(allAlarms.filter(
|
||||
// filter for active alarms, ...
|
||||
a => a.on && !a.timer &&
|
||||
// after now+10s and in alarm range
|
||||
a.t > tNow && a.t >= settings.from * 36E5 && a.t <= settings.to * 36E5
|
||||
), then) || []).sort((a, b) => a.t > b.t)[0];
|
||||
}
|
||||
|
||||
// read all alarms
|
||||
var allAlarms = sched.getAlarms();
|
||||
|
||||
// find first active alarm
|
||||
var alarm = firstActiveAlarm(allAlarms);
|
||||
|
||||
// return if no alarm is found
|
||||
if (!alarm) return;
|
||||
|
||||
// disable early triggered alarm if set and now and then on the same day
|
||||
if (settings.disableOnAlarm && now.getDate() === then.getDate()) {
|
||||
// add indexes to find alarm to temporary disable
|
||||
allAlarms = allAlarms.map((a, idx) => {
|
||||
a.idx = idx;
|
||||
return a;
|
||||
});
|
||||
// get index of first active alarm
|
||||
var idx = firstActiveAlarm(allAlarms).idx;
|
||||
// set this alarms last to then
|
||||
allAlarms[idx].last = then.getDate();
|
||||
// remove added indexes
|
||||
allAlarms = allAlarms.map(a => {
|
||||
delete a.idx;
|
||||
return a;
|
||||
});
|
||||
}
|
||||
|
||||
// add new alarm for now with data from found alarm
|
||||
allAlarms.push({
|
||||
id: "sleeplog",
|
||||
appid: "sleeplog",
|
||||
on: true,
|
||||
t: (((now.getHours() * 60 + now.getMinutes()) * 60 + now.getSeconds()) * 1000),
|
||||
dow: 127,
|
||||
msg: settings.msg + (settings.msgAsPrefix ? alarm.msg || "" : ""),
|
||||
vibrate: settings.vibrate || alarm.vibrate,
|
||||
as: settings.as,
|
||||
del: true
|
||||
});
|
||||
|
||||
// write changes
|
||||
sched.setAlarms(allAlarms);
|
||||
|
||||
// trigger sched.js
|
||||
load("sched.js");
|
||||
};
|
||||
|
|
@ -1,4 +1,55 @@
|
|||
// sleeplog.status values:
|
||||
// undefined = service stopped, 0 = unknown, 1 = not worn, 2 = awake, 3 = light sleep, 4 = deep sleep
|
||||
// sleeplog.consecutive values:
|
||||
// undefined = service stopped, 0 = unknown, 1 = no consecutive sleep, 2 = consecutive sleep
|
||||
// check if sleeplog is available and any alarm is active
|
||||
if (typeof (global.sleeplog || {}).onChange === "object" &&
|
||||
(require("Storage").readJSON("sched.json", 1) || []).some(a => a.on && !a.timer)) {
|
||||
|
||||
// read settings to calculate alarm range
|
||||
var settings = Object.assign({
|
||||
enabled: true,
|
||||
hide: false,
|
||||
drawRange: true,
|
||||
from: 4, // 0400
|
||||
to: 8, // 0800
|
||||
earlier: 6E4 * 30
|
||||
}, require("Storage").readJSON("sleeplogalarm.settings.json", true) || {});
|
||||
|
||||
// abort if not enabled in settings
|
||||
if (!settings.enabled) return;
|
||||
|
||||
// setup widget depending on settings
|
||||
WIDGETS.sleeplogalarm = {
|
||||
area: "tl",
|
||||
width: 0,
|
||||
from: settings.from,
|
||||
to: settings.to,
|
||||
earlier: settings.earlier,
|
||||
draw: function() {
|
||||
if (this.width) g.reset().setColor(1, 1, 0).drawImage(atob(""), this.x, this.y + this.width - 8);
|
||||
if (this.width > 8) {
|
||||
g.setFont().setFontAllign();
|
||||
g.drwaString(this.from, this.x + 6, this.y);
|
||||
g.drwaString(this.to, this.x + 18, this.y);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// set widget width and draw
|
||||
WIDGETS.sleeplogalarm.width = settings.hide ? 0 : settings.drawRange ? 24 : 8;
|
||||
WIDGETS.sleeplogalarm.draw();
|
||||
|
||||
// add sleeplogalarm function to onChange
|
||||
sleeplog.onChange.push(function(data) {
|
||||
// abort if not changed from deep sleep to light sleep or awake
|
||||
if (data.prevStatus !== 4 || !(data.status === 3 || data.status === 2)) return;
|
||||
|
||||
// get now and calculate time of now
|
||||
var now = new Date();
|
||||
var tNow = (now.getHours() * 3600000) + (now.getMinutes() * 60000) + (now.getSeconds() * 1000);
|
||||
|
||||
// abort if now is outside the possible alarm range
|
||||
if (tNow + WIDGETS.sleeplogalarm.earlier < WIDGETS.sleeplogalarm.from * 36E5 ||
|
||||
tNow + WIDGETS.sleeplogalarm.earlier >= WIDGETS.sleeplogalarm.to * 36E5) return;
|
||||
|
||||
// execute trigger function
|
||||
require("sleeplogalarm.trigger.js")(now, tNow);
|
||||
});
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue