2022-02-11 08:29:02 +00:00
|
|
|
(function(back) {
|
|
|
|
var filename = "sleeplog.json";
|
|
|
|
|
|
|
|
// set storage and load settings
|
|
|
|
var storage = require("Storage");
|
|
|
|
var settings = Object.assign({
|
|
|
|
breaktod: 10, // time of day when to start/end graphs
|
|
|
|
maxawake: 36E5, // 60min in ms
|
|
|
|
minconsec: 18E5, // 30min in ms
|
|
|
|
tempthresh: 27, // every temperature above ist registered as worn
|
2022-02-12 00:43:58 +00:00
|
|
|
powersaving: false, // disables ESS and uses build in movement detection
|
2022-02-13 19:54:26 +00:00
|
|
|
maxmove: 100, // movement threshold on power saving mode
|
2022-02-11 08:29:02 +00:00
|
|
|
nomothresh: 0.012, // values lower than 0.008 getting triggert by noise
|
|
|
|
sleepthresh: 577, // 577 times no movement * 1.04s window width > 10min
|
|
|
|
winwidth: 13, // 13 values, read with 12.5Hz = every 1.04s
|
|
|
|
enabled: true, // en-/disable completely
|
|
|
|
logfile: "sleeplog.log", // logfile
|
|
|
|
}, storage.readJSON(filename, true) || {});
|
|
|
|
|
|
|
|
// write change to global.sleeplog and storage
|
|
|
|
function writeSetting(key, value) {
|
|
|
|
// change key in global.sleeplog
|
|
|
|
if (typeof global.sleeplog === "object") global.sleeplog[key] = value;
|
|
|
|
// reread settings to only change key
|
|
|
|
settings = Object.assign(settings, storage.readJSON(filename, true) || {});
|
|
|
|
// change the value of key
|
|
|
|
settings[key] = value;
|
|
|
|
// write to storage
|
|
|
|
storage.writeJSON(filename, settings);
|
|
|
|
}
|
|
|
|
|
2022-02-12 00:43:58 +00:00
|
|
|
// define function to change values that need a restart of the service
|
|
|
|
function changeRestart() {
|
|
|
|
require("sleeplog").setEnabled(settings.enabled, settings.logfile, settings.powersaving);
|
|
|
|
}
|
|
|
|
|
2022-02-11 08:29:02 +00:00
|
|
|
// calculate sleepthresh factor
|
|
|
|
var stFactor = settings.winwidth / 12.5 / 60;
|
|
|
|
|
|
|
|
// show main menu
|
2022-02-12 00:43:58 +00:00
|
|
|
function showMain(selected) {
|
|
|
|
var mainMenu = {
|
2022-02-11 08:29:02 +00:00
|
|
|
"": {
|
2022-02-12 00:43:58 +00:00
|
|
|
title: "Sleep Log",
|
|
|
|
selected: selected
|
2022-02-11 08:29:02 +00:00
|
|
|
},
|
2022-02-15 18:47:15 +00:00
|
|
|
"Exit": () => load(),
|
2022-02-11 08:29:02 +00:00
|
|
|
"< Back": () => back(),
|
2022-02-15 18:47:15 +00:00
|
|
|
"Break Tod": {
|
2022-02-11 08:29:02 +00:00
|
|
|
value: settings.breaktod,
|
|
|
|
step: 1,
|
2022-02-15 18:47:15 +00:00
|
|
|
min: 0,
|
|
|
|
max: 23,
|
|
|
|
wrap: true,
|
|
|
|
onchange: v => writeSetting("breaktod", v),
|
2022-02-11 08:29:02 +00:00
|
|
|
},
|
2022-02-15 18:47:15 +00:00
|
|
|
"Max Awake": {
|
2022-02-11 08:29:02 +00:00
|
|
|
value: settings.maxawake / 6E4,
|
|
|
|
step: 5,
|
2022-02-15 18:47:15 +00:00
|
|
|
min: 15,
|
|
|
|
max: 120,
|
|
|
|
wrap: true,
|
2022-02-11 08:29:02 +00:00
|
|
|
format: v => v + "min",
|
2022-02-15 18:47:15 +00:00
|
|
|
onchange: v => writeSetting("maxawake", v * 6E4),
|
2022-02-11 08:29:02 +00:00
|
|
|
},
|
2022-02-15 18:47:15 +00:00
|
|
|
"Min Consec": {
|
2022-02-11 08:29:02 +00:00
|
|
|
value: settings.minconsec / 6E4,
|
|
|
|
step: 5,
|
2022-02-15 18:47:15 +00:00
|
|
|
min: 15,
|
|
|
|
max: 120,
|
|
|
|
wrap: true,
|
2022-02-11 08:29:02 +00:00
|
|
|
format: v => v + "min",
|
2022-02-15 18:47:15 +00:00
|
|
|
onchange: v => writeSetting("minconsec", v * 6E4),
|
2022-02-11 08:29:02 +00:00
|
|
|
},
|
2022-02-15 18:47:15 +00:00
|
|
|
"Temp Thresh": {
|
2022-02-11 08:29:02 +00:00
|
|
|
value: settings.tempthresh,
|
|
|
|
step: 0.5,
|
2022-02-15 18:47:15 +00:00
|
|
|
min: 20,
|
|
|
|
max: 40,
|
|
|
|
wrap: true,
|
2022-02-11 08:29:02 +00:00
|
|
|
format: v => v + "°C",
|
2022-02-15 18:47:15 +00:00
|
|
|
onchange: v => writeSetting("tempthresh", v),
|
2022-02-11 08:29:02 +00:00
|
|
|
},
|
2022-02-15 18:47:15 +00:00
|
|
|
"Power Saving": {
|
2022-02-12 00:43:58 +00:00
|
|
|
value: settings.powersaving,
|
|
|
|
format: v => v ? "on" : "off",
|
|
|
|
onchange: function(v) {
|
|
|
|
settings.powersaving = v;
|
|
|
|
changeRestart();
|
2022-02-15 18:47:15 +00:00
|
|
|
// redraw menu with changed entries subsequent to onchange
|
|
|
|
// https://github.com/espruino/Espruino/issues/2149
|
|
|
|
setTimeout(showMain, 1, 6);
|
2022-02-12 00:43:58 +00:00
|
|
|
}
|
|
|
|
},
|
2022-02-15 18:47:15 +00:00
|
|
|
"Max Move": {
|
2022-02-12 00:43:58 +00:00
|
|
|
value: settings.maxmove,
|
2022-02-13 19:54:26 +00:00
|
|
|
step: 1,
|
2022-02-15 18:47:15 +00:00
|
|
|
min: 50,
|
|
|
|
max: 200,
|
|
|
|
wrap: true,
|
|
|
|
onchange: v => writeSetting("maxmove", v),
|
2022-02-12 00:43:58 +00:00
|
|
|
},
|
2022-02-15 18:47:15 +00:00
|
|
|
"NoMo Thresh": {
|
2022-02-11 08:29:02 +00:00
|
|
|
value: settings.nomothresh,
|
|
|
|
step: 0.001,
|
2022-02-15 18:47:15 +00:00
|
|
|
min: 0.006,
|
|
|
|
max: 0.02,
|
|
|
|
wrap: true,
|
2022-02-11 08:29:02 +00:00
|
|
|
format: v => ("" + v).padEnd(5, "0"),
|
2022-02-15 18:47:15 +00:00
|
|
|
onchange: v => writeSetting("nomothresh", v),
|
2022-02-11 08:29:02 +00:00
|
|
|
},
|
2022-02-15 18:47:15 +00:00
|
|
|
"Min Duration": {
|
2022-02-11 08:29:02 +00:00
|
|
|
value: Math.floor(settings.sleepthresh * stFactor),
|
|
|
|
step: 1,
|
2022-02-15 18:47:15 +00:00
|
|
|
min: 5,
|
|
|
|
max: 15,
|
|
|
|
wrap: true,
|
2022-02-11 08:29:02 +00:00
|
|
|
format: v => v + "min",
|
2022-02-15 18:47:15 +00:00
|
|
|
onchange: v => writeSetting("sleepthresh", Math.ceil(v / stFactor)),
|
2022-02-11 08:29:02 +00:00
|
|
|
},
|
|
|
|
"Enabled": {
|
|
|
|
value: settings.enabled,
|
|
|
|
format: v => v ? "on" : "off",
|
|
|
|
onchange: function(v) {
|
2022-02-12 00:43:58 +00:00
|
|
|
settings.enabled = v;
|
|
|
|
changeRestart();
|
2022-02-11 08:29:02 +00:00
|
|
|
}
|
|
|
|
},
|
|
|
|
"Logfile ": {
|
2022-02-16 11:52:00 +00:00
|
|
|
value: settings.logfile === "sleeplog.log" ? true : (settings.logfile || "").endsWith(".log") ? "custom" : false,
|
2022-02-11 08:29:02 +00:00
|
|
|
format: v => v === true ? "default" : v ? "custom" : "off",
|
|
|
|
onchange: function(v) {
|
2022-02-12 00:43:58 +00:00
|
|
|
if (v !== "custom") {
|
2022-02-14 08:10:26 +00:00
|
|
|
settings.logfile = v ? "sleeplog.log" : false;
|
2022-02-12 00:43:58 +00:00
|
|
|
changeRestart();
|
|
|
|
}
|
2022-02-11 08:29:02 +00:00
|
|
|
}
|
2022-02-12 00:43:58 +00:00
|
|
|
}
|
|
|
|
};
|
|
|
|
// check power saving mode to delete unused entries
|
2022-02-15 18:47:15 +00:00
|
|
|
(settings.powersaving ? ["NoMo Thresh", "Min Duration"] : ["Max Move"]).forEach(property => delete mainMenu[property]);
|
2022-02-12 00:43:58 +00:00
|
|
|
var menu = E.showMenu(mainMenu);
|
2022-02-11 08:29:02 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// draw main menu
|
|
|
|
showMain();
|
|
|
|
})
|