Merge pull request #1885 from Stiralbios/master

[TerminalClock] Add power related settings to control sensors
pull/1902/head^2
Gordon Williams 2022-05-26 16:04:21 +01:00 committed by GitHub
commit ac5c80ff38
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 79 additions and 15 deletions

View File

@ -3,3 +3,4 @@
0.03: Add Banglejs 1 compatibility 0.03: Add Banglejs 1 compatibility
0.04: Fix settings bug 0.04: Fix settings bug
0.05: Add altitude display (only Bangle.js 2) 0.05: Add altitude display (only Bangle.js 2)
0.06: Add power related settings to control the HR and pressure(altitude) sensor from the watchface

View File

@ -8,3 +8,8 @@ It can display :
- hrm - hrm
- motion - motion
- steps - steps
"Power saving" setting control the HR and pressure (altitude) sensors.
If "Off" they will always be on.
If "On" the sensors will be turned on every "Power on interval" minutes for 45 secondes

View File

@ -3,15 +3,14 @@ var fontColor = g.theme.dark ? "#0f0" : "#000";
var heartRate = 0; var heartRate = 0;
var altitude = -9001; var altitude = -9001;
// handling the differents versions of the Banglejs smartwatch // handling the differents versions of the Banglejs smartwatch screen sizes
if (process.env.HWVERSION == 1){ if (process.env.HWVERSION == 1){
var paddingY = 3; var paddingY = 3;
var font6x8At4Size = 48; var font6x8At4Size = 48;
var font6x8At2Size = 27; var font6x8At2Size = 27;
var font6x8FirstTextSize = 6; var font6x8FirstTextSize = 6;
var font6x8DefaultTextSize = 3; var font6x8DefaultTextSize = 3;
} } else{
else{
var paddingY = 2; var paddingY = 2;
var font6x8At4Size = 32; var font6x8At4Size = 32;
var font6x8At2Size = 18; var font6x8At2Size = 18;
@ -66,7 +65,7 @@ function drawDate(now, pos){
drawLine(locale_date, pos); drawLine(locale_date, pos);
} }
function drawInput(now, pos){ function drawInput(pos){
clearField(pos); clearField(pos);
drawLine(">", pos); drawLine(">", pos);
} }
@ -129,16 +128,52 @@ function draw(){
drawStepCount(curPos); drawStepCount(curPos);
curPos++; curPos++;
} }
drawInput(now, curPos); drawInput(curPos);
} }
function turnOnServices(){
if(settings.showHRM){
Bangle.setHRMPower(true, "terminalclock");
}
if(settings.showAltitude && process.env.HWVERSION != 1){
Bangle.setBarometerPower(true, "terminalclock");
}
if(settings.powerSaving){
setTimeout(function () {
turnOffServices();
}, 45000);
}
}
function turnOffServices(){
if(settings.showHRM){
Bangle.setHRMPower(false, "terminalclock");
}
if(settings.showAltitude && process.env.HWVERSION != 1){
Bangle.setBarometerPower(false, "terminalclock");
}
}
var unlockDrawIntervalID = -1;
Bangle.on('lock', function(on){
if(!on){ // unclock
if(settings.powerSaving){
turnOnServices();
}
unlockDrawIntervalID = setInterval(draw, 1000); // every second
}
if(on && unlockDrawIntervalID != -1){ // lock
clearInterval(unlockDrawIntervalID);
}
});
Bangle.on('HRM',function(hrmInfo) { Bangle.on('HRM',function(hrmInfo) {
if(hrmInfo.confidence >= settings.HRMinConfidence) if(hrmInfo.confidence >= settings.HRMinConfidence)
heartRate = hrmInfo.bpm; heartRate = hrmInfo.bpm;
}); });
var MEDIANLENGTH = 20; var MEDIANLENGTH = 20; // technical
var avr = [], median; var avr = [], median; // technical
Bangle.on('pressure', function(e) { Bangle.on('pressure', function(e) {
while (avr.length>MEDIANLENGTH) avr.pop(); while (avr.length>MEDIANLENGTH) avr.pop();
avr.unshift(e.altitude); avr.unshift(e.altitude);
@ -161,18 +196,20 @@ var settings = Object.assign({
showActivity: true, showActivity: true,
showStepCount: true, showStepCount: true,
showAltitude: process.env.HWVERSION != 1 ? true : false, showAltitude: process.env.HWVERSION != 1 ? true : false,
powerSaving: true,
PowerOnInterval: 15,
}, require('Storage').readJSON("terminalclock.json", true) || {}); }, require('Storage').readJSON("terminalclock.json", true) || {});
if(settings.showAltitude && process.env.HWVERSION != 1){ // turn the services before drawing anything
Bangle.setBarometerPower(true, "app"); turnOnServices();
if(settings.powerSaving){
setInterval(turnOnServices, settings.PowerOnInterval*60000); // every PowerOnInterval min
} }
// Show launcher when middle button pressed // Show launcher when middle button pressed
Bangle.setUI("clock"); Bangle.setUI("clock");
// Load widgets // Load and draw widgets
Bangle.loadWidgets(); Bangle.loadWidgets();
Bangle.drawWidgets(); Bangle.drawWidgets();
// draw immediately at first // draw immediately at first
draw(); draw();
setInterval(draw, 10000); // every 10 seconds
var secondInterval = setInterval(draw, 10000);

View File

@ -3,7 +3,7 @@
"name": "Terminal Clock", "name": "Terminal Clock",
"shortName":"Terminal Clock", "shortName":"Terminal Clock",
"description": "A terminal cli like clock displaying multiple sensor data", "description": "A terminal cli like clock displaying multiple sensor data",
"version":"0.05", "version":"0.06",
"icon": "app.png", "icon": "app.png",
"type": "clock", "type": "clock",
"tags": "clock", "tags": "clock",

View File

@ -8,6 +8,8 @@
showHRM: true, showHRM: true,
showActivity: true, showActivity: true,
showStepCount: true, showStepCount: true,
powerSaving: true,
PowerOnInterval: 15,
}, require('Storage').readJSON(FILE, true) || {}); }, require('Storage').readJSON(FILE, true) || {});
function writeSettings() { function writeSettings() {
@ -65,6 +67,25 @@
settings.showStepCount = v; settings.showStepCount = v;
writeSettings(); writeSettings();
} }
},
'Power saving': {
value: settings.powerSaving,
format: v => v?"On":"Off",
onchange: v => {
settings.powerSaving = v;
writeSettings();
}
},
'Power on interval': {
value: settings.PowerOnInterval,
min: 3, max: 60,
onchange: v => {
settings.PowerOnInterval = v;
writeSettings();
},
format: x => {
return x + " min";
}
} }
} }
if (process.env.HWVERSION == 1) { if (process.env.HWVERSION == 1) {