From 8412ac52ba142862267b5d57cb99cfe18a2a758f Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Fri, 9 Feb 2024 20:12:56 +0100 Subject: [PATCH 1/4] widbaroalarm: Add log graph to settings --- apps/widbaroalarm/settings.js | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/apps/widbaroalarm/settings.js b/apps/widbaroalarm/settings.js index ee8ce82c2..5885c00aa 100644 --- a/apps/widbaroalarm/settings.js +++ b/apps/widbaroalarm/settings.js @@ -107,9 +107,42 @@ return x + " min"; } }, + 'Log graph': () => {E.showMenu(); draw();}, }; E.showMenu(menu); } + function draw() { + const history3 = require('Storage').readJSON("widbaroalarm.log.json", true) || []; // history of recent 3 hours + const data = history3.map(o => o.p); + const now = new Date()/1000; + + Bangle.setUI({ + mode: "custom", + back: () => showMainMenu(), + }); + + g.reset().setFont("6x8",1); + require("graph").drawLine(g, data, { + axes: true, + x: 4, + y: Bangle.appRect.y+8, + height: Bangle.appRect.h-20, + gridx: 1, + gridy: 1, + miny: Math.min.apply(null, data), + maxy: Math.max.apply(null, data), + title: /*LANG*/"Barometer history (mBar)", + ylabel: y => y, + xlabel: i => { + if (i % 4 === 0) { + return "-" + Math.round((now-history3[i].ts)/(60*60)); + } else { + return ""; + } + }, + }); + } + showMainMenu(); }); From bc33c0331272fb3c4c6d8e33638f0b0aec32981e Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Fri, 9 Feb 2024 20:16:14 +0100 Subject: [PATCH 2/4] widbaroalarm: keep interval Do not immediately measure on start --- apps/widbaroalarm/ChangeLog | 2 ++ apps/widbaroalarm/metadata.json | 2 +- apps/widbaroalarm/settings.js | 2 +- apps/widbaroalarm/widget.js | 16 +++++++++++++--- 4 files changed, 17 insertions(+), 5 deletions(-) diff --git a/apps/widbaroalarm/ChangeLog b/apps/widbaroalarm/ChangeLog index e9adf252d..5b30916ce 100644 --- a/apps/widbaroalarm/ChangeLog +++ b/apps/widbaroalarm/ChangeLog @@ -9,3 +9,5 @@ 0.06: Fix exception 0.07: Ensure barometer gets turned off after a few readings (isBarometerOn broken in 2v16) 0.08: Compatibility with hideable Widgets +0.09: Do not immediately measure on start, keep interval + Add plot history to settings diff --git a/apps/widbaroalarm/metadata.json b/apps/widbaroalarm/metadata.json index ba0c02a31..ad2320cd5 100644 --- a/apps/widbaroalarm/metadata.json +++ b/apps/widbaroalarm/metadata.json @@ -2,7 +2,7 @@ "id": "widbaroalarm", "name": "Barometer Alarm Widget", "shortName": "Barometer Alarm", - "version": "0.08", + "version": "0.09", "description": "A widget that can alarm on when the pressure reaches defined thresholds.", "icon": "widget.png", "type": "widget", diff --git a/apps/widbaroalarm/settings.js b/apps/widbaroalarm/settings.js index 5885c00aa..347dc9ef0 100644 --- a/apps/widbaroalarm/settings.js +++ b/apps/widbaroalarm/settings.js @@ -107,7 +107,7 @@ return x + " min"; } }, - 'Log graph': () => {E.showMenu(); draw();}, + 'Plot history': () => {E.showMenu(); draw();}, }; E.showMenu(menu); } diff --git a/apps/widbaroalarm/widget.js b/apps/widbaroalarm/widget.js index c7ca0eda2..2947b60f3 100644 --- a/apps/widbaroalarm/widget.js +++ b/apps/widbaroalarm/widget.js @@ -293,8 +293,18 @@ WIDGETS["baroalarm"] = { draw : draw }; -if (interval > 0) { - setInterval(getPressureValue, interval * 60000); +// delay pressure measurement by interval-lastrun +const lastRun = history3.length > 0 ? history3[history3.length-1].ts : 0; +const lastRunAgo = Math.round(Date.now() / 1000) - lastRun; +let diffNextRun = interval*60-lastRunAgo; +if (diffNextRun < 0) { + diffNextRun = 0; // run asap } -getPressureValue(); +setTimeout(() => { + if (interval > 0) { + setInterval(getPressureValue, interval * 60000); + } + getPressureValue(); +}, diffNextRun*1000); + })(); From 9ca1445a6504c600a2550d3b8b27869cfb099f17 Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Fri, 9 Feb 2024 21:29:28 +0100 Subject: [PATCH 3/4] widbaroalarm settings: plot equidistance times --- apps/widbaroalarm/settings.js | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/apps/widbaroalarm/settings.js b/apps/widbaroalarm/settings.js index 347dc9ef0..0adb1e75c 100644 --- a/apps/widbaroalarm/settings.js +++ b/apps/widbaroalarm/settings.js @@ -114,8 +114,18 @@ function draw() { const history3 = require('Storage').readJSON("widbaroalarm.log.json", true) || []; // history of recent 3 hours - const data = history3.map(o => o.p); - const now = new Date()/1000; + + const now = new Date()/(1000); + let curtime = now-3*60*60; // 3h ago + const data = []; + while (curtime < now) { + // find closest value in history for this timestamp + const closest = history3.reduce((prev, curr) => { + return (Math.abs(curr.ts - curtime) < Math.abs(prev.ts - curtime) ? curr : prev); + }); + data.push(closest.p); + curtime += settings.interval*60; + } Bangle.setUI({ mode: "custom", @@ -130,16 +140,16 @@ height: Bangle.appRect.h-20, gridx: 1, gridy: 1, - miny: Math.min.apply(null, data), - maxy: Math.max.apply(null, data), + miny: Math.min.apply(null, data)-1, + maxy: Math.max.apply(null, data)+1, title: /*LANG*/"Barometer history (mBar)", ylabel: y => y, xlabel: i => { - if (i % 4 === 0) { - return "-" + Math.round((now-history3[i].ts)/(60*60)); - } else { - return ""; + const t = -3*60 + settings.interval*i; + if (t % 60 === 0) { + return "-" + t/60 + "h"; } + return ""; }, }); } From f75d97662abec5cdba6db181d57be65d307ed1fb Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Sat, 10 Feb 2024 17:18:51 +0100 Subject: [PATCH 4/4] widbaroalarm settings graph: fix off by one --- apps/widbaroalarm/settings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/widbaroalarm/settings.js b/apps/widbaroalarm/settings.js index 0adb1e75c..68e7bab6b 100644 --- a/apps/widbaroalarm/settings.js +++ b/apps/widbaroalarm/settings.js @@ -118,7 +118,7 @@ const now = new Date()/(1000); let curtime = now-3*60*60; // 3h ago const data = []; - while (curtime < now) { + while (curtime <= now) { // find closest value in history for this timestamp const closest = history3.reduce((prev, curr) => { return (Math.abs(curr.ts - curtime) < Math.abs(prev.ts - curtime) ? curr : prev);