New widget: Heart rate alarm

master
Martin Boonk 2022-01-10 20:27:40 +01:00
parent 1d793a037f
commit 791f88b061
6 changed files with 116 additions and 0 deletions

View File

@ -1351,6 +1351,22 @@
{"name":"pparrot.img","url":"party-parrot-icon.js","evaluate":true}
]
},
{
"id": "hralarm",
"name": "Heart rate alarm",
"shortName":"HR Alarm",
"version":"0.01",
"description": "This invisible widget vibrates whenever the heart rate gets close to the upper limit or goes over or under the configured limits",
"icon": "widget.png",
"type": "widget",
"tags": "widget",
"supports" : ["BANGLEJS2"],
"readme": "README.md",
"storage": [
{"name":"hralarm.wid.js","url":"widget.js"},
{"name":"hralarm.settings.js","url":"settings.js"}
]
},
{
"id": "hrings",
"name": "Hypno Rings",

1
apps/hralarm/ChangeLog Normal file
View File

@ -0,0 +1 @@
0.01: New Widget!

15
apps/hralarm/README.md Normal file
View File

@ -0,0 +1,15 @@
# Heart rate alarm
This invisible widget vibrates whenever the heart rate gets close to the upper limit or goes over or under the configured limits.
## Usage
Configure the heart rate limits in the apps settings. This widget uses both 'HRM' and 'BTHRM' events.
## Features
Long vibration every 10 seconds on reaching upper limit, short vibrations between upper limit and warning threshold and an single vibration when reaching the lower limit again.
## Requests/Creator
https://github.com/halemmerich

57
apps/hralarm/settings.js Normal file
View File

@ -0,0 +1,57 @@
(function(back) {
var FILE = "hralarm.json";
var settings = Object.assign({
enabled: false,
upper: 180,
warning: 170,
lower: 150,
}, require('Storage').readJSON(FILE, true) || {});
function writeSettings() {
require('Storage').writeJSON(FILE, settings);
}
E.showMenu({
'': { 'title': 'HR Alarm' },
'< Back': back,
'Enabled': {
value: !!settings.enabled,
format: v => settings.enabled ? "On" : "Off",
onchange: v => {
settings.enabled = v;
writeSettings();
}
},
'Upper limit': {
value: settings.upper,
min: 0,
step:5,
max: 300,
onchange: v => {
settings.upper = v;
writeSettings();
}
},
'Lower limit': {
value: settings.lower,
min: 0,
step:5,
max: 300,
onchange: v => {
settings.lower = v;
writeSettings();
}
},
'Warning at': {
value: settings.warning,
min: 0,
step:5,
max: 300,
onchange: v => {
settings.warning = v;
writeSettings();
}
}
});
})

27
apps/hralarm/widget.js Normal file
View File

@ -0,0 +1,27 @@
(() => {
var settings = require('Storage').readJSON("hralarm.json", true) || {};
if (!settings.enabled){ Bangle.setHRMPower(0, 'hralarm'); return; }
Bangle.setHRMPower(1, 'hralarm');
var hitLimit = 0;
var checkHr = function(hr){
if (hr.bpm > settings.warning && hr.bpm <= settings.upper){
Bangle.buzz(100, 1);
}
if (hitLimit < getTime() && hr.bpm > settings.upper){
hitLimit = getTime() + 10;
Bangle.buzz(2000, 1);
}
if (hitLimit > 0 && hr.bpm < settings.lower){
hitLimit = 0;
Bangle.buzz(500, 1);
}
};
Bangle.on("HRM", checkHr);
Bangle.on("BTHRM", checkHr);
WIDGETS["hralarm"]={
area:"tl",
width: 0,
draw: function(){}
};
})()

BIN
apps/hralarm/widget.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB