1
0
Fork 0

Merge branch 'espruino:master' into master

master
Peer David 2022-05-15 21:46:23 +02:00 committed by GitHub
commit ba34b88270
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 180 additions and 115 deletions

View File

@ -2,3 +2,4 @@
0.02: Fix the settings bug and some tweaking 0.02: Fix the settings bug and some tweaking
0.03: Do not alarm while charging 0.03: Do not alarm while charging
0.04: Obey system quiet mode 0.04: Obey system quiet mode
0.05: Battery optimisation, add the pause option, bug fixes

View File

@ -7,8 +7,8 @@ Different settings can be personalized:
- Enable : Enable/Disable the app - Enable : Enable/Disable the app
- Start hour: Hour to start the reminder - Start hour: Hour to start the reminder
- End hour: Hour to end the reminder - End hour: Hour to end the reminder
- Max inactivity: Maximum inactivity time to allow before the alert. From 15 to 60 min - Max inactivity: Maximum inactivity time to allow before the alert. From 15 to 120 min
- Dismiss delay: Delay added before the next alert if the alert is dismissed. From 5 to 60 min - Dismiss delay: Delay added before the next alert if the alert is dismissed. From 5 to 60 min
Notice: If Dissmiss delay > Max inactivity then it will be equal Max inactivity - Pause delay: Same as Dismiss delay but longer (usefull for meetings and such). From 30 to 240 min
- Min steps: Minimal amount of steps to count as an activity - Min steps: Minimal amount of steps to count as an activity

View File

@ -1,40 +1,42 @@
function drawAlert() { function drawAlert() {
E.showPrompt("Inactivity detected", { E.showPrompt("Inactivity detected", {
title: "Activity reminder", title: "Activity reminder",
buttons : {"Ok": true,"Dismiss": false} buttons: { "Ok": 1, "Dismiss": 2, "Pause": 3 }
}).then(function (v) { }).then(function (v) {
if(v == true){ if (v == 1) {
stepsArray = stepsArray.slice(0, activityreminder.maxInnactivityMin - 3); activityreminder_data.okDate = new Date();
require("activityreminder").saveStepsArray(stepsArray);
} }
if(v == false){ if (v == 2) {
stepsArray = stepsArray.slice(0, activityreminder.maxInnactivityMin - activityreminder.dismissDelayMin); activityreminder_data.dismissDate = new Date();
require("activityreminder").saveStepsArray(stepsArray);
} }
if (v == 3) {
activityreminder_data.pauseDate = new Date();
}
activityreminder.saveData(activityreminder_data);
load(); load();
}); });
// Obey system quiet mode: // Obey system quiet mode:
if (!(require('Storage').readJSON('setting.json',1)||{}).quiet) { if (!(storage.readJSON('setting.json', 1) || {}).quiet) {
Bangle.buzz(400); Bangle.buzz(400);
} }
setTimeout(load, 20000); setTimeout(load, 20000);
} }
function run() { function run() {
if(stepsArray.length == activityreminder.maxInnactivityMin){ if (activityreminder.mustAlert(activityreminder_data, activityreminder_settings)) {
if (stepsArray[0] - stepsArray[stepsArray.length-1] < activityreminder.minSteps){
drawAlert(); drawAlert();
}
} else { } else {
eval(require("Storage").read("activityreminder.settings.js"))(()=>load()); eval(storage.read("activityreminder.settings.js"))(() => load());
} }
} }
const activityreminder = require("activityreminder");
const storage = require("Storage");
g.clear(); g.clear();
Bangle.loadWidgets(); Bangle.loadWidgets();
Bangle.drawWidgets(); Bangle.drawWidgets();
activityreminder = require("activityreminder").loadSettings(); const activityreminder_settings = activityreminder.loadSettings();
stepsArray = require("activityreminder").loadStepsArray(); const activityreminder_data = activityreminder.loadData();
run(); run();

View File

@ -1,30 +1,45 @@
function run() { function run() {
if (Bangle.isCharging()) return; if (isNotWorn()) return;
var now = new Date(); let now = new Date();
var h = now.getHours(); let h = now.getHours();
if(h >= activityreminder.startHour && h < activityreminder.endHour){ let health = Bangle.getHealthStatus("day");
var health = Bangle.getHealthStatus("day");
stepsArray.unshift(health.steps); if (h >= activityreminder_settings.startHour && h < activityreminder_settings.endHour) {
stepsArray = stepsArray.slice(0, activityreminder.maxInnactivityMin); if (health.steps - activityreminder_data.stepsOnDate >= activityreminder_settings.minSteps // more steps made than needed
require("activityreminder").saveStepsArray(stepsArray); || health.steps < activityreminder_data.stepsOnDate) { // new day or reboot of the watch
activityreminder_data.stepsOnDate = health.steps;
activityreminder_data.stepsDate = now;
activityreminder.saveData(activityreminder_data);
/* todo in a futur release
add settimer to trigger like 10 secs after the stepsDate + minSteps
cancel all other timers of this app
*/
} }
else{
if(stepsArray != []){ if(activityreminder.mustAlert(activityreminder_data, activityreminder_settings)){
stepsArray = [];
require("activityreminder").saveStepsArray(stepsArray);
}
}
if(stepsArray.length >= activityreminder.maxInnactivityMin){
if (stepsArray[0] - stepsArray[stepsArray.length-1] < activityreminder.minSteps){
load('activityreminder.app.js'); load('activityreminder.app.js');
} }
} }
} }
function isNotWorn() {
// todo in a futur release check temperature and mouvement in a futur release
return Bangle.isCharging();
}
activityreminder = require("activityreminder").loadSettings(); const activityreminder = require("activityreminder");
if(activityreminder.enabled) { const activityreminder_settings = activityreminder.loadSettings();
stepsArray = require("activityreminder").loadStepsArray(); if (activityreminder_settings.enabled) {
const activityreminder_data = activityreminder.loadData();
if(activityreminder_data.firstLoad){
activityreminder_data.firstLoad =false;
activityreminder.saveData(activityreminder_data);
}
setInterval(run, 60000); setInterval(run, 60000);
/* todo in a futur release
increase setInterval time to something that is still sensible (5 mins ?)
add settimer to trigger like 10 secs after the stepsDate + minSteps
cancel all other timers of this app
*/
} }

View File

@ -1,3 +1,5 @@
const storage = require("Storage");
exports.loadSettings = function () { exports.loadSettings = function () {
return Object.assign({ return Object.assign({
enabled: true, enabled: true,
@ -5,18 +7,51 @@ exports.loadSettings = function() {
endHour: 20, endHour: 20,
maxInnactivityMin: 30, maxInnactivityMin: 30,
dismissDelayMin: 15, dismissDelayMin: 15,
pauseDelayMin: 120,
minSteps: 50 minSteps: 50
}, require("Storage").readJSON("activityreminder.s.json", true) || {}); }, storage.readJSON("activityreminder.s.json", true) || {});
}; };
exports.writeSettings = function (settings) { exports.writeSettings = function (settings) {
require("Storage").writeJSON("activityreminder.s.json", settings); storage.writeJSON("activityreminder.s.json", settings);
}; };
exports.saveStepsArray = function(stepsArray) { exports.saveData = function (data) {
require("Storage").writeJSON("activityreminder.sa.json", stepsArray); storage.writeJSON("activityreminder.data.json", data);
}; };
exports.loadStepsArray = function(){ exports.loadData = function () {
return require("Storage").readJSON("activityreminder.sa.json") || []; let health = Bangle.getHealthStatus("day");
const data = Object.assign({
firstLoad: true,
stepsDate: new Date(),
stepsOnDate: health.steps,
okDate: new Date(1970),
dismissDate: new Date(1970),
pauseDate: new Date(1970),
},
storage.readJSON("activityreminder.data.json") || {});
if(typeof(data.stepsDate) == "string")
data.stepsDate = new Date(data.stepsDate);
if(typeof(data.okDate) == "string")
data.okDate = new Date(data.okDate);
if(typeof(data.dismissDate) == "string")
data.dismissDate = new Date(data.dismissDate);
if(typeof(data.pauseDate) == "string")
data.pauseDate = new Date(data.pauseDate);
return data;
}; };
exports.mustAlert = function(activityreminder_data, activityreminder_settings) {
let now = new Date();
if ((now - activityreminder_data.stepsDate) / 60000 > activityreminder_settings.maxInnactivityMin) { // inactivity detected
if ((now - activityreminder_data.okDate) / 60000 > 3 && // last alert anwsered with ok was more than 3 min ago
(now - activityreminder_data.dismissDate) / 60000 > activityreminder_settings.dismissDelayMin && // last alert was more than dismissDelayMin ago
(now - activityreminder_data.pauseDate) / 60000 > activityreminder_settings.pauseDelayMin) { // last alert was more than pauseDelayMin ago
return true;
}
}
return false;
}

View File

@ -3,7 +3,7 @@
"name": "Activity Reminder", "name": "Activity Reminder",
"shortName":"Activity Reminder", "shortName":"Activity Reminder",
"description": "A reminder to take short walks for the ones with a sedentary lifestyle", "description": "A reminder to take short walks for the ones with a sedentary lifestyle",
"version":"0.04", "version":"0.05",
"icon": "app.png", "icon": "app.png",
"type": "app", "type": "app",
"tags": "tool,activity", "tags": "tool,activity",
@ -18,6 +18,6 @@
], ],
"data": [ "data": [
{"name": "activityreminder.s.json"}, {"name": "activityreminder.s.json"},
{"name": "activityreminder.sa.json"} {"name": "activityreminder.data.json"}
] ]
} }

View File

@ -1,6 +1,7 @@
(function (back) { (function (back) {
// Load settings // Load settings
var settings = require("activityreminder").loadSettings(); const activityreminder = require("activityreminder");
const settings = activityreminder.loadSettings();
// Show the menu // Show the menu
E.showMenu({ E.showMenu({
@ -11,7 +12,7 @@
format: v => v ? "Yes" : "No", format: v => v ? "Yes" : "No",
onchange: v => { onchange: v => {
settings.enabled = v; settings.enabled = v;
require("activityreminder").writeSettings(settings); activityreminder.writeSettings(settings);
} }
}, },
'Start hour': { 'Start hour': {
@ -19,7 +20,7 @@
min: 0, max: 24, min: 0, max: 24,
onchange: v => { onchange: v => {
settings.startHour = v; settings.startHour = v;
require("activityreminder").writeSettings(settings); activityreminder.writeSettings(settings);
} }
}, },
'End hour': { 'End hour': {
@ -27,7 +28,7 @@
min: 0, max: 24, min: 0, max: 24,
onchange: v => { onchange: v => {
settings.endHour = v; settings.endHour = v;
require("activityreminder").writeSettings(settings); activityreminder.writeSettings(settings);
} }
}, },
'Max inactivity': { 'Max inactivity': {
@ -35,7 +36,7 @@
min: 15, max: 120, min: 15, max: 120,
onchange: v => { onchange: v => {
settings.maxInnactivityMin = v; settings.maxInnactivityMin = v;
require("activityreminder").writeSettings(settings); activityreminder.writeSettings(settings);
}, },
format: x => { format: x => {
return x + " min"; return x + " min";
@ -46,7 +47,18 @@
min: 5, max: 60, min: 5, max: 60,
onchange: v => { onchange: v => {
settings.dismissDelayMin = v; settings.dismissDelayMin = v;
require("activityreminder").writeSettings(settings); activityreminder.writeSettings(settings);
},
format: x => {
return x + " min";
}
},
'Pause delay': {
value: settings.pauseDelayMin,
min: 30, max: 240,
onchange: v => {
settings.pauseDelayMin = v;
activityreminder.writeSettings(settings);
}, },
format: x => { format: x => {
return x + " min"; return x + " min";
@ -57,7 +69,7 @@
min: 10, max: 500, min: 10, max: 500,
onchange: v => { onchange: v => {
settings.minSteps = v; settings.minSteps = v;
require("activityreminder").writeSettings(settings); activityreminder.writeSettings(settings);
} }
} }
}); });