Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save roguh/9cf6a7a44554b82a4799dbfa4a597eea to your computer and use it in GitHub Desktop.

Select an option

Save roguh/9cf6a7a44554b82a4799dbfa4a597eea to your computer and use it in GitHub Desktop.
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<meta name="generator" content="pandoc" />
<meta name="author" content="Felina Rivera Calzadillas 🇲🇽" />
<title>How to cover any parking lot with EV charging stations</title>
<style type="text/css">
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
/* The extra [class] is a hack that increases specificity enough to
override a similar rule in reveal.js */
ul.task-list[class]{list-style: none;}
ul.task-list li input[type="checkbox"] {
font-size: inherit;
width: 0.8em;
margin: 0 0.8em 0.2em -1.6em;
vertical-align: middle;
}
.display.math{display: block; text-align: center; margin: 0.5rem auto;}
</style>
<link rel="stylesheet" type="text/css" media="screen, projection, print"
href="https://www.w3.org/Talks/Tools/Slidy2/styles/slidy.css" />
<script src="https://www.w3.org/Talks/Tools/Slidy2/scripts/slidy.js"
charset="utf-8" type="text/javascript"></script>
</head>
<body>
<div class="slide titlepage">
<h1 class="title">How to cover any parking lot with EV charging
stations</h1>
<p class="subtitle">protip: easier than gasoline pumps at every
parking lot</p>
<p class="author">
Felina Rivera Calzadillas 🇲🇽
</p>
</div>
<div id="powerflex" class="title-slide slide section level1">
<h1>Powerflex</h1>
<ul>
<li>Leader in EV charging and distributed energy resources.</li>
<li>Adaptive Load Management</li>
</ul>
</div>
<div id="ocpp" class="slide section level2">
<h1>OCPP?</h1>
<p>Open ChargePoint Protocol</p>
<ul>
<li>ChargePoint - charging station for electric cars, EVSE</li>
<li>Protocol - how to talk to the hardware</li>
<li>Open - freely available and constantly being extended,
widespread</li>
</ul>
</div>
<div id="ocpp-1" class="slide section level2">
<h1>OCPP???</h1>
<pre><code>[2,&quot;567&quot;,&quot;BootNotification&quot;,{&quot;vendor&quot;:&quot;Roadrunner&quot;,&quot;model&quot;:&quot;jk67&quot;,&quot;serialNumber&quot;:&quot;2234567890&quot;,&quot;chargeBoxSerialNumber&quot;:&quot;3456789009876543&quot;,&quot;firmwareVersion&quot;:&quot;v0.1&quot;,&quot;meterType&quot;:&quot;&quot;}]</code></pre>
<ul>
<li>JSON over websockets!</li>
<li>TLS optional</li>
<li>basic auth (username/pass or client-side certificate)</li>
</ul>
</div>
<div id="metrics" class="slide section level2">
<h1>metrics</h1>
<p>every X minutes (<code>MeterValueSampleInterval</code>):</p>
<pre><code>[2,&quot;789&quot;,&quot;MeterValues&quot;,{&quot;meterValue&quot;:[{&quot;timestamp&quot;:&quot;2009-01&quot;,&quot;sampledValue&quot;:[{&quot;value&quot;:&quot;99&quot;,&quot;unit&quot;:&quot;Wh&quot;,&quot;context&quot;:&quot;Sample.Clock&quot;,&quot;format&quot;:&quot;Raw&quot;,&quot;measurand&quot;:&quot;Energy.Active.Import.Register&quot;,&quot;location&quot;:&quot;Outlet&quot;}]}]}]</code></pre>
</div>
<div id="load-manage" class="slide section level2">
<h1>load manage:</h1>
<pre><code>[2,&quot;890&quot;,&quot;SetChargingProfile&quot;,{&quot;connectorId&quot;:0,&quot;csChargingProfiles&quot;:{&quot;stackLevel&quot;:1,&quot;recurrencyKind&quot;:&quot;Daily&quot;,&quot;chargingSchedule&quot;:{&quot;startSchedule&quot;:&quot;2026-05-13T00:00:00+00:00&quot;,&quot;chargingRateUnit&quot;:&quot;A&quot;,&quot;chargingSchedulePeriod&quot;:[{&quot;limit&quot;:34,&quot;startPeriod&quot;:0},{&quot;limit&quot;:34,&quot;startPeriod&quot;:25200}]},&quot;chargingProfileId&quot;:1,&quot;chargingProfileKind&quot;:&quot;Recurring&quot;,&quot;chargingProfilePurpose&quot;:&quot;TxDefaultProfile&quot;}}
]</code></pre>
</div>
<div id="why" class="slide section level2">
<h1>Why?</h1>
<ul>
<li><strong>load management</strong> - $$$$$$ (see presentation
title)</li>
<li><strong>driver auth</strong> - plug in and pay seamlessly, 1
button(?)</li>
<li><strong>2-way charging</strong> - power outage? power your house
with your car(s)</li>
<li><strong>fleets</strong> - slightly less pollution to move goods at
scale</li>
</ul>
</div>
<div id="more-ocpp" class="slide section level2">
<h1>MORE OCPP???</h1>
<p>vendor quirks</p>
<pre><code>{&quot;Input_Terminal_Temp&quot;:34,&quot;On_Board_Temp&quot;:36,&quot;Duration_for_2C_Delta&quot;:&quot;N/A&quot;,&quot;LTE_RSSI&quot;:-65.0}</code></pre>
<p>request-response from server to charger OR charger to server
(<strong>MAGIC WEBSOCKETS ARE MAGIC</strong>!!!!!!!)</p>
<pre><code>-&gt;
&lt;-</code></pre>
</div>
<div
id="renewable-energy-industry-economic-forecast-the-feds-websockets-tls-tcpip"
class="slide section level2">
<h1>renewable energy industry economic forecast, the feds, websockets,
TLS, TCP/IP</h1>
</div>
<div id="questions" class="slide section level2">
<h1>Questions?</h1>
<p>Sources:</p>
<ul>
<li>https://www.powerflex.com/adaptive-load-management</li>
<li>https://github.com/gennadiygnezdilov/ocpp-1.6J-example-request-response
<ul>
<li>good examples using older version OCPP 1.6</li>
</ul></li>
<li>Felina's brain https://linkedin.com/in/roguh</li>
</ul>
<!--
### proposal
I'll present on the OCPP protocol, an open protocol that is JSON over websockets (with TLS), to communicate with EV charging stations, as well as challenges we face with integrating with different vendors of charging stations, intelligent adaptive load management, new ISO15118 features like driver auth, and more :)
DHL, LAX
-->
</div>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment