diff --git a/apps/health/ChangeLog b/apps/health/ChangeLog index 12740959a..9b98e32b7 100644 --- a/apps/health/ChangeLog +++ b/apps/health/ChangeLog @@ -22,3 +22,4 @@ 0.21: Update boot.min.js. 0.22: Fix timeout for heartrate sensor on 3 minute setting (#2435) 0.23: Fix HRM logic +0.24: Correct daily health summary for movement (some logic errors resulted in garbage data being written) diff --git a/apps/health/boot.js b/apps/health/boot.js index 62e8b87ab..66b4acda6 100644 --- a/apps/health/boot.js +++ b/apps/health/boot.js @@ -52,7 +52,7 @@ Bangle.on("health", health => { return String.fromCharCode( health.steps>>8,health.steps&255, // 16 bit steps health.bpm, // 8 bit bpm - Math.min(health.movement / 8, 255)); // movement + Math.min(health.movement, 255)); // movement } var rec = getRecordIdx(d); @@ -68,6 +68,12 @@ Bangle.on("health", health => { require("Storage").write(fn, "HEALTH1\0", 0, DB_FILE_LEN); // header } var recordPos = DB_HEADER_LEN+(rec*DB_RECORD_LEN); + + // scale down reported movement value in order to fit it within a + // uint8 DB field + health = Object.assign({}, health); + health.movement /= 8; + require("Storage").write(fn, getRecordData(health), recordPos, DB_FILE_LEN); if (rec%DB_RECORDS_PER_DAY != DB_RECORDS_PER_DAY-2) return; // we're at the end of the day. Read in all of the data for the day and sum it up @@ -82,10 +88,10 @@ Bangle.on("health", health => { var dt = f.substr(recordPos, DB_RECORD_LEN); if (dt!="\xFF\xFF\xFF\xFF") { health.steps += (dt.charCodeAt(0)<<8)+dt.charCodeAt(1); - health.movement += dt.charCodeAt(2); - health.movCnt++; var bpm = dt.charCodeAt(2); health.bpm += bpm; + health.movement += dt.charCodeAt(3); + health.movCnt++; if (bpm) health.bpmCnt++; } recordPos -= DB_RECORD_LEN; diff --git a/apps/health/boot.min.js b/apps/health/boot.min.js index 651231195..afda9189a 100644 --- a/apps/health/boot.min.js +++ b/apps/health/boot.min.js @@ -1,5 +1,6 @@ -function l(){var a=require("Storage").readJSON("health.json",1)||{},d=Bangle.getHealthStatus("day").steps;a.stepGoalNotification&&0=a.stepGoal&&(d=(new Date(Date.now())).toISOString().split("T")[0],!a.stepGoalNotificationDate||a.stepGoalNotificationDateMath.abs(Bangle.getHealthStatus().bpm-b.bpm)&&Bangle.setHRMPower(0, -"health")});90>8,c.steps&255,c.bpm,Math.min(c.movement/8,255))}var b=new Date(Date.now()-59E4);a&&0k;k++)e=g.substr(h,4),"\u00ff\u00ff\u00ff\u00ff"!=e&&(a.steps+=(e.charCodeAt(0)<<8)+e.charCodeAt(1),a.movement+=e.charCodeAt(2), -a.movCnt++,e=e.charCodeAt(2),a.bpm+=e,e&&a.bpmCnt++),h-=4;a.bpmCnt&&(a.bpm/=a.bpmCnt);a.movCnt&&(a.movement/=a.movCnt);require("Storage").write(b,d(a),f,17988)}}) +(function(){var a=0|(require("Storage").readJSON("health.json",1)||{}).hrm;if(1==a||2==a){var c=function(){Bangle.setHRMPower(1,"health");setTimeout(function(){return Bangle.setHRMPower(0,"health")},6E4*a);if(1==a){var b=function(){Bangle.setHRMPower(1,"health");setTimeout(function(){Bangle.setHRMPower(0,"health")},6E4)};setTimeout(b,2E5);setTimeout(b,4E5)}};Bangle.on("health",c);Bangle.on("HRM",function(b){90Math.abs(Bangle.getHealthStatus().bpm-b.bpm)&&Bangle.setHRMPower(0,"health")}); +90>8,g.steps&255,g.bpm,Math.min(g.movement,255))}var b=new Date(Date.now()-59E4);a&&0n;n++){e=h.substr(m,4);if("\xff\xff\xff\xff"!=e){a.steps+=(e.charCodeAt(0)<<8)+e.charCodeAt(1);var p=e.charCodeAt(2);a.bpm+=p;a.movement+=e.charCodeAt(3);a.movCnt++;p&&a.bpmCnt++}m-=4}a.bpmCnt&&(a.bpm/=a.bpmCnt);a.movCnt&&(a.movement/= +a.movCnt);require("Storage").write(b,c(a),f,17988)}}); +function q(){var a=require("Storage").readJSON("health.json",1)||{},c=Bangle.getHealthStatus("day").steps;a.stepGoalNotification&&0=a.stepGoal&&(c=(new Date(Date.now())).toISOString().split("T")[0],!a.stepGoalNotificationDate||a.stepGoalNotificationDate