Hi all,
I’ve written a Connect IQ data field, CarbBurnDataField, that estimates real-time carbohydrate and fat oxidation during a ride and writes the results into the FIT file as developer data fields. It’s available here:
Download (Connect IQ): Connect IQ Store | Watch Faces and Apps | Garmin
Code: GitHub - Macrophage87/CarbBurnDataField: A Garmin ConnectIQ data field that tracks carbohydrate burn during bicycling with power meters. · GitHub
It records four developer fields per second: Carbs Burned (cumulative g), Fat Burned (cumulative g), carb_rate (g/h), and fat_rate (g/h). The per-second logging works perfectly — I’ve verified in the raw FIT that Carbs Burned + Fat Burned sum cleanly to the activity’s total calories (e.g. on a recent ride: 8.8g carbs + 40.5g fat = exactly 400 kcal, matching the recorded total). So the data itself is solid.
The problem is getting at that data inside intervals.icu. Two issues, and I’m hoping someone can tell me which is expected behavior vs. a fixable config on my end:
1. The per-record developer fields don’t appear as streams. When I query the activity via the API, the returned stream/field set only includes native Garmin channels (power, HR, cadence, respiration, DFA α1, torque, etc.). My Carbs Burned / Fat Burned fields — which are fully populated in the FIT — don’t come through as available streams at all. Is intervals.icu ingesting Connect IQ developer record fields, and if so, is there a way to expose them via the API rather than only on the activity page?
2. A custom field I created “based on” the developer field stays empty. I set up a custom activity field intending to capture the carb total, but it’s declared and never populated — every record shows null for it. Inspecting the FIT, I can see why the pattern is suspicious: across every Connect IQ app in the file, the per-second/cumulative fields populate fine, but every summary/“total”-style field is empty (Total Carbs, Total Fat, total_carbohydrates, total_fat, and even an unrelated readiness_alphahrv and radar_total). So it looks like a session-level vs. record-level write distinction rather than anything specific to my field.
My working field is specifically Carbs Burned, developer data index 1, field number 1 — cumulative grams, populated on all 3017 records. If the custom-field mapping needs to point at an exact dev-index/field-number identity, I may just have it aimed at the wrong slot.
Questions for the community:
- Does intervals.icu expose Connect IQ developer record-fields anywhere queryable (API or custom stream), or only visually?
- For a custom activity field sourced from a developer field, what’s the correct way to reference it — by field name, or by developer_data_index + field_definition_number?
- Do custom fields only populate on activities imported after creation (i.e., no backfill)? That would explain part of what I’m seeing.
Happy to share a sample FIT and the field descriptor table if useful. Thanks in advance.
