diff --git a/apps/widbaroalarm/ChangeLog b/apps/widbaroalarm/ChangeLog index 2dfe8336d..3b2ae75c4 100644 --- a/apps/widbaroalarm/ChangeLog +++ b/apps/widbaroalarm/ChangeLog @@ -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) diff --git a/apps/widbaroalarm/metadata.json b/apps/widbaroalarm/metadata.json index ba6c47b37..0a6ddd71e 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.06", + "version": "0.07", "description": "A widget that can alarm on when the pressure reaches defined thresholds.", "icon": "widget.png", "type": "widget", diff --git a/apps/widbaroalarm/widget.js b/apps/widbaroalarm/widget.js index d877c4384..d65a1c09c 100644 --- a/apps/widbaroalarm/widget.js +++ b/apps/widbaroalarm/widget.js @@ -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() {