<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body dir="auto"><div dir="ltr"></div><div dir="ltr">Ok. Will do.</div><div dir="ltr"><br></div><div dir="ltr">Now you remind me, bms looks good on iPhone:</div><div dir="ltr"><br></div><div dir="ltr"><img src="cid:8DC499F5-8E04-49C3-AC9B-F2DAF70B176B" alt="image1.jpeg" id="8DC499F5-8E04-49C3-AC9B-F2DAF70B176B"></div><div dir="ltr"><br>On 17 Nov 2018, at 6:08 PM, Michael Balzer <<a href="mailto:dexter@expeedo.de">dexter@expeedo.de</a>> wrote:<br><br></div><blockquote type="cite"><div dir="ltr">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
Yes, you can add a new menu to PageMenu_t like that. I suggest
introducing a general tools menu instead of a specific one, i.e.
"PageMenu_Tools".<br>
<br>
To still fit the menu on one line in tablet mode (width down to 768
px) I suggest moving the Shell into the tools menu then.<br>
<br>
Go ahead, I'm not working on the web framework at the moment.<br>
<br>
Regards,<br>
Michael<br>
<br>
<br>
<div class="moz-cite-prefix">Am 17.11.18 um 10:48 schrieb Mark
Webb-Johnson:<br>
</div>
<blockquote type="cite" cite="mid:E46F474B-C515-454C-B011-7916A84BBA87@webb-johnson.net">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
Twizy code overrides the virtual short name function, so won’t
suffer the issue.
<div class=""><br class="">
</div>
<div class="">I think it is a bug in vehicle factory (as modifying
the vehicle type is reasonable), so fixed it there. Returning
NULL is problematic. It would be so much easier for everything
to return std::string, but concern is memory consumption and
overhead.</div>
<div class=""><br class="">
</div>
<div class="">I’d like to start converting RE TOOLS to just use
the web server. First step is to work out how to add a menu onto
the web server. It seems that the PageMenu_t is a fixed enum
list (and similarly hard-coded in the web_framework.</div>
<div class=""><br class="">
</div>
<blockquote style="margin: 0 0 0 40px; border: none; padding:
0px;" class="">
<div class="">Do I just add a ‘CAN bus’ menu there, by adding it
to PageMenu_t, and supporting it where the other top level
menus are? Or do you have any other suggestions/plans for
this?</div>
<div class=""><br class="">
</div>
<div class="">I don’t want to step on anything you are working
on here.</div>
</blockquote>
<div class="">
<div><br class="">
</div>
<div>The second stage will be to add displays under that, but I
think that is fairly straight forward. I will mostly be
displaying tables, and sending those over the web socket would
be good.</div>
<div><br class="">
</div>
<div>Regards, Mark</div>
<div><br class="">
<blockquote type="cite" class="">
<div class="">On 17 Nov 2018, at 5:37 PM, Michael Balzer
<<a href="mailto:dexter@expeedo.de" class="" moz-do-not-send="true">dexter@expeedo.de</a>> wrote:</div>
<br class="Apple-interchange-newline">
<div class="">
<meta http-equiv="Content-Type" content="text/html;
charset=UTF-8" class="">
<div text="#000000" bgcolor="#FFFFFF" class=""> Mark,<br class="">
<br class="">
nice, thanks.<br class="">
<br class="">
The short name is used for the menu label. It's meant to
fall back to the long name (and seems to do so in your
screenshot), so should not be null. But I admit I
haven't tested it on a vehicle without a short name.<br class="">
<br class="">
Btw, I'm currently working on the deviations and alerts.<br class="">
<br class="">
Regards,<br class="">
Michael<br class="">
<br class="">
<br class="">
<div class="moz-cite-prefix">Am 17.11.18 um 10:08
schrieb Mark Webb-Johnson:<br class="">
</div>
<blockquote type="cite" cite="mid:096E607E-ADE6-4780-BB70-C8E5B8A7AC2D@webb-johnson.net" class="">
<meta http-equiv="Content-Type" content="text/html;
charset=UTF-8" class="">
Michael,
<div class=""><br class="">
</div>
<div class="">Looks good. It seems that you did
everything necessary for the Model S already in your
commit 2a84d861403f48142d6adcc16ad7a20cd458e427:</div>
<div class=""><br class="">
</div>
<blockquote style="margin: 0 0 0 40px; border: none;
padding:
0px;" class="">
<div class=""><font class="" face="Andale Mono"><span style="font-size: 14px;" class="">#include
“ovms_webserver.h"</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size: 14px;" class=""><br class="">
</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size: 14px;" class="">OvmsVehicleTeslaModelS::OvmsVehicleTeslaModelS()</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size: 14px;" class="">MyWebServer.RegisterPage("/bms/cellmon",
"BMS cell monitor",
OvmsWebServer::HandleBmsCellMonitor,
PageMenu_Vehicle, PageAuth_Cookie);</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size: 14px;" class=""><br class="">
</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size: 14px;" class="">OvmsVehicleTeslaModelS::~OvmsVehicleTeslaModelS()</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size: 14px;" class="">MyWebServer.DeregisterPage("/bms/cellmon");</span></font></div>
</blockquote>
<div class=""><br class="">
</div>
<div class="">From my devbench, replaying a CAN CRTD
log file, I get this output:<br class="">
<div class=""><br class="">
</div>
<div class=""><span id="cid:part1.478CBE5C.50A27CA9@expeedo.de"><PastedGraphic-2.png></span></div>
<div class=""><br class="">
</div>
<div class="">The animation is very nice.</div>
<div class=""><br class="">
</div>
<div class="">I am, however, getting crashes, as
follows:</div>
</div>
<div class="">
<div class=""><br class="">
</div>
</div>
<blockquote style="margin: 0 0 0 40px; border: none;
padding:
0px;" class="">
<div class="">
<div class="">
<div class=""><font class="" face="Andale Mono"><span style="font-size: 14px;" class="">#
xtensa-esp32-elf-addr2line -pfiaC -e
3.1.011-25-g2a84d86.ovms3.elf 0x400935d3
0x4009372b 0x400db90c 0x4012c0f7
0x4012d0e1 0x4012d1e0 0x4012ebc1
0x4012ecbd 0x400f8b65 0x400f912d
0x400fa27c 0x400fa29a 0x400f8b65
0x400fa3e3 0x400fa7ad 0x400faa77
0x400f767e 0x400ee40a 0x400ee459</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size: 14px;" class="">0x400935d3:
invoke_abort at
/home/openvehicles/build/esp-idf/components/esp32/panic.c:670</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size: 14px;" class="">0x4009372b:
abort at
/home/openvehicles/build/esp-idf/components/esp32/panic.c:670</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size: 14px;" class="">0x400db90c:
__cxx_fatal_exception_message at
/home/openvehicles/build/esp-idf/components/cxx/cxx_exception_stubs.cpp:19</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size: 14px;" class="">0x4012c0f7:
void std::__cxx11::basic_string<char,
std::char_traits<char>,
std::allocator<char>
>::_M_construct<char const*>(char
const*, char const*,
std::forward_iterator_tag) at
/home/openvehicles/build/xtensa-esp32-elf/xtensa-esp32-elf/include/c++/5.2.0/bits/basic_string.tcc:216</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size: 14px;" class=""> (inlined
by) void
std::__cxx11::basic_string<char,
std::char_traits<char>,
std::allocator<char>
>::_M_construct_aux<char
const*>(char const*, char const*,
std::__false_type) at
/home/openvehicles/build/xtensa-esp32-elf/xtensa-esp32-elf/include/c++/5.2.0/bits/basic_string.h:195</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size: 14px;" class=""> (inlined
by) void
std::__cxx11::basic_string<char,
std::char_traits<char>,
std::allocator<char>
>::_M_construct<char const*>(char
const*, char const*) at
/home/openvehicles/build/xtensa-esp32-elf/xtensa-esp32-elf/include/c++/5.2.0/bits/basic_string.h:214</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size: 14px;" class=""> (inlined
by) std::__cxx11::basic_string<char,
std::char_traits<char>,
std::allocator<char>
>::basic_string(char const*,
std::allocator<char> const&) at
/home/openvehicles/build/xtensa-esp32-elf/xtensa-esp32-elf/include/c++/5.2.0/bits/basic_string.h:457</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size: 14px;" class="">0x4012d0e1:
OvmsWebServer::CreateMenu[abi:cxx11](PageContext&) at
/home/openvehicles/build/Open-Vehicle-Monitoring-System-3.1/vehicle/OVMS.V3/components/ovms_webserver/src/web_framework.cpp:393</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size: 14px;" class="">0x4012d1e0:
OvmsWebServer::HandleRoot(PageEntry&,
PageContext&) at
/home/openvehicles/build/Open-Vehicle-Monitoring-System-3.1/vehicle/OVMS.V3/components/ovms_webserver/src/web_framework.cpp:510</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size: 14px;" class="">0x4012ebc1:
PageEntry::Serve(PageContext&) at
/home/openvehicles/build/Open-Vehicle-Monitoring-System-3.1/vehicle/OVMS.V3/components/ovms_webserver/src/ovms_webserver.cpp:558</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size: 14px;" class="">0x4012ecbd:
OvmsWebServer::EventHandler(mg_connection*, int, void*) at
/home/openvehicles/build/Open-Vehicle-Monitoring-System-3.1/vehicle/OVMS.V3/components/ovms_webserver/src/ovms_webserver.cpp:558</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size: 14px;" class="">0x400f8b65:
mg_call at
/home/openvehicles/build/Open-Vehicle-Monitoring-System-3.1/vehicle/OVMS.V3/components/mongoose/mongoose/mongoose.c:1701</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size: 14px;" class="">0x400f912d:
mg_http_call_endpoint_handler at
/home/openvehicles/build/Open-Vehicle-Monitoring-System-3.1/vehicle/OVMS.V3/components/mongoose/mongoose/mongoose.c:1701</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size: 14px;" class="">0x400fa27c:
mg_http_handler2 at
/home/openvehicles/build/Open-Vehicle-Monitoring-System-3.1/vehicle/OVMS.V3/components/mongoose/mongoose/mongoose.c:1701</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size: 14px;" class="">0x400fa29a:
mg_http_handler at
/home/openvehicles/build/Open-Vehicle-Monitoring-System-3.1/vehicle/OVMS.V3/components/mongoose/mongoose/mongoose.c:1701</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size: 14px;" class="">0x400f8b65:
mg_call at
/home/openvehicles/build/Open-Vehicle-Monitoring-System-3.1/vehicle/OVMS.V3/components/mongoose/mongoose/mongoose.c:1701</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size: 14px;" class="">0x400fa3e3:
mg_recv_common at
/home/openvehicles/build/Open-Vehicle-Monitoring-System-3.1/vehicle/OVMS.V3/components/mongoose/mongoose/mongoose.c:1701</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size: 14px;" class="">0x400fa7ad:
mg_if_recv_tcp_cb at
/home/openvehicles/build/Open-Vehicle-Monitoring-System-3.1/vehicle/OVMS.V3/components/mongoose/mongoose/mongoose.c:1701</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size: 14px;" class=""> (inlined
by) mg_handle_tcp_read at
/home/openvehicles/build/Open-Vehicle-Monitoring-System-3.1/vehicle/OVMS.V3/components/mongoose/mongoose/mongoose.c:3723</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size: 14px;" class=""> (inlined
by) mg_mgr_handle_conn at
/home/openvehicles/build/Open-Vehicle-Monitoring-System-3.1/vehicle/OVMS.V3/components/mongoose/mongoose/mongoose.c:3844</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size: 14px;" class="">0x400faa77:
mg_socket_if_poll at
/home/openvehicles/build/Open-Vehicle-Monitoring-System-3.1/vehicle/OVMS.V3/components/mongoose/mongoose/mongoose.c:1701</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size: 14px;" class="">0x400f767e:
mg_mgr_poll at
/home/openvehicles/build/Open-Vehicle-Monitoring-System-3.1/vehicle/OVMS.V3/components/mongoose/mongoose/mongoose.c:1701</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size: 14px;" class="">0x400ee40a:
OvmsNetManager::MongooseTask() at
/home/openvehicles/build/Open-Vehicle-Monitoring-System-3.1/vehicle/OVMS.V3/main/ovms_netmanager.cpp:560</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size: 14px;" class="">0x400ee459:
MongooseRawTask(void*) at
/home/openvehicles/build/Open-Vehicle-Monitoring-System-3.1/vehicle/OVMS.V3/main/ovms_netmanager.cpp:545</span></font></div>
</div>
</div>
</blockquote>
<div class="">
<div class=""><br class="">
</div>
<div class="">On my development bench module I get
this crash 1 in 4 times or so. On my real car,
100% of the time.</div>
<div class=""><br class="">
</div>
<div class="">That code path leads
into MyVehicleFactory.ActiveVehicleShortName().
Those should all be ‘const char*’, but it is
possible for NULL to be returned. I will look into
it in more detail.</div>
<div class=""><br class="">
</div>
<div class="">Regards, Mark.</div>
<div class=""><br class="">
</div>
<div class="">
<blockquote type="cite" class="">
<div class="">On 17 Nov 2018, at 7:35 AM,
Michael Balzer <<a href="mailto:dexter@expeedo.de" class="" moz-do-not-send="true">dexter@expeedo.de</a>>
wrote:</div>
<br class="Apple-interchange-newline">
<div class="">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" class="">
<div text="#000000" bgcolor="#FFFFFF" class="">
Mark, Tamás,<br class="">
<br class="">
I haven't had the time yet to take care of
the stddev port, but I've just added the
generalized web UI.<br class="">
<br class="">
Please see git log for details and send some
screenshots.<br class="">
<br class="">
Regards,<br class="">
Michael<br class="">
<br class="">
<br class="">
<div class="moz-cite-prefix">Am 11.11.18 um
16:47 schrieb Mark Webb-Johnson:<br class="">
</div>
<blockquote type="cite" cite="mid:C4AAA14F-A53C-47E7-AB38-DC5437F14037@webb-johnson.net" class="">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" class="">
OK. I spent some time on this today, and
sent in a first draft (as a bunch of
extensions to vehicle.{h, cpp}). I
migrated the Tesla Model S code to use it,
and support came down to just a few simple
lines of code.
<div class=""><br class="">
</div>
<div class="">For the moment, I dropped
the idea of ‘readingsperrow’, as I think
that is Tesla Model S specific, and not
really necessary. Purely presentational.</div>
<div class=""><br class="">
</div>
<div class="">c++ std::bitset is fixed
size, so that doesn’t work for us. The
std::vector<bool> seems a workable
alternative, but I am not really happy
with using std::find as a way of looking
to see if we have everything. It works
as it is, but is not very optimal. It
seems there should be a better way of
doing that. I think it is a pretty key
feature, given the broadcast nature of
the buses, to help the vehicle module
know when it has a set of data ready to
commit to metrics, so will need to think
about this some more.</div>
<div class=""><br class="">
</div>
<div class="">I also implemented min and
max, for voltages and temperatures. They
went in cleanly. Haven’t tackled stddev
yet (or the watchers/alerts, overall
aggregates, etc). There is a very basic
‘bms status’ command implemented.</div>
<div class=""><br class="">
</div>
<div class="">Let me know what you think
of it.</div>
<div class=""><br class="">
</div>
<div class="">Regards, Mark</div>
<div class=""><br class="">
<div class="">
<blockquote type="cite" class="">
<div class="">On 11 Nov 2018, at
5:11 PM, Michael Balzer <<a href="mailto:dexter@expeedo.de" class="" moz-do-not-send="true">dexter@expeedo.de</a>>
wrote:</div>
<br class="Apple-interchange-newline">
<div class="">
<meta http-equiv="Content-Type" content="text/html;
charset=UTF-8" class="">
<div text="#000000" bgcolor="#FFFFFF" class="">
Mark,<br class="">
<br class="">
yes, .min & .max are the
minimum and maximum readings
seen since last battery monitor
reset. The reset should be
available as…<br class="">
<ul class="">
<li class="">OvmsVehicle::ResetCellStats();</li>
<li class="">Command: "vehicle
bms reset" …or just "bms
reset" as we also have other
vehicle commands on the root
level?<br class="">
</li>
</ul>
On the Twizy I do an auto reset
each time the vehicle is turned
on and each time a charge
starts, but that behaviour
should be controllable by the
vehicle / user.<br class="">
<br class="">
<br class="">
There's additionally the overall
{ .stddev, .avg } on voltages
and temperatures of the pack.
These and the cell level
statistics can be calculated by
the framework, so the vehicle
simply needs to provide the
readings. The framework needs to
provide a way to reset the
readings completion bitset, i.e.<br class="">
<ul class="">
<li class="">OvmsVehicle::RestartCellVoltages();</li>
<li class="">OvmsVehicle::RestartCellTemperatures();</li>
</ul>
…as sometimes readings get lost,
and adding new to the previous
readings may lead to an
inconsistent view leading to
wrong standard deviation.<br class="">
<br class="">
<br class="">
Speaking of standard deviation,
the framework should also
provide warnings and alerts
flags. On the Twizy it does so
by checking deviation
thresholds, and there's a
general stddev warn & alert
threshold to detect overall
condition and two alert
thresholds on the cell level,
one for normal stddev and one
for stddev alert mode. Warning
flags on the cell level are set
when the cell deviation is above
stddev. On the Twizy these
thresholds are currently fixed
to…<br class="">
<blockquote class=""><tt class="">// Battery
cell/cmod deviation alert
thresholds:</tt><br class="">
<tt class="">#define
BATT_DEV_TEMP_ALERT
3 // = 3 °C</tt><br class="">
<tt class="">#define
BATT_DEV_VOLT_ALERT
6 // = 30 mV</tt><br class="">
<br class="">
<tt class="">// ...thresholds
for overall stddev:</tt><br class="">
<tt class="">#define
BATT_STDDEV_TEMP_WATCH
2 // = 2 °C</tt><br class="">
<tt class="">#define
BATT_STDDEV_TEMP_ALERT
3 // = 3 °C</tt><br class="">
<tt class="">#define
BATT_STDDEV_VOLT_WATCH
3 // = 15 mV</tt><br class="">
<tt class="">#define
BATT_STDDEV_VOLT_ALERT
5 // = 25 mV</tt><br class="">
</blockquote>
…these are good defaults for the
Twizy 43 Ah pouch cells, but may
be too low for an 18650 pack,
and will especially not fit
cheap LFP type cells. So these
should be configurable, i.e.<br class="">
<ul class="">
<li class="">vehicle
bms.dev.temp.alert [°C]</li>
<li class="">vehicle
bms.dev.voltage.alert [V]</li>
<li class="">vehicle
bms.stddev.temp.watch [°C]</li>
<li class="">vehicle
bms.stddev.temp.alert [°C]</li>
<li class="">vehicle
bms.stddev.voltage.watch [V]</li>
<li class="">vehicle
bms.stddev.voltage.alert [V]</li>
</ul>
I can generalize the Twizy code
for all of this.<br class="">
<br class="">
<br class="">
The Twizy battery monitoring
command set is:<br class="">
<blockquote class=""><tt class="">OVMS# xrt batt ?</tt><br class="">
<tt class="">data-cell
Output cell record</tt><br class="">
<tt class="">data-pack
Output pack record</tt><br class="">
<tt class="">reset
Reset alerts & watches</tt><br class="">
<tt class="">status
Status report</tt><br class="">
<tt class="">tdev
Show temperature deviations</tt><br class="">
<tt class="">temp
Show temperatures</tt><br class="">
<tt class="">vdev
Show voltage deviations</tt><br class="">
<tt class="">volt
Show voltages</tt><br class="">
</blockquote>
The "data" commands provide the
server historical records
output. The other commands
originate from the V2 and have
been designed to keep the output
within the SMS msg size limit.<br class="">
<br class="">
"status" gives an operative
overview of the standard and max
deviation levels of cells with
warning or alert status. "volt",
"vdev", "temp" and "tdev" show
all cells.<br class="">
<br class="">
The Twizy generates a battery
alert notification from the
"status" output whenever some
cell alert flag is set.<br class="">
<br class="">
<br class="">
The Twizy server records also
originate from the V2 limits,
and can now better be changed to
vectors. I've just finished a
virtual dynamometer on the
Twizy, sending a vector metric
to the server is just a matter
of…<br class="">
<blockquote class=""><tt class="">std::string msg =
"RT-ENG-MotTrqDrv,0,86400,";</tt><br class="">
<tt class="">msg.append(m_mon.m_mot_torque_drv->AsString());</tt><br class="">
<tt class="">MyNotify.NotifyString("data",
"xrt.pwr.mon", msg.c_str());</tt><br class="">
</blockquote>
Neat.<br class="">
<br class="">
The Twizy sends server records
once per minute during
drive/charge. The server update
frequency should become tunable
as well, as that would be a lot
of additional data volume on
large packs.<br class="">
<br class="">
<br class="">
The Twizy layout may be either…<br class="">
<ul class="MailOutline">
<li class="">14 cell groups in
the pack</li>
<li class="">2 cell groups in
each module</li>
<li class="">7 modules in the
pack</li>
<li class="">Each cell group
has 1 voltage measurement
(so, 14 individual voltage
measurements)</li>
<li class="">Each module has 1
temperature measurements
(so, 7 individual
temperature measurements)</li>
<li class="">That means:</li>
<ul class="">
<li class="">OvmsVehicle::SetCellArrangementVoltage(14,
2, 7)</li>
<li class="">OvmsVehicle::SetCellArrangementTemperature(7,
1, 7)</li>
</ul>
</ul>
<p class="">…for the original
battery, or for an LFP type
replacement…</p>
<ul class="MailOutline">
<li class="">16 cell groups in
the pack</li>
<li class="">16 cell groups in
each module</li>
<li class="">1 module in the
pack</li>
<li class="">Each cell group
has 1 voltage measurement
(so, 16 individual voltage
measurements)</li>
<li class="">Each module has 3
temperature measurements
(so, 3 individual
temperature measurements)</li>
<li class="">That means:</li>
<ul class="">
<li class="">OvmsVehicle::SetCellArrangementVoltage(16,
16, 8)</li>
<li class="">OvmsVehicle::SetCellArrangementTemperature(3,
3, 3)</li>
</ul>
</ul>
<br class="">
Regards,<br class="">
Michael<br class="">
<br class="">
<br class="">
<div class="moz-cite-prefix">Am
11.11.18 um 08:10 schrieb Mark
Webb-Johnson:<br class="">
</div>
<blockquote type="cite" cite="mid:88AF6B7B-37D7-4698-97CD-43B6E481DBF0@webb-johnson.net" class="">
<meta http-equiv="Content-Type" content="text/html;
charset=UTF-8" class="">
Looking at the discussion with
Michael back in May, we came
to some conclusions for this.
I was happy back then with
using ‘cell’ rather than
‘module’ as the naming,
because (a) we are talking
about cell/brick/module level
here, not pack, and (b) it is
shorter. It seems that the
twizy has:
<div class=""><br class="">
</div>
<blockquote style="margin: 0 0
0 40px;
border:
none;
padding:
0px;" class="">
<div class=""><tt style="background-color:
rgb(255,
255,
255);" class="">xrt.b.cell.01.volt.act
3.995V</tt><tt style="background-color:
rgb(255,
255,
255);" class=""><br class="">
</tt><tt style="background-color:
rgb(255, 255,
255);" class="">xrt.b.cell.01.volt.max
4.12V</tt><tt style="background-color:
rgb(255,
255,
255);" class=""><br class="">
</tt><tt style="background-color:
rgb(255, 255,
255);" class="">xrt.b.cell.01.volt.maxdev
0.01V</tt><tt style="background-color:
rgb(255,
255,
255);" class=""><br class="">
</tt><tt style="background-color:
rgb(255, 255,
255);" class="">xrt.b.cell.01.volt.min
3.795V</tt><tt style="background-color:
rgb(255,
255,
255);" class=""><br class="">
</tt></div>
<div class=""><tt style="background-color:
rgb(255,
255,
255);" class="">...</tt></div>
<div class=""><tt style="background-color:
rgb(255,
255,
255);" class="">xrt.b.cell.cnt
14</tt></div>
<div class=""><tt style="background-color:
rgb(255,
255,
255);" class="">...</tt></div>
<div class=""><tt style="background-color:
rgb(255,
255,
255);" class=""><tt class="">xrt.b.cmod.01.temp.act
17°C</tt><tt class=""><br class="">
</tt><tt class="">xrt.b.cmod.01.temp.max
23°C</tt><tt class=""><br class="">
</tt><tt class="">xrt.b.cmod.01.temp.maxdev
1°C</tt><tt class=""><br class="">
</tt><tt class="">xrt.b.cmod.01.temp.min
16°C</tt></tt></div>
<div class=""><tt style="background-color:
rgb(255,
255,
255);" class=""><tt class="">...</tt></tt></div>
<div class=""><tt style="background-color:
rgb(255,
255,
255);" class=""><tt class="">xrt.b.cmod.cnt
7</tt></tt></div>
<div class=""><tt style="background-color:
rgb(255,
255,
255);" class=""><tt class="">...</tt></tt></div>
<div class=""><tt style="background-color:
rgb(255,
255,
255);" class=""><tt class=""><tt class="">xrt.b.pack.1.temp.alerts</tt><tt class=""><br class="">
</tt><tt class="">xrt.b.pack.1.temp.max
23°C</tt><tt class=""><br class="">
</tt><tt class="">xrt.b.pack.1.temp.min
16°C</tt><tt class=""><br class="">
</tt><tt class="">xrt.b.pack.1.temp.stddev.max
1°C</tt><tt class=""><br class="">
</tt><tt class="">xrt.b.pack.1.temp.watches</tt><tt class=""><br class="">
</tt><tt class="">xrt.b.pack.1.volt.alerts</tt><tt class=""><br class="">
</tt><tt class="">xrt.b.pack.1.volt.max
57.6V</tt><tt class=""><br class="">
</tt><tt class="">xrt.b.pack.1.volt.min
52.8V</tt><tt class=""><br class="">
</tt><tt class="">xrt.b.pack.1.volt.stddev.max
0.005V</tt><tt class=""><br class="">
</tt><tt class="">xrt.b.pack.1.volt.watches
1,2,4,5,6,7,11,12,14</tt><tt class=""><br class="">
</tt><tt class="">xrt.b.pack.cnt
1</tt></tt></tt></div>
<div class=""><tt style="background-color:
rgb(255,
255,
255);" class=""><tt class=""><tt class="">...<br class="">
</tt><tt class="">xrt.b.soc.max
100%</tt><tt class=""><br class="">
</tt><tt class="">xrt.b.soc.min
69.78%</tt></tt></tt></div>
</blockquote>
<div class="">
<div class=""><br class="">
</div>
<div class="">Trying to come
up with a standard
representation for this
(so everyone can use a
shared library, and share
output displays), that
works across all
vehicles... Assuming we
have one-dimensional
arrays for different types
of measurement (for
voltage, temperature,
etc), measurements are
taken at the group of
cells level (with perhaps
different groupings for
different readings), and
aggregations/limits being
automatically calculated,
I think this has:</div>
<div class=""><br class="">
</div>
<div class="">
<ol class="MailOutline">
<li class="">v.b.c.voltage<br class="">
<br class="">
Vector<float>
metric type array of
voltage measurements<br class="">
<br class="">
</li>
<li class="">v.b.c.temp<br class="">
<br class="">
Vector<float>
metric type array of
temperature
measurements<br class="">
<br class="">
</li>
<li class="">Aggregations
/ limits<br class="">
<br class="">
We could have
v.b.c.voltage.min,
v.b.c.voltage.max,
v.b.c.voltage.maxdev,
v.b.c.temp.min,
v.b.c.temp.max, and
v.b.c.temp.maxdev if
we wanted to store
these. Presumably they
could be automatically
calculated? I am
guessing ‘min’ is the
minimal value seen,
and ‘max’ the maximum?<br class="">
<br class="">
</li>
<li class="">Setting as
a batch<br class="">
<br class="">
The way I’ve
implemented the Model
S is to keep a bitmap
of values set. For
example, say we have
32 cell voltage
measurements. Every
time we set a voltage
measurement, we set
the appropriate bit.
When the bitmap is
full, zero the bitmap,
then set the metric in
bulk (setting the
entire vector). That
seems to work well for
Model S at least. The
aggregations/limits
would be calculated
(and set) when the
batch is ready. I
suggest something
like:<br class="">
<br class="">
</li>
<ul class="">
<li class="">OvmsVehicle::SetCellVoltage(int
index, float value);</li>
<li class="">OvmsVehicle::SetCellTemperature(int
index, float value);<br class="">
<br class="">
</li>
</ul>
<li class="">Arrangement<br class="">
<br class="">
My thinking is that
the count of
measurements available
can be defined when
the module
initialises. We can
also simply count the
size of the vectors,
to know that. The
issue is the
cell/brick/module/pack
arrangement; How many
voltage or temperature
measurements per
module, how many
modules in the pack,
etc. I think we need
to tell the system (a)
the number of readings
expected, (b) the
number of readings per
module, and (c) a hint
to say how many
readings to show per
row. I suggest
something like:<br class="">
<br class="">
</li>
<ul class="">
<li class="">OvmsVehicle::SetCellArrangementVoltage(int
readings, int
readingspermodule,
int readingsperrow)</li>
<li class="">OvmsVehicle::SetCellArrangementTemperature(int
readings, int
readingspermodule,
int readingsperrow)<br class="">
<br class="">
</li>
</ul>
<li class="">Commands<br class="">
<br class="">
Once the above is
defined we can have a
‘vehicle bms status’
command to show the
status (like the Tesla
Model S one shown
here, albeit more
polished):</li>
</ol>
</div>
<div class=""><br class="">
</div>
</div>
<blockquote style="margin: 0 0
0 40px;
border:
none;
padding:
0px;" class="">
<div class="">
<div class="">
<div class=""> <font class="" face="Andale Mono"><span style="font-size:
14px;" class="">
-------------------------------</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size:
14px;" class=""> 1
| 3.981 V | 3.981
V | 3.981 V | 29.5
C</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size:
14px;" class="">
| 3.981 V | 3.981
V | 3.981 V | 30.3
C Max</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size:
14px;" class="">
-------------------------------</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size:
14px;" class=""> 2
| 3.981 V | 3.981
V | 3.982 V | 29.4
C</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size:
14px;" class="">
| 3.981 V | 3.981
V | 3.981 V | 29.8
C</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size:
14px;" class="">
-------------------------------</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size:
14px;" class=""> 3
| 3.982 V | 3.982
V | 3.981 V | 29.1
C</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size:
14px;" class="">
| 3.981 V | 3.981
V | 3.982 V | 29.7
C</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size:
14px;" class="">
-------------------------------</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size:
14px;" class=""> 4
| 3.982 V | 3.982
V | 3.982 V | 28.9
C Min</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size:
14px;" class="">
| 3.981 V | 3.982
V | 3.982 V | 29.7
C</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size:
14px;" class="">
-------------------------------</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size:
14px;" class=""> 5
| 3.982 V | 3.982
V | 3.982 V | 29.0
C</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size:
14px;" class="">
| 3.982 V | 3.981
V | 3.981 V | 29.6
C</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size:
14px;" class="">
-------------------------------</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size:
14px;" class=""> 6
| 3.982 V | 3.982
V | 3.982 V | 29.3
C</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size:
14px;" class="">
| 3.982 V | 3.982
V | 3.982 V | 29.6
C</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size:
14px;" class="">
-------------------------------</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size:
14px;" class=""> 7
| 3.981 V | 3.981
V | 3.981 V | 29.0
C</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size:
14px;" class="">
| 3.981 V | 3.981
V | 3.981 V | 29.6
C</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size:
14px;" class="">
-------------------------------</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size:
14px;" class=""> 8
| 3.982 V | 3.983
V | 3.982 V | 29.2
C</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size:
14px;" class="">
| 3.983 V | 3.982
V | 3.982 V | 29.9
C</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size:
14px;" class="">
-------------------------------</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size:
14px;" class=""> 9
| 3.982 V | 3.982
V | 3.981 V | 30.0
C</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size:
14px;" class="">
| 3.982 V | 3.981
V | 3.981 V | 29.7
C</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size:
14px;" class="">
-------------------------------</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size:
14px;" class="">10
| 3.979 V | 3.980
V | 3.979 V | 29.1
C</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size:
14px;" class="">
| 3.980 V | 3.979
V | 3.979 V | 29.8
C</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size:
14px;" class="">
-------------------------------</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size:
14px;" class="">11
| 3.980 V | 3.981
V | 3.981 V | 29.1
C</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size:
14px;" class="">
| 3.981 V | 3.981
V | 3.981 V | 29.4
C</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size:
14px;" class="">
-------------------------------</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size:
14px;" class="">12
| 3.981 V | 3.982
V | 3.981 V | 29.1
C</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size:
14px;" class="">
| 3.981 V | 3.981
V | 3.982 V | 29.3
C</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size:
14px;" class="">
-------------------------------</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size:
14px;" class="">13
| 3.982 V | 3.983
V | 3.982 V | 28.9
C</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size:
14px;" class="">
| 3.982 V | 3.982
V | 3.982 V | 29.4
C</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size:
14px;" class="">
-------------------------------</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size:
14px;" class="">14
| 3.981 V | 3.982
V | 3.982 V | 29.3
C</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size:
14px;" class="">
| 3.982 V | 3.982
V | 3.982 V | 29.5
C</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size:
14px;" class="">
-------------------------------</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size:
14px;" class="">15
| 3.981 V | 3.982
V | 3.981 V | 29.6
C</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size:
14px;" class="">
| 3.982 V | 3.981
V | 3.981 V | 29.9
C</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size:
14px;" class="">
-------------------------------</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size:
14px;" class="">16
| 3.982 V | 3.982
V | 3.982 V | 29.5
C</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size:
14px;" class="">
| 3.982 V | 3.981
V | 3.981 V | 29.8
C</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size:
14px;" class="">
-------------------------------</span></font></div>
<div class=""><font class="" face="Andale Mono"><span style="font-size:
14px;" class="">
Tmin: 28.9 Tmax:
30.3 Vmax: 3.983
Vmin: 3.979
Vmax-Vmin: 0.003
Vtot: 382.23</span></font></div>
</div>
</div>
<div class=""><font class="" face="Andale Mono"><span style="font-size:
14px;" class=""><br class="">
</span></font></div>
<div class="">Another
variant of this display
would be:</div>
<div class=""><br class="">
</div>
<div class="">
<div class=""> <font class="" face="Andale
Mono"><span style="font-size:
14px;" class=""> -------------------------------</span></font><span style="font-family:
"Andale
Mono";
font-size:
14px;" class="">-------------------------------</span><span style="font-family:
"Andale
Mono";
font-size:
14px;" class="">--------------------</span></div>
<div class=""><font class="" face="Andale
Mono"><span style="font-size:
14px;" class=""> 1 |
3.981 V | 3.981 V |
3.981 V | </span></font><span style="font-family:
"Andale
Mono";
font-size: 14px;" class="">3.981 V |
3.981 V | 3.981 V </span><font class="" face="Andale
Mono"><span style="font-size:
14px;" class="">|
29.5 C. </span></font><span style="font-family:
"Andale
Mono";
font-size:
14px;" class="">30.3 C
Max |</span></div>
<div class=""> <font class="" face="Andale
Mono"><span style="font-size:
14px;" class=""> -------------------------------</span></font><span style="font-family:
"Andale
Mono";
font-size:
14px;" class="">-------------------------------</span><span style="font-family:
"Andale
Mono";
font-size:
14px;" class="">--------------------</span></div>
<div class=""><font class="" face="Andale
Mono"><span style="font-size:
14px;" class=""> 2 |
3.981 V | 3.981 V |
3.982 V | </span></font><span style="font-family:
"Andale
Mono";
font-size: 14px;" class="">3.981 V |
3.981 V | 3.981 V | </span><font class="" face="Andale
Mono"><span style="font-size:
14px;" class="">29.4
C </span></font><span style="font-family:
"Andale
Mono";
font-size:
14px;" class="">29.8 C
|</span></div>
<div class=""> <font class="" face="Andale
Mono"><span style="font-size:
14px;" class=""> -------------------------------</span></font><span style="font-family:
"Andale
Mono";
font-size:
14px;" class="">-------------------------------</span><span style="font-family:
"Andale
Mono";
font-size:
14px;" class="">--------------------</span></div>
<div class=""><span style="font-size:
14px;
font-family:
"Andale
Mono";" class=""> 3
| 3.982 V | 3.982 V |
3.981 V | </span><span style="font-family:
"Andale
Mono";
font-size: 14px;" class="">3.981 V |
3.981 V | 3.982 V | </span><span style="font-size:
14px;
font-family:
"Andale
Mono";" class="">29.1
C </span><span style="font-family:
"Andale
Mono";
font-size:
14px;" class="">29.7 C
|</span></div>
<div class=""> <font class="" face="Andale
Mono"><span style="font-size:
14px;" class=""> -------------------------------</span></font><span style="font-family:
"Andale
Mono";
font-size:
14px;" class="">-------------------------------</span><span style="font-family:
"Andale
Mono";
font-size:
14px;" class="">--------------------</span></div>
<div class=""><span style="font-size:
14px;
font-family:
"Andale
Mono";" class=""> 4
| 3.982 V | 3.982 V |
3.982 V | </span><span style="font-family:
"Andale
Mono";
font-size: 14px;" class="">3.981 V |
3.982 V | 3.982 V | </span><span style="font-size:
14px;
font-family:
"Andale
Mono";" class="">28.9
C Min </span><span style="font-family:
"Andale
Mono";
font-size: 14px;" class="">29.7 C |</span></div>
<div class=""> <font class="" face="Andale
Mono"><span style="font-size:
14px;" class=""> -------------------------------</span></font><span style="font-family:
"Andale
Mono";
font-size:
14px;" class="">-------------------------------</span><span style="font-family:
"Andale
Mono";
font-size:
14px;" class="">--------------------</span></div>
<div class=""><font class="" face="Andale
Mono"><span style="font-size:
14px;" class=""> 5 |
3.982 V | 3.982 V |
3.982 V | </span></font><span style="font-family:
"Andale
Mono";
font-size: 14px;" class="">3.982 V |
3.981 V | 3.981 V | </span><font class="" face="Andale
Mono"><span style="font-size:
14px;" class="">29.0
C </span></font><span style="font-family:
"Andale
Mono";
font-size: 14px;" class="">29.6 C |</span></div>
<div class=""> <font class="" face="Andale
Mono"><span style="font-size:
14px;" class=""> -------------------------------</span></font><span style="font-family:
"Andale
Mono";
font-size:
14px;" class="">-------------------------------</span><span style="font-family:
"Andale
Mono";
font-size:
14px;" class="">--------------------</span></div>
<div class="">...</div>
<div class=""> <font class="" face="Andale
Mono"><span style="font-size:
14px;" class=""> -------------------------------</span></font><span style="font-family:
"Andale
Mono";
font-size:
14px;" class="">-------------------------------</span><span style="font-family:
"Andale
Mono";
font-size:
14px;" class="">--------------------</span></div>
<div class=""><font class="" face="Andale
Mono"><span style="font-size:
14px;" class="">16 |
3.982 V | 3.982 V |
3.982 V | </span></font><span style="font-family:
"Andale
Mono";
font-size: 14px;" class="">3.982 V |
3.981 V | 3.981 V | </span><font class="" face="Andale
Mono"><span style="font-size:
14px;" class="">29.5
C </span></font><span style="font-family:
"Andale
Mono";
font-size:
14px;" class="">29.8
C. |</span></div>
<div class=""> <font class="" face="Andale
Mono"><span style="font-size:
14px;" class=""> -------------------------------</span></font><span style="font-family:
"Andale
Mono";
font-size:
14px;" class="">-------------------------------</span><span style="font-family:
"Andale
Mono";
font-size:
14px;" class="">--------------------</span></div>
<div class=""><span style="font-size:
14px;
font-family:
"Andale
Mono";" class="">
Tmin: 28.9 Tmax:
30.3 Vmax: 3.983
Vmin: 3.979
Vmax-Vmin: 0.003
Vtot: 382.23</span></div>
</div>
<div class=""><span style="font-size:
14px;
font-family:
"Andale
Mono";" class=""><br class="">
</span></div>
<div class="">(The vehicle
itself having the control
via the SetCellArrangement
methods)</div>
</blockquote>
<div class="">
<div class=""><br class="">
</div>
<div class="">To provide a
baseline usage case, the
Tesla Model S has:</div>
<div class=""><br class="">
</div>
<div class="">
<ul class="MailOutline">
<li class="">96 bricks
in the pack</li>
<li class="">6 bricks in
each module</li>
<li class="">16 modules
in the pack</li>
<li class="">Each brick
has one voltage
measurement (so, 96
individual voltage
measurements)</li>
<li class="">Each module
has two temperature
measurements (so, 32
individual temperature
measurements)</li>
<li class="">That means:</li>
<ul class="">
<li class="">OvmsVehicle::SetCellArrangementVoltage(96,
6, 3)</li>
<li class="">OvmsVehicle::SetCellArrangementTemperature(32,
2, 1)</li>
</ul>
</ul>
<div class=""><br class="">
</div>
<div class="">Tesla Model
X seems identical to
Model S.</div>
<div class=""><br class="">
</div>
<div class="">I am still
working on reverse
engineering the Tesla
Roadster, but it seems
to have:</div>
<div class=""><br class="">
</div>
<div class="">
<ul class="MailOutline">
<li class="">99 bricks
in the pack</li>
<li class="">9 bricks
in each module (aka
sheet)</li>
<li class="">11
modules in the pack</li>
<li class="">Each
brick has one
voltage measurement
(so, 11*9 = 99
individual voltage
measurements)</li>
<li class="">Each
module has four
temperature
measurements (so,
11*4 = 44 individual
temperature
measurements)</li>
<li class="">That
means:</li>
<ul class="">
<li class="">OvmsVehicle::SetCellArrangementVoltage(99,
9, 9)</li>
<li class="">OvmsVehicle::SetCellArrangementTemperature(44,
4, 4)</li>
</ul>
</ul>
</div>
<div class=""><br class="">
</div>
<div class="">For other
cars that support
cell-level measurements,
do they fit this
representation? If so,
can we fill in the
following for each car,
to see how it fits in?</div>
<div class=""><br class="">
</div>
<div class="">
<ul class="MailOutline">
<li class="">XX cell
groups in the pack</li>
<li class="">XX cell
groups in each
module</li>
<li class="">XX
modules in the pack</li>
<li class="">Each cell
group has one
voltage measurement
(so, XX individual
voltage
measurements)</li>
<li class="">Each
module has four
temperature
measurements (so, XX
individual
temperature
measurements)</li>
<li class="">That
means:</li>
<ul class="">
<li class="">OvmsVehicle::SetCellArrangementVoltage(N,
Y, Z)</li>
<li class="">OvmsVehicle::SetCellArrangementTemperature(N,
Y, Z)</li>
</ul>
</ul>
<div class=""><br class="">
</div>
<div class="">If they
don’t fit, what
changes are needed to
make it work?</div>
<div class=""><br class="">
</div>
<div class="">Regards,
Mark.</div>
</div>
<div class=""><br class="">
<blockquote type="cite" class="">
<div class="">On 11
Nov 2018, at 12:16
AM, Mark
Webb-Johnson <<a href="mailto:mark@webb-johnson.net" class="" moz-do-not-send="true">mark@webb-johnson.net</a>>
wrote:</div>
<br class="Apple-interchange-newline">
<div class="">
<div class="">I
originally thought
‘brick’, or
‘module’ rather
than ‘cell’, but
happy with either.
These are readings
for groups of
cells, rather than
whole pack.<br class="">
<br class="">
Tesla Model S is
16 modules. 6
voltage readings,
and 2
temperatures, per
module.<br class="">
<br class="">
What is Kia Soul
arrangement?<br class="">
<br class="">
Regards, Mark<br class="">
<br class="">
<blockquote type="cite" class="">On 10
Nov 2018, at
11:26 PM, Henrik
Scheel <<a href="mailto:henrik.scheel@spjeldager.dk" class="" moz-do-not-send="true">henrik.scheel@spjeldager.dk</a>>
wrote:<br class="">
<br class="">
Hi Mark.<br class="">
<br class="">
Good idea with a
generic array
type metric, and
standard metrics
for common EV
features!<br class="">
<br class="">
Just a quick
note:<br class="">
The Kia Soul EV
vehicle module
will be able to
utilize these
metric-arrays.
However, on the
Soul, the
voltages are for
each physical
pair of cells
connected in
parallel, and
the temperatures
are for 6
battery modules,
and for the
battery cooling
air inlet. <br class="">
<br class="">
So, for the Kia
Soul EV, the
name
“v.b.cell.temp”
would be
misleading, as
each measured
module
temperature is
representing the
state for 16
pairs of cells.<br class="">
<br class="">
Aside from that,
I am all for
mapping the
values in these
new standardized
metric types.
Currently, the
temperature
average is
calculated and
mapped to a
metric, and the
96 cell voltages
are unmapped for
Kia Soul EV.<br class="">
<br class="">
Best regards,<br class="">
Henrik<br class="">
-- <br class="">
<br class="">
Venlig hilsen /
best regards <br class="">
Henrik R. Scheel<br class="">
<br class="">
Spjeldager
Consult ApS<br class="">
Spjeldager 9 <br class="">
DK-2630 Taastrup
<br class="">
CVR: 34491399 <br class="">
T: +45 2720 9828
<br class="">
<a href="http://www.spjeldager.dk/" class="" moz-do-not-send="true">http://www.spjeldager.dk/</a><br class="">
<br class="">
<blockquote type="cite" class="">Den
10. nov. 2018
kl. 15.34
skrev <a class="moz-txt-link-abbreviated" href="mailto:ovmsdev-request@lists.openvehicles.com" moz-do-not-send="true">ovmsdev-request@lists.openvehicles.com</a>:<br class="">
<br class="">
Send OvmsDev
mailing list
submissions to<br class="">
<a class="moz-txt-link-abbreviated" href="mailto:ovmsdev@lists.openvehicles.com" moz-do-not-send="true">ovmsdev@lists.openvehicles.com</a><br class="">
<br class="">
To subscribe
or unsubscribe
via the World
Wide Web,
visit<br class="">
<a class="moz-txt-link-freetext" href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev" moz-do-not-send="true">http://lists.openvehicles.com/mailman/listinfo/ovmsdev</a><br class="">
or, via email,
send a message
with subject
or body 'help'
to<br class="">
<a class="moz-txt-link-abbreviated" href="mailto:ovmsdev-request@lists.openvehicles.com" moz-do-not-send="true">ovmsdev-request@lists.openvehicles.com</a><br class="">
<br class="">
You can reach
the person
managing the
list at<br class="">
<a class="moz-txt-link-abbreviated" href="mailto:ovmsdev-owner@lists.openvehicles.com" moz-do-not-send="true">ovmsdev-owner@lists.openvehicles.com</a><br class="">
<br class="">
When replying,
please edit
your Subject
line so it is
more specific<br class="">
than "Re:
Contents of
OvmsDev
digest..."<br class="">
<br class="">
<br class="">
Today's
Topics:<br class="">
<br class="">
1. Re: Custom
metrics (Mark
Webb-Johnson)<br class="">
<br class="">
<br class="">
----------------------------------------------------------------------<br class="">
<br class="">
Message: 1<br class="">
Date: Sat, 10
Nov 2018
22:34:46 +0800<br class="">
From: Mark
Webb-Johnson <a class="moz-txt-link-rfc2396E" href="mailto:mark@webb-johnson.net" moz-do-not-send="true"><mark@webb-johnson.net></a><br class="">
To: OVMS
Developers <a class="moz-txt-link-rfc2396E" href="mailto:ovmsdev@lists.openvehicles.com" moz-do-not-send="true"><ovmsdev@lists.openvehicles.com></a><br class="">
Subject: Re:
[Ovmsdev]
Custom metrics<br class="">
Message-ID: <a class="moz-txt-link-rfc2396E" href="mailto:1E30255B-5CC6-4EC4-BA9F-9CA41D156B11@webb-johnson.net" moz-do-not-send="true"><1E30255B-5CC6-4EC4-BA9F-9CA41D156B11@webb-johnson.net></a><br class="">
Content-Type:
text/plain;
charset="utf-8"<br class="">
<br class="">
I?ve added
UnregisterCommand()
methods to
ovms_command.{h,
cpp}. I?ve
also updated
the
vehicle_teslamodels
code to
UnregisterCommand
in the
destructor. I
think that is
cleaner. The
unregistering
of CAN buses
already seems
to be working
properly,
config
parameters
should persist
(even without
vehicle module
loaded). I am
still
considering
the situation
with metrics
(but tend to
think that
they should
disappear when
the vehicle
module is
unloaded).<br class="">
<br class="">
I?ve also
changed the
vehicle_teslamodels
code to use
single voltage
and temperate
metric arrays
(I think my
previous dual
voltage
temperature
arrangement
was
incorrect). I
think these
can now become
standard
metrics (one
for battery
voltage, and
another for
temperature).
How about
v.b.cell.voltage
and
v.b.cell.temp?
The
interpretation
of those
vectors (how
many modules
primarily -
with the
calculation of
voltages and
temperatures
per module
being
dependent on
the realtime
size of each
array) will
still be
vehicle
dependent, and
I guess the
vehicle module
can provide
hints to our
standard
component for
this. Perhaps
we can just
implement it
in vehicle.{h,
cpp}? I think
this standard
module can
deal with:<br class="">
<br class="">
An interface
for specific
vehicle module
to specify the
number of
modules,
number of
voltage
measurements,
and number of
temperature
measurements
available.<br class="">
Internal
storage of
cell voltages
and
temperatures.<br class="">
Tracking of
when all
voltages and
temperatures
have been set,
and these
should be
written to
metrics (as a
transaction).<br class="">
Standardised
command to
display on
terminal (like
?xts bms?).<br class="">
Web interface
extensions
(including the
charting you
have, a
textual
display, etc).<br class="">
<br class="">
I can handle
all of the
above, except
the web
interface.
What do you
think? Can
these be
standardised?
Certainly for
Tesla Roadster
and Tesla
Model S they
appear to be
able to be
unified under
one standard
framework.<br class="">
<br class="">
Regards, Mark.<br class="">
<br class="">
<blockquote type="cite" class="">On 8
Nov 2018, at
6:49 AM,
Michael Balzer
<a class="moz-txt-link-rfc2396E" href="mailto:dexter@expeedo.de" moz-do-not-send="true"><dexter@expeedo.de></a>
wrote:<br class="">
<br class="">
Mark,<br class="">
<br class="">
1) yes, we're
approaching a
generic form
now. The chart
currently
displays
actual, min
& max
values from
the arrays,
and derives
the overall
average value.
It
automatically
adapts to the
number of
voltages and
temperatures
stored in the
arrays.<br class="">
<br class="">
It still
lacks:<br class="">
a) Displaying
max
deviations,
current
standard
deviation and
max standard
deviation
recorded.<br class="">
b) Displaying
cell/module
warn &
alert status.
These are
currently set
metrics on the
Twizy, could
better be
generalized as
arrays as
well, i.e.
0=normal,
1=warn,
2=alert.<br class="">
c) SOH /
capacity and
internal
resistance
should be
generally
available per
cell as well
(no data on
these yet on
the Twizy).<br class="">
<br class="">
And as this
will visually
overload the
chart it will
need some
buttons to
show/hide the
parts.<br class="">
<br class="">
A general
vehicle base
support for
these metrics
could
automatically
keep min &
max values,
calculate
deviations and
derive
warn/alert
status from
these. So
basically a
vehicle
adapter only
needs to
provide
voltages and
temperatures
(+ SOH and
internal
resistance as
available).
The reset
command then
can also
normally just
be a
generalized
version.<br class="">
<br class="">
2) I should
add some basic
documentation
on this to the
developer
manual
(lacking
time). For the
RE tools I've
got an API to
inject
arbitrary data
into the
websocket
stream on my
todo list, so
live updates
can be
transported
without
polling.<br class="">
<br class="">
4) Interesting
idea, similar
to a reverse
proxy. As the
channel will
be very slow
we will need
to reduce the
websocket
update
frequency,
make it
configurable
or maybe
auto-adapt to
the current
speed. Also,
the proxy
should cache
static assets
to speed up
first time
connects.<br class="">
<br class="">
The v2
protocol using
RC4 encryption
is a bad base
for this.
What's the
current
encryption on
v3/MQTT?<br class="">
<br class="">
Regards,<br class="">
Michael<br class="">
<br class="">
<br class="">
<blockquote type="cite" class="">Am
07.11.18 um
01:50 schrieb
Mark
Webb-Johnson:<br class="">
Some
questions/comments:<br class="">
<br class="">
I guess this
is fairly
generic.
Voltages and
temperatures,
with possibly
a different
number of
readings for
each. Model S
has two
temperatures,
but I guess we
can just treat
those as
interleaved.
Could it be
put into a
reusable
component? Or
could we have
standard
metrics for
this now
(battery
module
voltages and
temperatures)?
Maybe a single
component that
does all this
(functions to
set individual
voltages and
temperatures,
define the
layout for
display,
include web
interface for
chart and
table, etc)?<br class="">
<br class="">
I really need
to look at
integration of
extensions to
the web
interface. See
how that is
done. For my
work on DBC
and RE tools,
it seems
easiest to
just create a
web interface
(rather than
messing around
with command
line).<br class="">
<br class="">
Regarding the
registration
of commands
and metrics, I
am not sure if
that is done
correctly at
the moment. In
particular in
the case a
vehicle module
is loaded,
unloaded, then
loaded again.
It seems that
RegisterCommand doesn?t do it right, and the metric object creation
needs a guard
to make sure
the metric
doesn?t
already exist.
I will try to
tidy this up
in Model S
code, as a
reference,
before moving
on to
Roadster.<br class="">
<br class="">
I really
haven?t used
the web
interface
much, as it is
not available
over cellular.
I was
wondering if
it could be
encapsulated
somehow within
the v2/v3
protocol, and
made available
via the
server?
Something like
<a class="moz-txt-link-freetext" href="https://api.openvehicles.com:8080/VEHICLEID" moz-do-not-send="true">https://api.openvehicles.com:8080/VEHICLEID</a>
<a class="moz-txt-link-rfc2396E" href="https://api.openvehicles.com:8080/VEHICLEID" moz-do-not-send="true"><https://api.openvehicles.com:8080/VEHICLEID></a>
tunnelled
through (with
authentication
at the server
level using
the normal web
server user
account).
Similarly for
SSH access.
These are both
simple tcp/ip
connections,
so presumably
could be
injected into
mongoose as
fake
connections.
One possible
approach would
be SOCKS, and
there is some
reference code
for LWIP <a class="moz-txt-link-rfc2396E" href="https://github.com/russdill/lwip/commit/dfeba616" moz-do-not-send="true"><https://github.com/russdill/lwip/commit/dfeba616></a>.
Another is
TUN/TAP, again
with reference
code for LWIP
<a class="moz-txt-link-rfc2396E" href="https://github.com/russdill/lwip/commit/47ca42f8" moz-do-not-send="true"><https://github.com/russdill/lwip/commit/47ca42f8></a>.
And then there
is the
standard PPP
(although that
would
technically
then be PPP
within tcp/ip
over PPP
within async
within GSM,
which is a bit
freaky).<br class="">
<br class="">
Regards, Mark.<br class="">
<br class="">
<blockquote type="cite" class="">On 7
Nov 2018, at
4:52 AM,
Michael Balzer
<<a class="moz-txt-link-abbreviated" href="mailto:dexter@expeedo.de" moz-do-not-send="true">dexter@expeedo.de</a>
<a class="moz-txt-link-rfc2396E" href="mailto:dexter@expeedo.de" moz-do-not-send="true"><mailto:dexter@expeedo.de></a>>
wrote:<br class="">
<br class="">
Mark, Tam?s,<br class="">
<br class="">
I've prepared
a more or less
generalized
array version
of my Twizy
battery chart
(OvmsVehicleRenaultTwizy::WebBattMon) for you. Easier to collect the
data from
actual arrays
than separate
metrics.<br class="">
<br class="">
This ZIP?<br class="">
<br class="">
<a class="moz-txt-link-freetext" href="https://dexters-web.de/f/ovms-dev/ovms.zip" moz-do-not-send="true">https://dexters-web.de/f/ovms-dev/ovms.zip</a>
<a class="moz-txt-link-rfc2396E" href="https://dexters-web.de/f/ovms-dev/ovms.zip" moz-do-not-send="true"><https://dexters-web.de/f/ovms-dev/ovms.zip></a><br class="">
<br class="">
?contains my
local ovms web
test/development folder. Unzip it into some local web server (needs to
be run via
http for
javascript),
then open the
folder from a
browser. You
should see an
OVMS web UI
lookalike.<br class="">
<br class="">
Config ?
CellChart
loads
"cellchart.htm".
The blue
button
generates and
injects test
data. Should
look like
this:<br class="">
<br class="">
<eoibkbnkbpofdlab.png><br class="">
<br class="">
Assuming
you'll add
some min/max
records as
well I left
that code
including the
reset button
in there. If
you can't
provide that
yet, you can
simply set min
& max =
act in the
get_xxx_data
functions.
Other than
that you
should
basically just
need to change
the metrics
names.<br class="">
<br class="">
To generate
C/C++ syntax
from the file,
use the script
bin/mksrc:
"bin/mksrc
cellchart.htm
>cellchart.cpp". The chart init URL needs to be changed for the
production
environment
(see comment),
and the test
data generator
can be
removed. See
OvmsVehicleRenaultTwizy::WebBattMon for reference.<br class="">
<br class="">
Maybe I should
add that stuff
to the
repository as
well?<br class="">
<br class="">
Regards,<br class="">
Michael<br class="">
<br class="">
<br class="">
<blockquote type="cite" class="">Am
06.11.18 um
15:56 schrieb
Mark
Webb-Johnson:<br class="">
Nice. I just
implemented
this for Model
S using your
new metric
type.<br class="">
<br class="">
96 individual
brick voltages
for each of
the bricks,
plus two
temperatures
for each of
the 16
modules.<br class="">
<br class="">
Works well.<br class="">
<br class="">
<br class="">
<br class="">
<br class="">
<blockquote type="cite" class="">On 1
Nov 2018, at
5:58 PM,
Michael Balzer
<<a class="moz-txt-link-abbreviated" href="mailto:dexter@expeedo.de" moz-do-not-send="true">dexter@expeedo.de</a>
<a class="moz-txt-link-rfc2396E" href="mailto:dexter@expeedo.de" moz-do-not-send="true"><mailto:dexter@expeedo.de></a>>
wrote:<br class="">
<br class="">
Tam?s,<br class="">
<br class="">
I've been
creating
separate
metrics for
all cell
values on the
Twizy, but
that only has
14 cells.<br class="">
<br class="">
We discussed
this before, a
better
approach is
introducing a
new metric
class for
arrays. I have
just done that
for you,
please pull.<br class="">
<br class="">
Usage example:<br class="">
OvmsMetricVector<float>* vf = new
OvmsMetricVector<float>("test.volts", SM_STALE_MIN, Volts);<br class="">
vf->SetElemValue(3, 1.23);<br class="">
vf->SetElemValue(17, 2.34);<br class="">
float
myvals[3] = {
5.5, 6.6, 7.7
};<br class="">
vf->SetElemValues(10, 3, myvals);<br class="">
With this data
set, you get:<br class="">
OVMS# met lis
test<br class="">
test.volts
0,0,0,1.23,0,0,0,0,0,0,5.5,6.6,7.7,0,0,0,0,2.34V<br class="">
?and in the
web framework:<br class="">
metrics["test.volts"]<br class="">
(18) [0, 0, 0,
1.23, 0, 0, 0,
0, 0, 0, 5.5,
6.6, 7.7, 0,
0, 0, 0, 2.34]<br class="">
metrics["test.volts"][11]<br class="">
6.6<br class="">
See template
definition in
ovms_metrics.h
for more.<br class="">
<br class="">
Regards,<br class="">
Michael<br class="">
<br class="">
<br class="">
<blockquote type="cite" class="">Am
31.10.18 um
20:08 schrieb
Tam?s Kov?cs:<br class="">
I have a
Peugeot iOn,
and i wan't to
create own
metrics for
battery temp
(66 piece) and
voltage (88
(old) or
80(new) piece)
for all cell
(and show on
web
interface),
and i don't
understand how
can i create
it. Now my
data in
array-s from
can messages
6E1-6E4.<br class="">
My git fork: <a class="moz-txt-link-freetext" href="https://github.com/KommyKT/Open-Vehicle-Monitoring-System-3/tree/peugeot" moz-do-not-send="true">https://github.com/KommyKT/Open-Vehicle-Monitoring-System-3/tree/peugeot</a>
<a class="moz-txt-link-rfc2396E" href="https://github.com/KommyKT/Open-Vehicle-Monitoring-System-3/tree/peugeot" moz-do-not-send="true"><https://github.com/KommyKT/Open-Vehicle-Monitoring-System-3/tree/peugeot></a><br class="">
vehicle_mitsubishi<br class="">
<br class="">
</blockquote>
<br class="">
-- <br class="">
Michael Balzer
* Helkenberger
Weg 9 *
D-58256
Ennepetal<br class="">
Fon 02333 /
833 5735 *
Handy 0176 /
206 989 26<br class="">
_______________________________________________<br class="">
OvmsDev
mailing list<br class="">
<a class="moz-txt-link-abbreviated" href="mailto:OvmsDev@lists.openvehicles.com" moz-do-not-send="true">OvmsDev@lists.openvehicles.com</a>
<a class="moz-txt-link-rfc2396E" href="mailto:OvmsDev@lists.openvehicles.com" moz-do-not-send="true"><mailto:OvmsDev@lists.openvehicles.com></a><br class="">
<a class="moz-txt-link-freetext" href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev" moz-do-not-send="true">http://lists.openvehicles.com/mailman/listinfo/ovmsdev</a>
<a class="moz-txt-link-rfc2396E" href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev" moz-do-not-send="true"><http://lists.openvehicles.com/mailman/listinfo/ovmsdev></a><br class="">
</blockquote>
<br class="">
<br class="">
_______________________________________________<br class="">
OvmsDev
mailing list<br class="">
<a class="moz-txt-link-abbreviated" href="mailto:OvmsDev@lists.openvehicles.com" moz-do-not-send="true">OvmsDev@lists.openvehicles.com</a>
<a class="moz-txt-link-rfc2396E" href="mailto:OvmsDev@lists.openvehicles.com" moz-do-not-send="true"><mailto:OvmsDev@lists.openvehicles.com></a><br class="">
<a class="moz-txt-link-freetext" href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev" moz-do-not-send="true">http://lists.openvehicles.com/mailman/listinfo/ovmsdev</a>
<a class="moz-txt-link-rfc2396E" href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev" moz-do-not-send="true"><http://lists.openvehicles.com/mailman/listinfo/ovmsdev></a><br class="">
</blockquote>
<br class="">
-- <br class="">
Michael Balzer
* Helkenberger
Weg 9 *
D-58256
Ennepetal<br class="">
Fon 02333 /
833 5735 *
Handy 0176 /
206 989 26<br class="">
_______________________________________________<br class="">
OvmsDev
mailing list<br class="">
<a class="moz-txt-link-abbreviated" href="mailto:OvmsDev@lists.openvehicles.com" moz-do-not-send="true">OvmsDev@lists.openvehicles.com</a>
<a class="moz-txt-link-rfc2396E" href="mailto:OvmsDev@lists.openvehicles.com" moz-do-not-send="true"><mailto:OvmsDev@lists.openvehicles.com></a><br class="">
<a class="moz-txt-link-freetext" href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev" moz-do-not-send="true">http://lists.openvehicles.com/mailman/listinfo/ovmsdev</a>
<a class="moz-txt-link-rfc2396E" href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev" moz-do-not-send="true"><http://lists.openvehicles.com/mailman/listinfo/ovmsdev></a><br class="">
</blockquote>
<br class="">
<br class="">
<br class="">
_______________________________________________<br class="">
OvmsDev
mailing list<br class="">
<a class="moz-txt-link-abbreviated" href="mailto:OvmsDev@lists.openvehicles.com" moz-do-not-send="true">OvmsDev@lists.openvehicles.com</a>
<a class="moz-txt-link-rfc2396E" href="mailto:OvmsDev@lists.openvehicles.com" moz-do-not-send="true"><mailto:OvmsDev@lists.openvehicles.com></a><br class="">
<a class="moz-txt-link-freetext" href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev" moz-do-not-send="true">http://lists.openvehicles.com/mailman/listinfo/ovmsdev</a>
<a class="moz-txt-link-rfc2396E" href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev" moz-do-not-send="true"><http://lists.openvehicles.com/mailman/listinfo/ovmsdev></a><br class="">
</blockquote>
<br class="">
-- <br class="">
Michael Balzer
* Helkenberger
Weg 9 *
D-58256
Ennepetal<br class="">
Fon 02333 /
833 5735 *
Handy 0176 /
206 989 26<br class="">
_______________________________________________<br class="">
OvmsDev
mailing list<br class="">
<a class="moz-txt-link-abbreviated" href="mailto:OvmsDev@lists.openvehicles.com" moz-do-not-send="true">OvmsDev@lists.openvehicles.com</a><br class="">
<a class="moz-txt-link-freetext" href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev" moz-do-not-send="true">http://lists.openvehicles.com/mailman/listinfo/ovmsdev</a><br class="">
</blockquote>
<br class="">
--------------
next part
--------------<br class="">
An HTML
attachment was
scrubbed...<br class="">
URL: <a class="moz-txt-link-rfc2396E" href="http://lists.openvehicles.com/pipermail/ovmsdev/attachments/20181110/b17e54e7/attachment.html" moz-do-not-send="true"><http://lists.openvehicles.com/pipermail/ovmsdev/attachments/20181110/b17e54e7/attachment.html></a><br class="">
<br class="">
------------------------------<br class="">
<br class="">
Subject:
Digest Footer<br class="">
<br class="">
_______________________________________________<br class="">
OvmsDev
mailing list<br class="">
<a class="moz-txt-link-abbreviated" href="mailto:OvmsDev@lists.openvehicles.com" moz-do-not-send="true">OvmsDev@lists.openvehicles.com</a><br class="">
<a class="moz-txt-link-freetext" href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev" moz-do-not-send="true">http://lists.openvehicles.com/mailman/listinfo/ovmsdev</a><br class="">
<br class="">
<br class="">
------------------------------<br class="">
<br class="">
End of OvmsDev
Digest, Vol
82, Issue 10<br class="">
***************************************<br class="">
</blockquote>
<br class="">
_______________________________________________<br class="">
OvmsDev mailing
list<br class="">
<a class="moz-txt-link-abbreviated" href="mailto:OvmsDev@lists.openvehicles.com" moz-do-not-send="true">OvmsDev@lists.openvehicles.com</a><br class="">
<a class="moz-txt-link-freetext" href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev" moz-do-not-send="true">http://lists.openvehicles.com/mailman/listinfo/ovmsdev</a><br class="">
</blockquote>
<br class="">
_______________________________________________<br class="">
OvmsDev mailing
list<br class="">
<a href="mailto:OvmsDev@lists.openvehicles.com" class="" moz-do-not-send="true">OvmsDev@lists.openvehicles.com</a><br class="">
<a class="moz-txt-link-freetext" href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev" moz-do-not-send="true">http://lists.openvehicles.com/mailman/listinfo/ovmsdev</a><br class="">
</div>
</div>
</blockquote>
</div>
<br class="">
</div>
</div>
<br class="">
<fieldset class="mimeAttachmentHeader"></fieldset>
<pre class="moz-quote-pre" wrap="">_______________________________________________
OvmsDev mailing list
<a class="moz-txt-link-abbreviated" href="mailto:OvmsDev@lists.openvehicles.com" moz-do-not-send="true">OvmsDev@lists.openvehicles.com</a>
<a class="moz-txt-link-freetext" href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev" moz-do-not-send="true">http://lists.openvehicles.com/mailman/listinfo/ovmsdev</a>
</pre>
</blockquote>
<br class="">
<pre class="moz-signature" cols="160">--
Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal
Fon 02333 / 833 5735 * Handy 0176 / 206 989 26
</pre>
</div>
_______________________________________________<br class="">
OvmsDev mailing list<br class="">
<a href="mailto:OvmsDev@lists.openvehicles.com" class="" moz-do-not-send="true">OvmsDev@lists.openvehicles.com</a><br class="">
<a class="moz-txt-link-freetext" href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev" moz-do-not-send="true">http://lists.openvehicles.com/mailman/listinfo/ovmsdev</a><br class="">
</div>
</blockquote>
</div>
<br class="">
</div>
<br class="">
<fieldset class="mimeAttachmentHeader"></fieldset>
<pre class="moz-quote-pre" wrap="">_______________________________________________
OvmsDev mailing list
<a class="moz-txt-link-abbreviated" href="mailto:OvmsDev@lists.openvehicles.com" moz-do-not-send="true">OvmsDev@lists.openvehicles.com</a>
<a class="moz-txt-link-freetext" href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev" moz-do-not-send="true">http://lists.openvehicles.com/mailman/listinfo/ovmsdev</a>
</pre>
</blockquote>
<br class="">
<pre class="moz-signature" cols="160">--
Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal
Fon 02333 / 833 5735 * Handy 0176 / 206 989 26
</pre>
</div>
_______________________________________________<br class="">
OvmsDev mailing list<br class="">
<a href="mailto:OvmsDev@lists.openvehicles.com" class="" moz-do-not-send="true">OvmsDev@lists.openvehicles.com</a><br class="">
<a class="moz-txt-link-freetext" href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev" moz-do-not-send="true">http://lists.openvehicles.com/mailman/listinfo/ovmsdev</a><br class="">
</div>
</blockquote>
</div>
<br class="">
</div>
<br class="">
<fieldset class="mimeAttachmentHeader"></fieldset>
<pre class="moz-quote-pre" wrap="">_______________________________________________
OvmsDev mailing list
<a class="moz-txt-link-abbreviated" href="mailto:OvmsDev@lists.openvehicles.com" moz-do-not-send="true">OvmsDev@lists.openvehicles.com</a>
<a class="moz-txt-link-freetext" href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev" moz-do-not-send="true">http://lists.openvehicles.com/mailman/listinfo/ovmsdev</a>
</pre>
</blockquote>
<br class="">
<pre class="moz-signature" cols="160">--
Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal
Fon 02333 / 833 5735 * Handy 0176 / 206 989 26
</pre>
</div>
_______________________________________________<br class="">
OvmsDev mailing list<br class="">
<a href="mailto:OvmsDev@lists.openvehicles.com" class="" moz-do-not-send="true">OvmsDev@lists.openvehicles.com</a><br class="">
<a class="moz-txt-link-freetext" href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev">http://lists.openvehicles.com/mailman/listinfo/ovmsdev</a><br class="">
</div>
</blockquote>
</div>
<br class="">
</div>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<pre class="moz-quote-pre" wrap="">_______________________________________________
OvmsDev mailing list
<a class="moz-txt-link-abbreviated" href="mailto:OvmsDev@lists.openvehicles.com">OvmsDev@lists.openvehicles.com</a>
<a class="moz-txt-link-freetext" href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev">http://lists.openvehicles.com/mailman/listinfo/ovmsdev</a>
</pre>
</blockquote>
<br>
<pre class="moz-signature" cols="160">--
Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal
Fon 02333 / 833 5735 * Handy 0176 / 206 989 26
</pre>
</div></blockquote><blockquote type="cite"><div dir="ltr"><span>_______________________________________________</span><br><span>OvmsDev mailing list</span><br><span><a href="mailto:OvmsDev@lists.openvehicles.com">OvmsDev@lists.openvehicles.com</a></span><br><span><a href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev">http://lists.openvehicles.com/mailman/listinfo/ovmsdev</a></span><br></div></blockquote></body></html>