Add option for ISO 8601 date

master
Jim Madge 2025-02-05 14:24:24 +00:00
parent f0ee2be3db
commit e8642e7f41
No known key found for this signature in database
GPG Key ID: 5B629C6D46746CBA
4 changed files with 76 additions and 57 deletions

View File

@ -1,7 +1,8 @@
# Terminal clock
A clock displayed as a terminal cli.
It can display :
It can display:
- time
- date
- altitude
@ -9,7 +10,6 @@ It can display :
- motion
- 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
If "On" the sensors will be turned on every "Power on interval" minutes for 45 seconds

View File

@ -11,7 +11,7 @@
let font6x8At2Size = 18;
let font6x8FirstTextSize = 4;
let font6x8DefaultTextSize = 2;
if (process.env.HWVERSION == 1){
if (process.env.HWVERSION == 1) {
paddingY = 3;
font6x8At4Size = 48;
font6x8At2Size = 27;
@ -36,14 +36,14 @@
if (this.powerSave===undefined) this.powerSave = true;
["L2", "L3", "L4", "L5", "L6", "L7", "L8", "L9"].forEach(k => {
if (this[k]===undefined){
if(k == "L2") this[k] = "Date";
else if(k == "L3") {
if (this[k]===undefined) {
if (k == "L2") this[k] = "Date";
else if (k == "L3") {
this[k] = "HR";
this.showHRM = true;
}else if(k == "L4") this[k] = "Motion";
else if(k == "L5") this[k] = "Steps";
else if(k == "L6") this[k] = ">";
} else if (k == "L4") this[k] = "Motion";
else if (k == "L5") this[k] = "Steps";
else if (k == "L6") this[k] = ">";
else this[k] = "Empty";
}
else if (this[k]==="HR") this.showHRM = true;
@ -51,9 +51,9 @@
});
// set the services (HRM, pressure sensor, etc....)
if(!this.powerSave){
if (!this.powerSave) {
turnOnServices();
} else{
} else {
this.turnOnInterval = setInterval(turnOnServices, this.PowerOnInterval*60000); // every PowerOnInterval min
}
// start the clock unlocked
@ -68,7 +68,7 @@
curPos++;
["L2", "L3", "L4", "L5", "L6", "L7", "L8", "L9"].forEach(line => {
if (this[line]==='Date') drawDate(date, curPos);
if (this[line]==='Date') drawDate(date, this.isoDate, curPos);
else if (this[line]==='HR') drawHRM(curPos);
else if (this[line]==='Motion') drawMotion(curPos);
else if (this[line]==='Alt') drawAltitude(curPos);
@ -79,11 +79,11 @@
},
remove: function() {
if (this.turnOnInterval){
if (this.turnOnInterval) {
clearInterval(this.turnOnInterval);
delete this.turnOnInterval;
}
if (this.turnOffServiceTimeout){
if (this.turnOffServiceTimeout) {
clearTimeout(this.turnOffServiceTimeout)
delete this.turnOffServiceTimeout
}
@ -100,11 +100,12 @@
Draw related of specific lines
-------------------------------- */
let drawLine = function(line, pos){
if(pos == 1)
let drawLine = function(line, pos) {
if (pos == 1) {
g.setFont("6x8", font6x8FirstTextSize);
else
} else {
g.setFont("6x8", font6x8DefaultTextSize);
}
let yPos = Bangle.appRect.y +
paddingY * (pos - 1) +
@ -113,47 +114,57 @@
g.drawString(line, 5, yPos, true);
};
let drawTime = function(now, pos){
let drawTime = function(now, pos) {
let h = now.getHours();
let m = now.getMinutes();
let time = ">" + (""+h).substr(-2) + ":" + ("0"+m).substr(-2);
drawLine(time, pos);
};
let drawDate = function(now, pos){
let drawDate = function(now, isoDate, pos) {
let date;
if (clock.isoDate) {
let year = now.getFullYear();
let month = now.getMonth() + 1; // Months are 0-11
let day = now.getDate();
date = ">" + year + "-" + month + "-" + day;
} else {
let dow = locale.dow(now, 1);
let date = locale.date(now, 1).substr(0,6) + locale.date(now, 1).substr(-2);
let locale_date = ">" + dow + " " + date;
drawLine(locale_date, pos);
date = locale.date(now, 1).substr(0,6) + locale.date(now, 1).substr(-2);
date = ">" + dow + " " + date;
}
drawLine(date, pos);
};
let drawInput = function(pos){
let drawInput = function(pos) {
drawLine(">", pos);
};
let drawStepCount = function(pos){
let drawStepCount = function(pos) {
let health = Bangle.getHealthStatus("day");
let steps_formated = ">Steps: " + health.steps;
drawLine(steps_formated, pos);
};
let drawHRM = function(pos){
if(heartRate != 0)
let drawHRM = function(pos) {
if (heartRate != 0) {
drawLine(">HR: " + parseInt(heartRate), pos);
else
} else {
drawLine(
">HR: " + parseInt(Math.round(Bangle.getHealthStatus().bpm||Bangle.getHealthStatus("last").bpm)),
pos);
}
};
let drawAltitude = function(pos){
if(altitude > 0)
let drawAltitude = function(pos) {
if (altitude > 0) {
drawLine(">Alt: " + altitude.toFixed(1) + "m", pos);
else
} else {
drawLine(">Alt: unknown", pos);
}
};
let drawMotion = function(pos){
let drawMotion = function(pos) {
let health = Bangle.getHealthStatus('last');
let steps_formated = ">Motion: " + parseInt(health.movement);
drawLine(steps_formated, pos);
@ -163,26 +174,26 @@
Services functions (HRM, pressure, etc...)
-------------------------------------------------- */
let turnOnServices = function(){
if(clock.showHRM){
let turnOnServices = function() {
if (clock.showHRM) {
Bangle.setHRMPower(true, "terminalclock");
}
if(clock.showAltitude){
if (clock.showAltitude) {
Bangle.setBarometerPower(true, "terminalclock");
}
if(clock.powerSave){
if(clock.turnOffServiceTimeout) clearTimeout(clock.turnOffServiceTimeout);
if (clock.powerSave) {
if (clock.turnOffServiceTimeout) clearTimeout(clock.turnOffServiceTimeout);
clock.turnOffServiceTimeout = setTimeout(function () {
turnOffServices();
}, 45000);
}
};
let turnOffServices = function(){
if(clock.showHRM){
let turnOffServices = function() {
if (clock.showHRM) {
Bangle.setHRMPower(false, "terminalclock");
}
if(clock.showAltitude){
if (clock.showAltitude) {
Bangle.setBarometerPower(false, "terminalclock");
}
};
@ -195,7 +206,7 @@
Bangle.on("lock", clock.onLock);
clock.onHRM = hrmInfo => {
if(hrmInfo.confidence >= clock.HRMinConfidence)
if (hrmInfo.confidence >= clock.HRMinConfidence)
heartRate = hrmInfo.bpm;
};
Bangle.on('HRM', clock.onHRM);
@ -220,15 +231,15 @@
Clock related functions but not in the ClockFace module
---------------------------------------------------- */
let unlock = function(){
if(clock.powerSave){
let unlock = function() {
if (clock.powerSave) {
turnOnServices();
}
clock.precision = clock.unlock_precision;
clock.tick();
};
let lock = function(){
let lock = function() {
clock.precision = clock.lock_precision;
clock.tick();
};

View File

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

View File

@ -3,6 +3,7 @@
// Load settings
var settings = Object.assign({
// TerminalClock specific
isoDate: false,
HRMinConfidence: 50,
PowerOnInterval: 15,
L2: 'Date',
@ -72,6 +73,13 @@
writeSettings();
}
},
"ISO date": {
value: !!settings.isoDate,
onchange: v => {
settings.isoDate = v;
writeSettings();
}
},
};
const save = (key, v) => {
settings[key] = v;