# Power Phase Diagram

**URL:** <https://forum.intervals.icu/t/power-phase-diagram/130630>\
**Category:** Questions & Help\
**Created:** [7 July 2026 19:01 UTC](https://forum.intervals.icu/t/power-phase-diagram/130630 "2026-07-07T19:01:03Z")\
**Posts on this page:** 20\
**Page:** 2

<div class="post-metadata">

**Author:** ![miguell](https://forum.intervals.icu/letter_avatar_proxy/v4/letter/m/85f322/32.png) [@miguell](https://forum.intervals.icu/u/miguell)\
**Post date:** [14 July 2026 21:03 UTC](https://forum.intervals.icu/t/power-phase-diagram/130630/21 "2026-07-14T21:03:12Z")

</div>

Select the required custom streams, reprocess/reanalyse, then open the Activity Chart in a new Tab,

---

<div class="post-metadata">

**Author:** ![MedTechCD](https://forum.intervals.icu/user_avatar/forum.intervals.icu/medtechcd/32/40383_2.png) [@MedTechCD](https://forum.intervals.icu/u/MedTechCD)\
**Post date:** [17 July 2026 08:43 UTC](https://forum.intervals.icu/t/power-phase-diagram/130630/23 "2026-07-17T08:43:13Z")

</div>

This is great!  
I have first gen Assioma Duo, and PCO is not available from those pedals. But the chart works fine, just stating N/A for PCO as it should.  
What I can’t determine is where Force is calculated from. I get an empty stream when setting up the Custom stream, but the script is hidden. So I don’t know what is needed to get Force to be calculated.

 ![image](https://forum.intervals.icu/uploads/default/original/3X/c/e/ce3cc4bd4503234175387ce4723aaeac5d33af3b.png)

---

<div class="post-metadata">

**Author:** ![Dr\_Robert\_D\_Saunders](https://forum.intervals.icu/user_avatar/forum.intervals.icu/dr_robert_d_saunders/32/33768_2.png) [@Dr\_Robert\_D\_Saunders](https://forum.intervals.icu/u/Dr_Robert_D_Saunders)\
**Post date:** [17 July 2026 10:16 UTC](https://forum.intervals.icu/t/power-phase-diagram/130630/24 "2026-07-17T10:16:18Z")

</div>

I’m using Assioma Pro Duo, and I can’t get the chart to work properly - I’m also wondering if seeing the script would help me figure this out.

---

<div class="post-metadata">

**Author:** ![MedTechCD](https://forum.intervals.icu/user_avatar/forum.intervals.icu/medtechcd/32/40383_2.png) [@MedTechCD](https://forum.intervals.icu/u/MedTechCD)\
**Post date:** [17 July 2026 10:34 UTC](https://forum.intervals.icu/t/power-phase-diagram/130630/25 "2026-07-17T10:34:50Z")

</div>

To see the chart as in my case, you only need to add the 8 Custom Streams shared by Miguell, then setup the Custom Activity Chart on one of the Activity tabs.

 ![image](https://forum.intervals.icu/uploads/default/original/3X/5/9/597aff7cf5ba98840ffe145614ed84d8433a7cb2.png)

---

<div class="post-metadata">

**Author:** ![Gerald](https://forum.intervals.icu/user_avatar/forum.intervals.icu/gerald/32/28423_2.png) [@Gerald](https://forum.intervals.icu/u/Gerald)\
**Post date:** [17 July 2026 11:06 UTC](https://forum.intervals.icu/t/power-phase-diagram/130630/26 "2026-07-17T11:06:27Z")

</div>

What errors are you getting?

I tried @Andreas_Schaudt chart, and had to change two problems.

1. colors needed to change to phaseColors

| Line | Now reads |
| --- | --- |
| 95 | `const phaseColors = {` |
| 135 | `color: phaseColors.leftMain,` |
| 137 | `line: { color: phaseColors.leftMainBorder, width: 1.5 }` |
| 165 | `color: phaseColors.leftPeak,` |
| 167 | `line: { color: phaseColors.leftPeakBorder, width: 1.5 }` |
| 237 | `color: phaseColors.rightMain,` |
| 239 | `line: { color: phaseColors.rightMainBorder, width: 1.5 }` |
| 267 | `color: phaseColors.rightPeak,` |
| 269 | `line: { color: phaseColors.rightPeakBorder, width: 1.5 }` |

1. stray backslashes  
I’ll edit and update which line(s) it was on.

---

<div class="post-metadata">

**Author:** ![miguell](https://forum.intervals.icu/letter_avatar_proxy/v4/letter/m/85f322/32.png) [@miguell](https://forum.intervals.icu/u/miguell)\
**Post date:** [17 July 2026 11:46 UTC](https://forum.intervals.icu/t/power-phase-diagram/130630/27 "2026-07-17T11:46:35Z")

</div>

![imagem](https://forum.intervals.icu/uploads/default/original/3X/d/a/dac13c512d5df01aaf278e0debb05e258e35dc2e.png)  
Force stream, is only available in Garmin Rally/Vector powermeters, as fit file record message 20, field 148

 ![image](https://forum.intervals.icu/uploads/default/original/3X/e/8/e88bc2c3078b051629bfe34bb027c588bec57411.png)

- **Function** : Compatible Garmin power meters measure the exact force applied to the pedals while riding.

- **Understanding Force** : Cycling power is a combination of how hard you pedal ( **force** ) and how fast you pedal ( **cadence** ). Measuring force helps cyclists compare the effort required for the same power output at different pedaling speeds (e.g., generating 200 watts at 70 RPM requires much more force than at 100 RPM).

- **Force vs. Torque** : Because Rally power meters are pedal-based, they directly measure force at the pedal contact point rather than torque at the crank. This allows for accurate force comparisons across different bicycles, regardless of varying crank lengths.

---

<div class="post-metadata">

**Author:** ![MedTechCD](https://forum.intervals.icu/user_avatar/forum.intervals.icu/medtechcd/32/40383_2.png) [@MedTechCD](https://forum.intervals.icu/u/MedTechCD)\
**Post date:** [17 July 2026 11:52 UTC](https://forum.intervals.icu/t/power-phase-diagram/130630/28 "2026-07-17T11:52:10Z")

</div>

Then I don’t need to look any further. Thank you!

---

<div class="post-metadata">

**Author:** ![Dr\_Robert\_D\_Saunders](https://forum.intervals.icu/user_avatar/forum.intervals.icu/dr_robert_d_saunders/32/33768_2.png) [@Dr\_Robert\_D\_Saunders](https://forum.intervals.icu/u/Dr_Robert_D_Saunders)\
**Post date:** [17 July 2026 13:14 UTC](https://forum.intervals.icu/t/power-phase-diagram/130630/29 "2026-07-17T13:14:06Z")

</div>

All good now: I’d tried to create my own custom streams instead of using miguell’s.

---

<div class="post-metadata">

**Author:** ![Gerald](https://forum.intervals.icu/user_avatar/forum.intervals.icu/gerald/32/28423_2.png) [@Gerald](https://forum.intervals.icu/u/Gerald)\
**Post date:** [17 July 2026 15:04 UTC](https://forum.intervals.icu/t/power-phase-diagram/130630/30 "2026-07-17T15:04:11Z")

</div>

As your scripts are not visible, force can be calculated for power meters that don’t write to the fit file. Would you be willing to allow an alternative script that is editable to be consider for your script?

---

<div class="post-metadata">

**Author:** ![pepe](https://forum.intervals.icu/user_avatar/forum.intervals.icu/pepe/32/36539_2.png) [@pepe](https://forum.intervals.icu/u/pepe)\
**Post date:** [18 July 2026 17:40 UTC](https://forum.intervals.icu/t/power-phase-diagram/130630/32 "2026-07-18T17:40:05Z")

</div>

What about implementing a external editable configuration (using @R2Tom methods), so that advanced users have full control of mode names and target angle settings.

---

<div class="post-metadata">

**Author:** ![miguell](https://forum.intervals.icu/letter_avatar_proxy/v4/letter/m/85f322/32.png) [@miguell](https://forum.intervals.icu/u/miguell)\
**Post date:** [18 July 2026 17:51 UTC](https://forum.intervals.icu/t/power-phase-diagram/130630/33 "2026-07-18T17:51:37Z")

</div>

Well, i have done that already:

New updated “ **Biomechanical Power-Loss Profiler** ” activity chart, uses optional “ **BiomechPowerProfilerConfig** ” activity field for advanced mode configuration, allowing full control of mode names and target angle settings. If not present uses default configuration.

Hope this correspond to what @Gerald asked for.

---

<div class="post-metadata">

**Author:** ![pepe](https://forum.intervals.icu/user_avatar/forum.intervals.icu/pepe/32/36539_2.png) [@pepe](https://forum.intervals.icu/u/pepe)\
**Post date:** [18 July 2026 18:01 UTC](https://forum.intervals.icu/t/power-phase-diagram/130630/34 "2026-07-18T18:01:31Z")

</div>

But why Target Power Phase End 270º in road mode in the external configuration? And roady instead of road as mode?

---

<div class="post-metadata">

**Author:** ![miguell](https://forum.intervals.icu/letter_avatar_proxy/v4/letter/m/85f322/32.png) [@miguell](https://forum.intervals.icu/u/miguell)\
**Post date:** [18 July 2026 18:10 UTC](https://forum.intervals.icu/t/power-phase-diagram/130630/35 "2026-07-18T18:10:59Z")

</div>

That’s for you to change in “BiomechPowerProfilerConfig” activity custom field:

```auto
`JSON.stringify({
  "mode_1": {
   "label": "Roady",
   "peakMin": 45,
   "peakMax": 65,
   "powerStart": 350,
   "powerEnd": 270,
   "peakStart": 45,
   "peakEnd": 65
  },
 "mode_2": {
  "label": "Triathlon",
  "peakMin": 80,
  "peakMax": 110,
  "powerStart": 330,
  "powerEnd": 150,
  "peakStart": 80,
  "peakEnd": 110
 },
 "mode_3": {
  "label": "Aero",
  "peakMin": 90,
  "peakMax": 120,
  "powerStart": 330,
  "powerEnd": 150,
  "peakStart": 90,
  "peakEnd": 120
 }})

```

in

```auto
“mode_1”: // section
 “label”: “Roady”, // change to “label”: “Road”,
 “powerEnd”: 270, // change to “powerEnd”: 170,

```

You will have the default configuration and confirmed the external configuration parsing.

Important: After Custom Field changes, do a SHIFT- RESET to clear the old values from memory.

---

<div class="post-metadata">

**Author:** ![miguell](https://forum.intervals.icu/letter_avatar_proxy/v4/letter/m/85f322/32.png) [@miguell](https://forum.intervals.icu/u/miguell)\
**Post date:** [18 July 2026 20:31 UTC](https://forum.intervals.icu/t/power-phase-diagram/130630/36 "2026-07-18T20:31:49Z")

</div>

Now online.

Thank you:

@Andreas_Schaudt  
@pepe  
@R2Tom  
@MedTechCD  
@Gerald

Learned a lot with you in this project.

---

<div class="post-metadata">

**Author:** ![pepe](https://forum.intervals.icu/user_avatar/forum.intervals.icu/pepe/32/36539_2.png) [@pepe](https://forum.intervals.icu/u/pepe)\
**Post date:** [21 July 2026 05:21 UTC](https://forum.intervals.icu/t/power-phase-diagram/130630/37 "2026-07-21T05:21:33Z")

</div>

Miguell released a New version with  
Power/Force ratio metric.  
Support Force or ForceCalculated streams, allowing Force metrics on Favero PMs.

 ![imagem](https://forum.intervals.icu/uploads/default/original/3X/a/1/a17345c107289b0fb587ae621d12b2f27e4eab15.jpeg)  
New Crank Length Custom Field supporting Garmin Rally/Vector BLE powermeters.  
needing this:

```auto
let crank = Number(icu.activity?.crank_length || icu.activity?.CrankLength);

```

as icu.activity.crank\_length isn’t being parsed from those Garmin BLE PMs as should. @ryandev

Thank you Miguell

---

<div class="post-metadata">

**Author:** ![miguell](https://forum.intervals.icu/letter_avatar_proxy/v4/letter/m/85f322/32.png) [@miguell](https://forum.intervals.icu/u/miguell)\
**Post date:** [21 July 2026 05:31 UTC](https://forum.intervals.icu/t/power-phase-diagram/130630/38 "2026-07-21T05:31:11Z")

</div>

ForceCalculated Custom Stream is visible. Thank you @pepe for the fit file fields discovery that you shared.

Enjoy.

---

<div class="post-metadata">

**Author:** ![MedTechCD](https://forum.intervals.icu/user_avatar/forum.intervals.icu/medtechcd/32/40383_2.png) [@MedTechCD](https://forum.intervals.icu/u/MedTechCD)\
**Post date:** [24 July 2026 12:41 UTC](https://forum.intervals.icu/t/power-phase-diagram/130630/39 "2026-07-24T12:41:47Z")

</div>

Thanks, I just changed the Code name to Force (from ForceCalculated) and it is taken in to account on your fantastic Biomechanical Power-Loss Profiler chart 😃

 ![image](https://forum.intervals.icu/uploads/default/original/3X/9/b/9b4f3b7cbbf5721f84813204bbfb60f57efad00e.png)

---

<div class="post-metadata">

**Author:** ![miguell](https://forum.intervals.icu/letter_avatar_proxy/v4/letter/m/85f322/32.png) [@miguell](https://forum.intervals.icu/u/miguell)\
**Post date:** [24 July 2026 13:20 UTC](https://forum.intervals.icu/t/power-phase-diagram/130630/40 "2026-07-24T13:20:40Z")

</div>

Hi @MedTechCD thank you for your words.

Regarding:

> [@MedTechCD](#):
>
> I just changed the Code name to Force (from ForceCalculated)

You do not need to, latest version does choose it for you:

```auto
force: tryStream('Force') || tryStream('ForceCalculated')

```

Also its available my Custom Field “Crank Length” that parses Ant+ and Garmin BLE powermeter crank lengths.

intervals.icu is currently parsing crank length from Ant-+ powermeters only. @david

```auto
let crank = Number(icu.activity?.crank_length || icu.activity?.CrankLength);

```

---

<div class="post-metadata">

**Author:** ![MedTechCD](https://forum.intervals.icu/user_avatar/forum.intervals.icu/medtechcd/32/40383_2.png) [@MedTechCD](https://forum.intervals.icu/u/MedTechCD)\
**Post date:** [24 July 2026 13:25 UTC](https://forum.intervals.icu/t/power-phase-diagram/130630/41 "2026-07-24T13:25:35Z")

</div>

Then I didn’t have the latest version. Will remove and add it again.  
thx

---

<div class="post-metadata">

**Author:** ![Gerald](https://forum.intervals.icu/user_avatar/forum.intervals.icu/gerald/32/28423_2.png) [@Gerald](https://forum.intervals.icu/u/Gerald)\
**Post date:** [24 July 2026 14:41 UTC](https://forum.intervals.icu/t/power-phase-diagram/130630/42 "2026-07-24T14:41:15Z")

</div>

I’m confused.

I have Force and Force Calculated as custom streams, have reanalysed and still can’t see the force showing on the activity chart. Must be something small that I’m “missing”.

 ![image](https://forum.intervals.icu/uploads/default/original/3X/c/c/cce39f2cac2fbd5c3153d2827ac8710d59e5fdba.png)  
 ![image](https://forum.intervals.icu/uploads/default/original/3X/7/5/75f36e2fe3d9dbfc466c92b62b40ab91824b93d7.png)

[Previous page](https://forum.intervals.icu/t/power-phase-diagram/130630.md?page=1)

[Next page](https://forum.intervals.icu/t/power-phase-diagram/130630.md?page=3)
