Fix body battery array parsing - use index 1 not 2
All checks were successful
Deploy / deploy (push) Successful in 2m39s
All checks were successful
Deploy / deploy (push) Successful in 2m39s
The Garmin API returns bodyBatteryValuesArray as [timestamp, level] tuples (2 elements), not [timestamp, status, level, quality] (4 elements). Was accessing index 2 which doesn't exist, now correctly using index 1. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -342,9 +342,9 @@ describe("fetchBodyBattery", () => {
|
||||
charged: 45,
|
||||
drained: 30,
|
||||
bodyBatteryValuesArray: [
|
||||
[1705190400000, "charging", 25, 1.0],
|
||||
[1705194000000, "draining", 40, 1.0],
|
||||
[1705197600000, "charging", 35, 1.0],
|
||||
[1705190400000, 25],
|
||||
[1705194000000, 40],
|
||||
[1705197600000, 35],
|
||||
],
|
||||
},
|
||||
{
|
||||
@@ -352,8 +352,8 @@ describe("fetchBodyBattery", () => {
|
||||
charged: 85,
|
||||
drained: 60,
|
||||
bodyBatteryValuesArray: [
|
||||
[1705276800000, "charging", 65, 1.0],
|
||||
[1705280400000, "draining", 85, 1.0],
|
||||
[1705276800000, 65],
|
||||
[1705280400000, 85],
|
||||
],
|
||||
},
|
||||
]),
|
||||
@@ -432,7 +432,7 @@ describe("fetchBodyBattery", () => {
|
||||
mockJsonResponse([
|
||||
{
|
||||
date: "2024-01-15",
|
||||
bodyBatteryValuesArray: [[1705276800000, "charging", 70, 1.0]],
|
||||
bodyBatteryValuesArray: [[1705276800000, 70]],
|
||||
},
|
||||
]),
|
||||
);
|
||||
|
||||
@@ -137,31 +137,27 @@ export async function fetchBodyBattery(
|
||||
);
|
||||
return { current: null, yesterdayLow: null };
|
||||
}
|
||||
// Response structure: bodyBatteryValuesArray is [[timestamp, level], ...]
|
||||
// Confirmed by bodyBatteryValueDescriptorDTOList in API response
|
||||
const data = JSON.parse(text) as Array<{
|
||||
date: string;
|
||||
bodyBatteryValuesArray?: Array<[number, string, number, number]>;
|
||||
bodyBatteryValuesArray?: Array<[number, number]>;
|
||||
}>;
|
||||
|
||||
// Debug: log the raw response structure
|
||||
logger.info(
|
||||
{ rawData: JSON.stringify(data).slice(0, 2000), date, yesterday },
|
||||
"Body battery raw API response",
|
||||
);
|
||||
|
||||
// Find today's and yesterday's data from the response array
|
||||
const todayData = data?.find((d) => d.date === date);
|
||||
const yesterdayData = data?.find((d) => d.date === yesterday);
|
||||
|
||||
// Current = last value in today's bodyBatteryValuesArray (index 2 is the level)
|
||||
// Current = last value in today's bodyBatteryValuesArray (index 1 is the level)
|
||||
const todayValues = todayData?.bodyBatteryValuesArray ?? [];
|
||||
const current =
|
||||
todayValues.length > 0 ? todayValues[todayValues.length - 1][2] : null;
|
||||
todayValues.length > 0 ? todayValues[todayValues.length - 1][1] : null;
|
||||
|
||||
// Yesterday low = minimum level in yesterday's bodyBatteryValuesArray
|
||||
const yesterdayValues = yesterdayData?.bodyBatteryValuesArray ?? [];
|
||||
const yesterdayLow =
|
||||
yesterdayValues.length > 0
|
||||
? Math.min(...yesterdayValues.map((v) => v[2]))
|
||||
? Math.min(...yesterdayValues.map((v) => v[1]))
|
||||
: null;
|
||||
|
||||
logger.info(
|
||||
|
||||
Reference in New Issue
Block a user