From 744cefe94efe7dc640d0fec20b58d47ec4e07ce5 Mon Sep 17 00:00:00 2001 From: WanyiChen Date: Sun, 29 Jul 2018 11:29:18 -0700 Subject: [PATCH] first commit --- app/index.js | 111 ++++++++++++++++++++++++++++++++++++++++++ companion/index.js | 49 +++++++++++++++++++ package.json | 25 ++++++++++ resources/heart.png | Bin 0 -> 7094 bytes resources/icon.png | Bin 0 -> 1848 bytes resources/index.gui | 45 +++++++++++++++++ resources/smile.png | Bin 0 -> 31049 bytes resources/styles.css | 13 +++++ resources/widgets.gui | 6 +++ 9 files changed, 249 insertions(+) create mode 100755 app/index.js create mode 100755 companion/index.js create mode 100755 package.json create mode 100755 resources/heart.png create mode 100755 resources/icon.png create mode 100755 resources/index.gui create mode 100755 resources/smile.png create mode 100755 resources/styles.css create mode 100755 resources/widgets.gui diff --git a/app/index.js b/app/index.js new file mode 100755 index 0000000..55be4f1 --- /dev/null +++ b/app/index.js @@ -0,0 +1,111 @@ +import document from "document"; +import { HeartRateSensor } from "heart-rate"; +import { user } from "user-profile"; +import { vibration } from "haptics"; +import { peerSocket } from "messaging"; +import { geolocation } from "geolocation"; + +let hrmData = document.getElementById("hrm-data"); +let circle = document.getElementById("circle"); +let hrm = new HeartRateSensor(); +let passThreshold = false; +let passThresholdPrev = false; +let ok = false; +let help = false; +let positions; +var timer; +hrm.start(); + +//refresh every second +function refreshData() { + //reading heart rate and location data + geolocation.getCurrentPosition(locationSuccess, locationError); + let data = { + heartRate: hrm.heartRate ? hrm.heartRate : 0, + location: { + latitude: positions ? positions.coords.latitude : 0, + longitude: positions ? positions.coords.longitude : 0 + }, + help: help + }; + + //setting threshold and alerts + if (data.heartRate > 220 - user.age){ + circle.style.fill = "red"; + hrmData.style.fill = "white"; + passThreshold = true; + if (passThresholdPrev == false){ + startTimer(); + vibration.start("ring"); + } + } else if (data.heartRate > 220 - user.age - 10){ + circle.style.fill = "yellow"; + hrmData.style.fill = "black"; + passThreshold = false; + } else { + circle.style.fill = "green"; + hrmData.style.fill = "white"; + passThreshold = false; + } + + passThresholdPrev = passThreshold; + + //display on screen + hrmData.text = data.heartRate + ""; + return data; +} + +//if heartrate doesn't go down in 5s and the user didn't press "ok", notification will be sent +function startTimer(){ + ok = false; //reset "ok" button + timer = setTimeout(function(){ help = true; }, 5000); +} + +//refresh data every second to see if we need to send message +function sendMessage(){ + refreshData(); + if (passThreshold == false || ok == true){ + clearTimeout(timer); //cancel sending message if notification was already sent or if the user pressed "ok" + vibration.stop(); + } + message(); + help = false; +} +setInterval(sendMessage, 1000); + +//send message to companion app +function message(){ + if (peerSocket.readyState === peerSocket.OPEN) { + peerSocket.send(refreshData()); + } +} + +//buttons +let okButton = document.getElementById("ok-button"); +okButton.onactivate = function(evt) { + ok = true; + console.log("stopped"); + let takeCarePage = document.getElementById("take-care"); + takeCarePage.style.display = "inline"; //pop-up the take care page and auto disappears after 3s + setTimeout(function(){ takeCarePage.style.display = "none"; }, 3000); +} +//send help immediately if pressed HELP button +let helpButton = document.getElementById("help-button"); +let helpComingPage = document.getElementById("help-coming"); +let gotItButton = helpComingPage.getElementById("got-it-button"); +helpButton.onactivate = function(evt) { + help = true; + clearTimeout(timer); //message is already sent, no need to send again after 5s + helpComingPage.style.display = "inline"; //pop-up the "help on the way" page + vibration.stop(); +} +gotItButton.onclick = function(evt) { + helpComingPage.style.display = "none"; //hide the "help on the way" page +} + +//getting location +function locationSuccess(position) { + positions = position; +} + +function locationError(error) {} \ No newline at end of file diff --git a/companion/index.js b/companion/index.js new file mode 100755 index 0000000..605311c --- /dev/null +++ b/companion/index.js @@ -0,0 +1,49 @@ +import { me } from "companion"; +import * as messaging from "messaging"; +import { settingsStorage } from "settings"; + +var notificationCount = 0; + +if (!me.permissions.granted("access_internet")) { + console.log("We're not allowed to access the internet :-("); +} + +messaging.peerSocket.addEventListener("message", (evt) => { + //getting today's date + var today = new Date(); + var dd = today.getDate(); + var mm = today.getMonth()+1; + var yyyy = today.getFullYear(); + + if(dd<10) { + dd = '0'+dd + } + + if(mm<10) { + mm = '0'+mm + } + + today = yyyy+'-'+mm+'-'+dd; + + if (evt.data) { + let message = { + appId: me.applicationId, + notificationId: notificationCount, + date: today, + notification: evt.data + } + + notificationCount++; + + let url = `https://naajw2ldia.execute-api.us-east-2.amazonaws.com/prod` + fetch(url, { + method: "POST", + body: JSON.stringify(message) + }).then(res => {return res.json()}) + .then(body => console.log(body)) + .catch(error => console.error('Error:', error)) + .then(response => console.log('Success:', response)); + console.log(JSON.stringify(message)); + //console.log("notified"); + } +}); \ No newline at end of file diff --git a/package.json b/package.json new file mode 100755 index 0000000..b6aa14c --- /dev/null +++ b/package.json @@ -0,0 +1,25 @@ +{ + "fitbit": { + "appUUID": "b9f430bf-0317-4966-a307-f3e9c1d5efc4", + "appType": "app", + "appDisplayName": "BeeHeart", + "iconFile": "resources/icon.png", + "wipeColor": "#607d8b", + "requestedPermissions": [ + "access_heart_rate", + "run_background", + "access_user_profile", + "access_internet", + "access_location" + ], + "buildTargets": [ + "higgs", + "meson" + ], + "i18n": { + "en": { + "name": "BeeHeart" + } + } + } +} \ No newline at end of file diff --git a/resources/heart.png b/resources/heart.png new file mode 100755 index 0000000000000000000000000000000000000000..92f04f234cd03771be217cbab862fb9cf4ad9a57 GIT binary patch literal 7094 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 literal 0 HcmV?d00001 diff --git a/resources/icon.png b/resources/icon.png new file mode 100755 index 0000000000000000000000000000000000000000..a505c521aaf35f53e2d1f28d2793109e75982810 GIT binary patch literal 1848 zcmV-82gmq{P)PbXFRCt{2oKJGwHWbEx>~wGC1knww?!=uo$t1NsmYs>6q@6K+ z1Lp))Zs08KIvp`-+Nn2n;!c`a8+j$}s@%XmL9G+83sN-y03<+AraZ%MC6Ii;)8|Lv zy$_Hr-}h-y9^cgMz+Fc}pdlIp4e@Q=4#@D#`_i$X1wO#_@7+h!x_uJCTBb$hnfIj! z8~~dZ5RwmeewZ5Sm3vH#uo}N^Wuq^IKmYs{=+#Z)GAtrvGUO$ZioQ8kL)%(WD}lS-#efuf0pxE*irm#7 zy-$NGebPnU5$MQY)pT1#st@2)?2{JiCh>l5+IT+k!rB5493#;eSZB)A#3)Mjr&J zO>L+<0v+H|<-s($Aug%;6|Oyv0eI$pXaYp{^}Oo%f(UbEmTh6jyDWys4(*L`u8Afpp9BBsK6HSW1lfNErm2e<;^>QE2D}_roJ7Nd)tGRfx0e`j@nu`O zzj4)3ml(g1v&_)QS%xr@vv#~uhw%JLJ)(hveX&2+zu23l&)sOh!cVrR(u2?2OI5a&k+ z2<#`D<rRGQGrB#HFB028ac}l4S|Lz)C0p~Y7Wq^ zNAr^<&Sn~+@*Gnu?oTjwdHX=#I<~i^i;I-N9dFbI zrr@t+9k|`-%e61zk3#gt+cThZY;Ru)%yQ?zLqg$n(Pdj{`>1VHwiVg0SUHu6Fam>l zkN<+!o!;+I=ug@H-jQHFlto}CK43BKY}r;wUJM=4#lkeELXC|jE8CP%WG^FdYNi+m z1D2dSFLR>r5)G{`4TI=|;Iw}RLIO{_53Yer!vRw$-0yh#&R(d7IwbwI$ zeP?n$u<(CU^~W%e{qD$qq8@<&r`?BBV4v`nS@1Enp{NhnUZ0A{3;h`@ji(rW68jnW z`!e!CL5?TbUeDbT+n;yBuw{mI86(XqO$eXI`@QkR(p&au5^^t(AD0z>j7KQ1&94KgG; zlk=g4FCb53uO%969oyTbNi0p^bMJG@3Xi)jXt&LspQ?8z=R;u6MDxo@oM%A0NO_jQ zWDayl9JGw1l4ELn&g6VP*KJl^w#DpM2);|H9|@Hv(9)K?M3C)wMA($yl8>z>c_pq1 zr79Jeq%rOJ2eq + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Take care + + + + + + Help is on the way + Log on to + www.beeheart.com + + + + + + diff --git a/resources/smile.png b/resources/smile.png new file mode 100755 index 0000000000000000000000000000000000000000..ab985fb9bce5e8398ec727f3581e685841e58f5c GIT binary patch literal 31049 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 + + + + +