<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Jack,<div><br></div><div>From Michael's 100% heat then charge log, I see:</div><div><br></div><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><div><div><font class="Apple-style-span" face="'Andale Mono'" size="1">            0.0 100 96 2C 00 02 21 38 00 00    ->VDS Doors (l-door: closed) (r-door: closed) (chargeport: open) (pilot: true) (charging: false) (bits 2C)</font></div><div><font class="Apple-style-span" face="'Andale Mono'" size="1">            0.0 100 88 07 00 00 FF FF 1A       ->VDS Charger settings (limit 26A) (current 7A) (duration 0mins)</font></div><div><font class="Apple-style-span" face="'Andale Mono'" size="1">            0.0 100 89 00 E9 00 00 1A          ->VDS Charger interface (speed 0mph) (vline 233V) (Iavailable 26A)</font></div><div><font class="Apple-style-span" face="'Andale Mono'" size="1">            0.0 100 95 0F 0B 63 A4 01 16 00    ->VDS Charger v1.5 (??state?? 15) (??sub-state?? 11) (standard)</font></div></div><div><font class="Apple-style-span" face="'Andale Mono'" size="1"><br></font></div><div><div><font class="Apple-style-span" face="'Andale Mono'" size="1">            0.0 100 96 2C 00 02 21 38 00 00    ->VDS Doors (l-door: closed) (r-door: closed) (chargeport: open) (pilot: true) (charging: false) (bits 2C)</font></div><div><font class="Apple-style-span" face="'Andale Mono'" size="1">            0.0 100 88 06 00 00 FF FF 1A       ->VDS Charger settings (limit 26A) (current 6A) (duration 0mins)</font></div><div><font class="Apple-style-span" face="'Andale Mono'" size="1">            0.0 100 89 00 BD 00 00 1A          ->VDS Charger interface (speed 0mph) (vline 189V) (Iavailable 26A)</font></div><div><font class="Apple-style-span" face="'Andale Mono'" size="1">            0.0 100 95 0D 01 64 A4 01 16 00    ->VDS Charger v1.5 (preparing-to-charge) (??sub-state?? 1) (standard)</font></div></div><div><font class="Apple-style-span" face="'Andale Mono'" size="1"><br></font></div><div><div><font class="Apple-style-span" face="'Andale Mono'" size="1">            0.0 100 96 2C 00 02 21 38 00 00    ->VDS Doors (l-door: closed) (r-door: closed) (chargeport: open) (pilot: true) (charging: false) (bits 2C)</font></div><div><font class="Apple-style-span" face="'Andale Mono'" size="1">            0.0 100 88 00 00 00 FF FF 1A       ->VDS Charger settings (limit 26A) (current 0A) (duration 0mins)</font></div><div><font class="Apple-style-span" face="'Andale Mono'" size="1">            0.0 100 89 00 03 00 00 00          ->VDS Charger interface (speed 0mph) (vline 3V) (Iavailable 0A)</font></div><div><font class="Apple-style-span" face="'Andale Mono'" size="1">            0.0 100 95 01 05 64 A4 01 16 00    ->VDS Charger v1.5 (charging) (??sub-state?? 5) (standard)</font></div></div><div><font class="Apple-style-span" face="'Andale Mono'" size="1"><br></font></div><div><div><font class="Apple-style-span" face="'Andale Mono'" size="1">            0.0 100 96 3C 00 02 21 38 00 00    ->VDS Doors (l-door: closed) (r-door: closed) (chargeport: open) (pilot: true) (charging: true) (bits 3C)</font></div><div><font class="Apple-style-span" face="'Andale Mono'" size="1">            0.0 100 88 00 00 00 FF FF 1A       ->VDS Charger settings (limit 26A) (current 0A) (duration 0mins)</font></div><div><font class="Apple-style-span" face="'Andale Mono'" size="1">            0.0 100 89 00 EA 00 00 1A          ->VDS Charger interface (speed 0mph) (vline 234V) (Iavailable 26A)</font></div><div><font class="Apple-style-span" face="'Andale Mono'" size="1">            0.0 100 95 01 05 64 A4 01 16 00    ->VDS Charger v1.5 (charging) (??sub-state?? 5) (standard)</font></div></div></blockquote><div><br></div><div>That looks like (heating state, heating sub-state, 99%) -> (preparing to charge, starting charge) -> (charging, charging).</div><div><br></div><div>Assuming the logic I previously outlined, it should be fine (even though it goes through preparing to charge state).</div><div><br></div><div>If you want to directly test the alert, here is the code to add:</div><div><br></div><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><div><div><font class="Apple-style-span" face="'Andale Mono'">case 0x95: // Charging mode</font></div><div><font class="Apple-style-span" face="'Andale Mono'">  if ((car_chargestate<0x15)&&</font></div><div><font class="Apple-style-span" face="'Andale Mono'">      (can_databuffer[1]>=0x15)&&</font></div><div><font class="Apple-style-span" face="'Andale Mono'">      (can_databuffer[2]!=0x03))</font></div><div><font class="Apple-style-span" face="'Andale Mono'">    { // We've moved from charging to stopped charging, not by-request</font></div><div><font class="Apple-style-span" face="'Andale Mono'">    net_notify_status();</font></div><div><font class="Apple-style-span" face="'Andale Mono'">    }</font></div></div><div><font class="Apple-style-span" face="'Andale Mono'" color="#ff0000"><div style="font-family: Helvetica; "><font class="Apple-style-span" face="'Andale Mono'">  if ((car_chargestate == 0x0f)&&</font></div><div style="font-family: Helvetica; "><font class="Apple-style-span" face="'Andale Mono'">      (can_databuffer[1] == 0x0d)&&</font></div><div style="font-family: Helvetica; "><font class="Apple-style-span" face="'Andale Mono'">      (can_databuffer[2]!=0x03))</font></div><div style="font-family: Helvetica; "><font class="Apple-style-span" face="'Andale Mono'">    { // We've moved from heating to preparing, not by-request</font></div><div style="font-family: Helvetica; "><font class="Apple-style-span" face="'Andale Mono'">    net_notify_status();</font></div><div style="font-family: Helvetica; "><font class="Apple-style-span" face="'Andale Mono'">    }</font></div></font></div></blockquote><div><div><br></div><div>(you add the lines in red). The logic is that if the previous charge state was 0x0f (heating) and the new charge state is 0x0d (preparing to charge) and the charge sub-state != 0x03 (by-request), then SMS/PUSH notify alert.</div><div><br></div><div>There is one other edge case - what happens if you stop the charge while it is preparing? This could happen either at the start of a normal charge, or between heating and charging for a cold charge. I guess I can test this to see what state we get in the normal case. So long as the new state is stopped-charging (0x15), the first test case should catch it and alert.</div><div><br></div><div>Regards, Mark.</div><div><br></div><div>P.S. We still need to confirm we get a by-request sub-state for heating->preparing transitions resulting from pressing the VDS STOP button.</div><div><br></div><div>P.P.S. For charge states, we now have:</div><div><br></div><div><ul class="MailOutline"><li>0x01 charging</li><li>0x02 top off (although I'm not seeing this)</li><li>0x04 done</li><li>0x0d preparing to charge</li><li>0x0f heating</li><li>0x15 stopped charging (vds stop)</li><li>0x17 stopped charging (power disconnection)</li><li>and, in general, 0x15-0x19 stopped charging</li></ul></div><div><br></div><div>P.P.S. For sub-states, we now have:</div><div><br></div><div><ul class="MailOutline"><li>0x01 starting charge (power cable has been connected) </li><li>0x02 scheduled start</li><li>0x03 by request</li><li>0x05 charging</li><li>0x07 connect power cable</li><li>0x09 done</li><li>0x0b heating</li></ul></div></div><div><br><div><div>On 19 Feb, 2012, at 11:45 AM, Jack West wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div bgcolor="#FFFFFF"><div>Sliding pilot off during 'heating':</div><div>VDS reads "Preparing to charge, connect power cable"</div><div><br></div><div>Unfortunately it seems that when heating completes normally the next charge state is "preparing"</div><div>just before real charging takes place.  I tried using the pilot bit as a test but ran into trouble.</div><div><br></div><div>Like this </div><div>case 0x95</div><div><br></div><div>  if((car_chargestate == 0x0f) &&. // old state was heating</div><div>    (can_databuffer[1] == 0x0d) && // new state is preparing</div><div>    (pilot == false))  //. Set pilot flag in case 0x96, test it here</div><div>  // heating failed due to power failure or slide pilot switch off</div><div>  car_ chargestate = 0x17;  //set chargestate to stopped state</div><div>  else</div><div>     car_chargestate = can_databuffer[1];</div><div><br></div><div><br></div><div>Canbus notes reads pilot bit is always 1 on your 2.5, is this accurate?</div><div><br></div><div>Jack</div><div><br></div><div><br></div><div><br></div><div><br><br>On Feb 18, 2012, at 5:38 PM, Mark Webb-Johnson <<a href="mailto:mark@webb-johnson.net">mark@webb-johnson.net</a>> wrote:<br><br></div><div></div><blockquote type="cite"><div><div>Jack,</div><div><br></div><div>Yes, I guess that may be a special case. What does it say on the VDS when you do that? Is it 'stopped charging' or 'preparing'. I think the VDS display is just that charge mode.</div><div><br></div><div>Regards, Mark<br></div><div><br>On 19 Feb, 2012, at 10:35 AM, Jack West <<a href="mailto:jackduncanwest@gmail.com">jackduncanwest@gmail.com</a>> wrote:<br><br></div><div></div><blockquote type="cite"><div><div>I flashed the RC4 today and tested in my cold car for the heating state.  Pilot slide to off or power failure after heating started did not return a charge stop message or alert.  I think if the heating state fails due to power loss or slide pilot off, the new state is preparing.  I'll work on this a little later and retest.</div><div><br></div><div>Jack<br><br>On Feb 18, 2012, at 5:43 AM, Mark Webb-Johnson <<a href="mailto:mark@webb-johnson.net">mark@webb-johnson.net</a>> wrote:<br><br></div><div></div><blockquote type="cite"><div><div><br></div>I've made the following changes:<div><br></div><div><ol class="MailOutline"><li>Fix net_puts_rom, net_puts_ram handling of empty strings</li><li>Refuse to start charge if charge port not open. Refuse to stop charge if car not charging.</li><li>Tidy up car_charging and stopped charging alerts</li><li>Treat HEATING state as car charging (force charging bit high).</li><li>Implement a command 16 to set charge mode and current in the same message.</li><li>Change logic for commands 10,11,12 and 15 to NOT send battery status message immediately.</li><li>Change can.c to detect changes in battery status and send that as an immediate status update</li><li>Triple-check notifications for charge stopped vs done.</li><li>Support heating indication in push alerts</li></ol></div><div><br></div><div>and committed is as 1.2.0-rc4.</div><div><br></div><div>I haven't done the reporting of charge and trip stats to to the server. I think that is too much feature-creep at the moment, and better to work on getting a 100% stable firmware with the existing feature set out.</div><div><br></div><div>The logic for sms/push notification of charge stopped is now:</div><div><br></div><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><div><div><font class="Apple-style-span" face="'Andale Mono'">if ((car_chargestate<0x15)&&</font></div><div><font class="Apple-style-span" face="'Andale Mono'">    (can_databuffer[1]>=0x15)&&</font></div><div><font class="Apple-style-span" face="'Andale Mono'">    (can_databuffer[2]!=0x03))</font></div><div><font class="Apple-style-span" face="'Andale Mono'">  { // We've moved from charging to stopped charging, not by-request</font></div><div><font class="Apple-style-span" face="'Andale Mono'">  net_notify_status();</font></div><div><font class="Apple-style-span" face="'Andale Mono'">  }</font></div></div></blockquote><div><br></div><div>The logic is that if the existing (previous) car chargestate is <0x15 (ie; not stopped), and the new car chargestate we've just received is >=0x15 (ie; stopped) and the new car charge substate != 0x03 (by-request), then we SMS/PUSH alert. That should alert on all 'unplug' style and 'power loss' style events, but not the by-request (ie; VDS pressing the STOP button, or sending the Charge Stop from the App) ones. It will not SMS/PUSH on charge done.</div><div><br></div><div>Much simpler, and saves a whole 2 bytes of ram!</div><div><br></div><div>It is too late here to put this in my car, or do any bench testing. It does compile ;-) I'll try it in my car tomorrow morning (my time), but if anyone in Europe/USA wants to try it (your day time), that would be helpful (particularly if I wake up tomorrow morning to messages telling me it works perfectly).</div><div><br></div><div>N.B. Michael suspects there may be a problem with push notifications, that is contributing to inconsistencies with this. The tests he did today had the alerts arriving at the server, but the phone didn't get them. I'll do more testing on this tomorrow, but please bear it in mind.</div><div><br></div><div>Regards, Mark.</div><div><br></div><div><div><div>Begin forwarded message:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px;"><span style="font-family:'Helvetica'; font-size:medium; color:rgba(0, 0, 0, 1.0);"><b>From: </b></span><span style="font-family:'Helvetica'; font-size:medium;">Mark Webb-Johnson <<a href="mailto:mark@webb-johnson.net">mark@webb-johnson.net</a>><br></span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px;"><span style="font-family:'Helvetica'; font-size:medium; color:rgba(0, 0, 0, 1.0);"><b>Subject: </b></span><span style="font-family:'Helvetica'; font-size:medium;"><b>[Ovmsdev] Firmware enhancements -> 1.2.0-rc4</b><br></span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px;"><span style="font-family:'Helvetica'; font-size:medium; color:rgba(0, 0, 0, 1.0);"><b>Date: </b></span><span style="font-family:'Helvetica'; font-size:medium;">17 February, 2012 10:50:23 PM GMT+08:00<br></span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px;"><span style="font-family:'Helvetica'; font-size:medium; color:rgba(0, 0, 0, 1.0);"><b>To: </b></span><span style="font-family:'Helvetica'; font-size:medium;">OVMS Developers <<a href="mailto:OvmsDev@lists.teslaclub.hk">OvmsDev@lists.teslaclub.hk</a>><br></span></div><br><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><br></div><div>I'm planning to work on the car firmware this weekend, hopefully making a 1.2.0-rc4 with the following changes:</div><div><br></div><div><ol class="MailOutline"><li>Fix net_puts_rom, net_puts_ram handling of empty strings.</li><li>Treat HEATING state as car charging (force charging bit high).</li><li>Refuse to start charge if charge port not open. Refuse to stop charge if car not charging.</li><li>Tidy up car_charging and stopped charging alerts.</li><li>Implement a command 16 to set charge mode and current in the same message.</li><li>Change logic for commands 10,11,12 and 15 to NOT send battery status message immediately.</li><li>Change can.c to detect changes in battery status and send that as an immediate status update (this and [6] should improve the UI in the Apps so that when you start/stop a charge, etc, the UI gets updated cleaner).</li><li>Triple-check notifications for charge stopped vs done.</li><li>Try to report charge and trip stats to server (if time allows).</li></ol></div><div><br></div><div>I'll also double-check the charge mode and limit commands from the prototype iPhone App, and fix anything I find wrong.</div><div><br></div><div>To help people's testing, given the Android problems, I'm committing my work-in-progress iPhone App to git now. You should be able to use it in the iPhone simulator (or build and run on your phone if you've paid your dues to Apple). Some notes:</div><div><br></div><div><ul class="MailOutline"><li>When the car is plugged in, a graphical representation will appear on the Battery screen. Slide right to charge, left to stop.<br>Note: the UI on updates from the car is not perfect here, and will need the above rc4 firmware fix to be cleaner.<br>Note: the function works, it is just the UI updates that are counter-intuitive (stop charge - ok, stopped, no charging, no stopped!)<br><br></li><li>Tapping on the battery will bring up an screen to allow you to change charge mode and current limit.<br>Note: At the moment, only change one at a time - if you change both only the mode will be set correctly. Firmware support rc4 is required to get this working better.<br>Note; Set higher currents than is permitted by the plug has been UNTESTED. Hopefully the car will handle this gracefully, but please don't do this until I've had a chance to check the behavior. If you are brave/dumb enough to try this, please let me know the result.<br><br></li><li>On the Car screen, tapping on the lock will allow you to lock/unlock the car. The PIN requested is the vehicle pin.<br>Note: Non-US cars have immobilisers fitted. Even if you unlock the car with the App, the alarm will still be enabled and the car can't be driven until you unlock with the key fob. US cars don't have this issue (but are much easier to steal ;-)<br><br></li><li>On the Car screen, tapping on the valet will allow you to enable/disable valet mode. The PIN requested is the vehicle pin.<br>Note: This is cool. Give the car to the valet, walk away and enable valet mode from your phone - no more having to enter the PIN while the guy looks over your shoulder.<br><br></li><li>On the Car screen, tapping on the engine compartment will prompt you if you want to wake up the car.<br>Note; A sleeping car has no water pump (rear-right of the car) noise. An awake car has this noise of water rushing through pipes.<br><br></li><li>Most of the stuff on Cars/i/Control no longer works (as it has been moved away).<br><br></li><li>Sorry, but the iPad version has not yet been done. I'm getting the iPhone stuff working first, then will copy it over.<br><br></li><li>It is a work-in-progress, and may be buggy. Live with it.</li></ul></div><div><br></div><div>Enjoy, Mark</div><div><br></div>
</div>_______________________________________________<br>OvmsDev mailing list<br><a href="mailto:OvmsDev@lists.teslaclub.hk">OvmsDev@lists.teslaclub.hk</a><br><a href="http://lists.teslaclub.hk/mailman/listinfo/ovmsdev">http://lists.teslaclub.hk/mailman/listinfo/ovmsdev</a><br></blockquote></div><br></div></div></blockquote><blockquote type="cite"><div><span>_______________________________________________</span><br><span>OvmsDev mailing list</span><br><span><a href="mailto:OvmsDev@lists.teslaclub.hk">OvmsDev@lists.teslaclub.hk</a></span><br><span><a href="http://lists.teslaclub.hk/mailman/listinfo/ovmsdev">http://lists.teslaclub.hk/mailman/listinfo/ovmsdev</a></span><br></div></blockquote></div></blockquote></div></blockquote><blockquote type="cite"><div><span>_______________________________________________</span><br><span>OvmsDev mailing list</span><br><span><a href="mailto:OvmsDev@lists.teslaclub.hk">OvmsDev@lists.teslaclub.hk</a></span><br><span><a href="http://lists.teslaclub.hk/mailman/listinfo/ovmsdev">http://lists.teslaclub.hk/mailman/listinfo/ovmsdev</a></span><br></div></blockquote></div></blockquote></div><br></div></body></html>