<html><head><meta http-equiv="Content-Type" content="text/html charset=windows-1252"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><div><br></div>There have been a bunch of responses to this original response - not sure which to reply to, so I’ll reply to the root.<div><br></div><div>Firstly, thanks for all the feedback. Truly happy to see such great feedback from the OCM team as well as others. I’m particularly glad to see the positive response from the OCM guys and offer to help from their end. Whatever happens with this, presumably OCM would be the first consumer of the data, so it is important and useful to see how we can fit into their model. We also use the OCM database in the Apps, and that should make things easier.</div><div><br></div><div>That said, I want to re-iterate that I want to make this truly ‘open’ (note: definitely not saying that OCM is not open). My own personal feelings on openness are in the MIT/BSD camp, rather than GPL. Perhaps I am naive, or perhaps it is my age (coming from a time when software was free as in "do whatever the hell you like with it, just don’t blame me”), but I think true freedom should not restrict the rights of others in any way (not just the rights upstream, but the rights downstream as well). Anyway, all this data is coming from OVMS users, so as long as the license and agreement there is completely open, we will be clear to distribute into other systems (open, free, or closed).</div><div><br></div><div>So, given that we will be ‘giving away’ the data, it comes to the ‘black box’ question of how to do that. My own personal preference is just to provide an api to either PUSH or PULL the data, and the reason for that is I don’t want to be extending the server code to support ten different third-party APIs. That said, I did suggest a PUSH option in the original RFQ, and the thinking behind that is we can format a URL+formdata with parameter-substitution (based on server.conf settings for a particular provider - no code) and just fire it off. I see no problem with a single API key for OVMS to submit to such an external service. For ‘user credit’, it would be nice to have an option where the user could enter an optional username+pin for each service, and we can provide it as part of the PUSHed/PULLed data.</div><div><br></div><div>Other than that, it seems fairly simple. The issue is going to be the apps - handling the events in a nice way given the limitations of the PUSH APIs.</div><div><br></div><div>Regards, Mark.</div><div><br></div><div><div><div>On 21 May, 2014, at 7:12 pm, Christopher Cook <<a href="mailto:christopher.cook@webprofusion.com">christopher.cook@webprofusion.com</a>> wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite">
<meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type">
<div bgcolor="#FFFFFF" text="#000000">
<div class="moz-cite-prefix">Hi Mark,<br>
<br>
So to recap, the idea your proposing here is to checkin to OVMS,
rather than directly to Open Charge Map, then later allow OCM
access to the checkin information via your API. <br>
<br>
Since the existing apps have the ability to query OCM for the list
of nearby charging locations then you can present a shortlist of
OCM locations so the user can confirm which it is - maybe there's
a need for the user to be able to Add a location though (that can
be done by launch a webview to
<a class="moz-txt-link-freetext" href="http://openchargemap.org/site/poi/add">http://openchargemap.org/site/poi/add</a> then waiting until the url
changes to <a class="moz-txt-link-freetext" href="http://openchargemap.org/site/poi/details/12345">http://openchargemap.org/site/poi/details/12345</a> - you
can then grab the OCM-ID from the url for the subsequent checkin
to OVMS.<br>
<br>
Note that there is the option to directly checkin/comment to OCM
if you wanted to, either via the API or by launching a webview to
a specific OCM page to start the checkin and pass in relevant
info. We already capture various types of success/failure but we
could also accept a general payload (as JSON) to store with the
checkin (for instance charging times/power levels etc) which we
can parse later. <br>
<br>
A bit about the relevant bits of OCM API (if they were required):<br>
<br>
For simple web browser based stuff:<br>
checking in/commenting:
<a class="moz-txt-link-freetext" href="http://openchargemap.org/site/poi/addcomment/12345">http://openchargemap.org/site/poi/addcomment/12345</a><br>
add photos: <a class="moz-txt-link-freetext" href="http://openchargemap.org/site/poi/addmediaitem/12345">http://openchargemap.org/site/poi/addmediaitem/12345</a><br>
edit a POI: <a class="moz-txt-link-freetext" href="http://openchargemap.org/site/poi/edit/1234">http://openchargemap.org/site/poi/edit/1234</a><br>
add a new POI: <a class="moz-txt-link-freetext" href="http://openchargemap.org/site/poi/add">http://openchargemap.org/site/poi/add</a><br>
<br>
For actual API level stuff:<br>
An anonymous checkin to OCM can be done via the API by posting to
<span style="color: rgb(20, 20, 20); font-family: Helvetica,
Arial, sans-serif; font-size: 15px; font-style: normal;
font-variant: normal; font-weight: 300; letter-spacing: normal;
line-height: 20.53333282470703px; orphans: auto; text-align:
left; text-indent: 0px; text-transform: none; white-space:
normal; widows: auto; word-spacing: 0px;
-webkit-text-stroke-width: 0px; background-color: rgb(255, 255,
255); display: inline !important; float: none;"><a class="moz-txt-link-freetext" href="http://api.openchargemap.io/v2/?action=comment_submission&format=json">http://api.openchargemap.io/v2/?action=comment_submission&format=json</a></span>
with a JSON string for the comment object in the http post such
as:<br>
<pre style="font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; white-space: pre-wrap;">{
"ChargePointID": 12345,
"CommentType": {
"ID": 10,
"Title": "General Comment"
},
"UserName": "A. Nickname",
"Comment": "This place is awesome",
"Rating": 5,
"RelatedURL": <a class="moz-txt-link-rfc2396E" href="http://awesomevplace.com/">"http://awesomevplace.com"</a>,
"CheckinStatusType": {
"IsPositive": null,
"IsAutomatedCheckin": false,
"ID": 0,
"Title": "Did Not Visit Location"
}
}</pre>
Checkin/Comment types can be found at:
<a class="moz-txt-link-freetext" href="http://api.openchargemap.io/v2/referencedata/">http://api.openchargemap.io/v2/referencedata/</a><br>
<br>
I'll be setting up a sandpit API shortly so that app folks can try
out checkins etc. <br>
<br>
Note that authentication as a specific OCM user is slightly
contrived (much like OAuth 2.0 etc) and currently requires
initiating a browser workflow starting at:<br>
<ul>
<li><a class="moz-txt-link-freetext" href="http://openchargemap.org/site/loginprovider/?_mode=silent&_forceLogin=true&_redirectURL=AppLogin?redirectWithToken=true">http://openchargemap.org/site/loginprovider/?_mode=silent&_forceLogin=true&_redirectURL=AppLogin?redirectWithToken=true</a></li>
<li>And ending at:
<a class="moz-txt-link-freetext" href="http://openchargemap.org/site/loginprovider/applogin">http://openchargemap.org/site/loginprovider/applogin</a></li>
<li>You then need to either reading the Username and
OCMSessionToken cookies or we could include it in the url
fragment of the applogin page and you can read that from the
web view.<br>
</li>
</ul>
One option I'm pondering is for apps to be able to request the OCM
Session Token just by supplying a PIN code and Username to the
API, the user would need to go to the OCM website to generate the
pin code (and conform the expected Username for it to work)
probably by starting a certain OCM url with an API Key specific to
OVMS.<br>
<br>
Chris<br>
<br>
On 21/05/2014 15:23, Kevin Sharpe wrote:<br>
</div>
<blockquote cite="mid:CFA212A6.4091A%25kevin.sharpe@zerocarbonworld.org" type="cite">
<meta http-equiv="Content-Type" content="text/html;
charset=ISO-8859-1">
<div>
<div>
<div>FYI, I’ve asked Lee Howard from Mainpine to take a look
at this in detail.</div>
<div><br>
</div>
<div><br>
</div>
<div><span style="font-family: 'helvetica neue'; font-size: inherit;">Kevin Sharpe | Founder & Patron | Zero Carbon
World is a UK Registered Charity #1141347</span></div>
<div><br>
</div>
</div>
</div>
<span id="OLK_SRC_BODY_SECTION">
<div style="font-family: Calibri; font-size: 11pt; text-align: left; border-width: 1pt medium medium; border-style: solid none none; padding: 3pt 0in 0in; border-top-color: rgb(181, 196, 223);"><span style="font-weight:bold">From: </span> Mark Webb-Johnson
<<a moz-do-not-send="true" href="mailto:mark@webb-johnson.net">mark@webb-johnson.net</a>><br>
<span style="font-weight:bold">Reply-To: </span> OVMS
Developers <<a moz-do-not-send="true" href="mailto:ovmsdev@lists.teslaclub.hk">ovmsdev@lists.teslaclub.hk</a>><br>
<span style="font-weight:bold">Date: </span> Wednesday, 21
May 2014 07:19<br>
<span style="font-weight:bold">To: </span> OVMS Developers
<<a moz-do-not-send="true" href="mailto:ovmsdev@lists.teslaclub.hk">ovmsdev@lists.teslaclub.hk</a>><br>
<span style="font-weight:bold">Subject: </span> Re: [Ovmsdev]
Open Charge Map<br>
</div>
<div><br>
</div>
<div>
<div style="word-wrap: break-word; -webkit-nbsp-mode: space;
-webkit-line-break: after-white-space;">Here is an email
with a proposal / suggest I sent out last year. This would
be wonderful to do, just limited resources to do it with.
<div><br>
</div>
<div>Regards, Mark.</div>
<div><br>
</div>
<div>
<blockquote style="margin: 0 0 0 40px; border: none;
padding: 0px;">
<div>I’ve always been interested in the possible uses of
OVMS for the greater good of the EV community, and to
assist with the widespread adoption of Electric
Vehicles. The anonymised Tesla Roadster charging
records we provided to Tom Saxton for his work on a
Charge Time Predictor for these cars showed how
beautifully such information sharing can work.</div>
<div>
<div><br>
</div>
<div>One big target for me has always been the sharing
of information on public charge stations. Most of
these systems are walled gardens at the moment
(either for the charge station network or for the
vehicle manufacturers), and there seems to be very
little sharing going on. Chargepoint know when you
start to charge, when you finish, the result
(completed successfully or interrupted), volts,
amps, etc - but not SOC% or which vehicle was
actually being charged (just the owner). Leaf
Carwings presumably knows where you charged, and the
result, per vehicle, but has no way of sharing that
with charging station networks. You can use Recargo
to find a charging station, but have to manually go
in and enter the charge result (if you want to
feed-back positive/negative reviews to Recargo for
the benefit of other users). The end result is a
wallet full of charging network membership cards,
RFID tags, and a cellphone full of Apps for all the
different networks. Over time this will resolve
itself, but for the moment it is a mess.</div>
<div><br>
</div>
<div>Open Charge Map goes a long way towards opening
the charging station information, but the
information seems to be flowing out of OCM to
others, but not necessarily the other way.</div>
<div><br>
</div>
<div>Well, it turns out that for OVMS at least, we
have a possible solution. A solution that can be
both charging network and vehicle agnostic (at least
for the vehicles supported). The rest of this eMail
outlines my ideas for how this could be implemented.
Think of it as an old-fashioned Request For
Comments, and let me have your feedback.</div>
<div><br>
</div>
<div>Thanks, Mark.</div>
<div><br>
</div>
<div><font size="4"><b><u>Sharing Public Charge Data</u></b></font></div>
<div><br>
</div>
<div><u><font size="4"><b>The Problem</b></font></u></div>
<div><br>
</div>
<div>To allow OVMS users to automatically and simply
share their usage of public charging stations. The
information shared would be openly available to
charging networks, charge station databases, apps,
researchers, and other interested parties.</div>
<div><br>
</div>
<div><u><font size="4"><b>Pre-Requisites</b></font></u></div>
<div><br>
</div>
<div>Participating users would be required to have
OVMS installed in their vehicle, and for the vehicle
to be supported in as much as it can provide to the
server indication of location, charge start, and
charge completion events. Users would also require a
cellphone app for authorisation and control of the
sharing of their data.</div>
<div><br>
</div>
<div><u><font size="4"><b>Licensing</b></font></u></div>
<div><br>
</div>
<div>The data produced should be licensed in some
‘open’ way. Do with it as you will. Perhaps creative
commons, or something similar.</div>
<div><br>
</div>
<div><u><font size="4"><b>Vehicle Firmware Changes</b></font></u></div>
<div><br>
</div>
<div>Specific messages for “Charge Start” and “Charge
Completed” should be created and sent to the server
at the appropriate times. Control of this can be in
the common vehicle.{h,c} code, and is not hard to
implement. Only the ‘last’ charge is required, and
the normal historical data interface can be used.</div>
<div><br>
</div>
<div><u><font size="4"><b>App Changes</b></font></u></div>
<div><br>
</div>
<div>The Apps (Android and iOS) would require a
mechanism for the user to opt-in to the scheme, and
for that opt-in to be either anonymous or with a
user-defined nickname. The opt-in is per-vehicle and
the default is for all vehicles to be opted out.
When the App connects to the server, it will inform
the server as to the opt-in status.</div>
<div><br>
</div>
<div>The Apps will occasionally receive push
notification messages from the server, at the start
of a charge. Those messages will lead to a dialog
for the user to confirm what he would like to do
with the current charge:</div>
<div> a) Always shared charging information for this
location</div>
<div> b) Share just this once charging information
for this location</div>
<div> c) Do not share this one charging session for
this location.</div>
<div> d) Never share charging information for this
location</div>
<div><br>
</div>
<div>If the choice is made to share, additional
information can be provided (such as the charging
post number, comments, etc). It would be nice to
include information from Open Charge Map at this
point (such as the name of the charging station, and
validation of the charging point number), but we
will need to verify licensing and other
considerations (such as whether this would be
acceptable / desirable to Open Charge Map).</div>
<div><br>
</div>
<div>The Apps will occasionally receive push
notification messages from the server, when charges
are aborted. Those messages will lead to a dialog
for the user to confirm the reason for the abort:</div>
<div> a) Charge was successful, but interrupted by
the user</div>
<div> b) Charge was unsuccessful, due to a problem
with the charging station</div>
<div> c) Charge was unsuccessful, but not a problem
of the charging station.</div>
<div><br>
</div>
<div>The user’s response must be returned to the
server appropriately.</div>
<div><br>
</div>
<div>The Apps, when connected to the server, can also
receive a list of charging records that have not yet
been responded to. A dialog should be presented to
the user for each such location.</div>
<div><br>
</div>
<div><u><font size="4"><b>Server Changes</b></font></u></div>
<div><br>
</div>
<div>The servers will maintain opt-in status for each
vehicle in the system, and if opted-in, the nickname
/ anonymous handle for the vehicle.</div>
<div><br>
</div>
<div>The servers will maintain a historical list of
charging locations for each vehicle in the system.
Each location record would have:</div>
<div> a) Latitude, Longitude (geofenced).</div>
<div> b) Sharing flag (pending user, just this once,
always, not this once, or never).</div>
<div> c) Charging information (date/time charge
started, etc).</div>
<div> d) Date and result of last charge here.</div>
<div><br>
</div>
<div>When the server receives a ‘charge started’
message from the vehicle, it would look up the
geofenced location in the database, for the vehicle,
and use the sharing flag to determine what to do.</div>
<div><br>
</div>
<div>If there is no matching record found, a new
record would be created (sharing flag: pending
user).</div>
<div><br>
</div>
<div>When the server receives a ‘charge completed’
message from the vehicle, it would look up the
geofenced location in the database, for the vehicle,
and use the sharing flag to determine what to do.</div>
<div><br>
</div>
<div>If the sharing flag indicates that the charging
information should be shared, the server would
publish the charging session information
appropriately.</div>
<div><br>
</div>
<div>If the server receives an indication from the car
that a charge has been aborted, it will have to PUSH
notify the user - but also ask the user for
confirmation of the reason why the charge was
interrupted.</div>
<div><br>
</div>
<div>When the server receives a user decision message
from an App (either before or after charge
completion), it should update the charging location
record appropriately. This may also result in the
publishing of the charging session information.</div>
<div><br>
</div>
<div>The server will maintain a database of partners,
and their API access keys. This database should
allow for PUSH messages (via HTTP) to the partner.
If PUSH is enabled, every time a charging session is
updated (either started or completed), the server
will connect to each partner (in randomised order)
and send them the information for recent charges.
The server will also provide an API to allow
partners to PULL messages past a certain date/time
stamp (to allow for periodic synchronisation).</div>
<div><br>
</div>
<div>
<div><u><font size="4"><b>Partners</b></font></u></div>
<div>
<div><br>
</div>
<div>Partners would just have to subscribe to the
system (signing up with a user account and being
given an API key). They would have to agree to
the license terms, but other than that there
would be no restrictions to partnership.</div>
<div><br>
</div>
<div>Partners can choose to either retrieve
updates via PUSH (they provide a server URL to
receive the data), PULL (they periodically poll
the OVMS server for updated data), or a
combination of both.</div>
<div><br>
</div>
</div>
</div>
<div><u><font size="4"><b>Overview (start to finish)</b></font></u></div>
<div><br>
</div>
<div>An OVMS user opts in to the service. He uses the
nickname ‘Jimbo’.</div>
<div><br>
</div>
<div>He arrives at a public charging station and plugs
in. The OVMS module in his car detects the charge
has started and informs the server. The server looks
up the vehicle charging locations and finds that the
vehicle has never charged here before, so sends a
PUSH notification to the user’s Apps to ask him
about this charge.</div>
<div><br>
</div>
<div>Within seconds of the charge starting, the user’s
cellphone beeps and he sees an OVMS notification. He
clicks on it and is taken a dialog asking him about
the charge he has just started. This is a public
charge station, so he just clicks “Always share
charging information for this location” and turns
off his phone. The App sends a notification to the
server, and the server updates its records to never
both the user about this location again. The server
also updates all partners (via PUSH notification)
that a charge has started at this location.</div>
<div><br>
</div>
<div>Partners can use this information to record
statistics on charge station usage, or even as a
rudimentary indication of if the charging station is
in use (at least by an OVMS user).</div>
<div><br>
</div>
<div>After a few hours of charging, a breaker trips
and the charge is interrupted. The OVMS module in
his car detected the abort and informs the server.
The server looks up the vehicle charging location,
and if sharing is enabled for this location sends a
PUSH notification to the user’s Apps asking him
about the cause of this interruption?</div>
<div><br>
</div>
<div>The user returns to his car and finds the
problem. He responds to the dialog in his OVMS App
to let the system know that the charge was
interrupted by a problem of the charging station.
The server receives the response, updates its
records, and updates all partners (via PUSH
notification) that a charge has been interrupted at
this location.</div>
<div><br>
</div>
<div>Partners can use this information to record
statistics on charge station failure rates, as well
as updating that the charge station is no longer in
use.</div>
<div><br>
</div>
<div>Partners not using PUSH notifications can
retrieve all this information at a later date by a
simple HTTP PULL request.</div>
<div><br>
</div>
<div><u><font size="4"><b>Further work</b></font></u></div>
<div><br>
</div>
<div>There are many extensions possible to this
system, but I would first of all like to concentrate
on getting a basic implementation designed and
implemented, and some partnerships in place.</div>
<div><br>
</div>
<div>For example:</div>
<div><br>
</div>
<div>* Pictures of new charging locations.</div>
<div>* Information for new charging locations.</div>
<div>* Charging station information.</div>
<div>* Showing current usage of a particular station
in the Apps.</div>
<div>* and so much more</div>
<div><br>
</div>
<div><u><font size="4"><b>Privacy Issues</b></font></u></div>
<div><br>
</div>
<div>The biggest privacy issue is that the server
would have to record the locations of charging
stations that the user has requested not be shared.
For example, someone’s home. We could avoid this by
not recording these, but that would not be optimal
as the system would then have to ask the user
whether he wanted to share, each and every time they
charged at that location (rather than just once, the
first time). As this information is not actually
shared, it is not a true privacy issue - but should
the security of the server be compromised, that data
could be exposed.</div>
<div><br>
</div>
<div>Perhaps a one-way hash could be used for storing
locations, but we would have to find one that also
worked with geofenced lookups.</div>
<div><br>
</div>
<div><font size="4"><b><u>Conclusions</u></b></font></div>
<div><br>
</div>
<div>The above is not hard. In particular, the vehicle
firmware changes are trivial (it could even be done
without any vehicle firmware changes, by looking at
the S and D messages coming back from the cars). The
server code is not difficult at all. The largest
amount of work would be in the Apps (in particular,
handling the PUSH notifications and user dialogs).</div>
<div><br>
</div>
_______________________________________________<br>
OvmsDev mailing list<br>
<a moz-do-not-send="true" href="mailto:OvmsDev@lists.teslaclub.hk">OvmsDev@lists.teslaclub.hk</a><br>
<a moz-do-not-send="true" href="http://lists.teslaclub.hk/mailman/listinfo/ovmsdev">http://lists.teslaclub.hk/mailman/listinfo/ovmsdev</a></div>
</blockquote>
</div>
<div><br>
<div>
<div>On 4 May, 2014, at 7:01 pm, Christopher Cook <<a moz-do-not-send="true" href="mailto:christopher.cook@webprofusion.com">christopher.cook@webprofusion.com</a>>
wrote:</div>
<br class="Apple-interchange-newline">
<blockquote type="cite">Actually, on that topic (almost)
- we should discuss how OVMS users might checkin (or
even auto-checkin) to OCM. That would help us track
which locations people are using and the quality of
their experience there.<br>
<br>
Are there any recent thoughts on this from the OVMS
side? Currently there are no third party apps writing
to the OCM API. Doing so currently requires at least
authentication (via the web UI) - this is also the
method used by the OCM mobile apps.<br>
<br>
There is the possibility of a quicker/simple login to
OCM via third party apps by way of a security code
emailed to the user (who would either be new to OCM or
an existing user). Not massively secure (there are
holes in the approach) but it would make it easy for
third party apps to quickly authenticate.<br>
<br>
Alternatively we can provide URLs which OVMS users
would open in a browser/webview which go on to use the
standard mobile app or site. This is the easiest for
OVMS apps to implement.<br>
<br>
Depends on what integration people would like to see?<br>
<br>
Chris<br>
<br>
J-C Saint-Pô <<a moz-do-not-send="true" href="mailto:jcsaintpo@gmail.com">jcsaintpo@gmail.com</a>>
wrote:<br>
<br>
<div dir="ltr">
<div>
<div>
<div>
<div>
<div>
<div>
<div>Hello guys,<br>
<br>
</div>
Just a reminder.<br>
<br>
<a moz-do-not-send="true" href="http://openchargemap.org/">http://openchargemap.org/</a>
is used as database of chargingstations
in the OVMS apps<br>
</div>
You can add / remove chargigstations via <a moz-do-not-send="true" href="http://openchargemap.org/site/poi">http://openchargemap.org/site/poi</a>
or <a moz-do-not-send="true" href="http://openchargemap.org/app/">http://openchargemap.org/app/</a><br>
</div>
For some uses you need to login. This can
be done via your twitter google+ or
facebook-account. So no extra account to be
made solely for OCM<br>
<br>
<br clear="all">
</div>
here some other examples of apps/ websites
that use OCM<br>
<a moz-do-not-send="true" href="http://openchargemap.org/site/develop/apps">http://openchargemap.org/site/develop/apps</a><br>
<br>
</div>
Here the google+ community of OCM <a moz-do-not-send="true" href="https://plus.google.com/u/0/communities/112113799071360649945">https://plus.google.com/u/0/communities/112113799071360649945</a><br>
<br>
</div>
Kind Greets<br>
</div>
J-C<br>
</div>
_______________________________________________<br>
OvmsDev mailing list<br>
<a moz-do-not-send="true" href="mailto:OvmsDev@lists.teslaclub.hk">OvmsDev@lists.teslaclub.hk</a><br>
<a moz-do-not-send="true" href="http://lists.teslaclub.hk/mailman/listinfo/ovmsdev">http://lists.teslaclub.hk/mailman/listinfo/ovmsdev</a><br>
</blockquote>
</div>
<br>
</div>
</div>
</div>
_______________________________________________
OvmsDev mailing list
<a moz-do-not-send="true" href="mailto:OvmsDev@lists.teslaclub.hk">OvmsDev@lists.teslaclub.hk</a><a moz-do-not-send="true" href="http://lists.teslaclub.hk/mailman/listinfo/ovmsdev">http://lists.teslaclub.hk/mailman/listinfo/ovmsdev</a></span>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<br>
<pre wrap="">_______________________________________________
OvmsDev mailing list
<a class="moz-txt-link-abbreviated" href="mailto:OvmsDev@lists.teslaclub.hk">OvmsDev@lists.teslaclub.hk</a>
<a class="moz-txt-link-freetext" href="http://lists.teslaclub.hk/mailman/listinfo/ovmsdev">http://lists.teslaclub.hk/mailman/listinfo/ovmsdev</a>
</pre>
</blockquote>
<br>
</div>
_______________________________________________<br>OvmsDev mailing list<br><a href="mailto:OvmsDev@lists.teslaclub.hk">OvmsDev@lists.teslaclub.hk</a><br>http://lists.teslaclub.hk/mailman/listinfo/ovmsdev<br></blockquote></div><br></div></body></html>