0.07: Ensure barometer gets turned off after a few readings (isBarometerOn broken in 2v16)

master
Gordon Williams 2023-02-27 13:17:41 +00:00
parent 769c4c2793
commit cc24cb5bb3
3 changed files with 29 additions and 28 deletions

View File

@ -7,3 +7,4 @@
Show difference of last measurement to pressure average of the the last three hours in the widget
Only use valid pressure values
0.06: Fix exception
0.07: Ensure barometer gets turned off after a few readings (isBarometerOn broken in 2v16)

View File

@ -2,7 +2,7 @@
"id": "widbaroalarm",
"name": "Barometer Alarm Widget",
"shortName": "Barometer Alarm",
"version": "0.06",
"version": "0.07",
"description": "A widget that can alarm on when the pressure reaches defined thresholds.",
"icon": "widget.png",
"type": "widget",

View File

@ -211,6 +211,28 @@ function calculcate3hAveragePressure() {
}
}
function barometerPressureHandler(e) {
const MEDIANLENGTH = 20;
while (currentPressures.length > MEDIANLENGTH)
currentPressures.pop();
const pressure = e.pressure;
if (isValidPressureValue(pressure)) {
currentPressures.unshift(pressure);
median = currentPressures.slice().sort();
if (median.length > 10) {
var mid = median.length >> 1;
medianPressure = Math.round(E.sum(median.slice(mid - 4, mid + 5)) / 9);
if (medianPressure > 0) {
turnOff();
draw();
handlePressureValue(medianPressure);
}
}
}
}
/*
turn on barometer power
take multiple measurements
@ -219,37 +241,15 @@ function calculcate3hAveragePressure() {
turn off barometer power
*/
function getPressureValue() {
if (stop)
return;
const MEDIANLENGTH = 20;
if (stop) return;
Bangle.setBarometerPower(true, "widbaroalarm");
Bangle.on('pressure', function(e) {
while (currentPressures.length > MEDIANLENGTH)
currentPressures.pop();
const pressure = e.pressure;
if (isValidPressureValue(pressure)) {
currentPressures.unshift(pressure);
median = currentPressures.slice().sort();
if (median.length > 10) {
var mid = median.length >> 1;
medianPressure = Math.round(E.sum(median.slice(mid - 4, mid + 5)) / 9);
if (medianPressure > 0) {
turnOff();
draw();
handlePressureValue(medianPressure);
}
}
}
});
setTimeout(function() { turnOff(); }, 30000);
Bangle.on('pressure', barometerPressureHandler);
setTimeout(turnOff, 30000);
}
function turnOff() {
if (Bangle.isBarometerOn())
Bangle.setBarometerPower(false, "widbaroalarm");
Bangle.removeListener('pressure', barometerPressureHandler);
Bangle.setBarometerPower(false, "widbaroalarm");
}
function draw() {