<div dir="ltr">Greetings,<br><div>so this is my idea of being able to select which units various groups use (in addition to Distance).</div><div>This can be then accessed by the special 'user' unit code.  (or  'metrics list -u ' )</div><div>The idea of [Default] selection below  simply means storing the value to blank - meaning use whatever unit the particular metric uses.  The other idea I had was to actually default it to the equivalent of 'Metric' special unit code and not have the [Default] button.</div><div><br></div><div><br></div><img src="cid:ii_laf1jdiv0" alt="image.png" width="472" height="395"><br><div><br></div><div>Currently I've made it so that if there are more than 3 choices other than [default] that it uses the choice/combo box rather than the Radio buttons. (ie this list is auto-generated from the Metric Units table and the Metric Groups table).</div><div><br></div><div>Thoughts / comments?</div><div><br></div><div>//.ichael </div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, 12 Nov 2022 at 17:35, Michael Geddes <<a href="mailto:frog@bunyip.wheelycreek.net" target="_blank">frog@bunyip.wheelycreek.net</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr"><a href="https://github.com/openvehicles/Open-Vehicle-Monitoring-System-3/pull/771" target="_blank">https://github.com/openvehicles/Open-Vehicle-Monitoring-System-3/pull/771</a><br><div><br></div><div>I'm hoping this P/R is ok in this form (made of 5 separate commits).</div><div><br></div><div>I will have a look at implementing the "user" unit code.  The base for how it would work is already a part of the above pull request.  I'll just look at the module configuration for distance.</div><div><br></div><div>The 'power consumption' is one where it's not just a check-box.. there're 5 possible choice!</div><div><br></div><div>I should also add 'bar' for pressure given that for some reason that's still a thing people want.</div><div><br></div><div>//.ichael</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, 12 Nov 2022 at 16:24, Michael Balzer <<a href="mailto:dexter@expeedo.de" target="_blank">dexter@expeedo.de</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
  
    
  
  <div>
    I think this is pretty decent & complete now.<br>
    <br>
    I also like the approach of the 'user' unit code. Moving all user
    unit prefs into the module configuration is an old todo. Currently
    only the distance unit is defined at the module side, temperature
    and pressure are App prefs.<br>
    <br>
    Regards,<br>
    Michael<br>
    <br>
    <br>
    <div>Am 11.11.22 um 09:54 schrieb Michael
      Geddes:<br>
    </div>
    <blockquote type="cite">
      
      <div dir="ltr">Ok - so here's what I have implemented for Duktape
        and Metrics. (I added IsDefined() as well).
        <div>Any thoughts on this?<br>
          <div><br>
            <div>Noting</div>
            <div>   OvmsMetrics.Float( {metric} ) -> Outputs metric
              as float (same)</div>
            <div>   OvmsMetrics.Float( {metric}, {unit}) -> Outputs
              metric as float converted to given unit  (new)</div>
            <div>   OvmsMetrics.Value( {metric} )   -> Outputs Metric
              in native value (same)</div>
            <div>   OvmsMetrics.Value( {metric} , false)   -> Outputs
              Metric as string and no units (same) </div>
               OvmsMetrics.Value( {metric} ,  {unit})  -> Outputs
            Metric converted to given unit as native value. (new)
            <div> 
              OvmsMetrics.Value( {metric} ,  {unit}, false )  ->
              Outputs Metric converted to given unit as string including
              any unit specifier. (new)
              <div>also  OvmsMetric.GetValues( {metric} [,{unit}] [,
                {converted} ] )  Adds similar behaviour to Value()
                above.</div>
              <div>also the special units '<b>imperial</b>' and '<b>metric</b>'
                will convert to the associated imperial / metric version
                of the units as appropriate.</div>
              <div><br>
                <div><font face="monospace">(function() {<br>
                       dump = function (metric) { print( metric+ "
                    ["+(typeof metric)+"]\n"  ); }<br>
                       dump_obj = function (obj )  {<br>
                         print('--- Object ----\n')<br>
                         for (var k in obj) {<br>
                           xk = obj[k];<br>
                           print( k+':'+ xk + ' ['+typeof xk+ "]\n");<br>
                         }<br>
                       }<br>
                     
                     dump(OvmsMetrics.Value("xiq.v.trip.consumption"));<br>
                       dump(OvmsMetrics.Value("xiq.v.trip.consumption",
                    false));<br>
                     
                     dump(OvmsMetrics.Value("xiq.v.trip.consumption","kmpkwh"));<br>
                       dump(OvmsMetrics.Value("xiq.v.trip.consumption",
                    "mipkwh", false));<br>
                     
                     dump(OvmsMetrics.AsFloat("xiq.v.trip.consumption"));<br>
                     
                     dump(OvmsMetrics.AsFloat("xiq.v.trip.consumption","kmpkwh"));<br>
                     
                     dump(OvmsMetrics.Value("xiq.v.trip.consumption","imperial"))<br>
                     
                     dump(OvmsMetrics.Value("xiq.v.trip.consumption","imperial",
                    false))<br>
                       dump_obj(OvmsMetrics.GetValues("trip", "metric"))<br>
                       dump_obj(OvmsMetrics.GetValues("trip",
                    "imperial", false))<br>
                    })();<br>
                  </font></div>
                <div><br>
                </div>
                <div>With this output:</div>
                <div>
                  <div>
                    <pre id="m_-5904723395924573806m_1733173679174480992m_-138117451584655546m_5484224439251412587gmail-output" style="box-sizing:border-box;overflow:auto;font-family:ui-monospace,"Cascadia Mono","Segoe UI Mono",Hack,"Source Code Pro","Roboto Mono",Menlo,Monaco,Consolas,monospace;font-size:13px;padding:9.5px;margin-top:0px;margin-bottom:10px;line-height:1.42857;color:rgb(0,34,0);word-break:break-all;background-color:rgb(245,245,245);border:1px solid rgb(204,204,204);border-radius:4px;height:406px;white-space:pre-wrap">19.2308 [number]
19.2308 [string]
5.2 [number]
3.23112mi/kWh [string]
19.2308 [number]
5.2 [number]
309.49 [number]
309.49Wh/mi [string]
--- Object ----
v.p.trip:13 [number]
xiq.e.trip:0 [number]
xiq.e.trip.energy.recuperated:0 [number]
xiq.e.trip.energy.used:0 [number]
xiq.v.trip.consumption:19.2308 [number]
--- Object ----
v.p.trip:8.07781M [string]
xiq.e.trip:0M [string]
xiq.e.trip.energy.recuperated:0kWh [string]
xiq.e.trip.energy.used:0kWh [string]
xiq.v.trip.consumption:309.49Wh/mi [string]</pre>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
      <br>
      <div class="gmail_quote">
        <div dir="ltr" class="gmail_attr">On Wed, 9 Nov 2022 at 05:47,
          Michael Geddes <<a href="mailto:frog@bunyip.wheelycreek.net" target="_blank">frog@bunyip.wheelycreek.net</a>>
          wrote:<br>
        </div>
        <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
          <div dir="ltr">Yeah - I like HasValue.  I implemented
            IsDefined() but I will rename it.. that's a much clearer
            name.
            <div><br>
            </div>
            <div>Another thought. How about if we did this (but also
              with GetValues() as well - see the special values below) </div>
            <div><br>
              <div>OvmsMetrics.Value("xiq.v.trip.consumption",  true) 
                -> <span style="background-color:rgb(245,245,245);color:rgb(0,34,0);font-family:ui-monospace,"Cascadia Mono","Segoe UI Mono",Hack,"Source Code Pro","Roboto Mono",Menlo,Monaco,Consolas,monospace;font-size:13px;white-space:pre-wrap">17.0582</span><span style="background-color:rgb(245,245,245);color:rgb(0,34,0);font-family:ui-monospace,"Cascadia Mono","Segoe UI Mono",Hack,"Source Code Pro","Roboto Mono",Menlo,Monaco,Consolas,monospace;font-size:13px;white-space:pre-wrap">  (Number)</span><br>
              </div>
              <div>
                <div>OvmsMetrics.Value("xiq.v.trip.consumption",
                   false)  -> <span style="background-color:rgb(245,245,245);color:rgb(0,34,0);font-family:ui-monospace,"Cascadia Mono","Segoe UI Mono",Hack,"Source Code Pro","Roboto Mono",Menlo,Monaco,Consolas,monospace;font-size:13px;white-space:pre-wrap">17.0582</span><span style="background-color:rgb(245,245,245);color:rgb(0,34,0);font-family:ui-monospace,"Cascadia Mono","Segoe UI Mono",Hack,"Source Code Pro","Roboto Mono",Menlo,Monaco,Consolas,monospace;font-size:13px;white-space:pre-wrap">  (String)</span></div>
              </div>
            </div>
            <div>OvmsMetrics.Value("xiq.v.trip.consumption", "mipkwh",
              true)  -> <span style="background-color:rgb(245,245,245);color:rgb(0,34,0);font-family:ui-monospace,"Cascadia Mono","Segoe UI Mono",Hack,"Source Code Pro","Roboto Mono",Menlo,Monaco,Consolas,monospace;font-size:13px;white-space:pre-wrap">3.64264</span><span style="background-color:rgb(245,245,245);color:rgb(0,34,0);font-family:ui-monospace,"Cascadia Mono","Segoe UI Mono",Hack,"Source Code Pro","Roboto Mono",Menlo,Monaco,Consolas,monospace;font-size:13px;white-space:pre-wrap">  (Number)</span><br>
            </div>
            <div>OvmsMetrics.Value("xiq.v.trip.consumption", "mipkwh",
              false)  -> <span style="background-color:rgb(245,245,245);color:rgb(0,34,0);font-family:ui-monospace,"Cascadia Mono","Segoe UI Mono",Hack,"Source Code Pro","Roboto Mono",Menlo,Monaco,Consolas,monospace;font-size:13px;white-space:pre-wrap">3.64264Mi/kWh</span><span style="background-color:rgb(245,245,245);color:rgb(0,34,0);font-family:ui-monospace,"Cascadia Mono","Segoe UI Mono",Hack,"Source Code Pro","Roboto Mono",Menlo,Monaco,Consolas,monospace;font-size:13px;white-space:pre-wrap">  (String)</span><br>
            </div>
            <div> OvmsMetrics.Value("xiq.v.trip.consumption", "native",
              false)  -> <span style="font-size:13px;background-color:rgb(245,245,245);color:rgb(0,34,0);font-family:ui-monospace,"Cascadia Mono","Segoe UI Mono",Hack,"Source Code Pro","Roboto Mono",Menlo,Monaco,Consolas,monospace;white-space:pre-wrap">17.0582km/kWh</span><span style="font-size:13px;background-color:rgb(245,245,245);color:rgb(0,34,0);font-family:ui-monospace,"Cascadia Mono","Segoe UI Mono",Hack,"Source Code Pro","Roboto Mono",Menlo,Monaco,Consolas,monospace;white-space:pre-wrap">  (String)</span>  </div>
            <div><br>
            </div>
            <div>and</div>
            <div>
              <div>OvmsMetrics.Value("xiq.v.trip.consumption",
                "imperial", false)  -> <span style="background-color:rgb(245,245,245);color:rgb(0,34,0);font-family:ui-monospace,"Cascadia Mono","Segoe UI Mono",Hack,"Source Code Pro","Roboto Mono",Menlo,Monaco,Consolas,monospace;font-size:13px;white-space:pre-wrap">3.64264Mi/kWh</span><span style="background-color:rgb(245,245,245);color:rgb(0,34,0);font-family:ui-monospace,"Cascadia Mono","Segoe UI Mono",Hack,"Source Code Pro","Roboto Mono",Menlo,Monaco,Consolas,monospace;font-size:13px;white-space:pre-wrap">  (String)</span><br>
              </div>
            </div>
            <div><br>
            </div>
            <div>I have already implemented the special values 'native'
              (existing), 'imperial' and 'metric'.  </div>
            <div><br>
            </div>
            <div>I was also thinking that in the future you could have
              'user'. Where for each group of values:</div>
            <div>'temperature', 'distance', 'shortdistance', 'power'
              etc.. you could have a user preference. I probably won't
              implement it now,.but it could be cool that any UI could
              just ask for the user defined units (rather than having a
              separate choice).</div>
            <div><br>
            </div>
            <div><br>
            </div>
            <div><br>
            </div>
            <div>//.ichael</div>
          </div>
          <br>
          <div class="gmail_quote">
            <div dir="ltr" class="gmail_attr">On Tue, 8 Nov 2022 at
              21:57, Mark Webb-Johnson <<a href="mailto:mark@webb-johnson.net" target="_blank">mark@webb-johnson.net</a>>
              wrote:<br>
            </div>
            <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
              <div>
                <div dir="ltr" style="color:rgb(0,0,0)">Or perhaps
                  something more specific?</div>
                <div dir="ltr" style="color:rgb(0,0,0)"><br>
                </div>
                <div dir="ltr" style="color:rgb(0,0,0)">    HasValue()</div>
                <div dir="ltr" style="color:rgb(0,0,0)"><br>
                </div>
                <div dir="ltr" style="color:rgb(0,0,0)">Mark</div>
                <div><br>
                  <blockquote type="cite">
                    <div>On 8 Nov 2022, at 9:01 PM, Michael Balzer <<a href="mailto:dexter@expeedo.de" target="_blank">dexter@expeedo.de</a>>
                      wrote:</div>
                    <br>
                    <div>
                      <div>
                        <div>
                          <div>Signed PGP part</div>
                          <div>
                            <div> That's basically a good approach, but
                              be aware 'IsDefined()' has an ambiguous
                              meaning here, as with the API stem
                              "OvmsMetrics" it would naturally be
                              expected to mean "is this metric defined",
                              not "does this metric have a defined
                              value".<br>
                              <br>
                              An undefined metric currently can be
                              derived from 'Values()' returning
                              undefined, but that's more an undocumented
                              side effect than intended.<br>
                              <br>
                              Maybe 'GetDefined()' could be a better
                              name, leveraging this behaviour, i.e.
                              returning 'undefined' for an actually
                              undefined metric, and 'null' for a defined
                              metric without a value.<br>
                              <br>
                              Regards,<br>
                              Michael<br>
                              <br>
                              <br>
                              <div>Am 08.11.22 um 13:46 schrieb Michael
                                Geddes:<br>
                              </div>
                              <blockquote type="cite">
                                <div dir="ltr">
                                  <div>Ah yes. Arrays - will check
                                    those.  Yeah, how about we add a
                                    'IsDefined' method to metrics
                                    instead of the null thing (it does
                                    sound like it will upset too many
                                    applecarts).</div>
                                  <div><br>
                                  </div>
                                  <div>//.</div>
                                  <br>
                                  <div class="gmail_quote">
                                    <div dir="ltr" class="gmail_attr">On
                                      Tue, 8 Nov 2022 at 20:35, Michael
                                      Balzer <<a href="mailto:dexter@expeedo.de" target="_blank">dexter@expeedo.de</a>>
                                      wrote:<br>
                                    </div>
                                    <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
                                      <div> Michael,<br>
                                        <br>
                                        looks all good to me, once again
                                        nice find with the decode
                                        argument. Adding decode to the
                                        Value() call was only for
                                        symmetry IIRC, the main use was
                                        with GetValues() (<a href="https://docs.openvehicles.com/en/latest/userguide/scripting.html#ovmsmetrics" target="_blank">https://docs.openvehicles.com/en/latest/userguide/scripting.html#ovmsmetrics</a>).<br>
                                        <br>
                                        Don't forget to test arrays,
                                        e.g. "v.t.pressure" &
                                        "v.t.temp".<br>
                                        <br>
                                        Returning null for an undefined
                                        metric seems like a natural
                                        choice, but is a rather deep
                                        change, as for consistency not
                                        only the Duktape metrics API but
                                        also the Web UI metrics API
                                        would need to be changed
                                        accordingly. Unless you've got a
                                        real use case that needs that,
                                        we should be careful.<br>
                                        <br>
                                        Regards,<br>
                                        Michael<br>
                                        <br>
                                        <br>
                                        <div>Am 07.11.22 um 15:00
                                          schrieb Michael Geddes:<br>
                                        </div>
                                        <blockquote type="cite">
                                          <div dir="ltr">
                                            <div dir="ltr">I have
                                              figured out a bunch of
                                              stuff and have implemented
                                              the following: (having
                                              done away with needing
                                              AsFloatUnit)
                                              <div><br>
                                              </div>
                                              <div>OvmsMetrics.Value(
                                                {metric} [, {decode}])</div>
                                              <div>OvmsMetrics.Value(
                                                {metric}, {unit}
                                                [,{decode}])</div>
                                              <div><br>
                                              </div>
                                              <div>It turns out that the
                                                [decode] flag wasn't
                                                working anyway (since
                                                the function was being
                                                registered as only
                                                having 1 param)...</div>
                                              <div>This way it is still
                                                really 1 function.. but
                                                I check it the second
                                                parameter is a
                                                'boolean', and if not..
                                                try the second form. </div>
                                              <div><br>
                                              </div>
                                              <div>OvmsMetrics.AsFloat(
                                                {metric} [,{unit}] )</div>
                                              <div><br>
                                              </div>
                                              <div>and add the function</div>
                                              <div><br>
                                              </div>
                                              <div>Ovms.Metrics.ValueUnit(
                                                {metric} [,{unit}]) </div>
                                              <div>This prints the value
                                                and the unit.</div>
                                              <div><br>
                                              </div>
                                              <div>Here's a sample
                                                function and the output!
                                                This also shows the
                                                types of the output.</div>
                                              <div><br>
                                              </div>
                                              <div><font face="monospace">(function()
                                                  {<br>
                                                     x =
                                                  OvmsMetrics.Value("xiq.v.trip.consumption");<br>
                                                     print( (typeof x) +
                                                  ": "+  x+"\n"  );<br>
                                                     x =
                                                  OvmsMetrics.Value("xiq.v.trip.consumption",
                                                  false);<br>
                                                     print( (typeof x) +
                                                  ": "+  x +"\n" );<br>
                                                     x =
                                                   OvmsMetrics.Value("xiq.v.trip.consumption","kmpkwh")<br>
                                                     print( (typeof x) +
                                                  ": "+ x +"\n");<br>
                                                     x =
                                                   OvmsMetrics.Value("xiq.v.trip.consumption",
                                                  "mipkwh", false) <br>
                                                     print( (typeof x) +
                                                  ": "+ x +"\n");<br>
                                                     x =
                                                   OvmsMetrics.ValueUnit("xiq.v.trip.consumption")<br>
                                                     print( (typeof x) +
                                                  ": "+ x +"\n");<br>
                                                     x =
                                                   OvmsMetrics.ValueUnit("xiq.v.trip.consumption","mipkwh")<br>
                                                     print( (typeof x) +
                                                  ": "+ x +"\n");<br>
                                                     x =
                                                   OvmsMetrics.AsFloat("xiq.v.trip.consumption")<br>
                                                     print( (typeof x) +
                                                  ": "+ x +"\n");<br>
                                                     x =
                                                   OvmsMetrics.AsFloat("xiq.v.trip.consumption","kmpkwh")<br>
                                                     print( (typeof x) +
                                                  ": "+ x +"\n");<br>
                                                  })();</font><br>
                                              </div>
                                              <div><br>
                                              </div>
                                              <div>
                                                <pre id="m_-5904723395924573806m_1733173679174480992m_-138117451584655546m_5484224439251412587m_-6783916119872647666m_7514939671383041717m_-2249740601380801512gmail-output" style="box-sizing:border-box;overflow:auto;font-family:ui-monospace,"Cascadia Mono","Segoe UI Mono",Hack,"Source Code Pro","Roboto Mono",Menlo,Monaco,Consolas,monospace;font-size:13px;padding:9.5px;margin-top:0px;margin-bottom:10px;line-height:1.42857;color:rgb(0,34,0);word-break:break-all;background-color:rgb(245,245,245);border:1px solid rgb(204,204,204);border-radius:4px;height:165px;white-space:pre-wrap">number: 17.0582
string: 17.0582
number: 5.86227
string: 3.64264
string: 17.0582kWh/100km
string: 3.64264mi/kWh
number: 17.0582
number: 5.86227</pre>
                                              </div>
                                              <div><br>
                                              </div>
                                              <div><br>
                                              </div>
                                              <div>It still might be an
                                                idea to use 'null' as a
                                                return value if the
                                                metrics is<font face="monospace">
                                                  !IsDefined() </font><font face="arial,
                                                  sans-serif">but that
                                                  would be changing the
                                                  existing behaviour
                                                  slightly.</font></div>
                                              <div><font face="arial,
                                                  sans-serif"><br>
                                                </font></div>
                                              <div><font face="arial,
                                                  sans-serif">//.ichael</font></div>
                                              <div><br>
                                              </div>
                                            </div>
                                            <div class="gmail_quote">
                                              <div dir="ltr" class="gmail_attr">On
                                                Mon, 7 Nov 2022 at
                                                08:12, Michael Geddes
                                                <<a href="mailto:frog@bunyip.wheelycreek.net" target="_blank">frog@bunyip.wheelycreek.net</a>> wrote:<br>
                                              </div>
                                              <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
                                                <div dir="ltr">I've
                                                  worked out what the
                                                  decode flag is for and
                                                  how it works, and I
                                                  think how optional
                                                  params work. <br>
                                                  <div>I'm pretty sure I
                                                    won't  need the
                                                    'AsFloatUnit'
                                                    function; the unit
                                                    would be an option
                                                    to AsFloat(); I'll
                                                    know that soon.</div>
                                                  <div><br>
                                                  </div>
                                                  <div>The 'Value'
                                                    function is more
                                                    complicated because
                                                    of the optional
                                                    decode bool. I guess
                                                    I could add the Unit
                                                    to the end of that.</div>
                                                  <div><br>
                                                  </div>
                                                  <div>ValueUnit could
                                                    be still useful then
                                                    to provide a
                                                    'Value + Unit'.</div>
                                                  <div><br>
                                                  </div>
                                                  <div>Question:  Is
                                                    there a reason we
                                                    shouldn't be
                                                    returning with  <span style="color:rgb(220,220,170);background-color:rgb(30,30,30);font-family:Consolas,"Courier New",monospace;font-size:14px;white-space:pre-wrap">duk_push_null</span> 
                                                      if the metric
                                                    !IsDefined()  in
                                                    both AsFloat() and
                                                    Value(metric,true)
                                                    cases?</div>
                                                  <div><br>
                                                  </div>
                                                  <div>//.ichael</div>
                                                </div>
                                                <br>
                                                <div class="gmail_quote">
                                                  <div dir="ltr" class="gmail_attr">On
                                                    Sun, 6 Nov 2022 at
                                                    11:22, Michael
                                                    Geddes <<a href="mailto:frog@bunyip.wheelycreek.net" target="_blank">frog@bunyip.wheelycreek.net</a>> wrote:<br>
                                                  </div>
                                                  <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
                                                    <div dir="ltr">
                                                      <div>Right, so
                                                        I've implemented
                                                        some stuff that
                                                        seems to work
                                                        quite well. <br>
                                                      </div>
                                                      <div><br>
                                                      </div>
                                                      <div><a href="https://github.com/openvehicles/Open-Vehicle-Monitoring-System-3/pull/764" target="_blank">https://github.com/openvehicles/Open-Vehicle-Monitoring-System-3/pull/764</a> 
                                                        should be ready
                                                        now after a
                                                        couple of stupid
                                                        mistakes slipped
                                                        through.   This
                                                        absolutely needs
                                                        somebody to
                                                        review it
                                                        please! (There's
                                                        a reason why
                                                        I've converted
                                                        some if()'s to
                                                        switch() - which
                                                        is that it will
                                                        be used in the
                                                        follow-up
                                                        commit).</div>
                                                      <div><br>
                                                      </div>
                                                      <div>The commit
                                                        that will follow
                                                        on from that it
                                                        implements the
                                                        new Units:
                                                        kWh/100km,
                                                        km/kWh  and 
                                                        mi/kWh.</div>
                                                      <div><br>
                                                      </div>
                                                      <div>This is a
                                                        summary of what
                                                        I've implemented
                                                        for scripting -
                                                        including
                                                        showing the unit
                                                        codes I have
                                                        so far.  I've
                                                        considered a few
                                                        things:</div>
                                                      <div>  * Should
                                                        some of the
                                                        longer unit
                                                        codes be
                                                        shortened  (eg
                                                        mi, mins, m, ft,
                                                        deg, perc)</div>
                                                      <div>  * The unit
                                                        codes could be
                                                        much more re<font face="arial,
                                                          sans-serif">gular
                                                          and separated
                                                          by dots  eg:  </font></div>
                                                      <div><font face="arial,
                                                          sans-serif"> 
                                                               
                                                          watthours
                                                          -> w.h</font></div>
                                                      <div><font face="arial,
                                                          sans-serif"> 
                                                               
                                                          kwhp100km
                                                          ->
                                                          kw.h_100km or
                                                          kw.h/100km</font></div>
                                                      <div><font face="arial,
                                                          sans-serif"> 
                                                                miph
                                                          ->  mi_h or
                                                          mi/h  (or
                                                          should it be
                                                          mph).</font></div>
                                                      <div><font face="arial,
                                                          sans-serif"> 
                                                                psi
                                                          -> <a href="http://p_in.in/" target="_blank">p_in.in</a> or p/<a href="http://in.in/" target="_blank">in.in</a> or <a href="http://lb_in.in/" target="_blank">lb_in.in</a> (yes, slightly
                                                          weird, but
                                                          predictable)</font></div>
                                                      <div><font face="arial,
                                                          sans-serif"> </font><br>
                                                      </div>
                                                      <b style="font-family:monospace">OVMS#
                                                        metric units</b><br>
                                                      <font face="monospace"> 
                                                                km : km</font><br>
                                                      <font face="monospace"> 
                                                             miles : M</font><br>
                                                      <font face="monospace"> 
                                                            meters : m</font><br>
                                                      <font face="monospace"> 
                                                              feet : ft</font><br>
                                                      <font face="monospace"> 
                                                           celcius : °C</font><br>
                                                      <font face="monospace"> 
                                                        fahrenheit : °F</font><br>
                                                      <font face="monospace"> 
                                                               kpa : kPa</font><br>
                                                      <font face="monospace"> 
                                                                pa : Pa</font><br>
                                                      <font face="monospace"> 
                                                               psi : psi</font><br>
                                                      <font face="monospace"> 
                                                             volts : V</font><br>
                                                      <font face="monospace"> 
                                                              amps : A</font><br>
                                                      <font face="monospace"> 
                                                          </font>amphours<font face="monospace">
                                                        : Ah</font><br>
                                                      <font face="monospace"> 
                                                                kw : kW</font><br>
                                                      <font face="monospace"> 
                                                               kwh : kWh</font><br>
                                                      <font face="monospace"> 
                                                             watts : W</font><br>
                                                      <font face="monospace"> 
                                                         </font>watthours<font face="monospace">
                                                        : Wh</font><br>
                                                      <font face="monospace"> 
                                                           seconds : Sec</font><br>
                                                      <font face="monospace"> 
                                                           minutes : Min
                                                      </font><br>
                                                      <font face="monospace"> 
                                                             hours :
                                                        Hour</font><br>
                                                      <font face="monospace"> 
                                                               utc : UTC</font><br>
                                                      <font face="monospace"> 
                                                           degrees : °</font><br>
                                                      <font face="monospace"> 
                                                              kmph :
                                                        km/h</font><br>
                                                      <font face="monospace"> 
                                                              </font>miph<font face="monospace">
                                                        : Mph</font><br>
                                                      <font face="monospace"> 
                                                            </font>kmphps<font face="monospace">
                                                        : km/h/s</font><br>
                                                      <font face="monospace"> 
                                                            </font>miphps<font face="monospace">
                                                        : Mph/s</font><br>
                                                      <font face="monospace"> 
                                                              mpss :
                                                        m/s²</font><br>
                                                      <font face="monospace"> 
                                                               dbm : dBm</font><br>
                                                      <font face="monospace"> 
                                                                sq : sq</font><br>
                                                      <font face="monospace"> 
                                                           percent : %</font><br>
                                                      <font face="monospace"> 
                                                             whpkm :
                                                        Wh/km</font><br>
                                                      <font face="monospace"> 
                                                             </font>whpmi<font face="monospace">
                                                        : Wh/mi</font><br>
                                                      <font face="monospace"> 
                                                         kwhp100km :
                                                        kWh/100km</font><br>
                                                      <font face="monospace"> 
                                                            </font>kmpkwh<font face="monospace">
                                                        : km/kWh</font><br>
                                                      <font face="monospace"> 
                                                            </font>mipkwh<font face="monospace">
                                                        : mi/kWh</font><br>
                                                      <font face="monospace"> 
                                                                nm : Nm</font><br>
                                                      <font face="monospace"><br>
                                                        <b>OVMS# metric
                                                          unit mi</b><br>
                                                               miles : M<br>
                                                             minutes :
                                                        Min<br>
                                                                miph :
                                                        Mph<br>
                                                              miphps :
                                                        Mph/s<br>
                                                               whpmi :
                                                        Wh/mi<br>
                                                              mipkwh :
                                                        mi/kWh</font><br>
                                                      <br>
                                                      <b style="font-family:monospace">OVMS#
                                                        metric get
                                                        xiq.v.trip.consumption<br>
                                                      </b><font face="monospace">17.0597kWh/100km</font><br>
                                                      <b style="font-family:monospace">OVMS#
                                                        metric get
                                                        xiq.v.trip.consumption
                                                        kpkwh<br>
                                                      </b><font face="monospace">5.86177km/kWh</font><br>
                                                      <b style="font-family:monospace">OVMS#
                                                        metric get
                                                        xiq.v.trip.consumption
                                                        mpkwh<br>
                                                      </b><font face="monospace">3.64233mi/kWh</font><br>
                                                      <br>
                                                      <b style="font-family:monospace">OVMS#
                                                        metric set
                                                        xiq.c.speed 5
                                                        miph<br>
                                                      </b><font face="monospace">Metric
                                                        set</font><br>
                                                      <b style="font-family:monospace">OVMS#
                                                        metric get
                                                        xiq.c.speed<br>
                                                      </b><font face="monospace">8.04673km/h</font><br>
                                                      <b style="font-family:monospace">OVMS#
                                                        metric get
                                                        xiq.c.speed miph<br>
                                                      </b><font face="monospace">5Mph</font><br>
                                                      <br>
                                                      <font face="arial,
                                                        sans-serif">And
                                                        then in DukTape
                                                        - there are some
                                                        questions I have
                                                        about the
                                                        implementation:</font>
                                                      <div><font face="arial,
                                                          sans-serif">*
                                                          Names of
                                                          functions?
                                                          Better ideas? </font></div>
                                                      <div><font face="arial,
                                                          sans-serif">*
                                                          Should
                                                          ValueUnit
                                                          output the
                                                          units?</font></div>
                                                      <div><font face="arial,
                                                          sans-serif">*
                                                          In Value()
                                                          there is the
                                                          line  </font> 
                                                        bool decode =
                                                        duk_opt_boolean(ctx,
                                                        1, true);</div>
                                                      <div>    * What
                                                        does 'decode'
                                                        mean here?</div>
                                                      <div>    * Do I
                                                        need it for
                                                        ValueUnit() ?</div>
                                                      <div><br>
                                                        <div><b><br>
                                                          <font face="monospace">(function()
                                                          {</font><br>
                                                          <font face="monospace"> 
                                                           print(
                                                          OvmsMetrics.Value("xiq.v.trip.consumption"));</font><br>
                                                          <font face="monospace"> 
                                                           print("\n")</font><br>
                                                          <font face="monospace"> 
                                                           print(
                                                          OvmsMetrics.ValueUnit("xiq.v.trip.consumption",""));</font><br>
                                                          <font face="monospace"> 
                                                           print("\n")</font><br>
                                                          <font face="monospace"> 
                                                           print(
                                                          OvmsMetrics.ValueUnit("xiq.v.trip.consumption","</font>mipkwh<font face="monospace">"));</font><br>
                                                          <font face="monospace"> 
                                                           print("\n")</font><br>
                                                          <br>
                                                          <font face="monospace"> 
                                                           print(
                                                          OvmsMetrics.AsFloatUnit("xiq.v.trip.consumption","</font>kmpkwh<font face="monospace">"));</font><br>
                                                          <font face="monospace">})();</font></b><br>
                                                          <font face="monospace">---
                                                          Output ---</font><br>
                                                          <font face="monospace">17.0597</font><br>
                                                          <font face="monospace">17.0597kWh/100km</font><br>
                                                          <font face="monospace">3.64233mi/kWh</font><br>
                                                          <font face="monospace">5.86177</font><br>
                                                          <font face="monospace">------</font><br>
                                                          <br>
                                                        </div>
                                                      </div>
                                                      <div>The basic
                                                        stuff all works
                                                        - it's just
                                                        quibbling over
                                                        the details..
                                                        but let's get
                                                        them right!</div>
                                                      <div><br>
                                                      </div>
                                                      <div>//.ichael</div>
                                                    </div>
                                                    <br>
                                                    <div class="gmail_quote">
                                                      <div dir="ltr" class="gmail_attr">On
                                                        Sat, 5 Nov 2022
                                                        at 20:09,
                                                        Michael Geddes
                                                        <<a href="mailto:frog@bunyip.wheelycreek.net" target="_blank">frog@bunyip.wheelycreek.net</a>>
                                                        wrote:<br>
                                                      </div>
                                                      <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
                                                        <div dir="ltr">
                                                          <div>Yeah -
                                                          this was
                                                          copied code
                                                          from kia/kona
                                                          and is what
                                                          triggered
                                                          these ideas; I
                                                          totally agree
                                                          this shouldn't
                                                          be doubled up
                                                          on.</div>
                                                          <div><br>
                                                          </div>
                                                          <div>I've got
                                                          some commits
                                                          centred round
                                                          Metrics that
                                                          I'll just
                                                          check over and
                                                          push up ...
                                                          and then I'll
                                                          just have the
                                                          single <span style="font-family:monospace">xiq.v.</span><span style="font-family:monospace">trip.consumption </span>metric (unless you
                                                          have some
                                                          ideas for the
                                                          namespace)
                                                          which will be
                                                          much neater.</div>
                                                          <div><br>
                                                          </div>
                                                          <div>If it's
                                                          ok with you
                                                          then I might
                                                          do that unit
                                                          conversion
                                                          proposal.</div>
                                                          <div>Would it
                                                          ok if the unit
                                                          specifications
                                                          were the same
                                                          as to the
                                                          programatic codes
                                                          in
                                                          ovms_metrics.h?</div>
                                                          <div>(kWh, 
                                                           WattHours
                                                          , MetersPSS ) </div>
                                                          <div>I would
                                                          probably add a
                                                          command</div>
                                                          <div><font face="monospace">metric
                                                          units</font>
                                                          <spec> <br>
                                                          </div>
                                                          <div>to list
                                                          all (matching)
                                                          units and
                                                          their
                                                          associated
                                                          Labels.</div>
                                                          <div><br>
                                                          </div>
                                                          <div>//.ichael </div>
                                                          <div><br>
                                                          </div>
                                                          <div class="gmail_quote">
                                                          <div dir="ltr" class="gmail_attr">On Sat, 5 Nov 2022 at 18:48, Michael Balzer <<a href="mailto:dexter@expeedo.de" target="_blank">dexter@expeedo.de</a>>
                                                          wrote:<br>
                                                          </div>
                                                          <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
                                                          <div> Michael,<br>
                                                          <br>
                                                          adding unit
                                                          conversion
                                                          support to the
                                                          shell and
                                                          Duktape
                                                          commands is a
                                                          good idea.<br>
                                                          <br>
                                                          Metrics are
                                                          not meant to
                                                          provide a user
                                                          interface,
                                                          they should be
                                                          defined to be
                                                          efficient and
                                                          non-redundant.<br>
                                                          <br>
                                                          Btw, metrics
                                                          names also
                                                          shall not use
                                                          upper case
                                                          characters,
                                                          and shall only
                                                          use "." as a
                                                          separator.<br>
                                                          <br>
                                                          Regards,<br>
                                                          Michael<br>
                                                          <br>
                                                          <br>
                                                          <div>Am
                                                          05.11.22 um
                                                          11:22 schrieb
                                                          Michael
                                                          Geddes:<br>
                                                          </div>
                                                          <blockquote type="cite">
                                                          <div dir="ltr">Hi
                                                          all,<br>
                                                          <div>Some of
                                                          the code I
                                                          copied from
                                                          Kona/Kia code
                                                          had both
                                                          kwh/100km and
                                                          km/kwh metrics
                                                          in the code as
                                                          'Other'. </div>
                                                          <div>Adding
                                                          the various
                                                          power
                                                          consumption
                                                          Units is not
                                                          particularly
                                                          hard (I will
                                                          have a
                                                          pull-request
                                                          soon) - though
                                                          the
                                                          conversions
                                                          between them
                                                          all required
                                                          some thought!</div>
                                                          <div>... but
                                                          it also made
                                                          me think these
                                                          two metrics
                                                          that are (with
                                                          the
                                                          consumption
                                                          units added)
                                                          defined like
                                                          this:  </div>
                                                          <div><font face="monospace">m_v_trip_consumption1
                                                          =
                                                          MyMetrics.InitFloat("xiq.v.trip.consumption.KWh/100km",
                                                          10, 0,
                                                          kWHP100K);<br>
m_v_trip_consumption2 = MyMetrics.InitFloat("<a href="http://xiq.v.trip.consumption.km/kWh" target="_blank">xiq.v.trip.consumption.km/kWh</a>",
                                                          10, 0, kPkWH);<br>
                                                          </font></div>
                                                          <div><br>
                                                          </div>
                                                          <div>These are
                                                          effectively
                                                          the same
                                                          metric but in
                                                          different
                                                          units!</div>
                                                          <div>I'm
                                                          wondering if
                                                          we would be
                                                          better to have
                                                          scripting and
                                                          Duktape
                                                          support for
                                                          converting
                                                          metrics to
                                                          different
                                                          unit!  This
                                                          might be also
                                                          quite useful
                                                          for those
                                                          strange
                                                          countries that
                                                          insist on
                                                          using miles as
                                                          a measurement.</div>
                                                          <div><br>
                                                          </div>
                                                          <div>On top of
                                                          the 'metric
                                                          list' and
                                                          'metric set'
                                                          we could add a
                                                          'metric get'
                                                          which gets a
                                                          single value..
                                                          and add unit
                                                          support for
                                                          get/set.</div>
                                                          <div><br>
                                                          </div>
                                                          <div>I've also
                                                          got a pull
                                                          request that
                                                          improves the
                                                          precision of
                                                          the
                                                          km<->mi
                                                          conversions
                                                          and factors it
                                                          out.</div>
                                                          <div><br>
                                                          </div>
                                                          <div>//.ichael</div>
                                                          </div>
                                                          <br>
                                                          <fieldset></fieldset>
                                                          <pre>_______________________________________________
OvmsDev mailing list
<a href="mailto:OvmsDev@lists.openvehicles.com" target="_blank">OvmsDev@lists.openvehicles.com</a>
<a href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev" target="_blank">http://lists.openvehicles.com/mailman/listinfo/ovmsdev</a>
</pre>
                                                          </blockquote>
                                                          <br>
                                                          <pre cols="72">-- 
Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal
Fon 02333 / 833 5735 * Handy 0176 / 206 989 26</pre>
                                                          </div>
_______________________________________________<br>
                                                          OvmsDev
                                                          mailing list<br>
                                                          <a href="mailto:OvmsDev@lists.openvehicles.com" target="_blank">OvmsDev@lists.openvehicles.com</a><br>
                                                          <a href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev" rel="noreferrer" target="_blank">http://lists.openvehicles.com/mailman/listinfo/ovmsdev</a><br>
                                                          </blockquote>
                                                          </div>
                                                        </div>
                                                      </blockquote>
                                                    </div>
                                                  </blockquote>
                                                </div>
                                              </blockquote>
                                            </div>
                                          </div>
                                          <br>
                                          <fieldset></fieldset>
                                          <pre>_______________________________________________
OvmsDev mailing list
<a href="mailto:OvmsDev@lists.openvehicles.com" target="_blank">OvmsDev@lists.openvehicles.com</a>
<a href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev" target="_blank">http://lists.openvehicles.com/mailman/listinfo/ovmsdev</a>
</pre>
                                        </blockquote>
                                        <br>
                                        <pre cols="72">-- 
Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal
Fon 02333 / 833 5735 * Handy 0176 / 206 989 26</pre>
                                      </div>
_______________________________________________<br>
                                      OvmsDev mailing list<br>
                                      <a href="mailto:OvmsDev@lists.openvehicles.com" target="_blank">OvmsDev@lists.openvehicles.com</a><br>
                                      <a href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev" rel="noreferrer" target="_blank">http://lists.openvehicles.com/mailman/listinfo/ovmsdev</a><br>
                                    </blockquote>
                                  </div>
                                </div>
                                <br>
                                <fieldset></fieldset>
                                <pre>_______________________________________________
OvmsDev mailing list
<a href="mailto:OvmsDev@lists.openvehicles.com" target="_blank">OvmsDev@lists.openvehicles.com</a>
<a href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev" target="_blank">http://lists.openvehicles.com/mailman/listinfo/ovmsdev</a>
</pre>
                              </blockquote>
                              <br>
                              <pre cols="72">-- 
Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal
Fon 02333 / 833 5735 * Handy 0176 / 206 989 26</pre>
                            </div>
                          </div>
                        </div>
                        <br>
                      </div>
                    </div>
                  </blockquote>
                </div>
                <br>
              </div>
              _______________________________________________<br>
              OvmsDev mailing list<br>
              <a href="mailto:OvmsDev@lists.openvehicles.com" target="_blank">OvmsDev@lists.openvehicles.com</a><br>
              <a href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev" rel="noreferrer" target="_blank">http://lists.openvehicles.com/mailman/listinfo/ovmsdev</a><br>
            </blockquote>
          </div>
        </blockquote>
      </div>
      <br>
      <fieldset></fieldset>
      <pre>_______________________________________________
OvmsDev mailing list
<a href="mailto:OvmsDev@lists.openvehicles.com" target="_blank">OvmsDev@lists.openvehicles.com</a>
<a href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev" target="_blank">http://lists.openvehicles.com/mailman/listinfo/ovmsdev</a>
</pre>
    </blockquote>
    <br>
    <pre cols="72">-- 
Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal
Fon 02333 / 833 5735 * Handy 0176 / 206 989 26</pre>
  </div>

_______________________________________________<br>
OvmsDev mailing list<br>
<a href="mailto:OvmsDev@lists.openvehicles.com" target="_blank">OvmsDev@lists.openvehicles.com</a><br>
<a href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev" rel="noreferrer" target="_blank">http://lists.openvehicles.com/mailman/listinfo/ovmsdev</a><br>
</blockquote></div></div>
</blockquote></div>