Add extracted tools: CitrineOS, OpenOCPP, ShapeShifter
- CitrineOS core extracted (CSMS OCPP 2.0.1) - OpenOCPP extracted (firmware OCPP 1.6J/2.0.1) - ShapeShifter library installed (pip install -e) - ShapeShifter specification extracted - EVerest extracted TODO updated with progress
This commit is contained in:
@@ -0,0 +1,122 @@
|
||||
<svg host="65bd71144e" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="361px" height="351px" viewBox="-0.5 -0.5 361 351" content="<mxfile><diagram id="LkL3k23o4wMPku4sNzY7" name="Page-1">5ZfBcpswEIafhjsgm9jH2CXpITl5pj2rsEVqBcvIwth9+opoZaySNJnpxM64F4/07Qppf/3egYit6/295q14xBJUlMblPmKfojRdJjP7O4CDAxmbO1BpWTqUjGAjfwHBmGgnS9gGiQZRGdmGsMCmgcIEjGuNfZj2HVW4a8srmIBNwdWUfpWlEY4u5vHIP4OshN85iSlSc59MYCt4if0JYnnE1hrRuFG9X4MatPO6uHV3L0SPB9PQmLcsSN2CHVcd1UbnMgdfLJS2dpqiNgIrbLjKR7rS2DUlDE+M7WzMeUBsLUws/AHGHOgieWfQImFqRVFoytvhWuy0wQYcuZNK0SOnVVGhW+x0QeckTxmuK6CszKGhgpNlpMQ9YA1GH2yCBsWN3IW3y8kk1TFv1NEOSMrnZWVXLeviUrLOnpE1U/ZUq292UA2DtdRFJ43NWmngP0EfM7RP8cTudlyWsdsotfvHrBWTqwovohfSwKblTwL1tr+For8o6g60gf1fBaMom1Oh1B5n1Cz6sdckvoGIkz6Txf8u8fx6nJtNnbu8lHOzd3MuSz+Qc1MWOjdZntG6N9dj3cXUuv7d5/zeXfwf3p3dXNC7y9c1zr9s8uRtuibZB9L1z57A2Bl19f+a14RNr8Cw7ymsnY4fJU+xky87lv8G</diagram></mxfile>">
|
||||
<defs/>
|
||||
<g>
|
||||
<path d="M 180 60 L 180 105 L 60 105 L 60 150" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
|
||||
<path d="M 180 60 L 180 105 L 300 105 L 300 150" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
|
||||
<rect x="120" y="0" width="120" height="60" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 30px; margin-left: 121px;">
|
||||
<div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
|
||||
<b>
|
||||
Circuit Breaker
|
||||
<br/>
|
||||
</b>
|
||||
63A, 3ph
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="180" y="34" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
Circuit Breaker...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<path d="M 60 210 L 60 290" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
|
||||
<rect x="0" y="150" width="120" height="60" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 180px; margin-left: 1px;">
|
||||
<div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
|
||||
<b>
|
||||
Circuit Breaker
|
||||
<br/>
|
||||
</b>
|
||||
32A, 3ph
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="60" y="184" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
Circuit Breaker...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<path d="M 300 210 L 300 290" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
|
||||
<rect x="240" y="150" width="120" height="60" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 180px; margin-left: 241px;">
|
||||
<div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
|
||||
<b>
|
||||
Circuit Breaker
|
||||
<br/>
|
||||
</b>
|
||||
32A, 3ph
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="300" y="184" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
Circuit Breaker...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<rect x="0" y="290" width="120" height="60" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 320px; margin-left: 1px;">
|
||||
<div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
|
||||
<b>
|
||||
EVSE1
|
||||
<br/>
|
||||
</b>
|
||||
16A, 3ph
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="60" y="324" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
EVSE1...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<rect x="240" y="290" width="120" height="60" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 320px; margin-left: 241px;">
|
||||
<div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
|
||||
<b>
|
||||
EVSE2
|
||||
<br/>
|
||||
</b>
|
||||
32A, 3ph
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="300" y="324" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
EVSE2...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
</g>
|
||||
<switch>
|
||||
<g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/>
|
||||
<a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank">
|
||||
<text text-anchor="middle" font-size="10px" x="50%" y="100%">
|
||||
Text is not SVG - cannot display
|
||||
</text>
|
||||
</a>
|
||||
</switch>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 9.1 KiB |
@@ -0,0 +1,256 @@
|
||||
<svg host="65bd71144e" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="580px" height="471px" viewBox="-0.5 -0.5 580 471" content="<mxfile><diagram id="LkL3k23o4wMPku4sNzY7" name="Page-1">3VnLctsgFP0abz1Cr1jL1HHSzjStZ7Jou/JQiUi0WGgQfqhfXxTAeqA0jiNLbrzwiANc4JzDRdgTZ77e3zGYJfc0QmRiW9F+4txMbDsArvgugUICvuNJIGY4khCogAf8BynQUugGRyhvNOSUEo6zJhjSNEUhb2CQMbprNnukpDlqBmNkAA8hJCb6DUc8kejMsyr8I8JxokcGlqpZQ91YAXkCI7qrQc5i4swZpVw+rfdzREruNC+y3+0ztYeJMZTyYzrYssMWko1am5oXL/RiUSTWroqU8YTGNIVkUaEfGN2kESojWqJUtflMaSZAIMBfiPNCCQk3nAoo4WuialEaXZeyiGJKUySRW0yICmmuSi00pxsWqnkqT3HIYqRa+RIqV1Drppi4Q3SNOCtEA4YI5HjbVBcqk8SHdhWP4kFR2U2r865pnY1Fq9tBq0/ErD78FA9x+bBIEYuLLyLjHKqYrtOIGObQvkwwK5UnME1XGcWCjLZYTSl2CeboIYNPFO1EhmvS/iytW8Q42v+TMlXreGqpKkG6Kl3sqmwDdApJapnGt95OMgheZ15lrb5955u+A2As4/n9Gw9meJXj9PcKGOwO7TbbaboNBAPaTccd2W6zDrvZY9ltdka7mewObTf3akS7dSW3NrXbHN3DVLzEseO4RaLDai17XOB2dr0hT4+u7dwrwZdn4EEJfu0r+5nypT6L6wkzGCtf6sn0mTBpmGWXekA79pCG6yJ3BMPZHSe0NZrjunZhb467vBQ3qOOAeX2+Xn4yTVfZKiQwz3HYtp0Y97ui7KnwoyxMPV282dcrb4qX7HjKTws1vrwOujR2tEHVCEt5TdVyAX1BLPQh0ZJB7qTl4XJ7e2wgqxVIcmAEepL0sOzjVDZv81/ny+X4Ml+Kpk5TCsc7UVNxekyt2gc0w7rB1JudTWTz5nySyJculh+4Bqu+f5pe3hGxnlGoiqUb0sfHHL1ZxateEvL/JqK4mU59L6g+V/0I+lLcgcU1f214l1vUa73S+P2I235TeiHsWbUVxeqvI9m8+v/NWfwF</diagram></mxfile>">
|
||||
<defs/>
|
||||
<g>
|
||||
<path d="M 291 60 L 291 105 L 171 105 L 171 150" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
|
||||
<path d="M 291 60 L 291 105 L 411 105 L 411 150" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
|
||||
<rect x="231" y="0" width="120" height="60" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 30px; margin-left: 232px;">
|
||||
<div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
|
||||
<b>
|
||||
EnergyNode
|
||||
<br/>
|
||||
</b>
|
||||
grid_connection_point
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="291" y="34" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
EnergyNode...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<path d="M 171 210 L 171 280" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
|
||||
<rect x="111" y="150" width="120" height="60" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 180px; margin-left: 112px;">
|
||||
<div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
|
||||
<b>
|
||||
EnergyNode
|
||||
<br/>
|
||||
</b>
|
||||
api_sink_1
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="171" y="184" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
EnergyNode...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<path d="M 411 210 L 411 280" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
|
||||
<rect x="351" y="150" width="120" height="60" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 180px; margin-left: 352px;">
|
||||
<div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
|
||||
<b>
|
||||
EnergyNode
|
||||
<br/>
|
||||
</b>
|
||||
api_sink_2
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="411" y="184" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
EnergyNode...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<rect x="111" y="410" width="120" height="60" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 440px; margin-left: 112px;">
|
||||
<div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
|
||||
<b>
|
||||
EvseManager
|
||||
<br/>
|
||||
</b>
|
||||
evse_manager_1
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="171" y="444" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
EvseManager...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<rect x="351" y="410" width="120" height="60" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 440px; margin-left: 352px;">
|
||||
<div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
|
||||
<b>
|
||||
EvseManager
|
||||
<br/>
|
||||
</b>
|
||||
evse_manager_2
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="411" y="444" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
EvseManager...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<path d="M 171 340 L 171 410" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
|
||||
<rect x="111" y="280" width="120" height="60" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 310px; margin-left: 112px;">
|
||||
<div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
|
||||
<b>
|
||||
EnergyNode
|
||||
<br/>
|
||||
</b>
|
||||
ocpp_sink_1
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="171" y="314" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
EnergyNode...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<path d="M 411 340 L 411 410" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
|
||||
<rect x="351" y="280" width="120" height="60" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 310px; margin-left: 352px;">
|
||||
<div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
|
||||
<b>
|
||||
EnergyNode
|
||||
<br/>
|
||||
</b>
|
||||
ocpp_sink_2
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="411" y="314" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
EnergyNode...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<path d="M 17 180 L 104.63 180" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
|
||||
<path d="M 109.88 180 L 102.88 183.5 L 104.63 180 L 102.88 176.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 180px; margin-left: 64px;">
|
||||
<div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">
|
||||
API
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="64" y="183" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">
|
||||
API
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<path d="M 7 310 L 104.63 309.61" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
|
||||
<path d="M 109.88 309.58 L 102.9 313.11 L 104.63 309.61 L 102.87 306.11 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 310px; margin-left: 59px;">
|
||||
<div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">
|
||||
OCPP
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="59" y="313" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">
|
||||
OCPP
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<path d="M 571 309.66 L 477.37 309.66" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
|
||||
<path d="M 472.12 309.66 L 479.12 306.16 L 477.37 309.66 L 479.12 313.16 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 310px; margin-left: 521px;">
|
||||
<div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">
|
||||
OCPP
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="521" y="313" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">
|
||||
OCPP
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<path d="M 571 179.66 L 477.37 179.66" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
|
||||
<path d="M 472.12 179.66 L 479.12 176.16 L 477.37 179.66 L 479.12 183.16 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 180px; margin-left: 521px;">
|
||||
<div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">
|
||||
API
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="521" y="183" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">
|
||||
API
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<path d="M 451 29.66 L 357.37 29.66" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
|
||||
<path d="M 352.12 29.66 L 359.12 26.16 L 357.37 29.66 L 359.12 33.16 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 30px; margin-left: 401px;">
|
||||
<div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">
|
||||
OCPP
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="401" y="33" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">
|
||||
OCPP
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
</g>
|
||||
<switch>
|
||||
<g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/>
|
||||
<a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank">
|
||||
<text text-anchor="middle" font-size="10px" x="50%" y="100%">
|
||||
Text is not SVG - cannot display
|
||||
</text>
|
||||
</a>
|
||||
</switch>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 20 KiB |
@@ -0,0 +1,161 @@
|
||||
<svg host="65bd71144e" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="361px" height="481px" viewBox="-0.5 -0.5 361 481" content="<mxfile><diagram id="LkL3k23o4wMPku4sNzY7" name="Page-1">7VpNc5swEP01vmYkBAKOiWOnh2YmM5lpm6NiFKDByCPLsd1fXwECxEcC8Qd23OaQkR4r0O6+1T5sj9B4vrnjZBHcM49GIwN4mxG6HRmGC035PwG2GYCRlQE+D70MgiXwGP6hCgQKXYUeXVYMBWORCBdVcMbimM5EBSOcs3XV7IVF1acuiE8bwOOMRE30Z+iJIEMdC5T4Nxr6Qf5kCNSVOcmNFbAMiMfWGoQmIzTmjIlsNN+MaZTELo9Ltm76ztViY5zGos8CI1vwRqKV8k3tS2xzZ6knfVdTxkXAfBaTaFKiN5ytYo8mdwRyVtp8Z2whQSjB31SIrUokWQkmoUDMI3WVxt51khY5jVlMM2QaRpG6ZdMr5eiSrfhM7VNxShDuU2WFMyjxQFumInFH2ZwKvpUGnEZEhG/V7BJFEr+wK+MoByqU7WFFFx1W51Rh7QijclKPwCYUvxJvrwxLTZ+U88n4dqNPtvkkltvSVyXzpyKmclKuS2f5wqXg7LU4EVCKEC5qOUgxLQtalmYRWS7DWSVRyUNf5HDMIsZTnxEGxIV28UDtinFrY7BPavNzafjcmi0lgyO5rZtnOfCTwTjks1UopNUNp+SV8sKC5yY5Ip9WLMPoemTI5wO0CBr8qRbZOggFfVyQNEJr2buqdHo3qm+UC7r5MGDqKsKq1anWV/S0ddlIYJ6FQGsiGOwfY+tyjiXc5K57KupCtPOxZA9wLH3+gAHAIQC0HTAAWDZoP+t2TZt56LSlS6XHZKsZLFgYi6V254cE0OoSVesSoZpwqtu7H9rLQbaDkkCFK/04hQdudRBVSXUFZJ/vIpacPVAeSr8of7cJdtV7pUmWDNX7ZAtHiQFA6mmDo3gKQP8meLaMNOwaw0AHIx34kf3+jHQOw0jYl5HVUw50kHEo8XVE3p2sgeGjaS9knJH2MsxaReEBtZd9OdrLaVIXnuy9If8sabBGaX9Z8dWSt/NodRb8nPgyrSOLL3tnTu0m6F2Aa+JL0vog4qunuOo6F47UBM+XkZ8UX6ZtHld8uYdhZG/xZV+0+DqrDub8G+rLdE6oviBs+H/cE/3rqgS3WRsn+x7F7S6NyY/HCexXDhCfUTnUX0YsMGQ5WAOL5q/7iWXeF87iC7B8M10FYVxAfxi0IIwD9Yf/+ioLZ0vRHFzY985tn6KJKfe39yQmfimu9FLZrzxqYYbPBFIjwVksNPwl/Ws/xfDkenqYQqt/Bekcr87ktPwtS/baU/4gCE3+Ag==</diagram></mxfile>">
|
||||
<defs/>
|
||||
<g>
|
||||
<path d="M 180 190 L 180 235 L 60 235 L 60 280" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
|
||||
<path d="M 180 190 L 180 235 L 300 235 L 300 280" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
|
||||
<path d="M 150 130 L 150 70.1" fill="none" stroke="#2d7600" stroke-width="3" stroke-miterlimit="10" pointer-events="stroke"/>
|
||||
<path d="M 150 63.35 L 154.5 72.35 L 150 70.1 L 145.5 72.35 Z" fill="#2d7600" stroke="#2d7600" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<rect x="120" y="130" width="120" height="60" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 160px; margin-left: 121px;">
|
||||
<div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
|
||||
<b>
|
||||
Circuit Breaker
|
||||
<br/>
|
||||
</b>
|
||||
63A, 3ph
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="180" y="164" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
Circuit Breaker...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<path d="M 60 340 L 60 420" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
|
||||
<path d="M 90 280 L 90 260 Q 90 250 100 250 L 140 250 Q 150 250 150 240 L 150 200.1" fill="none" stroke="#005700" stroke-width="3" stroke-miterlimit="10" pointer-events="stroke"/>
|
||||
<path d="M 150 193.35 L 154.5 202.35 L 150 200.1 L 145.5 202.35 Z" fill="#005700" stroke="#005700" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<path d="M 30 269.9 L 30 230 Q 30 220 40 220 L 126 220 Q 136 220 136.07 210 L 136.2 191.68" fill="none" stroke="#6f0000" stroke-width="3" stroke-miterlimit="10" pointer-events="stroke"/>
|
||||
<path d="M 30 276.65 L 25.5 267.65 L 30 269.9 L 34.5 267.65 Z" fill="#6f0000" stroke="#6f0000" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<path d="M 30 340 L 30 409.9" fill="none" stroke="#6f0000" stroke-width="3" stroke-miterlimit="10" pointer-events="stroke"/>
|
||||
<path d="M 30 416.65 L 25.5 407.65 L 30 409.9 L 34.5 407.65 Z" fill="#6f0000" stroke="#6f0000" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<rect x="0" y="280" width="120" height="60" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 310px; margin-left: 1px;">
|
||||
<div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
|
||||
<b>
|
||||
Circuit Breaker
|
||||
<br/>
|
||||
</b>
|
||||
32A, 3ph
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="60" y="314" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
Circuit Breaker...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<path d="M 300 340 L 300 420" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
|
||||
<path d="M 270 280 L 270 260 Q 270 250 260 250 L 220 250 Q 210 250 210 240 L 210 200.1" fill="none" stroke="#005700" stroke-width="3" stroke-miterlimit="10" pointer-events="stroke"/>
|
||||
<path d="M 210 193.35 L 214.5 202.35 L 210 200.1 L 205.5 202.35 Z" fill="#005700" stroke="#005700" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<path d="M 330 269.9 L 330 230 Q 330 220 320 220 L 239 220 Q 229 220 228.9 210 L 228.72 190.84" fill="none" stroke="#6f0000" stroke-width="3" stroke-miterlimit="10" pointer-events="stroke"/>
|
||||
<path d="M 330 276.65 L 325.5 267.65 L 330 269.9 L 334.5 267.65 Z" fill="#6f0000" stroke="#6f0000" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<path d="M 330 340 L 330 409.9" fill="none" stroke="#6f0000" stroke-width="3" stroke-miterlimit="10" pointer-events="stroke"/>
|
||||
<path d="M 330 416.65 L 325.5 407.65 L 330 409.9 L 334.5 407.65 Z" fill="#6f0000" stroke="#6f0000" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<rect x="240" y="280" width="120" height="60" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 310px; margin-left: 241px;">
|
||||
<div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
|
||||
<b>
|
||||
Circuit Breaker
|
||||
<br/>
|
||||
</b>
|
||||
32A, 3ph
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="300" y="314" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
Circuit Breaker...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<path d="M 90 420 L 90 350.1" fill="none" stroke="#005700" stroke-width="3" stroke-miterlimit="10" pointer-events="stroke"/>
|
||||
<path d="M 90 343.35 L 94.5 352.35 L 90 350.1 L 85.5 352.35 Z" fill="#005700" stroke="#005700" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<rect x="0" y="420" width="120" height="60" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 450px; margin-left: 1px;">
|
||||
<div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
|
||||
<b>
|
||||
EVSE1
|
||||
<br/>
|
||||
</b>
|
||||
16A, 3ph
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="60" y="454" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
EVSE1...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<path d="M 270 420 L 270 350.1" fill="none" stroke="#005700" stroke-width="3" stroke-miterlimit="10" pointer-events="stroke"/>
|
||||
<path d="M 270 343.35 L 274.5 352.35 L 270 350.1 L 265.5 352.35 Z" fill="#005700" stroke="#005700" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<rect x="240" y="420" width="120" height="60" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 450px; margin-left: 241px;">
|
||||
<div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
|
||||
<b>
|
||||
EVSE2
|
||||
<br/>
|
||||
</b>
|
||||
32A, 3ph
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="300" y="454" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
EVSE2...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<path d="M 210 60 L 210 119.9" fill="none" stroke="#6f0000" stroke-width="3" stroke-miterlimit="10" pointer-events="stroke"/>
|
||||
<path d="M 210 126.65 L 205.5 117.65 L 210 119.9 L 214.5 117.65 Z" fill="#6f0000" stroke="#6f0000" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<rect x="120" y="0" width="120" height="60" fill="#1ba1e2" stroke="#006eaf" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 30px; margin-left: 121px;">
|
||||
<div data-drawio-colors="color: #ffffff; " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(255, 255, 255); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
|
||||
<b>
|
||||
EnergyManager
|
||||
</b>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="180" y="34" fill="#ffffff" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
EnergyManager
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
</g>
|
||||
<switch>
|
||||
<g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/>
|
||||
<a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank">
|
||||
<text text-anchor="middle" font-size="10px" x="50%" y="100%">
|
||||
Text is not SVG - cannot display
|
||||
</text>
|
||||
</a>
|
||||
</switch>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 14 KiB |
@@ -0,0 +1,36 @@
|
||||
<svg host="65bd71144e" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="121px" height="61px" viewBox="-0.5 -0.5 121 61" content="<mxfile><diagram id="LkL3k23o4wMPku4sNzY7" name="Page-1">jZNNb4QgEIZ/DXeFXbM9ttbdXnoyac9UpkKCYlh2dfvri2VQ7KZJL2Z45gveGQkru+lk+SBfjQBNaCYmwp4JpQ/5zn9ncAugYPsAWqtEQPkKavUFCDOkFyXgvAl0xminhi1sTN9D4zaMW2vGbdin0duuA2/hDtQN1/f0XQknAz3ss5W/gGpl7Jxn6Ol4DEZwllyYMUGsIqy0xrhgdVMJetYu6hLyjn94l4tZ6N1/EmhIuHJ9wbcRWmif+vThjXY2qre6itAXWvgSaH8Toa4RMfpIaOk7sEEmRZII1MHdorjWXHoB8/0y7x6lclAPvJm9o98mz6TrtD/lS3b6XpTgCtbBlCB8/wlMB87efAh62R63EZfxsMPZjOto8zgvmYy1QMZxm9ql9Cq4N1DzeFxn++NLfhBWfQM=</diagram></mxfile>">
|
||||
<defs/>
|
||||
<g>
|
||||
<rect x="0" y="0" width="120" height="60" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 30px; margin-left: 1px;">
|
||||
<div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
|
||||
<b>
|
||||
EVSE
|
||||
</b>
|
||||
<br/>
|
||||
<div>
|
||||
32A, 3ph
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="60" y="34" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
EVSE...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
</g>
|
||||
<switch>
|
||||
<g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/>
|
||||
<a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank">
|
||||
<text text-anchor="middle" font-size="10px" x="50%" y="100%">
|
||||
Text is not SVG - cannot display
|
||||
</text>
|
||||
</a>
|
||||
</switch>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.6 KiB |
@@ -0,0 +1,56 @@
|
||||
<svg host="65bd71144e" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="121px" height="191px" viewBox="-0.5 -0.5 121 191" content="<mxfile><diagram id="LkL3k23o4wMPku4sNzY7" name="Page-1">zZRNb6MwEIZ/DXfABXWPTUqzh+4pUnt28RR71zBoMoRkf/2aMoSg9EuqKu0F2c+8tmfesYnUuj5sSLf2FxrwURqbQ6RuozT9kVyF7wCOI8hVNoKKnBlRMoOt+wsCY6GdM7BbCBnRs2uXsMSmgZIXTBNhv5Q9o1+e2uoKLsC21P6SPjrDdqTXWTzzn+AqO52cxBKp9SQWsLPaYH+GVBGpNSHyOKoPa/CDd5Mv47q7N6KnxAga/syCVNLg41QbmFCqTJHYYoWN9sVMV4RdY2DYIA6zWXOP2AaYBPgbmI/SN90xBmS59hKFxtwMXQjTBhsYyZ3zXra8LELq2mFHpeSppO+aKhCV3KqhgrNlUvgGsAamYxAQeM1uv2ymljtRnXSzbWEgzr3uouSy176TTaM09yGr1VMYVMNg7ajsHAfVikD/ATopaJJMJJx2WpbkN1Eazo9Vay9atWxEbx3DttUvBvXh3S1Nf9PUPRDD4V3DJKoycViebTbd4n5+BMnE7NkDyOOve3z1scfFw7b4nK0q/Y9tzbPvszVM55/LS+zsD62Kfw==</diagram></mxfile>">
|
||||
<defs/>
|
||||
<g>
|
||||
<path d="M 60 60 L 60 130" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
|
||||
<rect x="0" y="0" width="120" height="60" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 30px; margin-left: 1px;">
|
||||
<div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
|
||||
<b>
|
||||
Circuit Breaker
|
||||
<br/>
|
||||
</b>
|
||||
16A, 3ph
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="60" y="34" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
Circuit Breaker...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<rect x="0" y="130" width="120" height="60" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 160px; margin-left: 1px;">
|
||||
<div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
|
||||
<b>
|
||||
EVSE
|
||||
<br/>
|
||||
</b>
|
||||
32A, 3ph
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="60" y="164" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
EVSE...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
</g>
|
||||
<switch>
|
||||
<g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/>
|
||||
<a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank">
|
||||
<text text-anchor="middle" font-size="10px" x="50%" y="100%">
|
||||
Text is not SVG - cannot display
|
||||
</text>
|
||||
</a>
|
||||
</switch>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.3 KiB |
@@ -0,0 +1,135 @@
|
||||
<svg host="65bd71144e" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="492px" height="192px" viewBox="-0.5 -0.5 492 192" content="<mxfile><diagram id="Z5-atGQC2fyeHDTmyhzX" name="Page-1">5Zddb9sgFIZ/jW8nf8e5bNO0m7RN1SJt18ic2GjYRJg0yX79jmuwjXHaqkv3oeUiMi9wgOc94ThetKqOd5Lsyk+CAvdCnx696MYLw0Ua4ncrnDohCZedUEhGOykYhA37AVr0tbpnFBproBKCK7azxVzUNeTK0oiU4mAP2wpur7ojBTjCJifcVb8xqspOzRJ/0N8DK0qzcuDrnoqYwVpoSkLFYSRFay9aSSFU91QdV8BbdoZLN+/2TG+/MQm1etEEPeOB8L0+nN6YOpnTSrGvKbQTfC+6PpRMwWZH8rb3gPaiVqqKYyvARx0OpILj2T0F/UkxQ0BUoOQJh5gJC50NOjsWkYZ1GFjHS62VY85GJNrfoo89IMAHTWGeSOgAWdcgi9NnTOJfQ7MVtdK5HKQ9KofLDL2zqKI0tlBlsYsqCGdQpRcglTik7tqf75QRHkXZIBolxXdYCS4kKrWooaXDOJ9IhLOixmaOgAD16xYMw5/hle6oGKXtMrPkbW/eAH6fbgZ+kjjw0xn20QXYp26Wfv1/yKf+nyO/cMkfd0Iqhz7U9KqtNQPVJ+6CRhGpzPCck6ZhuZFvGTfTMKZu+U+RBGrVL5fjiFMyw8loEjhR7MGuenPw9Ar3guFOepv6OMYmf8K/EXuZg541rlKTQI7f00CIqQDlBHr0sj/2i+zNHHs/VM/ZO/j1mtv+bzErXr5bjj92DZ4WjNda5wS6nHVLx7qPQLaobNilSzclTfk4N9CNe6LwomxvRkwgP7vMNRdnz1f3OH2b4m5etUc0v7Rvpf8uzSjIfhdNbA6v8F0mD/+DovVP</diagram></mxfile>">
|
||||
<defs/>
|
||||
<g>
|
||||
<rect x="0" y="0" width="490" height="190" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/>
|
||||
<rect x="185" y="110" width="120" height="60" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 140px; margin-left: 186px;">
|
||||
<div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 16px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
|
||||
EnergyNode
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="245" y="145" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="16px" text-anchor="middle">
|
||||
EnergyNode
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<rect x="11" y="125" width="60" height="30" fill="none" stroke="none" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 58px; height: 1px; padding-top: 140px; margin-left: 12px;">
|
||||
<div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 16px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
|
||||
Grid
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="41" y="145" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="16px" text-anchor="middle">
|
||||
Grid
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<rect x="421" y="125" width="60" height="30" fill="none" stroke="none" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 58px; height: 1px; padding-top: 140px; margin-left: 422px;">
|
||||
<div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 16px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
|
||||
EV
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="451" y="145" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="16px" text-anchor="middle">
|
||||
EV
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<path d="M 77.37 70 L 421 70" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
|
||||
<path d="M 72.12 70 L 79.12 66.5 L 77.37 70 L 79.12 73.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 70px; margin-left: 246px;">
|
||||
<div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 16px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">
|
||||
Export
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="246" y="75" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="16px" text-anchor="middle">
|
||||
Export
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<path d="M 71 30 L 414.63 30" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
|
||||
<path d="M 419.88 30 L 412.88 33.5 L 414.63 30 L 412.88 26.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 30px; margin-left: 246px;">
|
||||
<div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 16px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">
|
||||
Import
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="246" y="35" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="16px" text-anchor="middle">
|
||||
Import
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<rect x="305" y="110" width="46" height="60" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-dasharray="8 8" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 44px; height: 1px; padding-top: 140px; margin-left: 306px;">
|
||||
<div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 16px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
|
||||
Leaf Side
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="328" y="145" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="16px" text-anchor="middle">
|
||||
Leaf S...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<rect x="139" y="110" width="46" height="60" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-dasharray="8 8" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 44px; height: 1px; padding-top: 140px; margin-left: 140px;">
|
||||
<div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 16px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
|
||||
Root Side
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="162" y="145" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="16px" text-anchor="middle">
|
||||
Root S...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
</g>
|
||||
<switch>
|
||||
<g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/>
|
||||
<a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank">
|
||||
<text text-anchor="middle" font-size="10px" x="50%" y="100%">
|
||||
Text is not SVG - cannot display
|
||||
</text>
|
||||
</a>
|
||||
</switch>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 11 KiB |
@@ -0,0 +1,743 @@
|
||||
.. _exp-energymanagement:
|
||||
|
||||
############################
|
||||
Energy Management in EVerest
|
||||
############################
|
||||
|
||||
|
||||
This section provides an in-depth explanation of the energy management concept
|
||||
implemented in EVerest.
|
||||
It covers the representation of energy systems as energy trees, the handling of
|
||||
energy requests and distribution, and the configuration of energy trees within
|
||||
EVerest. The central modules involved in this concept are the
|
||||
:ref:`EnergyManager <everest_modules_EnergyManager>` and
|
||||
:ref:`EnergyNode <everest_modules_EnergyNode>` modules.
|
||||
|
||||
One of its central ideas of EVerest's energymanagement to represent the energy
|
||||
system for which power is distributed as an energy tree containing energy nodes.
|
||||
This enables the representation of arbitrarily complex configurations of
|
||||
physical and logical components within the targeted energy system.
|
||||
|
||||
The following sections present this concept in more detail.
|
||||
|
||||
Energy nodes
|
||||
------------
|
||||
|
||||
An energy node can be either a logical or physical component within the energy
|
||||
system.
|
||||
|
||||
Energy nodes can typically be classified into the following categories:
|
||||
|
||||
* **Physical Components**: Circuit breakers, electrical fuses
|
||||
* **Logical Components**: Limits from OCPP, EEBus, or other external sources
|
||||
* **Charging Stations**: Unidirectional or bidirectional charging stations
|
||||
(or in general any sink or source of power)
|
||||
|
||||
An EVerest module becomes an energy node by implementing the
|
||||
:doc:`energy </reference/interfaces/energy>` interface.
|
||||
|
||||
.. note::
|
||||
|
||||
At the time of writing, two EVerest modules are considered energy nodes as
|
||||
per the above definition: **EnergyNode** and **EvseManager**.
|
||||
More may be added in the future.
|
||||
The **EnergyNode** module fulfills central aspects of the energy management
|
||||
concept.
|
||||
When the term **EnergyNode** is used, it refers to the actual module,
|
||||
whereas **energy node** refers to the general definition above.
|
||||
|
||||
The **EnergyNode** module both requires and provides the
|
||||
:doc:`energy </reference/interfaces/energy>` interface.
|
||||
This design enables the representation of arbitrary energy tree configurations
|
||||
within the EVerest configuration file as explained in detail in a later
|
||||
section.
|
||||
|
||||
Energy trees
|
||||
------------
|
||||
|
||||
Energy trees are used to model various energy system configurations.
|
||||
Below are examples demonstrating how energy systems can be represented in
|
||||
EVerest.
|
||||
|
||||
The simplest energy tree consists of a single leaf node representing an EVSE
|
||||
with a physical hardware capability of 32 A on 3 phases.
|
||||
|
||||
.. image:: images/single_node.drawio.svg
|
||||
:name: single-node-label
|
||||
:align: center
|
||||
|
||||
Typically, the electrical connection of charging stations is protected by a
|
||||
circuit breaker.
|
||||
Adding this to the representation results in:
|
||||
|
||||
.. image:: images/single_node_with_circuit_breaker.drawio.svg
|
||||
:name: single-node-with-circuit-breaker-label
|
||||
:align: center
|
||||
|
||||
In this example, the circuit breaker limits the current to 16 A, even though
|
||||
the EVSE supports 32 A.
|
||||
The module managing power distribution must enforce this limitation.
|
||||
|
||||
For a more complex setup, consider the following example:
|
||||
|
||||
.. image:: images/energy_tree.drawio.svg
|
||||
:name: energy-tree-label
|
||||
:align: center
|
||||
|
||||
Here, a top-level circuit breaker limits the line to 63 A.
|
||||
Two additional circuit breakers protect the lines to two EVSEs, each fused at
|
||||
32 A.
|
||||
EVSE1 can consume 16 A on three phases, while EVSE2 can consume 32 A on three
|
||||
phases.
|
||||
This module accounts for all existing limitations when distributing power to
|
||||
energy nodes.
|
||||
|
||||
All the scenarios above can be represented within EVerest.
|
||||
The power distribution to the EVSEs is managed by this module, considering the
|
||||
limitations of each individual node.
|
||||
How these setups above can be represented in EVerest is presented in section
|
||||
:ref:`'Configuration of energy trees in EVerest' <configuration_of_energy_trees_in_everest>`.
|
||||
|
||||
Energy requests and distribution
|
||||
--------------------------------
|
||||
|
||||
The EnergyManager module requires exactly one module implementing the
|
||||
:doc:`energy </reference/interfaces/energy>` interface.
|
||||
This interface defines:
|
||||
|
||||
* A single variable **energy_flow_request** of type **EnergyFlowRequest**
|
||||
* A single command **enforce_limits**
|
||||
|
||||
The concept of the usage of this interface is further described in the
|
||||
following sections.
|
||||
|
||||
Energy flow request variable
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
The **EnergyFlowRequest** type is recursive, containing a list of child
|
||||
**EnergyFlowRequest**.
|
||||
It defines the power and current requested by an energy node, along with its
|
||||
limitations (e.g., hardware or software constraints).
|
||||
In essence, a module specifies its requirements and limitations through this
|
||||
type, which are then communicated to its parent node.
|
||||
The parent node creates an aggregated **EnergyFlowRequest**, incorporating its
|
||||
own limitations and the requests from its children.
|
||||
|
||||
Energy flow requests are constructed from the leaves to the root of the energy
|
||||
tree, resulting in a single **EnergyFlowRequest** that contains all child
|
||||
requests.
|
||||
This final request serves as input for this module, which calculates the limits
|
||||
to enforce down the tree.
|
||||
|
||||
The following diagram illustrates how energy nodes communicate requests, with
|
||||
green arrows representing energy flow requests:
|
||||
|
||||
.. image:: images/energy_tree_request_and_distribution.drawio.svg
|
||||
:name: energy-tree-request-and-distribution-label
|
||||
:align: center
|
||||
|
||||
Enforcing limits
|
||||
^^^^^^^^^^^^^^^^
|
||||
|
||||
The **enforce_limits** command propagates limits down the tree.
|
||||
Each energy node calls this function on its child nodes to enforce calculated
|
||||
limits.
|
||||
|
||||
Note that the EnergyManager itself does not represent an energy node.
|
||||
It communicates the resulting **EnergyFlowRequest** to a single connected
|
||||
energy node, which then propagates the limits further down the tree.
|
||||
|
||||
Details of the EnergyFlowRequest type
|
||||
-------------------------------------
|
||||
|
||||
Energy nodes may have varying types of limits.
|
||||
To understand this better, consider a zoomed-in view of an energy node:
|
||||
|
||||
.. image:: images/zoom_in_energy_node.drawio.svg
|
||||
:name: zoom-in-energy-node-label
|
||||
:align: center
|
||||
|
||||
In reality, an energy node may have different limits for charging (import) and
|
||||
discharging (export).
|
||||
The **EnergyFlowRequest** type accounts for this distinction:
|
||||
|
||||
* **Import**: Energy flow direction from the grid to the consumer/EV (charging)
|
||||
* **Export**: Energy flow direction from the EV to the grid (discharging)
|
||||
|
||||
Additionally, each direction may have separate limits for the root and leaf
|
||||
sides of the energy node.
|
||||
For example, a DC power supply may have AC limits on the root side (facing the
|
||||
grid) and DC limits on the leaf side (facing the EV).
|
||||
|
||||
Limits may also change over time, which is why the *schedule_import* and
|
||||
*schedule_export* properties are lists containing multiple limit
|
||||
specifications.
|
||||
|
||||
Besides the limiting schedules for import and export, it also contains
|
||||
a *setpoint_schedule*. This is a list (time series) just like the limiting schedules
|
||||
and it may contain setpoints for each timeslot, see below for a more detailed description.
|
||||
|
||||
Each value that is given for a limit or schedule has a source property (string).
|
||||
It is used to track which value is the actual limiting factor for the result in the
|
||||
optimization algorithm.
|
||||
|
||||
This is useful to understand how the result that is sent to the EvseManager is composed.
|
||||
|
||||
Below is an example JSON representation of an **EnergyFlowRequest** for a leaf node:
|
||||
|
||||
.. code-block:: json
|
||||
|
||||
{
|
||||
"children": [],
|
||||
"evse_state": "Charging",
|
||||
"node_type": "Evse",
|
||||
"priority_request": false,
|
||||
"schedule_export": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 10.0,
|
||||
"source": "EVSE1_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 16.0,
|
||||
"source": "EVSE1_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "EVSE1_phase"
|
||||
},
|
||||
"ac_min_current_A": {
|
||||
"value": 0.0,
|
||||
"source": "EVSE1_mincurrent"
|
||||
},
|
||||
"ac_min_phase_count": {
|
||||
"value": 1,
|
||||
"source": "EVSE1_minphase"
|
||||
},
|
||||
"ac_number_of_active_phases": 3,
|
||||
"ac_supports_changing_phases_during_charging": true
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_import": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "EVSE1_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "EVSE1_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "EVSE1_phase"
|
||||
},
|
||||
"ac_min_current_A": {
|
||||
"value": 6.0,
|
||||
"source": "EVSE1_mincurrent"
|
||||
},
|
||||
"ac_min_phase_count": {
|
||||
"value": 1,
|
||||
"source": "EVSE1_minphase"
|
||||
},
|
||||
"ac_number_of_active_phases": 3,
|
||||
"ac_supports_changing_phases_during_charging": true
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_setpoints": [],
|
||||
"uuid": "evse1"
|
||||
}
|
||||
|
||||
Setpoints
|
||||
---------
|
||||
|
||||
Setpoints can optionally be specified for each time slot. Note that the schedule_setpoints list
|
||||
may have different timestamp entries then the limiting schedules.
|
||||
|
||||
A setpoint entry may have an ampere or watt limit or specify a Watt-Grid Frequency table as setpoint.
|
||||
Only one of those three options may be set in each timeslot, but they may be different for each timeslot.
|
||||
|
||||
The priority property is intended to be used if multiple conflicting setpoints exist in the energy tree.
|
||||
This is not implemented for now, the priority property will be ignored for now.
|
||||
|
||||
In most cases a setpoint is not neccessary as the same functionality can also be implemented by setting the
|
||||
limits at the node appropriately.
|
||||
It is especially useful for the bidirectional use case, as it selects whether charging or discharging should be performed:
|
||||
|
||||
E.g. with watt limits of -10kW to +10kW and a setpoint of -2kW, it will discharge at 2kW.
|
||||
A setpoint of +3kW will switch to charging without changing the limits.
|
||||
|
||||
The Frequency based watt limit table can be set through e.g. OCPP 2.1 smart charging. It is intended to
|
||||
specifiy a grid stabilizing mode, in which the charger charges when the grid frequency is too high and discharges
|
||||
to support the grid if the frequency is too low.
|
||||
|
||||
External limits
|
||||
---------------
|
||||
|
||||
External limits can be added to the energy system using EVerest modules
|
||||
implementing the
|
||||
:doc:`external_energy_limits </reference/interfaces/external_energy_limits>`
|
||||
interface.
|
||||
At the time of writing, the **EnergyNode** module is the sole module that
|
||||
provides this functionality.
|
||||
|
||||
The `external_energy_limits` interface defines the **set_external_limits**
|
||||
command, which modules like OCPP or API can use to specify external energy
|
||||
limits.
|
||||
These limits are then considered by the **EnergyNode** module when creating
|
||||
its energy flow request.
|
||||
|
||||
To apply external limits, a module must require the `external_energy_limits`
|
||||
interface and invoke the **set_external_limits** command.
|
||||
The next section details how to configure these limits in EVerest.
|
||||
|
||||
.. _configuration_of_energy_trees_in_everest:
|
||||
|
||||
Configuration of energy trees in EVerest
|
||||
----------------------------------------
|
||||
|
||||
The following section describes how to configure the EVerest configuration file
|
||||
in order to represent the targeted energy tree.
|
||||
In order to do that we are using a complex energy tree example and implement
|
||||
this in the configuration step by step.
|
||||
|
||||
This is the energy tree that we are going to represent in the EVerest
|
||||
configuration:
|
||||
|
||||
.. _energy_tree_complex_label:
|
||||
|
||||
.. image:: images/energy_tree_complex.drawio.svg
|
||||
:alt: Example of a complex energy tree
|
||||
:align: center
|
||||
|
||||
This energy tree represents a setup with two EVSEs.
|
||||
There are two external sources that are able to provide external energy limits:
|
||||
OCPP and the API module.
|
||||
|
||||
OCPP is able to set external limits for each EVSE as well as for the whole
|
||||
charging station.
|
||||
This is indicated by the three arrows labeled with OCPP.
|
||||
The API module is only able to set the limits for the two EVSEs, but not for
|
||||
the whole charging station.
|
||||
|
||||
.. note::
|
||||
|
||||
To improve readability, unrelated module configurations and connections are
|
||||
omitted in the examples below.
|
||||
|
||||
First, we add two EvseManager modules to the config file representing our
|
||||
energy leaf nodes.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
active_modules:
|
||||
evse_manager_1:
|
||||
module: EvseManager
|
||||
evse_manager_2:
|
||||
module: EvseManager
|
||||
|
||||
The two EVSEs can receive limits from OCPP.
|
||||
Therefore, we add two **EnergyNode** modules that represent the sinks for the
|
||||
external limits.
|
||||
The **EnergyNode** module requires a connection to a module implementing the
|
||||
:doc:`energy </reference/interfaces/energy>` interface.
|
||||
This is implemented by connecting the previously added EvseManager modules to it.
|
||||
|
||||
Any external limit applied to the added EnergyNode modules will be applied to
|
||||
its energy child nodes (the EvseManager modules) now.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
active_modules:
|
||||
evse_manager_1:
|
||||
module: EvseManager
|
||||
evse_manager_2:
|
||||
module: EvseManager
|
||||
ocpp_sink_1:
|
||||
module: EnergyNode
|
||||
connections:
|
||||
energy_consumer:
|
||||
- module_id: evse_manager_1
|
||||
implementation_id: energy_grid
|
||||
ocpp_sink_2:
|
||||
module: EnergyNode
|
||||
connections:
|
||||
energy_consumer:
|
||||
- module_id: evse_manager_2
|
||||
implementation_id: energy_grid
|
||||
|
||||
We continue with adding **EnergyNode** modules that represent the sinks for the
|
||||
limits received by the API module.
|
||||
Note that the **EnergyNode** module provides and requires the
|
||||
:doc:`energy </reference/interfaces/energy>` interface at the same time.
|
||||
This allows us to connect **EnergyNode** modules and therefore fullfill the
|
||||
requirement of others.
|
||||
|
||||
Note that the modules **ocpp_sink_1** and **ocpp_sink_2** are connected to the
|
||||
**api_sink_1** and **api_sink_2**.
|
||||
This means that both limits can be considered by this module without
|
||||
overriding each other.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
active_modules:
|
||||
evse_manager_1:
|
||||
module: EvseManager
|
||||
evse_manager_2:
|
||||
module: EvseManager
|
||||
ocpp_sink_1:
|
||||
module: EnergyNode
|
||||
connections:
|
||||
energy_consumer:
|
||||
- module_id: evse_manager_1
|
||||
implementation_id: energy_grid
|
||||
ocpp_sink_2:
|
||||
module: EnergyNode
|
||||
connections:
|
||||
energy_consumer:
|
||||
- module_id: evse_manager_2
|
||||
implementation_id: energy_grid
|
||||
api_sink_1:
|
||||
module: EnergyNode
|
||||
connections:
|
||||
energy_consumer:
|
||||
- module_id: ocpp_sink_1
|
||||
implementation_id: energy_grid
|
||||
api_sink_2:
|
||||
module: EnergyNode
|
||||
connections:
|
||||
energy_consumer:
|
||||
- module_id: ocpp_sink_2
|
||||
implementation_id: energy_grid
|
||||
|
||||
We are now only missing a represention for the complete charging station.
|
||||
Therefore, we add another **EnergyNode** module with a fuse limit of 63 A and
|
||||
we name it **grid_connection_point**.
|
||||
We connect **api_sink_1** and **api_sink_2** to it.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
active_modules:
|
||||
evse_manager_1:
|
||||
module: EvseManager
|
||||
evse_manager_2:
|
||||
module: EvseManager
|
||||
ocpp_sink_1:
|
||||
module: EnergyNode
|
||||
connections:
|
||||
energy_consumer:
|
||||
- module_id: evse_manager_1
|
||||
implementation_id: energy_grid
|
||||
ocpp_sink_2:
|
||||
module: EnergyNode
|
||||
connections:
|
||||
energy_consumer:
|
||||
- module_id: evse_manager_2
|
||||
implementation_id: energy_grid
|
||||
api_sink_1:
|
||||
module: EnergyNode
|
||||
connections:
|
||||
energy_consumer:
|
||||
- module_id: ocpp_sink_1
|
||||
implementation_id: energy_grid
|
||||
api_sink_2:
|
||||
module: EnergyNode
|
||||
connections:
|
||||
energy_consumer:
|
||||
- module_id: ocpp_sink_2
|
||||
implementation_id: energy_grid
|
||||
grid_connection_point:
|
||||
module: EnergyNode
|
||||
config_module:
|
||||
fuse_limit_A: 63
|
||||
phase_count: 3
|
||||
connections:
|
||||
energy_consumer:
|
||||
- module_id: api_sink_1
|
||||
implementation_id: energy_grid
|
||||
- module_id: api_sink_2
|
||||
implementation_id: energy_grid
|
||||
|
||||
|
||||
Now we have the complete energy tree represented, but we're still missing to
|
||||
include the modules that set the external energy limits, so the OCPP and API
|
||||
module.
|
||||
Since these modules require (optionally multiple) connections to modules
|
||||
implementing the
|
||||
:doc:`external_energy_limits </reference/interfaces/external_energy_limits>`
|
||||
interface, we need to also add the connections to the **EnergyNode** modules we
|
||||
have added previously.
|
||||
Finally, we also add the **EnergyManager** module and connect the
|
||||
**grid_connection_point** to it.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
active_modules:
|
||||
evse_manager_1:
|
||||
module: EvseManager
|
||||
evse_manager_2:
|
||||
module: EvseManager
|
||||
ocpp_sink_1:
|
||||
module: EnergyNode
|
||||
connections:
|
||||
energy_consumer:
|
||||
- module_id: evse_manager_1
|
||||
implementation_id: energy_grid
|
||||
ocpp_sink_2:
|
||||
module: EnergyNode
|
||||
connections:
|
||||
energy_consumer:
|
||||
- module_id: evse_manager_2
|
||||
implementation_id: energy_grid
|
||||
api_sink_1:
|
||||
module: EnergyNode
|
||||
connections:
|
||||
energy_consumer:
|
||||
- module_id: ocpp_sink_1
|
||||
implementation_id: energy_grid
|
||||
api_sink_2:
|
||||
module: EnergyNode
|
||||
connections:
|
||||
energy_consumer:
|
||||
- module_id: ocpp_sink_2
|
||||
implementation_id: energy_grid
|
||||
grid_connection_point:
|
||||
module: EnergyNode
|
||||
config_module:
|
||||
fuse_limit_A: 63
|
||||
phase_count: 3
|
||||
connections:
|
||||
energy_consumer:
|
||||
- module_id: api_sink_1
|
||||
implementation_id: energy_grid
|
||||
- module_id: api_sink_2
|
||||
implementation_id: energy_grid
|
||||
ocpp:
|
||||
module: OCPP
|
||||
connections:
|
||||
evse_energy_sink:
|
||||
- module_id: grid_connection_point
|
||||
implementation_id: external_limits
|
||||
- module_id: ocpp_sink_1
|
||||
implementation_id: external_limits
|
||||
- module_id: ocpp_sink_2
|
||||
implementation_id: external_limits
|
||||
api:
|
||||
module: API
|
||||
connections:
|
||||
evse_energy_sink:
|
||||
- module_id: api_sink_1
|
||||
implementation_id: external_limits
|
||||
- module_id: api_sink_2
|
||||
implementation_id: external_limits
|
||||
energy_manager:
|
||||
module: EnergyManager
|
||||
connections:
|
||||
energy_trunk:
|
||||
- module_id: grid_connection_point
|
||||
implementation_id: energy_grid
|
||||
|
||||
|
||||
We have now added all the required modules and connections to represent the
|
||||
energy tree example :ref:`shown above <energy_tree_complex_label>`.
|
||||
One important detail is still missing, which is the module mapping.
|
||||
For detailed information about the module mapping please see
|
||||
:doc:`3-tier module mappings </explanation/tier-module-mappings>`.
|
||||
|
||||
Since the connections of a module in the EVerest config does not automatically
|
||||
map to a specific EVSE (or the whole charging station, represented by EVSE#0),
|
||||
the **EnergyNode** modules must have a module mapping.
|
||||
This allows the modules that make use of the **set_external_limits** command to
|
||||
call it for the correct node.
|
||||
|
||||
Modules like OCPP and API can only know at which requirement the command
|
||||
**set_external_limit** shall be called in case the energy node that is
|
||||
connected to it has a specified module mapping in the EVerest config.
|
||||
|
||||
This is a full example including the module mappings:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
active_modules:
|
||||
evse_manager_1:
|
||||
module: EvseManager
|
||||
mapping:
|
||||
module:
|
||||
evse: 1
|
||||
evse_manager_2:
|
||||
module: EvseManager
|
||||
mapping:
|
||||
module:
|
||||
evse: 2
|
||||
ocpp_sink_1:
|
||||
module: EnergyNode
|
||||
mapping:
|
||||
module:
|
||||
evse: 1
|
||||
connections:
|
||||
energy_consumer:
|
||||
- module_id: evse_manager_1
|
||||
implementation_id: energy_grid
|
||||
ocpp_sink_2:
|
||||
module: EnergyNode
|
||||
mapping:
|
||||
module:
|
||||
evse: 2
|
||||
connections:
|
||||
energy_consumer:
|
||||
- module_id: evse_manager_2
|
||||
implementation_id: energy_grid
|
||||
api_sink_1:
|
||||
module: EnergyNode
|
||||
mapping:
|
||||
module:
|
||||
evse: 1
|
||||
connections:
|
||||
energy_consumer:
|
||||
- module_id: ocpp_sink_1
|
||||
implementation_id: energy_grid
|
||||
api_sink_2:
|
||||
module: EnergyNode
|
||||
mapping:
|
||||
module:
|
||||
evse: 2
|
||||
connections:
|
||||
energy_consumer:
|
||||
- module_id: ocpp_sink_2
|
||||
implementation_id: energy_grid
|
||||
grid_connection_point:
|
||||
module: EnergyNode
|
||||
mapping:
|
||||
module:
|
||||
evse: 0
|
||||
config_module:
|
||||
fuse_limit_A: 63
|
||||
phase_count: 3
|
||||
connections:
|
||||
energy_consumer:
|
||||
- module_id: api_sink_1
|
||||
implementation_id: energy_grid
|
||||
- module_id: api_sink_2
|
||||
implementation_id: energy_grid
|
||||
ocpp:
|
||||
module: OCPP
|
||||
connections:
|
||||
evse_energy_sink:
|
||||
- module_id: grid_connection_point
|
||||
implementation_id: external_limits
|
||||
- module_id: ocpp_sink_1
|
||||
implementation_id: external_limits
|
||||
- module_id: ocpp_sink_2
|
||||
implementation_id: external_limits
|
||||
api:
|
||||
module: API
|
||||
connections:
|
||||
evse_energy_sink:
|
||||
- module_id: api_sink_1
|
||||
implementation_id: external_limits
|
||||
- module_id: api_sink_2
|
||||
implementation_id: external_limits
|
||||
energy_manager:
|
||||
module: EnergyManager
|
||||
connections:
|
||||
energy_trunk:
|
||||
- module_id: grid_connection_point
|
||||
implementation_id: energy_grid
|
||||
|
||||
Energy distribution
|
||||
-------------------
|
||||
|
||||
The EnergyManager module implements an algorithm to distribute available power
|
||||
to energy leaf nodes:
|
||||
|
||||
* It calculates and enforces limits for each energy leaf node in the tree.
|
||||
* It ensures that no node exceeds its specified limits for current, power, or
|
||||
phase count.
|
||||
* It distributes power equally among child nodes, if their collective request
|
||||
exceeds the parent node's limits.
|
||||
* The algorithm prefers charging over discharging if the specified limits allow
|
||||
for both.
|
||||
* It supports phase switching between single-phase and three-phase modes,
|
||||
optimizing power usage for low-demand scenarios if
|
||||
**switch_3ph1ph_while_charging_mode** is enabled.
|
||||
|
||||
Phase switching
|
||||
---------------
|
||||
|
||||
This module supports switching between single-phase (1ph) and three-phase (3ph)
|
||||
configurations during AC charging.
|
||||
|
||||
.. warning::
|
||||
|
||||
Some vehicles (such as the first generation of Renault Zoe) may be
|
||||
permanently damaged when switching from 1ph to 3ph during charging.
|
||||
Use at your own risk!
|
||||
|
||||
To use this feature, several configurations must be enabled across different
|
||||
EVerest modules:
|
||||
|
||||
- **EvseManager**: Adjust the following configuration options to your needs:
|
||||
- ``switch_3ph1ph_delay_s``
|
||||
- ``switch_3ph1ph_cp_state``
|
||||
- **Module implementing the `evse_board_support </reference/interfaces/evse_board_support>` interface:**
|
||||
- Set ``supports_changing_phases_during_charging`` to ``true`` in the reported capabilities.
|
||||
- Define the minimum number of phases as 1 and the maximum as 3.
|
||||
- Ensure the ``ac_switch_three_phases_while_charging`` command is implemented.
|
||||
- **EnergyManager**: Adjust the following config options to your needs:
|
||||
- switch_3ph1ph_while_charging_mode
|
||||
- switch_3ph1ph_max_nr_of_switches_per_session
|
||||
- switch_3ph1ph_switch_limit_stickyness
|
||||
- switch_3ph1ph_power_hysteresis_W
|
||||
- switch_3ph1ph_time_hysteresis_s
|
||||
|
||||
Refer to the manifest.yaml for documentation of these configuration options.
|
||||
|
||||
If all of these are properly configured, the EnergyManager will handle the
|
||||
1ph/3ph switching.
|
||||
To enable this, an external limit must be set.
|
||||
There are two ways to configure the limit:
|
||||
|
||||
1. **Watt-based limit (preferred option):** The limit is set in Watts (not
|
||||
Amperes), even though this involves AC charging.
|
||||
This provides the EnergyManager with the flexibility to decide when to
|
||||
switch.
|
||||
The limit can be defined by an OCPP schedule or through an additional
|
||||
EnergyNode.
|
||||
2. **Ampere-based limit:** The limit is defined in Amperes, along with a
|
||||
restriction on the number of phases (e.g., ``min_phase=1`` and
|
||||
``max_phase=1``).
|
||||
This enforces switching and allows external control over the switching time,
|
||||
but the EnergyManager loses its ability to choose when to switch.
|
||||
|
||||
Best practices
|
||||
^^^^^^^^^^^^^^
|
||||
|
||||
In general, this feature works best in a configuration with 32 A per phase and
|
||||
a Watt-based limit.
|
||||
In this setup, there is an overlap between the single phase and three phase
|
||||
domain:
|
||||
|
||||
- Single-phase charging: 1.3 kW to 7.4 kW
|
||||
- Three-phase charging: 4.2 kW to 22 kW (or 11 kW)
|
||||
|
||||
This avoids switching too often in the most elegant way.
|
||||
Other methods to reduce the number of switch cycles can be configured in the
|
||||
EnergyManager, see config options above.
|
||||
|
||||
Current limitations
|
||||
-------------------
|
||||
|
||||
* The algorithm does not account for real-time power meter readings from
|
||||
individual nodes.
|
||||
* It does not redistribute unused power when the actual consumption is below
|
||||
the assigned target value.
|
||||
Reference in New Issue
Block a user