HMs DIY #1-6

Store Link

Because I want to keep this datafield and the app free for use I would be very grateful about a small donation to PayPal

A detailed description of how to use it can be found here: 

HMs_DIY_GUIDANCE.pdf
HMs_DIY_ANLEITUNG.pdf

Thanks very much to mcinner1 for putting so much time into this documentation!

Designer download

You can contribute on my github page.
You can upload your layout so others can use it as well.
Also any changes to the fonts.txt can be updated there as well.

Garmin_HMsDIY

=======================================================================
RELEASE NOTES
=======================================================================
-----------------------------------------------------------------------
3.6.2
* switched to new SDK 7.2.1
* added devices: Approach S7 42mm, Descent Mk3 43mm /Mk3i 43mm, Descent Mk3i 51mm, Edge 1050, epix Pro Gen2 42mm, epix Pro Gen2 47mm / quatix 7 pro, epix Pro Gen2 51mm / D2 mach 1 pro / tactix 7
Fenix 7 Pro, Fenix 7 Pro Solar, Fenix 7S Pro, Fenix 7X Pro, Fenix 7xPro Solar, Forerunner 165, Forerunner 165M, Venu 3, Venu 3S, Vivoactive 5
-----------------------------------------------------------------------
3.5.1
* switched to new SDK 4.2.4
* added devices: FR265, FR265S, FR965, GPSMAP 67/67i, Marq (Gen 2), Marq (Gen 2) Aviator, EDGE 540, EDGE 840, Instinct 2x Solar
* added two new font types GLANCE, GLANCENR (only available if device supports it!)

for full releasenotes see: releasenotes.txt
=======================================================================

 

  • Yes, sorry to all here - I wrote a PM to HM because it‘s easier for me in German.

    I‘m not a competitive sportsman - so, I have no idea of power- and fitness routines, but I found out the formula for TSS:

    TSS = ( sec x NP x IF ) / ( FTP x 3600 ) x 100                 NP / FTP = IF    (for cyclists only)

    Hopefully this formula(s) work...

  • New version 2.5.0 is on clone #4

    http://public.stattegg.info/HM_DIYD_2.5.0.zip

    -----------------------------------------------------------------------

    2.5.0
    * new values: TSS ("Norm b. pow." needs to be in the layout and FTP has to be set in the settings!)

  • Sorry for being late with a suggestion:

    to rename Norm.b.power incl zeros to Normalized b.power (it seems „common“ NP is including zeros)

    to rename Norm. b. power to Norm.b.power w/o zeros

  • Sorry bat I have a problem. Maybe It is solved but I can not find it. When I am training, Rect Vert Filled (H)% in power zone, only is right in zones 1-6. In 0 and 7 zones rect. don´t fill Could you check it. DY 4 values for power  125;171;205;239;273;342;400.

    Layout

    Rodillo block.txt
    <?xml version="1.0" encoding="UTF-8"?>
    <DIYLayout>
        <Device name="Edge 1030"/>
        <LayoutElement type="1" color="FFFFFF" x="0" y="0" x2="282" y2="470" eletype="RF" valuetype="FX" radius="0" stroke="1" nr_values="1"/>
        <LayoutElement type="3" text="***   DATAFIELD LINES   ***"/>
        <LayoutElement type="1" color="000000" x="0" y="117" x2="282" y2="117" eletype="LN" valuetype="FX" radius="0" stroke="1" nr_values="1"/>
        <LayoutElement type="1" color="000000" x="0" y="70" x2="278" y2="70" eletype="LN" valuetype="FX" radius="0" stroke="1" nr_values="1"/>
        <LayoutElement type="1" color="000000" x="0" y="175" x2="282" y2="175" eletype="LN" valuetype="FX" radius="0" stroke="1" nr_values="1"/>
        <LayoutElement type="1" color="000000" x="0" y="354" x2="282" y2="354" eletype="LN" valuetype="FX" radius="0" stroke="1" nr_values="1"/>
        <LayoutElement type="1" color="000000" x="120" y="175" x2="120" y2="208" eletype="LN" valuetype="FX" radius="0" stroke="1" nr_values="1"/>
        <LayoutElement type="1" color="000000" x="160" y="175" x2="160" y2="208" eletype="LN" valuetype="FX" radius="0" stroke="1" nr_values="1"/>
        <LayoutElement type="1" color="000000" x="120" y="208" x2="160" y2="208" eletype="LN" valuetype="FX" radius="0" stroke="1" nr_values="1"/>
        <LayoutElement type="1" color="000000" x="141" y="118" x2="141" y2="175" eletype="LN" valuetype="FX" radius="0" stroke="1" nr_values="1"/>
        <LayoutElement type="3" text="***   BATTERY   ***"/>
        <LayoutElement type="1" color="000000" x="14" y="15" x2="46" y2="29" eletype="RF" valuetype="FX" radius="0" stroke="1" nr_values="1"/>
        <LayoutElement type="1" color="000000" x="46" y="18" x2="50" y2="26" eletype="RF" valuetype="FX" radius="0" stroke="1" nr_values="1"/>
        <LayoutElement type="1" color="FFFFFF" x="16" y="17" x2="44" y2="27" eletype="RF" valuetype="BV" radius="0" stroke="1" nr_values="1"/>
        <LayoutElement type="1" color="FF0000" x="16" y="17" x2="19" y2="27" eletype="RF" valuetype="BV" radius="0" stroke="1" nr_values="1"/>
        <LayoutElement type="1" color="00B001" x="16" y="17" x2="44" y2="27" eletype="RH" valuetype="BV" radius="0" stroke="1" nr_values="1"/>
        <LayoutElement type="2" replDC="00B001" valDC00="1000" colDC00="00E000" hideDC00="false" valDC01="200" colDC01="00E000" hideDC01="false" valDC02="110" colDC02="F8C840" hideDC02="false" valDC03="1" colDC03="FF0000" hideDC03="false" invertcolor="false"/>
        <LayoutElement type="0" color="000000" x="38" y="33" fixedtext="false" eletype="BV" text="$V" font="SMALL" halignment="0" precision="0" nr_values="1" sampletext="87"/>
        <LayoutElement type="0" color="000000" x="38" y="33" fixedtext="true" eletype="FX" text="%" font="SMALL" halignment="2" precision="0" nr_values="1" sampletext=""/>
        <LayoutElement type="3" text="***   DATA FIELS IN UPPER REGION   ***"/>
        <LayoutElement type="0" color="000000" x="212" y="29" fixedtext="false" eletype="CC" text="$V" font="NR_MILD" halignment="1" precision="0" nr_values="1" sampletext="167.34"/>
        <LayoutElement type="0" color="000000" x="235" y="34" fixedtext="true" eletype="FX" text="rpm" font="TINY" halignment="2" precision="0" nr_values="1" sampletext=""/>
        <LayoutElement type="0" color="000000" x="135" y="19" fixedtext="false" eletype="CS" text="$V" font="NR_HOT" halignment="1" precision="1" nr_values="1" sampletext="45.34"/>
        <LayoutElement type="0" color="8080FF" x="123" y="79" fixedtext="false" eletype="AS" text="$V" font="NR_MILD" halignment="0" precision="1" nr_values="1" sampletext="34.76"/>
        <LayoutElement type="0" color="000000" x="56" y="82" fixedtext="true" eletype="AS" text="vel.media" font="XTINY" halignment="0" precision="1" nr_values="1" sampletext="34.76"/>
        <LayoutElement type="0" color="000000" x="124" y="82" fixedtext="true" eletype="FX" text="km/h" font="XTINY" halignment="2" precision="0" nr_values="1" sampletext=""/>
        <LayoutElement type="0" color="000000" x="183" y="82" fixedtext="true" eletype="FX" text="vel.max." font="XTINY" halignment="1" precision="0" nr_values="1" sampletext=""/>
        <LayoutElement type="0" color="8080FF" x="241" y="79" fixedtext="false" eletype="MS" text="$V" font="NR_MILD" halignment="0" precision="0" nr_values="1" sampletext="65.34"/>
        <LayoutElement type="0" color="000000" x="272" y="82" fixedtext="true" eletype="FX" text="km/h" font="XTINY" halignment="0" precision="0" nr_values="1" sampletext=""/>
        <LayoutElement type="3" text="***   TIMER AND DISTANCE   ***"/>
        <LayoutElement type="0" color="000000" x="10" y="124" fixedtext="true" eletype="FX" text="Tiempo en movimiento" font="XTINY" halignment="2" precision="0" nr_values="1" sampletext=""/>
        <LayoutElement type="0" color="000000" x="182" y="124" fixedtext="true" eletype="FX" text="Distancia" font="XTINY" halignment="2" precision="0" nr_values="1" sampletext=""/>
        <LayoutElement type="0" color="000000" x="138" y="143" fixedtext="false" eletype="ET" text="$H:$M:$S" font="NR_MILD" halignment="0" precision="0" nr_values="1" sampletext="3356"/>
        <LayoutElement type="0" color="000000" x="238" y="143" fixedtext="false" eletype="DS" text="$V" font="NR_MILD" halignment="0" precision="1" nr_values="1" sampletext="12.56"/>
        <LayoutElement type="0" color="000000" x="256" y="151" fixedtext="true" eletype="FX" text="km" font="TINY" halignment="1" precision="0" nr_values="1" sampletext=""/>
        <LayoutElement type="3" text="***   TRAININGS EFFEKT   ***"/>
        <LayoutElement type="1" color="000000" x="94" y="354" x2="188" y2="382" eletype="RC" valuetype="FX" radius="0" stroke="1" nr_values="1"/>
        <LayoutElement type="0" color="000000" x="130" y="355" fixedtext="true" eletype="FX" text="TE" font="SMALL" halignment="0" precision="0" nr_values="1" sampletext=""/>
        <LayoutElement type="0" color="000000" x="148" y="355" fixedtext="false" eletype="TE" text="$V" font="SMALL" halignment="2" precision="1" nr_values="1" sampletext="4.2"/>
        <LayoutElement type="0" color="000000" x="232" y="358" fixedtext="true" eletype="FX" text="Z" font="NR_MILD" halignment="0" precision="0" nr_values="1" sampletext=""/>
        <LayoutElement type="0" color="000000" x="252" y="358" fixedtext="false" eletype="HZ" text="$V" font="NR_MILD" halignment="0" precision="0" nr_values="1" sampletext="4"/>
        <LayoutElement type="3" text="***   HEARTRATE   ***"/>
        <LayoutElement type="0" color="000000" x="67" y="358" fixedtext="false" eletype="HR" text="$V" font="NR_MILD" halignment="1" precision="0" nr_values="1" sampletext="183.55"/>
        <LayoutElement type="0" color="000000" x="23" y="358" fixedtext="true" eletype="FX" text="hr" font="XTINY" halignment="0" precision="0" nr_values="1" sampletext=""/>
        <LayoutElement type="3" text="***   DATA FIELS IN BOTTOM REGION   ***"/>
        <LayoutElement type="0" color="000000" x="9" y="185" fixedtext="true" eletype="FX" text="WATTS" font="XTINY" halignment="2" precision="0" nr_values="1" sampletext=""/>
        <LayoutElement type="0" color="000000" x="95" y="179" fixedtext="false" eletype="CB" text="$V" font="NR_MILD" halignment="1" precision="0" nr_values="1" sampletext="455.34"/>
        <LayoutElement type="0" color="000000" x="141" y="182" fixedtext="false" eletype="PZ" text="$V" font="TINY" halignment="0" precision="0" nr_values="1" sampletext="4"/>
        <LayoutElement type="0" color="000000" x="205" y="185" fixedtext="true" eletype="FX" text="% FTP" font="XTINY" halignment="0" precision="0" nr_values="1" sampletext=""/>
        <LayoutElement type="0" color="000000" x="255" y="179" fixedtext="false" eletype="FT" text="$V" font="NR_MILD" halignment="0" precision="0" nr_values="1" sampletext="78.13"/>
        <LayoutElement type="3" text="***   HR-ZONE % BARS   ***"/>
        <LayoutElement type="3" text="***   Zone 1 ***"/>
        <LayoutElement type="1" color="C0C0C1" x="6" y="395" x2="60" y2="467" eletype="RV" valuetype="P1" radius="0" stroke="1" nr_values="1"/>
        <LayoutElement type="0" color="000000" x="34" y="448" fixedtext="false" eletype="P1" text="$V %" font="XTINY" halignment="1" precision="0" nr_values="1" sampletext="25"/>
        <LayoutElement type="2" replDC="C0C0C1" valDC00="1000" colDC00="C0C0C0" hideDC00="false" valDC01="1" colDC01="C0C0C0" hideDC01="false" invertcolor="false"/>
        <LayoutElement type="3" text="***   Zone 2   ***"/>
        <LayoutElement type="1" color="38C8F9" x="61" y="395" x2="115" y2="467" eletype="RV" valuetype="P2" radius="0" stroke="1" nr_values="1"/>
        <LayoutElement type="0" color="000000" x="88" y="448" fixedtext="false" eletype="P2" text="$V %" font="XTINY" halignment="1" precision="0" nr_values="1" sampletext="10"/>
        <LayoutElement type="2" replDC="38C8F9" valDC00="1000" colDC00="38C8F8" hideDC00="false" valDC01="1" colDC01="38C8F8" hideDC01="false" invertcolor="false"/>
        <LayoutElement type="3" text="***   Zone 3 ***"/>
        <LayoutElement type="1" color="00F501" x="116" y="395" x2="169" y2="467" eletype="RV" valuetype="P3" radius="0" stroke="1" nr_values="1"/>
        <LayoutElement type="0" color="000000" x="144" y="448" fixedtext="false" eletype="P3" text="$V %" font="XTINY" halignment="1" precision="0" nr_values="1" sampletext="18"/>
        <LayoutElement type="2" replDC="00F501" valDC00="1000" colDC00="00F500" hideDC00="false" valDC01="1" colDC01="00F500" hideDC01="false" invertcolor="false"/>
        <LayoutElement type="3" text="***   Zone 4   ***"/>
        <LayoutElement type="1" color="FF8081" x="170" y="395" x2="224" y2="467" eletype="RV" valuetype="P4" radius="0" stroke="1" nr_values="1"/>
        <LayoutElement type="0" color="000000" x="203" y="448" fixedtext="false" eletype="P4" text="$V %" font="XTINY" halignment="1" precision="0" nr_values="1" sampletext="13"/>
        <LayoutElement type="2" replDC="FF8081" valDC00="1000" colDC00="FF8080" hideDC00="false" valDC01="1" colDC01="FF8080" hideDC01="false" invertcolor="false"/>
        <LayoutElement type="3" text="***   Zone 5   ***"/>
        <LayoutElement type="1" color="FF80C0" x="225" y="395" x2="276" y2="467" eletype="RV" valuetype="P5" radius="0" stroke="1" nr_values="1"/>
        <LayoutElement type="0" color="000000" x="248" y="448" fixedtext="false" eletype="P5" text="$V %" font="XTINY" halignment="1" precision="0" nr_values="1" sampletext="19"/>
        <LayoutElement type="2" replDC="FF80C0" valDC00="1000" colDC00="FF80C0" hideDC00="false" valDC01="1" colDC01="FF80C0" hideDC01="false" invertcolor="false"/>
        <LayoutElement type="3" text="*** WATTS ZONE ***"/>
        <LayoutElement type="3" text="***  Zone 0 ***"/>
        <LayoutElement type="1" color="FF00F1" x="6" y="215" x2="44" y2="350" eletype="RV" valuetype="S0" radius="0" stroke="1" nr_values="1"/>
        <LayoutElement type="0" color="000000" x="50" y="290" fixedtext="false" eletype="H0" text="$M:$S" font="SMALL" halignment="0" precision="0" nr_values="1" sampletext="326"/>
        <LayoutElement type="0" color="000000" x="45" y="214" fixedtext="true" eletype="FX" text="RECUP" font="XTINY" halignment="0" precision="0" nr_values="1" sampletext=""/>
        <LayoutElement type="0" color="000000" x="45" y="247" fixedtext="true" eletype="FX" text="&lt;55" font="XTINY" halignment="0" precision="0" nr_values="1" sampletext=""/>
        <LayoutElement type="3" text="*** Zone 1***"/>
        <LayoutElement type="1" color="C1C1C0" x="45" y="215" x2="83" y2="350" eletype="RV" valuetype="S1" radius="0" stroke="1" nr_values="1"/>
        <LayoutElement type="0" color="000000" x="87" y="322" fixedtext="false" eletype="H1" text="$M:$S" font="SMALL" halignment="0" precision="0" nr_values="1" sampletext="425"/>
        <LayoutElement type="0" color="000000" x="85" y="230" fixedtext="true" eletype="FX" text="RESIST" font="XTINY" halignment="0" precision="0" nr_values="1" sampletext=""/>
        <LayoutElement type="0" color="000000" x="85" y="259" fixedtext="true" eletype="FX" text="56-75" font="XTINY" halignment="0" precision="0" nr_values="1" sampletext=""/>
        <LayoutElement type="3" text="***Zone 2 ***"/>
        <LayoutElement type="1" color="38C8F9" x="84" y="215" x2="121" y2="350" eletype="RV" valuetype="S2" radius="0" stroke="1" nr_values="1"/>
        <LayoutElement type="0" color="000000" x="125" y="290" fixedtext="false" eletype="H2" text="$M:$S" font="SMALL" halignment="0" precision="0" nr_values="1" sampletext="528"/>
        <LayoutElement type="0" color="000000" x="123" y="214" fixedtext="true" eletype="FX" text="TEMPO" font="XTINY" halignment="0" precision="0" nr_values="1" sampletext=""/>
        <LayoutElement type="0" color="000000" x="123" y="247" fixedtext="true" eletype="FX" text="76-90" font="XTINY" halignment="0" precision="0" nr_values="1" sampletext=""/>
        <LayoutElement type="3" text="*** Zone 3 ***"/>
        <LayoutElement type="1" color="00F501" x="122" y="215" x2="160" y2="350" eletype="RV" valuetype="S3" radius="0" stroke="1" nr_values="1"/>
        <LayoutElement type="0" color="000000" x="164" y="322" fixedtext="false" eletype="H3" text="$M:$S" font="SMALL" halignment="0" precision="0" nr_values="1" sampletext="219"/>
        <LayoutElement type="0" color="000000" x="161" y="230" fixedtext="true" eletype="FX" text="UMBRA" font="XTINY" halignment="0" precision="0" nr_values="1" sampletext=""/>
        <LayoutElement type="0" color="000000" x="161" y="259" fixedtext="true" eletype="FX" text="91-105" font="XTINY" halignment="0" precision="0" nr_values="1" sampletext=""/>
        <LayoutElement type="3" text="*** Zone 4 ***"/>
        <LayoutElement type="1" color="FF8081" x="161" y="215" x2="199" y2="350" eletype="RV" valuetype="S4" radius="0" stroke="1" nr_values="1"/>
        <LayoutElement type="0" color="000000" x="203" y="290" fixedtext="false" eletype="H4" text="$M:$S" font="SMALL" halignment="0" precision="0" nr_values="1" sampletext="126"/>
        <LayoutElement type="0" color="000000" x="200" y="214" fixedtext="true" eletype="FX" text="VO2" font="XTINY" halignment="0" precision="0" nr_values="1" sampletext=""/>
        <LayoutElement type="0" color="000000" x="202" y="247" fixedtext="true" eletype="FX" text="106-120" font="XTINY" halignment="0" precision="0" nr_values="1" sampletext=""/>
        <LayoutElement type="3" text="*** Zone 5 ***"/>
        <LayoutElement type="1" color="FF80C0" x="200" y="215" x2="238" y2="350" eletype="RV" valuetype="S5" radius="0" stroke="1" nr_values="1"/>
        <LayoutElement type="0" color="000000" x="242" y="322" fixedtext="false" eletype="H5" text="$M:$S" font="SMALL" halignment="0" precision="0" nr_values="1" sampletext="621"/>
        <LayoutElement type="0" color="000000" x="240" y="230" fixedtext="true" eletype="FX" text="ANAER" font="XTINY" halignment="0" precision="0" nr_values="1" sampletext=""/>
        <LayoutElement type="0" color="000000" x="242" y="259" fixedtext="true" eletype="FX" text="121-150" font="XTINY" halignment="0" precision="0" nr_values="1" sampletext=""/>
        <LayoutElement type="3" text="*** Zone 6 ***"/>
        <LayoutElement type="1" color="BAC000" x="238" y="215" x2="276" y2="350" eletype="RV" valuetype="S6" radius="0" stroke="1" nr_values="1"/>
        <LayoutElement type="0" color="000000" x="280" y="290" fixedtext="false" eletype="H6" text="$M:$S" font="SMALL" halignment="0" precision="0" nr_values="1" sampletext="121"/>
        <LayoutElement type="0" color="000000" x="277" y="214" fixedtext="true" eletype="FX" text="NEURO" font="XTINY" halignment="0" precision="0" nr_values="1" sampletext=""/>
        <LayoutElement type="0" color="000000" x="277" y="247" fixedtext="true" eletype="FX" text="&gt;150" font="XTINY" halignment="0" precision="0" nr_values="1" sampletext=""/>
        <LayoutElement type="0" color="000000" x="0" y="0" fixedtext="true" eletype="FX" text="" font="XTINY" halignment="0" precision="0" nr_values="1" sampletext=""/>
    </DIYLayout>
    

  • You're using the Dynamic Colors for both - heartrate and power - which is ok - but:
    You have defined Dynamic Colors only for Zone 1 to Zone 5 - which is ok for HR.

    For Power in zones: 2 elements of Dynamic Colors are missing:

    Zone 0: FF00F1
    Zone 6: BAC000

  • Today I made a very comfortable (non-exhausting) cycling tour (roundtrip) with
    1:25 h moving time
    450 m elevation gain
    and I tested the new values:

    TSS: works like a charm as long as power is > 0.
    When riding downhill (power = 0) the values of HM's TSS and Garmin's TSS begin to drift apart.
    Solution: Take NP incl zero into account - not the other one.
    (See my posting before - name the "first" value in the list: Normalized bike power, which is identical with Garmin's NP.)

    min, max, avg Grade are working perfect - in priciple, but:
    at the start of the activity usual the distance-increments are small and the barometric sensor has not "calmed down". Therefore at the beginning there might be grades of false (big) amount which are nailed for the entire ride.
    Solution (maybe): start collecting the values 30 sec after the beginning of an activity.
    Concerning avg. grade: I did a roundtrip - Start=Destination - and the avg grade was shown as 1% at the end - which is pretty good. 

    min, max Elevation: Ok!

    VAM: does not work at all.
    It shows values up and down from about -1500 to +1500 - every second another value - no improvement in the course of the activity.
    And it keeps on calculating in pause-time (which is not correct, but not the reason of not working).
    The rough formula for VAM is: Elevation-gain (m) x 60 min / time for gaining elevation (min).
    For my today's activity my Garmin Ege 1030 states: VAM=335 m/h
    Calculated with the values of my ride - see above: 450 x 60 / 85 = 318 m/h
    So, maybe downhill-time is not to be taken into account?
    VAM - Wiki:  https://en.wikipedia.org/wiki/VAM_(bicycling)

    EDIT:
    I checked the downhill-times of my tour - the sum is about 20 min. A calculation with the values of above with only 65 min uphill-time leads to wrong results!

    It seems, VAM-calculation is not so easy because different grades are to taken differently into account...

  • Hi

    thanks for that....

    changes I made:

    * TSS now uses NP including zeros

    * renamed NP values

    * min, max, avg gradient starts after 30s

    * I will take a look into VAM some more, looks like it isn't that simple as I thought.

    Did you average the value out? Maybe you should try 10s.

    Shouldn't the VAM update every second depending on the current gradient ?

    At the moment I calculate it with VAM = altitude_diff_in_one_sec*3600

    regards

    Erich

  • VAM is likely to be primarily concerned with elevation-gain. However, different grades also have an influence:

    WIKI:
    For example, a 1180 VAM of a 64 kg rider on a 5% gradient is equivalent to a VAM of 1400 m/h on a 10 % or a VAM of 1675 m/h on a 13% gradient.

  • Hi mcinner1. I don´t understand you. What must I change? 

  • Shouldn't the VAM update every second depending on the current gradient ?

    No, I don't think so.
    I think it is not a value of "the moment", but rather the average of the speed of the elevation-gain (m/h) from the beginning to now, extrapolated to one hour.