New widget: Heart rate alarm
parent
1d793a037f
commit
791f88b061
16
apps.json
16
apps.json
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -0,0 +1 @@
|
|||
0.01: New Widget!
|
||||
|
|
@ -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
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
});
|
||||
})
|
||||
|
|
@ -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(){}
|
||||
};
|
||||
})()
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 13 KiB |
Loading…
Reference in New Issue