From db3eb8985abf29a81b4d56ebb3a34d16149a9178 Mon Sep 17 00:00:00 2001 From: Ben Jabituya <74158243+jabituyaben@users.noreply.github.com> Date: Tue, 5 Jan 2021 19:04:50 +0000 Subject: [PATCH 01/47] Add files via upload --- apps/hrmdataexport/README.md | 7 +++ apps/hrmdataexport/app-icon.js | 2 + apps/hrmdataexport/app-icon.png | Bin 0 -> 956 bytes apps/hrmdataexport/app.js | 97 ++++++++++++++++++++++++++++++++ 4 files changed, 106 insertions(+) create mode 100644 apps/hrmdataexport/README.md create mode 100644 apps/hrmdataexport/app-icon.js create mode 100644 apps/hrmdataexport/app-icon.png create mode 100644 apps/hrmdataexport/app.js diff --git a/apps/hrmdataexport/README.md b/apps/hrmdataexport/README.md new file mode 100644 index 000000000..122b7f21e --- /dev/null +++ b/apps/hrmdataexport/README.md @@ -0,0 +1,7 @@ +Extract hrm raw signal data to CSV file +======================================= + +Simple app that will run the heart rate monitor for a defined period of time you set at the start. The max time value is 60 minutes but you can increase this just by changing the value in the app's script code if you wanted to - be mindful that your log file can get large and there are storage limitations if you start trying to log beyond this max. + +The hrm sensor is sampled @50Hz and this app does not do any processing on it, the array is written as-is. There is an example Python script that can process this signal, smooth it and also extract a myriad of heart rate variability metrics using the hrvanalysis library: +https://github.com/jabituyaben/BangleJS-HRM-Signal-Processing \ No newline at end of file diff --git a/apps/hrmdataexport/app-icon.js b/apps/hrmdataexport/app-icon.js new file mode 100644 index 000000000..356be780a --- /dev/null +++ b/apps/hrmdataexport/app-icon.js @@ -0,0 +1,2 @@ +E.toArrayBuffer(atob("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AA/AAAD/4H/wAAP/8P/8AAf/+f/+AA/A//B/AA+AP8A/AB8AH4B/gB4ADwD/gDwABgH3wDwAAAPjwDwAAAfDwDwDAA+DwDwHgB8DwDwHwD4DwB4D4HwHgB4B8PgHgB8A+fAPgA8Af+APAA+AP8AfAAfAH4A+AAPgDwB8AAPwBgD8AAH4AAH4AAD4AAHwAAB+AAfgAAA/AA/AAAAfgB+AAAAPwD8AAAAH4H4AAAAD8PwAAAAB+fgAAAAA//AAAAAAf+AAAAAAP8AAAAAADwAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA")) +} \ No newline at end of file diff --git a/apps/hrmdataexport/app-icon.png b/apps/hrmdataexport/app-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..6ad50930bd239c8da1fe367da4b142f9e619adfc GIT binary patch literal 956 zcmV;t14I0YP)!Y=lst9^BhKu7%^g)jJ2?x#KU+HTd*njKZ99(fsgQ4L!6D+i5-~21}xze zPU0wLaJGfETGrwK{>>|@D;M!Du8+jofWx^>Q=ECcl-E5FoA7Nyg<<&{_m<+^mw#&; z=QwU0MEt1^m6k_i7oNhU0pk4Lr4ehzd;T;I;!aFp9JgXG<|6i&^Adia!wb3ZIM(BC zypD4b`{TH-O#==@f*irR8lN?}-$KN{(pdp^eFSS-a@%)hk}e_8)@dOD@@nZW5_OYsG}aV0OiYwW7T zPvec?`zI+C{~S2o(Mf*Be)V&=PCRT6{{56vX*g^t(`PCra6prIvh`U0e=a5Pg}|xl zG(05RU3R5w_n3b13wR>1n+R;qrvwl8^Q|?uhgA1o6)8PmaC>0)Yf1x-22Rgc*lleg zq>Fg6!>(*QlhS~_fz#{?32G}IehloNOKHGn%lGgl+&^F=x`^Kq*e}TLXGw(9=sWak z>>rH?EEaa^f-Td-iNGi63@F&9e-xf=@TuzMwmlDf0-r_P)usXPK@jAEY*(lwHWF=m zp6pCHANU<^E1oR%3omuEvc0*Es!Lf)&rjfoz;9lb&2?gDM963A*8}|{k<#-$d>X0m z$&T9pjN|)A@K+Ojr=^L1EfW8P6-ep}Zj$AuVI?oG zK%vUjme3DCOSCiFX_!$~_RTku;%%s1i(&m_Kz*#CjsRzYu+ z8^pKRUvNvwZnG?(4ed_i=2g@iWfEWN7x$;^1#e1x3;tUC5qKy};Fx}qXY&$%Kc@Lk zwd(X_x5lcQXi+}IwL{X_$e87ce(cb@W@zeKu*dR*=nD1?RZ#~XktIPF)xV4WuX!LZ eBSwrE5$7sm(k>&$u9r3d0000 1) + counter -= 1; + else + counter = 60; + update_timer(); + } +} + +function btn2Pressed() { + launchtime = 0 | getTime(); + file.write(launchtime + "," + "\n"); + logging_started = true; + counter = counter * 60; + interval = setInterval(countDown, 1000); + Bangle.setHRMPower(1); +} + +function fmtMSS(e) { + var m = Math.floor(e % 3600 / 60).toString().padStart(2, '0'), + s = Math.floor(e % 60).toString().padStart(2, '0'); + return m + ':' + s; +} + +function countDown() { + g.clear(); + counter--; + if (counter == 0) { + Bangle.setHRMPower(0); + clearInterval(interval); + g.drawString("Finished", g.getWidth() / 2, g.getHeight() / 2); + Bangle.buzz(500, 1); + } + else + g.drawString(fmtMSS(counter), g.getWidth() / 2, g.getHeight() / 2); +} + +update_timer(); + +setWatch(btn1Pressed, BTN1, { repeat: true }); +setWatch(btn2Pressed, BTN2, { repeat: true }); +setWatch(btn3Pressed, BTN3, { repeat: true }); + +Bangle.on('HRM', function (hrm) { + for (let i = 0; i < hrm.raw.length; i++) { + value = hrm.raw[i]; + if (value < -2) + value = -2; + if (value > 6) + value = 6; + file.write(value + "," + "\n"); + } +}); \ No newline at end of file From 33d47c79dbf79fb0b1069ee8c4e25db5a42177ab Mon Sep 17 00:00:00 2001 From: Ben Jabituya <74158243+jabituyaben@users.noreply.github.com> Date: Tue, 5 Jan 2021 19:05:59 +0000 Subject: [PATCH 02/47] Update apps.json --- apps.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/apps.json b/apps.json index 9e910e09a..fe4caf6da 100644 --- a/apps.json +++ b/apps.json @@ -2535,5 +2535,18 @@ {"name":"edisonsball.app.js","url":"app.js"}, {"name":"edisonsball.img","url":"app-icon.js","evaluate":true} ] +}, +{ "id": "hrmdataexport", + "name": "HRM Data Exporter", + "shortName":"HRM Data Exporter", + "icon": "app-icon.png", + "version":"0.01", + "description": "export raw hrm signal data to a csv file", + "tags": "", + "readme": "README.md", + "storage": [ + {"name":"hrmdataexport.app.js","url":"app.js"}, + {"name":"hrmdataexport.img","url":"app-icon.js","evaluate":true} + ] } ] From faf6ac6a0d5ae7035a3e8708beb2e0a2da8ab9cf Mon Sep 17 00:00:00 2001 From: Ben Jabituya <74158243+jabituyaben@users.noreply.github.com> Date: Tue, 5 Jan 2021 20:05:29 +0000 Subject: [PATCH 03/47] Update apps.json --- apps.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps.json b/apps.json index fe4caf6da..cbbe454a1 100644 --- a/apps.json +++ b/apps.json @@ -2545,8 +2545,8 @@ "tags": "", "readme": "README.md", "storage": [ - {"name":"hrmdataexport.app.js","url":"app.js"}, - {"name":"hrmdataexport.img","url":"app-icon.js","evaluate":true} + {"name":"hrmdataexp.app.js","url":"app.js"}, + {"name":"hrmdataexp.img","url":"app-icon.js","evaluate":true} ] } ] From cbfdb906f75c11cedcc2317730ea82cc67c97ab1 Mon Sep 17 00:00:00 2001 From: Ben Jabituya <74158243+jabituyaben@users.noreply.github.com> Date: Tue, 5 Jan 2021 20:07:09 +0000 Subject: [PATCH 04/47] Update apps.json --- apps.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps.json b/apps.json index cbbe454a1..b95c82b67 100644 --- a/apps.json +++ b/apps.json @@ -2536,9 +2536,9 @@ {"name":"edisonsball.img","url":"app-icon.js","evaluate":true} ] }, -{ "id": "hrmdataexport", - "name": "HRM Data Exporter", - "shortName":"HRM Data Exporter", +{ "id": "hrmdataexp", + "name": "HRM Data Exporter", + "shortName":"HRM Data Exporter", "icon": "app-icon.png", "version":"0.01", "description": "export raw hrm signal data to a csv file", From 6891d701c084aaea8171d317541ed20abc4c785b Mon Sep 17 00:00:00 2001 From: Ben Jabituya <74158243+jabituyaben@users.noreply.github.com> Date: Tue, 5 Jan 2021 20:07:58 +0000 Subject: [PATCH 05/47] Update app-icon.js --- apps/hrmdataexport/app-icon.js | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/hrmdataexport/app-icon.js b/apps/hrmdataexport/app-icon.js index 356be780a..50fa89fef 100644 --- a/apps/hrmdataexport/app-icon.js +++ b/apps/hrmdataexport/app-icon.js @@ -1,2 +1 @@ E.toArrayBuffer(atob("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AA/AAAD/4H/wAAP/8P/8AAf/+f/+AA/A//B/AA+AP8A/AB8AH4B/gB4ADwD/gDwABgH3wDwAAAPjwDwAAAfDwDwDAA+DwDwHgB8DwDwHwD4DwB4D4HwHgB4B8PgHgB8A+fAPgA8Af+APAA+AP8AfAAfAH4A+AAPgDwB8AAPwBgD8AAH4AAH4AAD4AAHwAAB+AAfgAAA/AA/AAAAfgB+AAAAPwD8AAAAH4H4AAAAD8PwAAAAB+fgAAAAA//AAAAAAf+AAAAAAP8AAAAAADwAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA")) -} \ No newline at end of file From b6bfeaf43f1e47b1b2d382fa6ced21e0f7050af0 Mon Sep 17 00:00:00 2001 From: Ben Jabituya <74158243+jabituyaben@users.noreply.github.com> Date: Tue, 5 Jan 2021 20:10:39 +0000 Subject: [PATCH 06/47] Update app-icon.js --- apps/hrmdataexport/app-icon.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/hrmdataexport/app-icon.js b/apps/hrmdataexport/app-icon.js index 50fa89fef..2f8bbdfff 100644 --- a/apps/hrmdataexport/app-icon.js +++ b/apps/hrmdataexport/app-icon.js @@ -1 +1 @@ -E.toArrayBuffer(atob("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AA/AAAD/4H/wAAP/8P/8AAf/+f/+AA/A//B/AA+AP8A/AB8AH4B/gB4ADwD/gDwABgH3wDwAAAPjwDwAAAfDwDwDAA+DwDwHgB8DwDwHwD4DwB4D4HwHgB4B8PgHgB8A+fAPgA8Af+APAA+AP8AfAAfAH4A+AAPgDwB8AAPwBgD8AAH4AAH4AAD4AAHwAAB+AAfgAAA/AA/AAAAfgB+AAAAPwD8AAAAH4H4AAAAD8PwAAAAB+fgAAAAA//AAAAAAf+AAAAAAP8AAAAAADwAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA")) +require("heatshrink").decompress(atob("AEkP4ED+AFBn/4j/8AoP//k//8AgP//1//+ACgM//kfDQPgh/wEAMHAIPgj/gg4TB4E/B4IfBwF9CYI4C/AFDgPwAoQmCAoMBEAPAAoQCBwHwFIJNBBwWAvk+Cgc+vgeBHIMf/ADBJoYPBEQJNBEgI+BCYQ/B/hNBn4FBvwCEnwCBvgCBj+AgP4So4oBAIIFBBIINBNIRTBGgIwCFwQtCFwS0CWQQwCFwQwCFwQqCFAQqCFAYAiA")) From 2deb852c3771adc365a0cab7eb6daae732c0027e Mon Sep 17 00:00:00 2001 From: Ben Jabituya <74158243+jabituyaben@users.noreply.github.com> Date: Tue, 5 Jan 2021 20:22:01 +0000 Subject: [PATCH 07/47] Update app-icon.js --- apps/hrmdataexport/app-icon.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/hrmdataexport/app-icon.js b/apps/hrmdataexport/app-icon.js index 2f8bbdfff..f493620e3 100644 --- a/apps/hrmdataexport/app-icon.js +++ b/apps/hrmdataexport/app-icon.js @@ -1 +1 @@ -require("heatshrink").decompress(atob("AEkP4ED+AFBn/4j/8AoP//k//8AgP//1//+ACgM//kfDQPgh/wEAMHAIPgj/gg4TB4E/B4IfBwF9CYI4C/AFDgPwAoQmCAoMBEAPAAoQCBwHwFIJNBBwWAvk+Cgc+vgeBHIMf/ADBJoYPBEQJNBEgI+BCYQ/B/hNBn4FBvwCEnwCBvgCBj+AgP4So4oBAIIFBBIINBNIRTBGgIwCFwQtCFwS0CWQQwCFwQwCFwQqCFAQqCFAYAiA")) +require("heatshrink").decompress(atob("mEwwkEIf4A/ACkBmf/+cgBAcCn//mcQCxEC/4ADDAQIIAAokBAAkQgIHF+YWGh4OF//xj4IG+AuIkMAiQSFBAgwFKgUwMg5aCJgZhEIwIfFIoXxAwpIFBAJPFFASiCPYgfDLwSYGl/yFwphBIAgXBZI0CLovxAYIXEBIJFEDYouCEoIRFAosvGgguDCI5uEUoJrEFwgcCO5AQEFwwjBL4kvawYRFDosD/6YDa4TOGiAcFaA4eBGwYTDFwpYCIAQREbAb/DFwheBaAxgBBwYeCCAogBLwhgDP4gwCVYhGBLwgpEKAYGCFwZuBIwxIDHIkfFwgMGSIp5EgInDOoSNEAAgLBEZAuB/4WIOQYwDFwpNEPJAwGFwR1HGAxVENIQuKGAjDEXYIuMGA4uPFInzFIIECCxwqEMo4wOAAQuQXIguTXQj1IGBz0GAB0fUZ7cHaRoA/AGo=")) From 034a3896ebbc3338603e5d4d5539bd7081e1d193 Mon Sep 17 00:00:00 2001 From: Ben Jabituya <74158243+jabituyaben@users.noreply.github.com> Date: Tue, 5 Jan 2021 20:24:16 +0000 Subject: [PATCH 08/47] Delete app-icon.png --- apps/hrmdataexport/app-icon.png | Bin 956 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 apps/hrmdataexport/app-icon.png diff --git a/apps/hrmdataexport/app-icon.png b/apps/hrmdataexport/app-icon.png deleted file mode 100644 index 6ad50930bd239c8da1fe367da4b142f9e619adfc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 956 zcmV;t14I0YP)!Y=lst9^BhKu7%^g)jJ2?x#KU+HTd*njKZ99(fsgQ4L!6D+i5-~21}xze zPU0wLaJGfETGrwK{>>|@D;M!Du8+jofWx^>Q=ECcl-E5FoA7Nyg<<&{_m<+^mw#&; z=QwU0MEt1^m6k_i7oNhU0pk4Lr4ehzd;T;I;!aFp9JgXG<|6i&^Adia!wb3ZIM(BC zypD4b`{TH-O#==@f*irR8lN?}-$KN{(pdp^eFSS-a@%)hk}e_8)@dOD@@nZW5_OYsG}aV0OiYwW7T zPvec?`zI+C{~S2o(Mf*Be)V&=PCRT6{{56vX*g^t(`PCra6prIvh`U0e=a5Pg}|xl zG(05RU3R5w_n3b13wR>1n+R;qrvwl8^Q|?uhgA1o6)8PmaC>0)Yf1x-22Rgc*lleg zq>Fg6!>(*QlhS~_fz#{?32G}IehloNOKHGn%lGgl+&^F=x`^Kq*e}TLXGw(9=sWak z>>rH?EEaa^f-Td-iNGi63@F&9e-xf=@TuzMwmlDf0-r_P)usXPK@jAEY*(lwHWF=m zp6pCHANU<^E1oR%3omuEvc0*Es!Lf)&rjfoz;9lb&2?gDM963A*8}|{k<#-$d>X0m z$&T9pjN|)A@K+Ojr=^L1EfW8P6-ep}Zj$AuVI?oG zK%vUjme3DCOSCiFX_!$~_RTku;%%s1i(&m_Kz*#CjsRzYu+ z8^pKRUvNvwZnG?(4ed_i=2g@iWfEWN7x$;^1#e1x3;tUC5qKy};Fx}qXY&$%Kc@Lk zwd(X_x5lcQXi+}IwL{X_$e87ce(cb@W@zeKu*dR*=nD1?RZ#~XktIPF)xV4WuX!LZ eBSwrE5$7sm(k>&$u9r3d0000 Date: Tue, 5 Jan 2021 20:24:29 +0000 Subject: [PATCH 09/47] Add files via upload --- apps/hrmdataexport/app-icon.png | Bin 0 -> 1476 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/hrmdataexport/app-icon.png diff --git a/apps/hrmdataexport/app-icon.png b/apps/hrmdataexport/app-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3689ba1d60f34129775ea33d672ac05d2e1cf803 GIT binary patch literal 1476 zcmV;#1v~nQP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf00v@9M??Vs0RI60 zpuMM)000F?NklE=uy;|Fh27$9b)L&binBmz1x*F5mg~y6fzH_S$rZS#Ldl(*laekx3@=DR#wQ= z)D*eCzGf|OgoK2Ul9CdVot;f$V`E8ha4?~il8cKAVzpYy!omWXpPwgoyPdT#2Hb!{ z`uOrUg*fk2n`Af(!}8srK6*xyvGRl_xH4|t&RU~bsU7K$dl`3 zy0x{%!kWkJ?Jdp7$oPtrnVHFJ&SGO@gNB8LDRM%HihT0iu(D9j1A4l=yqs26R?^qk zSEf3T^Ye3~o6w3dbXd>d+}zNPjt-iXltlgf{HU+5FO7+bp^c4=^z7`6xg@;3z4257 zyiH9_d|QYS5D-99Qc`GNUmtyZd}J;OFcRM0-kLlawIV$8YRt^cP=9}ajaQ_Xmlxme z{r#P_&;qWtwzl$KEJks0F?z#*mX;Q@4M(NGRU6HOh2*)4qwqOmUS1yh$biOGFtiO& zFL?k=Y#1q|tx~A2u4YXHz+%3T znOy)p^JuG6eOcii=c&LfNQ7Nd0&CKJ&t*EH3N2BC{FdyZB+~hGBmBRD$GqVdYS`E9q zyZPz@H6OclRU&ID=Sm@pj6B8^z@{-&ZrdB^*k;vPH|mMNM3}x_Z-no&x=e* zNMH^DCnqNw4@afIZKjxAKtn@=;<`wBl@q>eXJ?1G1vpp(fLbv%HB~bTwY9YxpPY_*8PoK79#~gb z$J_!Sm*nJR)XNbS>BPhYYc2rFD^vx{D-s(CIgEN92x|(IOF7^mgn1cJk#a{r&87|} zG}LCyFA^IGfSI0$*!%nYtc3vB#KCC}^E09%Pwwo>!bn(LT-2QpK=nwN>3N7bH#f&x zNT{f&K>aeJ;upuq$5|)|gM)*pS59#x%=A2PXlRHJso{NG(0?PII-mfFT6ie1Coa`0M@e-mk)NhaGq7e zYPHhH$Vf#@7l?|c2|c^Iy2?_LaCLRXzrlm*g_Yp-^>y?munR;*rwDtPrKKg7ngqMu z&QlHW8tti^ASyadD2=ddG{WTMB=z+4L}R!}RCI~3ILQzCYQUoB?(UAZ{RUC-TZ99N z{6GY6=bD?FQSbjiRQxsz3JUl`5d57$@4e`E`A`2+pOcfre{zc#|M@TQ_pb&&jlUcC eY5ejVAml%>*BP Date: Tue, 5 Jan 2021 20:25:17 +0000 Subject: [PATCH 10/47] Delete app-icon.png --- apps/hrmdataexport/app-icon.png | Bin 1476 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 apps/hrmdataexport/app-icon.png diff --git a/apps/hrmdataexport/app-icon.png b/apps/hrmdataexport/app-icon.png deleted file mode 100644 index 3689ba1d60f34129775ea33d672ac05d2e1cf803..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1476 zcmV;#1v~nQP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf00v@9M??Vs0RI60 zpuMM)000F?NklE=uy;|Fh27$9b)L&binBmz1x*F5mg~y6fzH_S$rZS#Ldl(*laekx3@=DR#wQ= z)D*eCzGf|OgoK2Ul9CdVot;f$V`E8ha4?~il8cKAVzpYy!omWXpPwgoyPdT#2Hb!{ z`uOrUg*fk2n`Af(!}8srK6*xyvGRl_xH4|t&RU~bsU7K$dl`3 zy0x{%!kWkJ?Jdp7$oPtrnVHFJ&SGO@gNB8LDRM%HihT0iu(D9j1A4l=yqs26R?^qk zSEf3T^Ye3~o6w3dbXd>d+}zNPjt-iXltlgf{HU+5FO7+bp^c4=^z7`6xg@;3z4257 zyiH9_d|QYS5D-99Qc`GNUmtyZd}J;OFcRM0-kLlawIV$8YRt^cP=9}ajaQ_Xmlxme z{r#P_&;qWtwzl$KEJks0F?z#*mX;Q@4M(NGRU6HOh2*)4qwqOmUS1yh$biOGFtiO& zFL?k=Y#1q|tx~A2u4YXHz+%3T znOy)p^JuG6eOcii=c&LfNQ7Nd0&CKJ&t*EH3N2BC{FdyZB+~hGBmBRD$GqVdYS`E9q zyZPz@H6OclRU&ID=Sm@pj6B8^z@{-&ZrdB^*k;vPH|mMNM3}x_Z-no&x=e* zNMH^DCnqNw4@afIZKjxAKtn@=;<`wBl@q>eXJ?1G1vpp(fLbv%HB~bTwY9YxpPY_*8PoK79#~gb z$J_!Sm*nJR)XNbS>BPhYYc2rFD^vx{D-s(CIgEN92x|(IOF7^mgn1cJk#a{r&87|} zG}LCyFA^IGfSI0$*!%nYtc3vB#KCC}^E09%Pwwo>!bn(LT-2QpK=nwN>3N7bH#f&x zNT{f&K>aeJ;upuq$5|)|gM)*pS59#x%=A2PXlRHJso{NG(0?PII-mfFT6ie1Coa`0M@e-mk)NhaGq7e zYPHhH$Vf#@7l?|c2|c^Iy2?_LaCLRXzrlm*g_Yp-^>y?munR;*rwDtPrKKg7ngqMu z&QlHW8tti^ASyadD2=ddG{WTMB=z+4L}R!}RCI~3ILQzCYQUoB?(UAZ{RUC-TZ99N z{6GY6=bD?FQSbjiRQxsz3JUl`5d57$@4e`E`A`2+pOcfre{zc#|M@TQ_pb&&jlUcC eY5ejVAml%>*BP Date: Tue, 5 Jan 2021 20:25:33 +0000 Subject: [PATCH 11/47] Add files via upload --- apps/hrmdataexport/app-icon.png | Bin 0 -> 1476 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/hrmdataexport/app-icon.png diff --git a/apps/hrmdataexport/app-icon.png b/apps/hrmdataexport/app-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3689ba1d60f34129775ea33d672ac05d2e1cf803 GIT binary patch literal 1476 zcmV;#1v~nQP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf00v@9M??Vs0RI60 zpuMM)000F?NklE=uy;|Fh27$9b)L&binBmz1x*F5mg~y6fzH_S$rZS#Ldl(*laekx3@=DR#wQ= z)D*eCzGf|OgoK2Ul9CdVot;f$V`E8ha4?~il8cKAVzpYy!omWXpPwgoyPdT#2Hb!{ z`uOrUg*fk2n`Af(!}8srK6*xyvGRl_xH4|t&RU~bsU7K$dl`3 zy0x{%!kWkJ?Jdp7$oPtrnVHFJ&SGO@gNB8LDRM%HihT0iu(D9j1A4l=yqs26R?^qk zSEf3T^Ye3~o6w3dbXd>d+}zNPjt-iXltlgf{HU+5FO7+bp^c4=^z7`6xg@;3z4257 zyiH9_d|QYS5D-99Qc`GNUmtyZd}J;OFcRM0-kLlawIV$8YRt^cP=9}ajaQ_Xmlxme z{r#P_&;qWtwzl$KEJks0F?z#*mX;Q@4M(NGRU6HOh2*)4qwqOmUS1yh$biOGFtiO& zFL?k=Y#1q|tx~A2u4YXHz+%3T znOy)p^JuG6eOcii=c&LfNQ7Nd0&CKJ&t*EH3N2BC{FdyZB+~hGBmBRD$GqVdYS`E9q zyZPz@H6OclRU&ID=Sm@pj6B8^z@{-&ZrdB^*k;vPH|mMNM3}x_Z-no&x=e* zNMH^DCnqNw4@afIZKjxAKtn@=;<`wBl@q>eXJ?1G1vpp(fLbv%HB~bTwY9YxpPY_*8PoK79#~gb z$J_!Sm*nJR)XNbS>BPhYYc2rFD^vx{D-s(CIgEN92x|(IOF7^mgn1cJk#a{r&87|} zG}LCyFA^IGfSI0$*!%nYtc3vB#KCC}^E09%Pwwo>!bn(LT-2QpK=nwN>3N7bH#f&x zNT{f&K>aeJ;upuq$5|)|gM)*pS59#x%=A2PXlRHJso{NG(0?PII-mfFT6ie1Coa`0M@e-mk)NhaGq7e zYPHhH$Vf#@7l?|c2|c^Iy2?_LaCLRXzrlm*g_Yp-^>y?munR;*rwDtPrKKg7ngqMu z&QlHW8tti^ASyadD2=ddG{WTMB=z+4L}R!}RCI~3ILQzCYQUoB?(UAZ{RUC-TZ99N z{6GY6=bD?FQSbjiRQxsz3JUl`5d57$@4e`E`A`2+pOcfre{zc#|M@TQ_pb&&jlUcC eY5ejVAml%>*BP Date: Tue, 5 Jan 2021 20:29:25 +0000 Subject: [PATCH 12/47] Update app-icon.js --- apps/hrmdataexport/app-icon.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/hrmdataexport/app-icon.js b/apps/hrmdataexport/app-icon.js index f493620e3..c859c841e 100644 --- a/apps/hrmdataexport/app-icon.js +++ b/apps/hrmdataexport/app-icon.js @@ -1 +1 @@ -require("heatshrink").decompress(atob("mEwwkEIf4A/ACkBmf/+cgBAcCn//mcQCxEC/4ADDAQIIAAokBAAkQgIHF+YWGh4OF//xj4IG+AuIkMAiQSFBAgwFKgUwMg5aCJgZhEIwIfFIoXxAwpIFBAJPFFASiCPYgfDLwSYGl/yFwphBIAgXBZI0CLovxAYIXEBIJFEDYouCEoIRFAosvGgguDCI5uEUoJrEFwgcCO5AQEFwwjBL4kvawYRFDosD/6YDa4TOGiAcFaA4eBGwYTDFwpYCIAQREbAb/DFwheBaAxgBBwYeCCAogBLwhgDP4gwCVYhGBLwgpEKAYGCFwZuBIwxIDHIkfFwgMGSIp5EgInDOoSNEAAgLBEZAuB/4WIOQYwDFwpNEPJAwGFwR1HGAxVENIQuKGAjDEXYIuMGA4uPFInzFIIECCxwqEMo4wOAAQuQXIguTXQj1IGBz0GAB0fUZ7cHaRoA/AGo=")) +E.toArrayBuffer(atob("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AA/AAAD/4H/wAAP/8P/8AAf/+f/+AA/A//B/AA+AP8A/AB8AH4B/gB4ADwD/gDwABgH3wDwAAAPjwDwAAAfDwDwBAA+DwDwDgB8DwDwHwD4DwB4D4HwHgB4B8PgHgB8A+fAPgA8Af+APAA+AP8AfAAfAH4A+AAPgDwB8AAPwBgD8AAH4AAH4AAD4AAHwAAB+AAfgAAA/AA/AAAAfgB+AAAAPwD8AAAAH4H4AAAAD8PwAAAAB+fgAAAAA//AAAAAAf+AAAAAAH8AAAAAADwAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA")) From d2eddb3e15becb83bbd6230de7c30bb6225c3f63 Mon Sep 17 00:00:00 2001 From: Ben Jabituya <74158243+jabituyaben@users.noreply.github.com> Date: Tue, 5 Jan 2021 20:36:29 +0000 Subject: [PATCH 13/47] Delete app-icon.png --- apps/hrmdataexport/app-icon.png | Bin 1476 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 apps/hrmdataexport/app-icon.png diff --git a/apps/hrmdataexport/app-icon.png b/apps/hrmdataexport/app-icon.png deleted file mode 100644 index 3689ba1d60f34129775ea33d672ac05d2e1cf803..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1476 zcmV;#1v~nQP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf00v@9M??Vs0RI60 zpuMM)000F?NklE=uy;|Fh27$9b)L&binBmz1x*F5mg~y6fzH_S$rZS#Ldl(*laekx3@=DR#wQ= z)D*eCzGf|OgoK2Ul9CdVot;f$V`E8ha4?~il8cKAVzpYy!omWXpPwgoyPdT#2Hb!{ z`uOrUg*fk2n`Af(!}8srK6*xyvGRl_xH4|t&RU~bsU7K$dl`3 zy0x{%!kWkJ?Jdp7$oPtrnVHFJ&SGO@gNB8LDRM%HihT0iu(D9j1A4l=yqs26R?^qk zSEf3T^Ye3~o6w3dbXd>d+}zNPjt-iXltlgf{HU+5FO7+bp^c4=^z7`6xg@;3z4257 zyiH9_d|QYS5D-99Qc`GNUmtyZd}J;OFcRM0-kLlawIV$8YRt^cP=9}ajaQ_Xmlxme z{r#P_&;qWtwzl$KEJks0F?z#*mX;Q@4M(NGRU6HOh2*)4qwqOmUS1yh$biOGFtiO& zFL?k=Y#1q|tx~A2u4YXHz+%3T znOy)p^JuG6eOcii=c&LfNQ7Nd0&CKJ&t*EH3N2BC{FdyZB+~hGBmBRD$GqVdYS`E9q zyZPz@H6OclRU&ID=Sm@pj6B8^z@{-&ZrdB^*k;vPH|mMNM3}x_Z-no&x=e* zNMH^DCnqNw4@afIZKjxAKtn@=;<`wBl@q>eXJ?1G1vpp(fLbv%HB~bTwY9YxpPY_*8PoK79#~gb z$J_!Sm*nJR)XNbS>BPhYYc2rFD^vx{D-s(CIgEN92x|(IOF7^mgn1cJk#a{r&87|} zG}LCyFA^IGfSI0$*!%nYtc3vB#KCC}^E09%Pwwo>!bn(LT-2QpK=nwN>3N7bH#f&x zNT{f&K>aeJ;upuq$5|)|gM)*pS59#x%=A2PXlRHJso{NG(0?PII-mfFT6ie1Coa`0M@e-mk)NhaGq7e zYPHhH$Vf#@7l?|c2|c^Iy2?_LaCLRXzrlm*g_Yp-^>y?munR;*rwDtPrKKg7ngqMu z&QlHW8tti^ASyadD2=ddG{WTMB=z+4L}R!}RCI~3ILQzCYQUoB?(UAZ{RUC-TZ99N z{6GY6=bD?FQSbjiRQxsz3JUl`5d57$@4e`E`A`2+pOcfre{zc#|M@TQ_pb&&jlUcC eY5ejVAml%>*BP Date: Tue, 5 Jan 2021 20:37:21 +0000 Subject: [PATCH 14/47] Add files via upload --- apps/hrmdataexport/icon.png | Bin 0 -> 1476 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/hrmdataexport/icon.png diff --git a/apps/hrmdataexport/icon.png b/apps/hrmdataexport/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3689ba1d60f34129775ea33d672ac05d2e1cf803 GIT binary patch literal 1476 zcmV;#1v~nQP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf00v@9M??Vs0RI60 zpuMM)000F?NklE=uy;|Fh27$9b)L&binBmz1x*F5mg~y6fzH_S$rZS#Ldl(*laekx3@=DR#wQ= z)D*eCzGf|OgoK2Ul9CdVot;f$V`E8ha4?~il8cKAVzpYy!omWXpPwgoyPdT#2Hb!{ z`uOrUg*fk2n`Af(!}8srK6*xyvGRl_xH4|t&RU~bsU7K$dl`3 zy0x{%!kWkJ?Jdp7$oPtrnVHFJ&SGO@gNB8LDRM%HihT0iu(D9j1A4l=yqs26R?^qk zSEf3T^Ye3~o6w3dbXd>d+}zNPjt-iXltlgf{HU+5FO7+bp^c4=^z7`6xg@;3z4257 zyiH9_d|QYS5D-99Qc`GNUmtyZd}J;OFcRM0-kLlawIV$8YRt^cP=9}ajaQ_Xmlxme z{r#P_&;qWtwzl$KEJks0F?z#*mX;Q@4M(NGRU6HOh2*)4qwqOmUS1yh$biOGFtiO& zFL?k=Y#1q|tx~A2u4YXHz+%3T znOy)p^JuG6eOcii=c&LfNQ7Nd0&CKJ&t*EH3N2BC{FdyZB+~hGBmBRD$GqVdYS`E9q zyZPz@H6OclRU&ID=Sm@pj6B8^z@{-&ZrdB^*k;vPH|mMNM3}x_Z-no&x=e* zNMH^DCnqNw4@afIZKjxAKtn@=;<`wBl@q>eXJ?1G1vpp(fLbv%HB~bTwY9YxpPY_*8PoK79#~gb z$J_!Sm*nJR)XNbS>BPhYYc2rFD^vx{D-s(CIgEN92x|(IOF7^mgn1cJk#a{r&87|} zG}LCyFA^IGfSI0$*!%nYtc3vB#KCC}^E09%Pwwo>!bn(LT-2QpK=nwN>3N7bH#f&x zNT{f&K>aeJ;upuq$5|)|gM)*pS59#x%=A2PXlRHJso{NG(0?PII-mfFT6ie1Coa`0M@e-mk)NhaGq7e zYPHhH$Vf#@7l?|c2|c^Iy2?_LaCLRXzrlm*g_Yp-^>y?munR;*rwDtPrKKg7ngqMu z&QlHW8tti^ASyadD2=ddG{WTMB=z+4L}R!}RCI~3ILQzCYQUoB?(UAZ{RUC-TZ99N z{6GY6=bD?FQSbjiRQxsz3JUl`5d57$@4e`E`A`2+pOcfre{zc#|M@TQ_pb&&jlUcC eY5ejVAml%>*BP Date: Tue, 5 Jan 2021 20:37:49 +0000 Subject: [PATCH 15/47] Update apps.json --- apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.json b/apps.json index b95c82b67..daa81cc27 100644 --- a/apps.json +++ b/apps.json @@ -2539,7 +2539,7 @@ { "id": "hrmdataexp", "name": "HRM Data Exporter", "shortName":"HRM Data Exporter", - "icon": "app-icon.png", + "icon": "icon.png", "version":"0.01", "description": "export raw hrm signal data to a csv file", "tags": "", From 8b36a3d2310ee2212325f93e51bf57dd57b27a28 Mon Sep 17 00:00:00 2001 From: Ben Jabituya <74158243+jabituyaben@users.noreply.github.com> Date: Tue, 5 Jan 2021 20:46:11 +0000 Subject: [PATCH 16/47] Update README.md --- apps/hrmdataexport/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/hrmdataexport/README.md b/apps/hrmdataexport/README.md index 122b7f21e..f84d01cf5 100644 --- a/apps/hrmdataexport/README.md +++ b/apps/hrmdataexport/README.md @@ -4,4 +4,4 @@ Extract hrm raw signal data to CSV file Simple app that will run the heart rate monitor for a defined period of time you set at the start. The max time value is 60 minutes but you can increase this just by changing the value in the app's script code if you wanted to - be mindful that your log file can get large and there are storage limitations if you start trying to log beyond this max. The hrm sensor is sampled @50Hz and this app does not do any processing on it, the array is written as-is. There is an example Python script that can process this signal, smooth it and also extract a myriad of heart rate variability metrics using the hrvanalysis library: -https://github.com/jabituyaben/BangleJS-HRM-Signal-Processing \ No newline at end of file +https://github.com/jabituyaben/BangleJS-HRM-Signal-Processing From f65f16254ac74326f4bc6761cbff0c7b2d04c856 Mon Sep 17 00:00:00 2001 From: Ben Jabituya <74158243+jabituyaben@users.noreply.github.com> Date: Tue, 5 Jan 2021 20:57:52 +0000 Subject: [PATCH 17/47] Update apps.json --- apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.json b/apps.json index daa81cc27..ae80dd772 100644 --- a/apps.json +++ b/apps.json @@ -2536,7 +2536,7 @@ {"name":"edisonsball.img","url":"app-icon.js","evaluate":true} ] }, -{ "id": "hrmdataexp", +{ "id": "hrmdataexport", "name": "HRM Data Exporter", "shortName":"HRM Data Exporter", "icon": "icon.png", From f522bdd9fb3039aa61bff3b5cecf0e7d65b9142c Mon Sep 17 00:00:00 2001 From: Ben Jabituya <74158243+jabituyaben@users.noreply.github.com> Date: Tue, 5 Jan 2021 21:06:14 +0000 Subject: [PATCH 18/47] Update app-icon.js --- apps/hrmdataexport/app-icon.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/hrmdataexport/app-icon.js b/apps/hrmdataexport/app-icon.js index c859c841e..8cd7e4acb 100644 --- a/apps/hrmdataexport/app-icon.js +++ b/apps/hrmdataexport/app-icon.js @@ -1 +1 @@ -E.toArrayBuffer(atob("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AA/AAAD/4H/wAAP/8P/8AAf/+f/+AA/A//B/AA+AP8A/AB8AH4B/gB4ADwD/gDwABgH3wDwAAAPjwDwAAAfDwDwBAA+DwDwDgB8DwDwHwD4DwB4D4HwHgB4B8PgHgB8A+fAPgA8Af+APAA+AP8AfAAfAH4A+AAPgDwB8AAPwBgD8AAH4AAH4AAD4AAHwAAB+AAfgAAA/AA/AAAAfgB+AAAAPwD8AAAAH4H4AAAAD8PwAAAAB+fgAAAAA//AAAAAAf+AAAAAAH8AAAAAADwAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA")) +require("heatshrink").decompress(atob("AH4A/ACkBmf/+cgBAcCn//mcQCxEC/4ADDAQIIAAokBAAkQgIHF+YWGh4OF//xj4IG+AuIkMAiQSFBAgwFKgUwMg5aCJgZhEIwIfFIoXxAwpIFBAJPFFASiCPYgfDLwSYGl/yFwphBIAgXBZI0CLovxAYIXEBIJFEDYouCEoIRFAosvGgguDCI5uEUoJrEFwgcCO5AQEFwwjBL4kvawYRFDosD/6YDa4TOGiAcFaA4eBGwYTDFwpYCIAQREbAb/DFwheBaAxgBBwYeCCAogBLwhgDP4gwCVYhGBLwgpEKAYGCFwZuBIwxIDHIkfFwgMGSIp5EgInDOoSNEAAgLBEZAuB/4WIOQYwDFwpNEPJAwGFwR1HGAxVENIQuKGAjDEXYIuMGA4uPFInzFIIECCxwqEMo4wOAAQuQXIguTXQj1IGBz0GAB0fUZ7cHaRoA/AGoA==")) From 8a2cc6fddeb2742b7235b66eeffb0e989e8cf6b0 Mon Sep 17 00:00:00 2001 From: Ben Jabituya <74158243+jabituyaben@users.noreply.github.com> Date: Tue, 5 Jan 2021 21:07:35 +0000 Subject: [PATCH 19/47] Update app-icon.js --- apps/hrmdataexport/app-icon.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/hrmdataexport/app-icon.js b/apps/hrmdataexport/app-icon.js index 8cd7e4acb..f493620e3 100644 --- a/apps/hrmdataexport/app-icon.js +++ b/apps/hrmdataexport/app-icon.js @@ -1 +1 @@ -require("heatshrink").decompress(atob("AH4A/ACkBmf/+cgBAcCn//mcQCxEC/4ADDAQIIAAokBAAkQgIHF+YWGh4OF//xj4IG+AuIkMAiQSFBAgwFKgUwMg5aCJgZhEIwIfFIoXxAwpIFBAJPFFASiCPYgfDLwSYGl/yFwphBIAgXBZI0CLovxAYIXEBIJFEDYouCEoIRFAosvGgguDCI5uEUoJrEFwgcCO5AQEFwwjBL4kvawYRFDosD/6YDa4TOGiAcFaA4eBGwYTDFwpYCIAQREbAb/DFwheBaAxgBBwYeCCAogBLwhgDP4gwCVYhGBLwgpEKAYGCFwZuBIwxIDHIkfFwgMGSIp5EgInDOoSNEAAgLBEZAuB/4WIOQYwDFwpNEPJAwGFwR1HGAxVENIQuKGAjDEXYIuMGA4uPFInzFIIECCxwqEMo4wOAAQuQXIguTXQj1IGBz0GAB0fUZ7cHaRoA/AGoA==")) +require("heatshrink").decompress(atob("mEwwkEIf4A/ACkBmf/+cgBAcCn//mcQCxEC/4ADDAQIIAAokBAAkQgIHF+YWGh4OF//xj4IG+AuIkMAiQSFBAgwFKgUwMg5aCJgZhEIwIfFIoXxAwpIFBAJPFFASiCPYgfDLwSYGl/yFwphBIAgXBZI0CLovxAYIXEBIJFEDYouCEoIRFAosvGgguDCI5uEUoJrEFwgcCO5AQEFwwjBL4kvawYRFDosD/6YDa4TOGiAcFaA4eBGwYTDFwpYCIAQREbAb/DFwheBaAxgBBwYeCCAogBLwhgDP4gwCVYhGBLwgpEKAYGCFwZuBIwxIDHIkfFwgMGSIp5EgInDOoSNEAAgLBEZAuB/4WIOQYwDFwpNEPJAwGFwR1HGAxVENIQuKGAjDEXYIuMGA4uPFInzFIIECCxwqEMo4wOAAQuQXIguTXQj1IGBz0GAB0fUZ7cHaRoA/AGo=")) From da37b97062537f3c98fd1d8e8ab44c6b962dee7a Mon Sep 17 00:00:00 2001 From: Ben Jabituya <74158243+jabituyaben@users.noreply.github.com> Date: Tue, 5 Jan 2021 21:13:32 +0000 Subject: [PATCH 20/47] Update apps.json --- apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.json b/apps.json index ae80dd772..8780b7c43 100644 --- a/apps.json +++ b/apps.json @@ -2546,7 +2546,7 @@ "readme": "README.md", "storage": [ {"name":"hrmdataexp.app.js","url":"app.js"}, - {"name":"hrmdataexp.img","url":"app-icon.js","evaluate":true} + {"name":"hrmdataexp.img","url":"app-icon.js","evaluate":false} ] } ] From 772c15158cd57273c5a645b6f9f120ca0f6a8ec0 Mon Sep 17 00:00:00 2001 From: Ben Jabituya <74158243+jabituyaben@users.noreply.github.com> Date: Tue, 5 Jan 2021 21:15:40 +0000 Subject: [PATCH 21/47] Create hrmexp.js --- apps/hrmdataexport/hrmexp.js | 97 ++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 apps/hrmdataexport/hrmexp.js diff --git a/apps/hrmdataexport/hrmexp.js b/apps/hrmdataexport/hrmexp.js new file mode 100644 index 000000000..f78d3fbf6 --- /dev/null +++ b/apps/hrmdataexport/hrmexp.js @@ -0,0 +1,97 @@ +var counter = 1; +var logging_started; +var interval; +var value; + +var file = require("Storage").open("hrm_log.csv", "w"); +file.write(""); + +file = require("Storage").open("hrm_log.csv", "a"); + +function update_timer() { + g.clear(); + g.setColor("#00ff7f"); + g.setFont("6x8", 4); + g.setFontAlign(0, 0); // center font + + g.drawString(counter, 120, 120); + g.setFont("6x8", 2); + g.setFontAlign(-1, -1); + g.drawString("-", 220, 200); + g.drawString("+", 220, 40); + g.drawString("GO", 210, 120); + + g.setColor("#ffffff"); + g.setFontAlign(0, 0); // center font + g.drawString("Timer (minutes)", 120, 90); + + g.setFont("6x8", 4); // bitmap font, 8x magnified + + if (!logging_started) + g.flip(); +} + +function btn1Pressed() { + if (!logging_started) { + if (counter < 60) + counter += 1; + else + counter = 1; + update_timer(); + } +} + +function btn3Pressed() { + if (!logging_started) { + if (counter > 1) + counter -= 1; + else + counter = 60; + update_timer(); + } +} + +function btn2Pressed() { + launchtime = 0 | getTime(); + file.write(launchtime + "," + "\n"); + logging_started = true; + counter = counter * 60; + interval = setInterval(countDown, 1000); + Bangle.setHRMPower(1); +} + +function fmtMSS(e) { + var m = Math.floor(e % 3600 / 60).toString().padStart(2, '0'), + s = Math.floor(e % 60).toString().padStart(2, '0'); + return m + ':' + s; +} + +function countDown() { + g.clear(); + counter--; + if (counter == 0) { + Bangle.setHRMPower(0); + clearInterval(interval); + g.drawString("Finished", g.getWidth() / 2, g.getHeight() / 2); + Bangle.buzz(500, 1); + } + else + g.drawString(fmtMSS(counter), g.getWidth() / 2, g.getHeight() / 2); +} + +update_timer(); + +setWatch(btn1Pressed, BTN1, { repeat: true }); +setWatch(btn2Pressed, BTN2, { repeat: true }); +setWatch(btn3Pressed, BTN3, { repeat: true }); + +Bangle.on('HRM', function (hrm) { + for (let i = 0; i < hrm.raw.length; i++) { + value = hrm.raw[i]; + if (value < -2) + value = -2; + if (value > 6) + value = 6; + file.write(value + "," + "\n"); + } +}); From ae87413d2f71bdb9fe96721e7a45114c4020f368 Mon Sep 17 00:00:00 2001 From: Ben Jabituya <74158243+jabituyaben@users.noreply.github.com> Date: Tue, 5 Jan 2021 21:15:50 +0000 Subject: [PATCH 22/47] Delete app.js --- apps/hrmdataexport/app.js | 97 --------------------------------------- 1 file changed, 97 deletions(-) delete mode 100644 apps/hrmdataexport/app.js diff --git a/apps/hrmdataexport/app.js b/apps/hrmdataexport/app.js deleted file mode 100644 index e75eb5e44..000000000 --- a/apps/hrmdataexport/app.js +++ /dev/null @@ -1,97 +0,0 @@ -var counter = 1; -var logging_started; -var interval; -var value; - -var file = require("Storage").open("hrm_log.csv", "w"); -file.write(""); - -file = require("Storage").open("hrm_log.csv", "a"); - -function update_timer() { - g.clear(); - g.setColor("#00ff7f"); - g.setFont("6x8", 4); - g.setFontAlign(0, 0); // center font - - g.drawString(counter, 120, 120); - g.setFont("6x8", 2); - g.setFontAlign(-1, -1); - g.drawString("-", 220, 200); - g.drawString("+", 220, 40); - g.drawString("GO", 210, 120); - - g.setColor("#ffffff"); - g.setFontAlign(0, 0); // center font - g.drawString("Timer (minutes)", 120, 90); - - g.setFont("6x8", 4); // bitmap font, 8x magnified - - if (!logging_started) - g.flip(); -} - -function btn1Pressed() { - if (!logging_started) { - if (counter < 60) - counter += 1; - else - counter = 1; - update_timer(); - } -} - -function btn3Pressed() { - if (!logging_started) { - if (counter > 1) - counter -= 1; - else - counter = 60; - update_timer(); - } -} - -function btn2Pressed() { - launchtime = 0 | getTime(); - file.write(launchtime + "," + "\n"); - logging_started = true; - counter = counter * 60; - interval = setInterval(countDown, 1000); - Bangle.setHRMPower(1); -} - -function fmtMSS(e) { - var m = Math.floor(e % 3600 / 60).toString().padStart(2, '0'), - s = Math.floor(e % 60).toString().padStart(2, '0'); - return m + ':' + s; -} - -function countDown() { - g.clear(); - counter--; - if (counter == 0) { - Bangle.setHRMPower(0); - clearInterval(interval); - g.drawString("Finished", g.getWidth() / 2, g.getHeight() / 2); - Bangle.buzz(500, 1); - } - else - g.drawString(fmtMSS(counter), g.getWidth() / 2, g.getHeight() / 2); -} - -update_timer(); - -setWatch(btn1Pressed, BTN1, { repeat: true }); -setWatch(btn2Pressed, BTN2, { repeat: true }); -setWatch(btn3Pressed, BTN3, { repeat: true }); - -Bangle.on('HRM', function (hrm) { - for (let i = 0; i < hrm.raw.length; i++) { - value = hrm.raw[i]; - if (value < -2) - value = -2; - if (value > 6) - value = 6; - file.write(value + "," + "\n"); - } -}); \ No newline at end of file From 894eb7ea03c5ca9802d7cf4485a18c82bed3340d Mon Sep 17 00:00:00 2001 From: Ben Jabituya <74158243+jabituyaben@users.noreply.github.com> Date: Tue, 5 Jan 2021 21:16:25 +0000 Subject: [PATCH 23/47] Update apps.json --- apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.json b/apps.json index 8780b7c43..252f4e39a 100644 --- a/apps.json +++ b/apps.json @@ -2545,7 +2545,7 @@ "tags": "", "readme": "README.md", "storage": [ - {"name":"hrmdataexp.app.js","url":"app.js"}, + {"name":"hrmdataexp.app.js","url":"hrmexp.js"}, {"name":"hrmdataexp.img","url":"app-icon.js","evaluate":false} ] } From 5e49df5b21485065d152697a60db697a3eab5e40 Mon Sep 17 00:00:00 2001 From: Ben Jabituya <74158243+jabituyaben@users.noreply.github.com> Date: Tue, 5 Jan 2021 21:18:55 +0000 Subject: [PATCH 24/47] Update apps.json --- apps.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps.json b/apps.json index 252f4e39a..de1157e16 100644 --- a/apps.json +++ b/apps.json @@ -2537,8 +2537,8 @@ ] }, { "id": "hrmdataexport", - "name": "HRM Data Exporter", - "shortName":"HRM Data Exporter", + "name": "HR Data Exp", + "shortName":"HRDataExp", "icon": "icon.png", "version":"0.01", "description": "export raw hrm signal data to a csv file", From 476a033c1a18195c818d190cde14660998e097e9 Mon Sep 17 00:00:00 2001 From: Ben Jabituya <74158243+jabituyaben@users.noreply.github.com> Date: Tue, 5 Jan 2021 21:24:15 +0000 Subject: [PATCH 25/47] Update app-icon.js --- apps/hrmdataexport/app-icon.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/hrmdataexport/app-icon.js b/apps/hrmdataexport/app-icon.js index f493620e3..d81dbb56e 100644 --- a/apps/hrmdataexport/app-icon.js +++ b/apps/hrmdataexport/app-icon.js @@ -1 +1 @@ -require("heatshrink").decompress(atob("mEwwkEIf4A/ACkBmf/+cgBAcCn//mcQCxEC/4ADDAQIIAAokBAAkQgIHF+YWGh4OF//xj4IG+AuIkMAiQSFBAgwFKgUwMg5aCJgZhEIwIfFIoXxAwpIFBAJPFFASiCPYgfDLwSYGl/yFwphBIAgXBZI0CLovxAYIXEBIJFEDYouCEoIRFAosvGgguDCI5uEUoJrEFwgcCO5AQEFwwjBL4kvawYRFDosD/6YDa4TOGiAcFaA4eBGwYTDFwpYCIAQREbAb/DFwheBaAxgBBwYeCCAogBLwhgDP4gwCVYhGBLwgpEKAYGCFwZuBIwxIDHIkfFwgMGSIp5EgInDOoSNEAAgLBEZAuB/4WIOQYwDFwpNEPJAwGFwR1HGAxVENIQuKGAjDEXYIuMGA4uPFInzFIIECCxwqEMo4wOAAQuQXIguTXQj1IGBz0GAB0fUZ7cHaRoA/AGo=")) +E.toArrayBuffer(atob("MDABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAA8AAAAAAA8AAAAAAA8AAAAAAA8AAAAAAA8AAAAAAA8AAAAAAA8AAAAAAA8AAAAYAA8AAAA8AA8ABgB8AA8ADwD4AA8AH4HwAA8AP8PgAA8Af+fAAA8A//+AAA8B+P8AAA8D4H4AAA8HwDwAAA8PgBgAAA8PAAAAAA8GAAAAAA8AAAAAAA8AAAAAAA8AAAAAAA8AAAAAAA8AAAAAAA8AAAAAAA8AAAAAAA8AAAAAAA8AAAAAAA8AAAAAAA/////+AA//////AAf/////AAP////+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA")) From 9681ef1a019542a30eb40f6f88557823c2a52ded Mon Sep 17 00:00:00 2001 From: Ben Jabituya <74158243+jabituyaben@users.noreply.github.com> Date: Tue, 5 Jan 2021 21:45:33 +0000 Subject: [PATCH 26/47] Update app-icon.js --- apps/hrmdataexport/app-icon.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/hrmdataexport/app-icon.js b/apps/hrmdataexport/app-icon.js index d81dbb56e..95a83c636 100644 --- a/apps/hrmdataexport/app-icon.js +++ b/apps/hrmdataexport/app-icon.js @@ -1 +1 @@ -E.toArrayBuffer(atob("MDABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAA8AAAAAAA8AAAAAAA8AAAAAAA8AAAAAAA8AAAAAAA8AAAAAAA8AAAAAAA8AAAAYAA8AAAA8AA8ABgB8AA8ADwD4AA8AH4HwAA8AP8PgAA8Af+fAAA8A//+AAA8B+P8AAA8D4H4AAA8HwDwAAA8PgBgAAA8PAAAAAA8GAAAAAA8AAAAAAA8AAAAAAA8AAAAAAA8AAAAAAA8AAAAAAA8AAAAAAA8AAAAAAA8AAAAAAA8AAAAAAA8AAAAAAA/////+AA//////AAf/////AAP////+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA")) +E.toArrayBuffer(atob("MDABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AA/AAAD/4H/wAAP/8P/8AAf/+f/+AA/A//B/AA+AP8A/AB8AH4B/gB4ADwD/gDwABgH3wDwAAAPjwDwAAAfDwDwBAA+DwDwDgB8DwDwHwD4DwB4D4HwHgB4B8PgHgB8A+fAPgA8Af+APAA+AP8AfAAfAH4A+AAPgDwB8AAPwBgD8AAH4AAH4AAD4AAHwAAB+AAfgAAA/AA/AAAAfgB+AAAAPwD8AAAAH4H4AAAAD8PwAAAAB+fgAAAAA//AAAAAAf+AAAAAAH8AAAAAADwAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA")) From fb54b436010ca84ccd4739202c14084666d22c4f Mon Sep 17 00:00:00 2001 From: Ben Jabituya <74158243+jabituyaben@users.noreply.github.com> Date: Tue, 5 Jan 2021 21:57:49 +0000 Subject: [PATCH 27/47] Update apps.json --- apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.json b/apps.json index de1157e16..649d3f3c9 100644 --- a/apps.json +++ b/apps.json @@ -2546,7 +2546,7 @@ "readme": "README.md", "storage": [ {"name":"hrmdataexp.app.js","url":"hrmexp.js"}, - {"name":"hrmdataexp.img","url":"app-icon.js","evaluate":false} + {"name":"hrmdataexp.img","url":"app-icon.js","evaluate":true} ] } ] From dc0b64e04485395f408217b0006dd9f18fa98caf Mon Sep 17 00:00:00 2001 From: Ben Jabituya <74158243+jabituyaben@users.noreply.github.com> Date: Tue, 5 Jan 2021 22:21:49 +0000 Subject: [PATCH 28/47] Update app-icon.js --- apps/hrmdataexport/app-icon.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/hrmdataexport/app-icon.js b/apps/hrmdataexport/app-icon.js index 95a83c636..9ce991f64 100644 --- a/apps/hrmdataexport/app-icon.js +++ b/apps/hrmdataexport/app-icon.js @@ -1 +1 @@ -E.toArrayBuffer(atob("MDABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AA/AAAD/4H/wAAP/8P/8AAf/+f/+AA/A//B/AA+AP8A/AB8AH4B/gB4ADwD/gDwABgH3wDwAAAPjwDwAAAfDwDwBAA+DwDwDgB8DwDwHwD4DwB4D4HwHgB4B8PgHgB8A+fAPgA8Af+APAA+AP8AfAAfAH4A+AAPgDwB8AAPwBgD8AAH4AAH4AAD4AAHwAAB+AAfgAAA/AA/AAAAfgB+AAAAPwD8AAAAH4H4AAAAD8PwAAAAB+fgAAAAA//AAAAAAf+AAAAAAH8AAAAAADwAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA")) +E.toArrayBuffer(atob("MDCEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATP/8yAAAAAAAj//MxAAAAAAAAAAAAAC//////8gAAAC//////8gAAAAAAAAAAA/////////EAH////////zAAAAAAAAAA//////////8R//////////8AAAAAAAAD///yEAEv///////yEAEv//8wAAAAAAAv//MAAAAAL/////IAAAAf///yAAAAAAD//zAAAAAAAf///xAAAAH/////AAAAAAH//wAAAAAAAB//8QAAAB//////EAAAAAP/8gAAAAAAAAL/IAAAAf//8S//MAAAAAP/8QAAAAAAAAAiAAAAH///EB//MAAAAA//8AAAAAAQAAAAAAAB///xAA//8AAAAA//8AAAAALxAAAAAAAf//8QAA//8AAAAA//8QAAAC//EAAAAAH///EAAB//8AAAAAP/8gAAAf//8QAAAB///xAAAC//MAAAAAL/8wAAAB///xAAAf//8QAAAD//IAAAAAD//xAAAAH///EAH///EAAAAf//AAAAAAA//zAAAAAf//8R///xAAAAA//zAAAAAAAf//IAAAAB//////8QAAAAL//xAAAAAAAC//8QAAAAH/////EAAAAB//8gAAAAAAAA//8wAAAAAf///xAAAAAD//8AAAAAAAAAH//zAAAAAB//8QAAAAA///EAAAAAAAAAAv//IAAAAAH/EAAAAAL//yAAAAAAAAAAAD//8gAAAAARAAAAAC//8wAAAAAAAAAAAA///yAAAAAAAAAAAv//8AAAAAAAAAAAAAH///IAAAAAAAAAL///EAAAAAAAAAAAAAAf//8gAAAAAAAC///xAAAAAAAAAAAAAAAB///zAAAAAAA///8QAAAAAAAAAAAAAAAAH///MAAAAAP///EAAAAAAAAAAAAAAAAAAf//8wAAAD///xAAAAAAAAAAAAAAAAAAAAP//zEAA///MAAAAAAAAAAAAAAAAAAAAAA///8R///zAAAAAAAAAAAAAAAAAAAAAAAD//////8wAAAAAAAAAAAAAAAAAAAAAAAAL/////MAAAAAAAAAAAAAAAAAAAAAAAAAAv///yAAAAAAAAAAAAAAAAAAAAAAAAAAAC//8gAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==")) From 4288d600e7e6b9aa86a287b131f6004960fa4cab Mon Sep 17 00:00:00 2001 From: Ben Jabituya <74158243+jabituyaben@users.noreply.github.com> Date: Tue, 5 Jan 2021 22:32:06 +0000 Subject: [PATCH 29/47] Update hrmexp.js --- apps/hrmdataexport/hrmexp.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/hrmdataexport/hrmexp.js b/apps/hrmdataexport/hrmexp.js index f78d3fbf6..ec5bf673f 100644 --- a/apps/hrmdataexport/hrmexp.js +++ b/apps/hrmdataexport/hrmexp.js @@ -3,7 +3,7 @@ var logging_started; var interval; var value; -var file = require("Storage").open("hrm_log.csv", "w"); +var file = require("Storage").open("hrm_log.csv", "w+"); file.write(""); file = require("Storage").open("hrm_log.csv", "a"); From a611126292351514e673ba7044a3bfc87b98951f Mon Sep 17 00:00:00 2001 From: Ben Jabituya <74158243+jabituyaben@users.noreply.github.com> Date: Tue, 5 Jan 2021 22:36:33 +0000 Subject: [PATCH 30/47] Update hrmexp.js --- apps/hrmdataexport/hrmexp.js | 220 ++++++++++++++++++++++------------- 1 file changed, 136 insertions(+), 84 deletions(-) diff --git a/apps/hrmdataexport/hrmexp.js b/apps/hrmdataexport/hrmexp.js index ec5bf673f..557155c9a 100644 --- a/apps/hrmdataexport/hrmexp.js +++ b/apps/hrmdataexport/hrmexp.js @@ -1,97 +1,149 @@ -var counter = 1; -var logging_started; -var interval; -var value; +//ADVANCED SETTINGS +var lower_limit_BPM = 49; +var upper_limit_BPM = 140; +var deviation_threshold = 3; -var file = require("Storage").open("hrm_log.csv", "w+"); -file.write(""); +var target_heartrate = 70; +var heartrate_set; -file = require("Storage").open("hrm_log.csv", "a"); - -function update_timer() { - g.clear(); - g.setColor("#00ff7f"); - g.setFont("6x8", 4); - g.setFontAlign(0, 0); // center font - - g.drawString(counter, 120, 120); - g.setFont("6x8", 2); - g.setFontAlign(-1, -1); - g.drawString("-", 220, 200); - g.drawString("+", 220, 40); - g.drawString("GO", 210, 120); - - g.setColor("#ffffff"); - g.setFontAlign(0, 0); // center font - g.drawString("Timer (minutes)", 120, 90); - - g.setFont("6x8", 4); // bitmap font, 8x magnified - - if (!logging_started) - g.flip(); -} +var currentBPM; +var lastBPM; +var firstBPM = true; // first reading since sensor turned on +var HR_samples = []; +var trigger_count = 0; +var file = require("Storage").open("steel_log.csv","a"); +var launchtime; +var alarm_length; function btn1Pressed() { - if (!logging_started) { - if (counter < 60) - counter += 1; - else - counter = 1; - update_timer(); - } -} - -function btn3Pressed() { - if (!logging_started) { - if (counter > 1) - counter -= 1; - else - counter = 60; - update_timer(); - } + if(!heartrate_set){ + target_heartrate++; + update_target_HR(); + } } function btn2Pressed() { - launchtime = 0 | getTime(); - file.write(launchtime + "," + "\n"); - logging_started = true; - counter = counter * 60; - interval = setInterval(countDown, 1000); - Bangle.setHRMPower(1); + heartrate_set = true; + Bangle.setHRMPower(1); + launchtime = 0|getTime(); + g.clear(); + g.setFont("6x8",2); + g.drawString("tracking HR...", 120,120); + g.setFont("6x8",3); + } + +function update_target_HR(){ + + g.clear(); + g.setColor("#00ff7f"); + g.setFont("6x8", 4); + g.setFontAlign(0,0); // center font + + g.drawString(target_heartrate, 120,120); + g.setFont("6x8", 2); + g.setFontAlign(-1,-1); + g.drawString("-", 220, 200); + g.drawString("+", 220, 40); + g.drawString("GO", 210, 120); + + g.setColor("#ffffff"); + g.setFontAlign(0,0); // center font + g.drawString("target HR", 120,90); + + g.setFont("6x8", 1); + g.drawString("if unsure, start with 7-10%\n less than waking average and\n adjust as required", 120,170); + + g.setFont("6x8",3); + g.flip(); } -function fmtMSS(e) { - var m = Math.floor(e % 3600 / 60).toString().padStart(2, '0'), - s = Math.floor(e % 60).toString().padStart(2, '0'); - return m + ':' + s; +function btn3Pressed(){ + if(!heartrate_set){ + target_heartrate--; + update_target_HR(); + } } -function countDown() { - g.clear(); - counter--; - if (counter == 0) { - Bangle.setHRMPower(0); - clearInterval(interval); - g.drawString("Finished", g.getWidth() / 2, g.getHeight() / 2); - Bangle.buzz(500, 1); - } - else - g.drawString(fmtMSS(counter), g.getWidth() / 2, g.getHeight() / 2); -} - -update_timer(); - -setWatch(btn1Pressed, BTN1, { repeat: true }); -setWatch(btn2Pressed, BTN2, { repeat: true }); -setWatch(btn3Pressed, BTN3, { repeat: true }); - -Bangle.on('HRM', function (hrm) { - for (let i = 0; i < hrm.raw.length; i++) { - value = hrm.raw[i]; - if (value < -2) - value = -2; - if (value > 6) - value = 6; - file.write(value + "," + "\n"); +function alarm(){ + if(alarm_length > 0){ + //Bangle.beep(500,4000); + Bangle.buzz(500,1); + alarm_length--; + } + else{ + clearInterval(alarm); + if(trigger_count > 1) + Bangle.setHRMPower(0); + } +} + +function average(nums) { + return nums.reduce((a, b) => (a + b)) / nums.length; +} + +function getStandardDeviation (array) { + const n = array.length; + const mean = array.reduce((a, b) => a + b) / n; + return Math.sqrt(array.map(x => Math.pow(x - mean, 2)).reduce((a, b) => a + b) / n); +} + +function checkHR() { + var bpm = currentBPM, isCurrent = true; + if (bpm===undefined) { + bpm = lastBPM; + isCurrent = false; + } + if (bpm===undefined || bpm < lower_limit_BPM || bpm > upper_limit_BPM) + bpm = "--"; + if (bpm != "--"){ + HR_samples.push(bpm); + // Terminal.println(bpm); + } + + if(HR_samples.length == 5){ + g.clear(); + average_HR = average(HR_samples).toFixed(0); + stdev_HR = getStandardDeviation (HR_samples).toFixed(1); + + g.drawString("HR: " + average_HR, 120,100); + g.drawString("STDEV: " + stdev_HR, 120,160); + HR_samples = []; + if(average_HR < target_heartrate && stdev_HR < deviation_threshold){ + + Bangle.setHRMPower(0); + alarm_length = 4; + setInterval(alarm, 2000); + + trigger_count++; + var csv = [ + 0|getTime(), + launchtime, + average_HR, + stdev_HR + ]; + file.write(csv.join(",")+"\n"); + + heartrate_set = false; + update_target_HR(); + } + } +} + +update_target_HR(); + +setWatch(btn1Pressed, BTN1, {repeat:true}); +setWatch(btn2Pressed, BTN2, {repeat:true}); +setWatch(btn3Pressed, BTN3, {repeat:true}); + +Bangle.on('HRM',function(hrm) { + + if(trigger_count < 2){ + if (firstBPM) + firstBPM=false; // ignore the first one as it's usually rubbish + else { + currentBPM = hrm.bpm; + lastBPM = currentBPM; } + checkHR(); + } }); From bb97ade9b6fbfe1bb43197e56b833bfdeb14d273 Mon Sep 17 00:00:00 2001 From: Ben Jabituya <74158243+jabituyaben@users.noreply.github.com> Date: Tue, 5 Jan 2021 22:52:13 +0000 Subject: [PATCH 31/47] Update apps.json --- apps.json | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/apps.json b/apps.json index 649d3f3c9..9e910e09a 100644 --- a/apps.json +++ b/apps.json @@ -2535,18 +2535,5 @@ {"name":"edisonsball.app.js","url":"app.js"}, {"name":"edisonsball.img","url":"app-icon.js","evaluate":true} ] -}, -{ "id": "hrmdataexport", - "name": "HR Data Exp", - "shortName":"HRDataExp", - "icon": "icon.png", - "version":"0.01", - "description": "export raw hrm signal data to a csv file", - "tags": "", - "readme": "README.md", - "storage": [ - {"name":"hrmdataexp.app.js","url":"hrmexp.js"}, - {"name":"hrmdataexp.img","url":"app-icon.js","evaluate":true} - ] } ] From 08ae73a779a0c5760b69c844d4b8e6ad6657ef7c Mon Sep 17 00:00:00 2001 From: Ben Jabituya <74158243+jabituyaben@users.noreply.github.com> Date: Tue, 5 Jan 2021 22:53:16 +0000 Subject: [PATCH 32/47] Create README.md --- apps/hrrawexp/README.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 apps/hrrawexp/README.md diff --git a/apps/hrrawexp/README.md b/apps/hrrawexp/README.md new file mode 100644 index 000000000..5d5c1b18c --- /dev/null +++ b/apps/hrrawexp/README.md @@ -0,0 +1,7 @@ +Extract hrm raw signal data to CSV file +======================================= + +Simple app that will run the heart rate monitor for a defined period of time you set at the start. The max time value is 60 minutes but you can increase this just by changing the value in the app's script code if you wanted to - be mindful that your log file can get large and there are storage limitations if you start trying to log beyond this max. + +The hrm sensor is sampled @50Hz and this app does not do any processing on it, the array is written as-is. There is an example Python script that can process this signal, smooth it and also extract a myriad of heart rate variability metrics using the hrvanalysis library: +https://github.com/jabituyaben/BangleJS-HRM-Signal-Processing From 85b3ed9842b1141862da2e45c199956d8459bd42 Mon Sep 17 00:00:00 2001 From: Ben Jabituya <74158243+jabituyaben@users.noreply.github.com> Date: Tue, 5 Jan 2021 22:54:09 +0000 Subject: [PATCH 33/47] Add files via upload --- apps/hrrawexp/app-icon.png | Bin 0 -> 826 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/hrrawexp/app-icon.png diff --git a/apps/hrrawexp/app-icon.png b/apps/hrrawexp/app-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b120cdb425f7696078594536d3867e97c9784354 GIT binary patch literal 826 zcmV-A1I7G_P)Wqu?F5J1kx$pjY z^WH4(7k;Zb=XbupJLlf}JMU6aQBhG*f{u*ideDy*cpi`AG5n7aoWw!=f_n{eb>cN_ zsO4K)%XJn1;y0YAR*@+Y{B0dbKS-F=q)P04mUF{mW;t# z@$n0BykM@Icq^~`8@OF?!6-)2SBudSdHzUTjD|dcv6AvpT&_jY`KQsHM;^Xvl6=`X zibXN6hw)A$`S}>11M-K^74upw+*db*9Wo>9=79WuJQQ#@Q(S9Wwl2J;Z9lsMO%lwF(TZcarR`KdpWIup`0Q+g%`{=Ok|w%JD!QH*@|x=*6|qQY7xHeu zPtpo_R`%XMiqB2&|DP7FbbQRWm=_zqqz8mPDq_BHqME{&i2{3s z7P*N0unecj^#zj;;;C4k4i7%#Uy%JoRxh?Uk|#7$!vz;OFWd+9SgG+%o)%-Kx7Vqx zF0s%!)+X}3sr)-;Agg>tw1@uYHR*=EH!p35sA@hWb$ zQGQbR{iqZhmEQtIV`o|UhA+Uyw$uc635S}t(Tktump>+aYnU_ip_zaJ>%`OKE@v-ph!=L!j^y6ejMMXv6K7Sbe9D~&mDgXcg07*qoM6N<$ Eg1f_xtN;K2 literal 0 HcmV?d00001 From f964a9bb6ccd41c7ce64466b585f2768abf0b29a Mon Sep 17 00:00:00 2001 From: Ben Jabituya <74158243+jabituyaben@users.noreply.github.com> Date: Tue, 5 Jan 2021 22:55:18 +0000 Subject: [PATCH 34/47] Create app.js --- apps/hrrawexp/app.js | 97 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 apps/hrrawexp/app.js diff --git a/apps/hrrawexp/app.js b/apps/hrrawexp/app.js new file mode 100644 index 000000000..f78d3fbf6 --- /dev/null +++ b/apps/hrrawexp/app.js @@ -0,0 +1,97 @@ +var counter = 1; +var logging_started; +var interval; +var value; + +var file = require("Storage").open("hrm_log.csv", "w"); +file.write(""); + +file = require("Storage").open("hrm_log.csv", "a"); + +function update_timer() { + g.clear(); + g.setColor("#00ff7f"); + g.setFont("6x8", 4); + g.setFontAlign(0, 0); // center font + + g.drawString(counter, 120, 120); + g.setFont("6x8", 2); + g.setFontAlign(-1, -1); + g.drawString("-", 220, 200); + g.drawString("+", 220, 40); + g.drawString("GO", 210, 120); + + g.setColor("#ffffff"); + g.setFontAlign(0, 0); // center font + g.drawString("Timer (minutes)", 120, 90); + + g.setFont("6x8", 4); // bitmap font, 8x magnified + + if (!logging_started) + g.flip(); +} + +function btn1Pressed() { + if (!logging_started) { + if (counter < 60) + counter += 1; + else + counter = 1; + update_timer(); + } +} + +function btn3Pressed() { + if (!logging_started) { + if (counter > 1) + counter -= 1; + else + counter = 60; + update_timer(); + } +} + +function btn2Pressed() { + launchtime = 0 | getTime(); + file.write(launchtime + "," + "\n"); + logging_started = true; + counter = counter * 60; + interval = setInterval(countDown, 1000); + Bangle.setHRMPower(1); +} + +function fmtMSS(e) { + var m = Math.floor(e % 3600 / 60).toString().padStart(2, '0'), + s = Math.floor(e % 60).toString().padStart(2, '0'); + return m + ':' + s; +} + +function countDown() { + g.clear(); + counter--; + if (counter == 0) { + Bangle.setHRMPower(0); + clearInterval(interval); + g.drawString("Finished", g.getWidth() / 2, g.getHeight() / 2); + Bangle.buzz(500, 1); + } + else + g.drawString(fmtMSS(counter), g.getWidth() / 2, g.getHeight() / 2); +} + +update_timer(); + +setWatch(btn1Pressed, BTN1, { repeat: true }); +setWatch(btn2Pressed, BTN2, { repeat: true }); +setWatch(btn3Pressed, BTN3, { repeat: true }); + +Bangle.on('HRM', function (hrm) { + for (let i = 0; i < hrm.raw.length; i++) { + value = hrm.raw[i]; + if (value < -2) + value = -2; + if (value > 6) + value = 6; + file.write(value + "," + "\n"); + } +}); From 35f403d8441eaa21f9c8a6ffb2b3e83d6e64a955 Mon Sep 17 00:00:00 2001 From: Ben Jabituya <74158243+jabituyaben@users.noreply.github.com> Date: Tue, 5 Jan 2021 22:57:04 +0000 Subject: [PATCH 35/47] Create app-icon.js --- apps/hrrawexp/app-icon.js | 1 + 1 file changed, 1 insertion(+) create mode 100644 apps/hrrawexp/app-icon.js diff --git a/apps/hrrawexp/app-icon.js b/apps/hrrawexp/app-icon.js new file mode 100644 index 000000000..01718675e --- /dev/null +++ b/apps/hrrawexp/app-icon.js @@ -0,0 +1 @@ +E.toArrayBuffer(atob("MDCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAP4AAD/8A//AAH//D//gAP//n//gAf/////AA/////+AA/////8MA/////4cB/////w+B/////B+B////+D+B////8H+B////4P+B////w/+B/+P/h/+B/+H/D/+A/+D+H/8A//h8P/8A//w4f/8Af/4A//4Af/8B//4AP/+D//wAP//H//wAH/////gAD/////AAB////+AAA////+AAAf///8AAAP///wAAAH///gAAAD///AAAAA//+AAAAAf/4AAAAAH/gAAAAAB+AAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==")) From 7d65e67af3a7ca6be3f36a0d1b2eacad470fdcc7 Mon Sep 17 00:00:00 2001 From: Ben Jabituya <74158243+jabituyaben@users.noreply.github.com> Date: Tue, 5 Jan 2021 22:57:50 +0000 Subject: [PATCH 36/47] Update apps.json --- apps.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/apps.json b/apps.json index 9e910e09a..5b2e7840f 100644 --- a/apps.json +++ b/apps.json @@ -2535,5 +2535,18 @@ {"name":"edisonsball.app.js","url":"app.js"}, {"name":"edisonsball.img","url":"app-icon.js","evaluate":true} ] +}, +{ "id": "hrrawexp", + "name": "HRM Data Exporter", + "shortName":"HRM Data Exporter", + "icon": "app-icon.png", + "version":"0.01", + "description": "export raw hrm signal data to a csv file", + "tags": "", + "readme": "README.md", + "storage": [ + {"name":"hrmdataexport.app.js","url":"app.js"}, + {"name":"hrmdataexport.img","url":"app-icon.js","evaluate":true} + ] } ] From 08763c0719441fabfb282f50b7c36c2f7bc1ae07 Mon Sep 17 00:00:00 2001 From: Ben Jabituya <74158243+jabituyaben@users.noreply.github.com> Date: Tue, 5 Jan 2021 23:01:41 +0000 Subject: [PATCH 37/47] Update apps.json --- apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.json b/apps.json index 5b2e7840f..2a7ea0c30 100644 --- a/apps.json +++ b/apps.json @@ -2538,7 +2538,7 @@ }, { "id": "hrrawexp", "name": "HRM Data Exporter", - "shortName":"HRM Data Exporter", + "shortName":"HRM Data Exporter", "icon": "app-icon.png", "version":"0.01", "description": "export raw hrm signal data to a csv file", From ccd1f1294e068c4cd042bab7fd6173815b8a082a Mon Sep 17 00:00:00 2001 From: Ben Jabituya <74158243+jabituyaben@users.noreply.github.com> Date: Tue, 5 Jan 2021 23:06:46 +0000 Subject: [PATCH 38/47] Update apps.json --- apps.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/apps.json b/apps.json index 2a7ea0c30..fa1a2b7ed 100644 --- a/apps.json +++ b/apps.json @@ -2548,5 +2548,18 @@ {"name":"hrmdataexport.app.js","url":"app.js"}, {"name":"hrmdataexport.img","url":"app-icon.js","evaluate":true} ] +}, +{ "id": "ben_text", + "name": "test_app", + "shortName":"test_app", + "icon": "app-icon.png", + "version":"0.01", + "description": "test_app", + "tags": "", + "readme": "README.md", + "storage": [ + {"name":"test_app.app.js","url":"app.js"}, + {"name":"test_app.img","url":"app-icon.js","evaluate":true} + ] } ] From e8382f1221535f90db7fc0799cdd9a6cb59ef10b Mon Sep 17 00:00:00 2001 From: Ben Jabituya <74158243+jabituyaben@users.noreply.github.com> Date: Tue, 5 Jan 2021 23:22:43 +0000 Subject: [PATCH 39/47] Update apps.json --- apps.json | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/apps.json b/apps.json index fa1a2b7ed..2a7ea0c30 100644 --- a/apps.json +++ b/apps.json @@ -2548,18 +2548,5 @@ {"name":"hrmdataexport.app.js","url":"app.js"}, {"name":"hrmdataexport.img","url":"app-icon.js","evaluate":true} ] -}, -{ "id": "ben_text", - "name": "test_app", - "shortName":"test_app", - "icon": "app-icon.png", - "version":"0.01", - "description": "test_app", - "tags": "", - "readme": "README.md", - "storage": [ - {"name":"test_app.app.js","url":"app.js"}, - {"name":"test_app.img","url":"app-icon.js","evaluate":true} - ] } ] From 6c09713e9029322d0383b97ac148f385731904fa Mon Sep 17 00:00:00 2001 From: Ben Jabituya <74158243+jabituyaben@users.noreply.github.com> Date: Wed, 6 Jan 2021 13:24:15 +0000 Subject: [PATCH 40/47] Update apps.json --- apps.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps.json b/apps.json index 2a7ea0c30..d7fc6c2b3 100644 --- a/apps.json +++ b/apps.json @@ -2545,8 +2545,8 @@ "tags": "", "readme": "README.md", "storage": [ - {"name":"hrmdataexport.app.js","url":"app.js"}, - {"name":"hrmdataexport.img","url":"app-icon.js","evaluate":true} + {"name":"hrrawexp.app.js","url":"app.js"}, + {"name":"hrrawexp.img","url":"app-icon.js","evaluate":true} ] } ] From c213a1ab77f7877713886fa4f9633f63b99c321a Mon Sep 17 00:00:00 2001 From: Ben Jabituya <74158243+jabituyaben@users.noreply.github.com> Date: Wed, 6 Jan 2021 13:37:29 +0000 Subject: [PATCH 41/47] remove remove --- apps/hrmdataexport/README.md | 7 -- apps/hrmdataexport/app-icon.js | 1 - apps/hrmdataexport/hrmexp.js | 149 --------------------------------- apps/hrmdataexport/icon.png | Bin 1476 -> 0 bytes 4 files changed, 157 deletions(-) delete mode 100644 apps/hrmdataexport/README.md delete mode 100644 apps/hrmdataexport/app-icon.js delete mode 100644 apps/hrmdataexport/hrmexp.js delete mode 100644 apps/hrmdataexport/icon.png diff --git a/apps/hrmdataexport/README.md b/apps/hrmdataexport/README.md deleted file mode 100644 index f84d01cf5..000000000 --- a/apps/hrmdataexport/README.md +++ /dev/null @@ -1,7 +0,0 @@ -Extract hrm raw signal data to CSV file -======================================= - -Simple app that will run the heart rate monitor for a defined period of time you set at the start. The max time value is 60 minutes but you can increase this just by changing the value in the app's script code if you wanted to - be mindful that your log file can get large and there are storage limitations if you start trying to log beyond this max. - -The hrm sensor is sampled @50Hz and this app does not do any processing on it, the array is written as-is. There is an example Python script that can process this signal, smooth it and also extract a myriad of heart rate variability metrics using the hrvanalysis library: -https://github.com/jabituyaben/BangleJS-HRM-Signal-Processing diff --git a/apps/hrmdataexport/app-icon.js b/apps/hrmdataexport/app-icon.js deleted file mode 100644 index 9ce991f64..000000000 --- a/apps/hrmdataexport/app-icon.js +++ /dev/null @@ -1 +0,0 @@ -E.toArrayBuffer(atob("MDCEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATP/8yAAAAAAAj//MxAAAAAAAAAAAAAC//////8gAAAC//////8gAAAAAAAAAAA/////////EAH////////zAAAAAAAAAA//////////8R//////////8AAAAAAAAD///yEAEv///////yEAEv//8wAAAAAAAv//MAAAAAL/////IAAAAf///yAAAAAAD//zAAAAAAAf///xAAAAH/////AAAAAAH//wAAAAAAAB//8QAAAB//////EAAAAAP/8gAAAAAAAAL/IAAAAf//8S//MAAAAAP/8QAAAAAAAAAiAAAAH///EB//MAAAAA//8AAAAAAQAAAAAAAB///xAA//8AAAAA//8AAAAALxAAAAAAAf//8QAA//8AAAAA//8QAAAC//EAAAAAH///EAAB//8AAAAAP/8gAAAf//8QAAAB///xAAAC//MAAAAAL/8wAAAB///xAAAf//8QAAAD//IAAAAAD//xAAAAH///EAH///EAAAAf//AAAAAAA//zAAAAAf//8R///xAAAAA//zAAAAAAAf//IAAAAB//////8QAAAAL//xAAAAAAAC//8QAAAAH/////EAAAAB//8gAAAAAAAA//8wAAAAAf///xAAAAAD//8AAAAAAAAAH//zAAAAAB//8QAAAAA///EAAAAAAAAAAv//IAAAAAH/EAAAAAL//yAAAAAAAAAAAD//8gAAAAARAAAAAC//8wAAAAAAAAAAAA///yAAAAAAAAAAAv//8AAAAAAAAAAAAAH///IAAAAAAAAAL///EAAAAAAAAAAAAAAf//8gAAAAAAAC///xAAAAAAAAAAAAAAAB///zAAAAAAA///8QAAAAAAAAAAAAAAAAH///MAAAAAP///EAAAAAAAAAAAAAAAAAAf//8wAAAD///xAAAAAAAAAAAAAAAAAAAAP//zEAA///MAAAAAAAAAAAAAAAAAAAAAA///8R///zAAAAAAAAAAAAAAAAAAAAAAAD//////8wAAAAAAAAAAAAAAAAAAAAAAAAL/////MAAAAAAAAAAAAAAAAAAAAAAAAAAv///yAAAAAAAAAAAAAAAAAAAAAAAAAAAC//8gAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==")) diff --git a/apps/hrmdataexport/hrmexp.js b/apps/hrmdataexport/hrmexp.js deleted file mode 100644 index 557155c9a..000000000 --- a/apps/hrmdataexport/hrmexp.js +++ /dev/null @@ -1,149 +0,0 @@ -//ADVANCED SETTINGS -var lower_limit_BPM = 49; -var upper_limit_BPM = 140; -var deviation_threshold = 3; - -var target_heartrate = 70; -var heartrate_set; - -var currentBPM; -var lastBPM; -var firstBPM = true; // first reading since sensor turned on -var HR_samples = []; -var trigger_count = 0; -var file = require("Storage").open("steel_log.csv","a"); -var launchtime; -var alarm_length; - -function btn1Pressed() { - if(!heartrate_set){ - target_heartrate++; - update_target_HR(); - } -} - -function btn2Pressed() { - heartrate_set = true; - Bangle.setHRMPower(1); - launchtime = 0|getTime(); - g.clear(); - g.setFont("6x8",2); - g.drawString("tracking HR...", 120,120); - g.setFont("6x8",3); - } - -function update_target_HR(){ - - g.clear(); - g.setColor("#00ff7f"); - g.setFont("6x8", 4); - g.setFontAlign(0,0); // center font - - g.drawString(target_heartrate, 120,120); - g.setFont("6x8", 2); - g.setFontAlign(-1,-1); - g.drawString("-", 220, 200); - g.drawString("+", 220, 40); - g.drawString("GO", 210, 120); - - g.setColor("#ffffff"); - g.setFontAlign(0,0); // center font - g.drawString("target HR", 120,90); - - g.setFont("6x8", 1); - g.drawString("if unsure, start with 7-10%\n less than waking average and\n adjust as required", 120,170); - - g.setFont("6x8",3); - g.flip(); -} - -function btn3Pressed(){ - if(!heartrate_set){ - target_heartrate--; - update_target_HR(); - } -} - -function alarm(){ - if(alarm_length > 0){ - //Bangle.beep(500,4000); - Bangle.buzz(500,1); - alarm_length--; - } - else{ - clearInterval(alarm); - if(trigger_count > 1) - Bangle.setHRMPower(0); - } -} - -function average(nums) { - return nums.reduce((a, b) => (a + b)) / nums.length; -} - -function getStandardDeviation (array) { - const n = array.length; - const mean = array.reduce((a, b) => a + b) / n; - return Math.sqrt(array.map(x => Math.pow(x - mean, 2)).reduce((a, b) => a + b) / n); -} - -function checkHR() { - var bpm = currentBPM, isCurrent = true; - if (bpm===undefined) { - bpm = lastBPM; - isCurrent = false; - } - if (bpm===undefined || bpm < lower_limit_BPM || bpm > upper_limit_BPM) - bpm = "--"; - if (bpm != "--"){ - HR_samples.push(bpm); - // Terminal.println(bpm); - } - - if(HR_samples.length == 5){ - g.clear(); - average_HR = average(HR_samples).toFixed(0); - stdev_HR = getStandardDeviation (HR_samples).toFixed(1); - - g.drawString("HR: " + average_HR, 120,100); - g.drawString("STDEV: " + stdev_HR, 120,160); - HR_samples = []; - if(average_HR < target_heartrate && stdev_HR < deviation_threshold){ - - Bangle.setHRMPower(0); - alarm_length = 4; - setInterval(alarm, 2000); - - trigger_count++; - var csv = [ - 0|getTime(), - launchtime, - average_HR, - stdev_HR - ]; - file.write(csv.join(",")+"\n"); - - heartrate_set = false; - update_target_HR(); - } - } -} - -update_target_HR(); - -setWatch(btn1Pressed, BTN1, {repeat:true}); -setWatch(btn2Pressed, BTN2, {repeat:true}); -setWatch(btn3Pressed, BTN3, {repeat:true}); - -Bangle.on('HRM',function(hrm) { - - if(trigger_count < 2){ - if (firstBPM) - firstBPM=false; // ignore the first one as it's usually rubbish - else { - currentBPM = hrm.bpm; - lastBPM = currentBPM; - } - checkHR(); - } -}); diff --git a/apps/hrmdataexport/icon.png b/apps/hrmdataexport/icon.png deleted file mode 100644 index 3689ba1d60f34129775ea33d672ac05d2e1cf803..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1476 zcmV;#1v~nQP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf00v@9M??Vs0RI60 zpuMM)000F?NklE=uy;|Fh27$9b)L&binBmz1x*F5mg~y6fzH_S$rZS#Ldl(*laekx3@=DR#wQ= z)D*eCzGf|OgoK2Ul9CdVot;f$V`E8ha4?~il8cKAVzpYy!omWXpPwgoyPdT#2Hb!{ z`uOrUg*fk2n`Af(!}8srK6*xyvGRl_xH4|t&RU~bsU7K$dl`3 zy0x{%!kWkJ?Jdp7$oPtrnVHFJ&SGO@gNB8LDRM%HihT0iu(D9j1A4l=yqs26R?^qk zSEf3T^Ye3~o6w3dbXd>d+}zNPjt-iXltlgf{HU+5FO7+bp^c4=^z7`6xg@;3z4257 zyiH9_d|QYS5D-99Qc`GNUmtyZd}J;OFcRM0-kLlawIV$8YRt^cP=9}ajaQ_Xmlxme z{r#P_&;qWtwzl$KEJks0F?z#*mX;Q@4M(NGRU6HOh2*)4qwqOmUS1yh$biOGFtiO& zFL?k=Y#1q|tx~A2u4YXHz+%3T znOy)p^JuG6eOcii=c&LfNQ7Nd0&CKJ&t*EH3N2BC{FdyZB+~hGBmBRD$GqVdYS`E9q zyZPz@H6OclRU&ID=Sm@pj6B8^z@{-&ZrdB^*k;vPH|mMNM3}x_Z-no&x=e* zNMH^DCnqNw4@afIZKjxAKtn@=;<`wBl@q>eXJ?1G1vpp(fLbv%HB~bTwY9YxpPY_*8PoK79#~gb z$J_!Sm*nJR)XNbS>BPhYYc2rFD^vx{D-s(CIgEN92x|(IOF7^mgn1cJk#a{r&87|} zG}LCyFA^IGfSI0$*!%nYtc3vB#KCC}^E09%Pwwo>!bn(LT-2QpK=nwN>3N7bH#f&x zNT{f&K>aeJ;upuq$5|)|gM)*pS59#x%=A2PXlRHJso{NG(0?PII-mfFT6ie1Coa`0M@e-mk)NhaGq7e zYPHhH$Vf#@7l?|c2|c^Iy2?_LaCLRXzrlm*g_Yp-^>y?munR;*rwDtPrKKg7ngqMu z&QlHW8tti^ASyadD2=ddG{WTMB=z+4L}R!}RCI~3ILQzCYQUoB?(UAZ{RUC-TZ99N z{6GY6=bD?FQSbjiRQxsz3JUl`5d57$@4e`E`A`2+pOcfre{zc#|M@TQ_pb&&jlUcC eY5ejVAml%>*BP Date: Wed, 6 Jan 2021 13:50:52 +0000 Subject: [PATCH 42/47] Update README.md --- apps/hrrawexp/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/hrrawexp/README.md b/apps/hrrawexp/README.md index 5d5c1b18c..2b9791798 100644 --- a/apps/hrrawexp/README.md +++ b/apps/hrrawexp/README.md @@ -1,7 +1,7 @@ Extract hrm raw signal data to CSV file ======================================= -Simple app that will run the heart rate monitor for a defined period of time you set at the start. The max time value is 60 minutes but you can increase this just by changing the value in the app's script code if you wanted to - be mindful that your log file can get large and there are storage limitations if you start trying to log beyond this max. +Simple app that will run the heart rate monitor for a defined period of time you set at the start. The max time value is 60 minutes. -The hrm sensor is sampled @50Hz and this app does not do any processing on it, the array is written as-is. There is an example Python script that can process this signal, smooth it and also extract a myriad of heart rate variability metrics using the hrvanalysis library: +The hrm sensor is sampled @50Hz and this app does not do any processing on it other than clip overly high/extreme values, the array is written as-is. There is an example Python script that can process this signal, smooth it and also extract a myriad of heart rate variability metrics using the hrvanalysis library: https://github.com/jabituyaben/BangleJS-HRM-Signal-Processing From ce66f37a751aceb151f6f69e054927f278f0c2f8 Mon Sep 17 00:00:00 2001 From: Ben Jabituya <74158243+jabituyaben@users.noreply.github.com> Date: Wed, 6 Jan 2021 13:54:28 +0000 Subject: [PATCH 43/47] Update README.md --- apps/hrrawexp/README.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/apps/hrrawexp/README.md b/apps/hrrawexp/README.md index 2b9791798..b4e698fb8 100644 --- a/apps/hrrawexp/README.md +++ b/apps/hrrawexp/README.md @@ -1,7 +1,10 @@ Extract hrm raw signal data to CSV file ======================================= -Simple app that will run the heart rate monitor for a defined period of time you set at the start. The max time value is 60 minutes. +Simple app that will run the heart rate monitor for a defined period of time you set at the start. -The hrm sensor is sampled @50Hz and this app does not do any processing on it other than clip overly high/extreme values, the array is written as-is. There is an example Python script that can process this signal, smooth it and also extract a myriad of heart rate variability metrics using the hrvanalysis library: +-The max time value is 60 minutes. +-The first item holds the data/time when the readings were taken and the file is deleted each time the app is run. + +-The hrm sensor is sampled @50Hz and this app does not do any processing on it other than clip overly high/extreme values, the array is written as-is. There is an example Python script that can process this signal, smooth it and also extract a myriad of heart rate variability metrics using the hrvanalysis library: https://github.com/jabituyaben/BangleJS-HRM-Signal-Processing From 57912ffabb56788adc548fc98557e94829232435 Mon Sep 17 00:00:00 2001 From: Ben Jabituya <74158243+jabituyaben@users.noreply.github.com> Date: Wed, 6 Jan 2021 13:54:48 +0000 Subject: [PATCH 44/47] Update README.md --- apps/hrrawexp/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/hrrawexp/README.md b/apps/hrrawexp/README.md index b4e698fb8..07f562a31 100644 --- a/apps/hrrawexp/README.md +++ b/apps/hrrawexp/README.md @@ -3,7 +3,8 @@ Extract hrm raw signal data to CSV file Simple app that will run the heart rate monitor for a defined period of time you set at the start. --The max time value is 60 minutes. +-The max time value is 60 minutes. + -The first item holds the data/time when the readings were taken and the file is deleted each time the app is run. -The hrm sensor is sampled @50Hz and this app does not do any processing on it other than clip overly high/extreme values, the array is written as-is. There is an example Python script that can process this signal, smooth it and also extract a myriad of heart rate variability metrics using the hrvanalysis library: From 2aae1777b3b20d4b034d663f69ee720966c52a60 Mon Sep 17 00:00:00 2001 From: Ben Jabituya <74158243+jabituyaben@users.noreply.github.com> Date: Thu, 7 Jan 2021 20:57:19 +0000 Subject: [PATCH 45/47] Create interface.html --- apps/hrrawexp/interface.html | 54 ++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 apps/hrrawexp/interface.html diff --git a/apps/hrrawexp/interface.html b/apps/hrrawexp/interface.html new file mode 100644 index 000000000..703341415 --- /dev/null +++ b/apps/hrrawexp/interface.html @@ -0,0 +1,54 @@ + + + + + +
+ + + + + + + From cb1aecc0f27b3ce62bbf90eda843ae014ad18659 Mon Sep 17 00:00:00 2001 From: Ben Jabituya <74158243+jabituyaben@users.noreply.github.com> Date: Thu, 7 Jan 2021 20:58:21 +0000 Subject: [PATCH 46/47] Update apps.json --- apps.json | 1 + 1 file changed, 1 insertion(+) diff --git a/apps.json b/apps.json index d7fc6c2b3..ae9aae83e 100644 --- a/apps.json +++ b/apps.json @@ -2544,6 +2544,7 @@ "description": "export raw hrm signal data to a csv file", "tags": "", "readme": "README.md", + "interface": "interface.html", "storage": [ {"name":"hrrawexp.app.js","url":"app.js"}, {"name":"hrrawexp.img","url":"app-icon.js","evaluate":true} From f7c5f525bc2e392cd0a227bbb25151b1c4a18ced Mon Sep 17 00:00:00 2001 From: Ben Jabituya <74158243+jabituyaben@users.noreply.github.com> Date: Thu, 7 Jan 2021 21:02:58 +0000 Subject: [PATCH 47/47] Update README.md --- apps/hrrawexp/README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/apps/hrrawexp/README.md b/apps/hrrawexp/README.md index 07f562a31..abf2d3d7c 100644 --- a/apps/hrrawexp/README.md +++ b/apps/hrrawexp/README.md @@ -1,11 +1,13 @@ Extract hrm raw signal data to CSV file ======================================= -Simple app that will run the heart rate monitor for a defined period of time you set at the start. +Simple app that will run the heart rate monitor for a defined period of time you set at the start. + +-The app creates a csv file (it's actually just 1 column) and you can download this via My Apps in the App Loader. -The max time value is 60 minutes. --The first item holds the data/time when the readings were taken and the file is deleted each time the app is run. +-The first item holds the data/time when the readings were taken and the file is reset each time the app is run. -The hrm sensor is sampled @50Hz and this app does not do any processing on it other than clip overly high/extreme values, the array is written as-is. There is an example Python script that can process this signal, smooth it and also extract a myriad of heart rate variability metrics using the hrvanalysis library: https://github.com/jabituyaben/BangleJS-HRM-Signal-Processing