Planning to go from snow to surf in one day in an electric vehicle naturally meant planning for resilience. Planning a dawn-to-dusk schedule in 30-minute blocks also meant up-front planning for contingencies.
Carnival of carving
I recently descended from Mount Hotham to Cape Conran, with one one of my teenage children, snowboarding in the morning and surfing in the evening. We called it The Cross to The Cape Carnival of the Carve. Like 2004’s Bitchin Barrels to Baw Baw Board Bonanza, but this time in an EV.

Charge cascade
While the trip was “only” 250km (including 1800m descent) against a conservative flat range of 400km, we weren’t starting full or finishing on empty. We were also racing the sunset all day. The plan, timed to 30-minute blocks, called for about 40% charge (two blocks), but where, and how should I decide based on factors on the day, to avoid wasting any more precious blocks waiting?
Building the charge cascade gave us all the options up front, depending on:
- Whether a charger we would pass anyway (mandatory, orange decision) was available or soon-to-be available, and
- Whether a charger we could choose to visit (discretionary, yellow decision) was reported good in charging apps.

It also showed when we would have run out of options to charge sufficiently to surf before sunset (pink terminal nodes). Luckily, plan A worked out!

All this manual calculation and diagramming was fine for one adventure, but for future road trips I wanted a similar contingency capability in my EV planning app trippler.
Coding contingency
I thought about this experience, and considered various approaches to implementing contingency planning in trippler, to arrive with:
- Most contingency (optional) trip objective in addition to existing shortest time (default) objective, and
- Contingencies explorer to see the results of re-planning the trip when charging preferences are not available, in multiple iterations.
Together, these should give us the mandatory decisions in the charge cascade above. Discretionary contingencies may come in a future release.
Configure the cascade
With further UI tweaks, we can configure the day’s planned driving in trippler:

We see the 250km drive from Mount Hotham to Cape Conran, with three 50kW chargers en-route at Omeo, Bruthen and Orbost. Starting with 70%, we wish to arrive with 50% SOC, with range 400km.
Most contingency
If we naively stuck with shortest time objective, as we see below, there’s a risk we’d skip past an available charger (eg Omeo) only to find the fastest charge unavailable (eg Bruthen, marginally closer to the highway). Instead, most contingency objective picks chargers earlier on the route so we have, well, most contingency for unavailable chargers.

The objective simply applies a penalty that increments with each successive charger. The planning solver then minimises this penalty, which also serves to minimise the number of charging stops.
However, we continue to ensure enough charging to reach our destination, as this optimal contingency result remains subject to all of the other resilience constraints trippler plans can be configured to satisfy, a neat result requiring minimal changes! If we do want to approximate the truly maximal contingency result of stopping at every single charger, we can set the minimum SOC to the highest satisfiable level.
Contingency explorer
It’s good to know our plan has most contingency through the objective and resilience constraints, and we can see this reflected in skipped chargers above, but I’d also like know exactly what action to take should circumstances require.
The contingency explorer thus renders this decision tree, similar to the charge cascade, as a plan I can hold in my hand (in trippler).

Contingency explorer
The image shows the contingency explorer expanded three levels deep. The first contingency is for Omeo is Bruthen and the second, should Bruthen also be unavailable, is Orbost, as expected. The “no further contingency” message informs us we can’t go deeper.
The contingency explorer reuses the existing planning solver but excludes specified chargers. The chargers excluded at each level are the currently planned first charger and, assuming that we discovered this charger was not available on arrival, all previous chargers on the route. This could be revisited in future, especially to consider available information about discretionary chargers or for return to previous contingencies. All the same, also a pretty neat change requiring minimal changes, and each contingency can be an entirely new plan!
For the UX, I’m experimenting with the contingencies in an st.expander
below the baseline plan, collapsed by default. I’m still experimenting with how to best render the decision tree, and the fact that each contingency can be an entirely new plan means there’s more work to be done here to keep it simple…
The carnival is over
For now at least, as may be the snow season, but I look forward to carving out more time for outdoor adventure soon.
As an aside, I learned an interesting thing about driving an EV in snow this season. If an ICE vehicle were snowed in and immobile, you would hear the engine rev as you pushed the accelerator to build torque to drive out. In an EV, however, you get no feedback from the vehicle on pressing the accelerator until the wheels start moving. This is because EV instruments display power in kW, and power is zero without motion (P = Tw). In this situation we’d need an electric potential or torque display for feedback. I’m not aware my EV can natively display torque, so maybe there’s a future OBD instrument project in the pipeline…
It was really satisfying to close out the carnival by coding the charge cascade in tripper. There are many more features waiting from here. Wherever it takes me, I am enjoying having my own resilient EV adventure trip planner but no firm roadmap!

Leave a Reply