<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">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="">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">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">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 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="">OvmsDev@lists.openvehicles.com</a><br class="">http://lists.openvehicles.com/mailman/listinfo/ovmsdev<br class=""></div></blockquote></div><br class=""></div></body></html>