515 lines
20 KiB
HTML
515 lines
20 KiB
HTML
<!doctype html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
|
<meta name="description" content="EV Charge Controller">
|
|
<meta name="author" content="andig">
|
|
<meta name="apple-mobile-web-app-capable" content="yes">
|
|
<meta name="apple-mobile-web-app-status-bar-style" content="black">
|
|
|
|
<link rel="apple-touch-icon" sizes="180x180" href="ico/apple-touch-icon.png">
|
|
<link rel="icon" type="image/png" sizes="32x32" href="ico/favicon-32x32.png">
|
|
<link rel="icon" type="image/png" sizes="16x16" href="ico/favicon-16x16.png">
|
|
<link rel="manifest" href="ico/site.webmanifest">
|
|
<link rel="mask-icon" href="ico/safari-pinned-tab.svg" color="#5bbad5">
|
|
<link rel="shortcut icon" href="ico/favicon.ico">
|
|
<meta name="msapplication-TileColor" content="#2b5797">
|
|
<meta name="msapplication-config" content="ico/browserconfig.xml">
|
|
<meta name="theme-color" content="#ffffff">
|
|
|
|
<title>evcc</title>
|
|
|
|
<!-- CSS -->
|
|
<link href="../node_modules/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet">
|
|
<link href="../node_modules/@fortawesome/fontawesome-free/css/fontawesome.min.css" rel="stylesheet">
|
|
<link href="../node_modules/@fortawesome/fontawesome-free/css/regular.min.css" rel="stylesheet">
|
|
<link href="../node_modules/@fortawesome/fontawesome-free/css/solid.min.css" rel="stylesheet">
|
|
<link href="./css/app.css" rel="stylesheet">
|
|
</head>
|
|
<body>
|
|
|
|
<div id="app">
|
|
<nav class="navbar navbar-expand-lg navbar-light bg-light">
|
|
<a class="navbar-brand" href="https://github.com/andig/evcc"><i class="text-primary fas fa-leaf mr-2"></i>evcc</a>
|
|
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNavAltMarkup"
|
|
aria-controls="navbarNavAltMarkup" aria-expanded="false" aria-label="Toggle navigation">
|
|
<span class="navbar-toggler-icon"></span>
|
|
</button>
|
|
<div class="collapse navbar-collapse" id="navbarNavAltMarkup">
|
|
<div class="navbar-nav">
|
|
<router-link class="nav-item nav-link pb-1" to="/">Laden</router-link>
|
|
<router-link class="nav-item nav-link pb-1" to="/config">Konfiguration</router-link>
|
|
<a class="nav-item nav-link pb-1" href="https://github.com/andig/evcc/issues" target="_blank">Support</a>
|
|
</div>
|
|
</div>
|
|
</nav>
|
|
|
|
<version installed="[[.Version]]" id="version-bar"></version>
|
|
|
|
<message-toasts></message-toasts>
|
|
<router-view></router-view>
|
|
</div>
|
|
|
|
<script type="text/x-template" id="version-template">
|
|
<div class="collapse" ref="bar">
|
|
<div class="row p-3 bg-warning">
|
|
<div class="col-12">
|
|
Neue Version verfügbar!
|
|
Installiert: {{installed}}.
|
|
Verfügbar: {{state.availableVersion}}.
|
|
<b class="px-3" data-toggle="collapse" data-target="#release-notes" v-if="state.releaseNotes">
|
|
<a href="#" class="text-body">
|
|
Release notes
|
|
<i class="fas fa-chevron-up" v-if="notesShown"></i>
|
|
<i class="fas fa-chevron-down" v-else></i>
|
|
</a>
|
|
</b>
|
|
<b class="px-3">
|
|
<a v-bind:href="'https://github.com/andig/evcc/releases/tag/'+state.availableVersion" class="text-body">
|
|
Download <i class="fas fa-chevron-down"></i>
|
|
</a>
|
|
</b>
|
|
<button type="button" class="close float-right" style="margin-top: -2px" aria-label="Close" data-toggle="collapse" data-target="#version-bar">
|
|
<span aria-hidden="true">×</span>
|
|
</button>
|
|
</div>
|
|
</div>
|
|
<div class="row p-3 bg-light collapse" id="release-notes" ref="notes">
|
|
<div class="col-12" v-html="state.releaseNotes"></div>
|
|
</div>
|
|
</div>
|
|
</script>
|
|
|
|
<div id="toasts">
|
|
<div aria-atomic="true" style="position: absolute; top: 4rem; right: 0.5rem;">
|
|
<!-- Position it -->
|
|
<message-toast v-for="item in items" v-bind:item="item" :id="'message-id-'+item.id" :key="item.id">
|
|
</message-toast>
|
|
</div>
|
|
</div>
|
|
|
|
<script type="text/x-template" id="message-template">
|
|
<div class="toast" data-delay="10000" v-bind:data-autohide="true">
|
|
<div class="toast-header">
|
|
<strong class="mr-auto" v-if="item.type != 'warn'"><i class="text-danger fas fa-exclamation-triangle"></i> Error</strong>
|
|
<strong class="mr-auto" v-if="item.type == 'warn'"><i class="text-warning fas fa-exclamation-triangle"></i> Warning</strong>
|
|
<small v-if="item.status">HTTP {{item.status}}</small>
|
|
<button type="button" class="ml-2 mb-1 close" data-dismiss="toast" aria-label="Close">
|
|
<span aria-hidden="true">×</span>
|
|
</button>
|
|
</div>
|
|
<div class="toast-body">{{item.message}}</div>
|
|
</div>
|
|
</script>
|
|
|
|
<script type="text/x-template" id="main-template">
|
|
<div class="container">
|
|
<site v-bind:state="state" v-if="configured('[[.Configured]]')"></site>
|
|
<div v-else>
|
|
<div class="row py-5">
|
|
<div class="col12">
|
|
<p class="h1 pt-5 pb-2 border-bottom">Willkommen bei evcc</p>
|
|
<p class="lead pt-2"><b>evcc</b> ist dient zur flexiblen Ladesteuerung von Elektrofahrzeugen.</p>
|
|
<p class="pt-2"> Es sieht aus, als wäre Dein <b>evcc</b> noch nicht konfiguriert. Um <b>evcc</b> zu
|
|
konfigurieren sind die folgenden Schritte notwendig:
|
|
<ol class="pt-2">
|
|
<li>Erzeugen einer Konfigurationsdatei mit Namen <code>evcc.yaml</code>. Die
|
|
Standardkonfiguration <code>evcc.dist.yaml</code> kann dafür als Vorlage dienen (<a
|
|
href="https://github.com/andig/evcc/blob/master/evcc.dist.yaml">Download</a>).</li>
|
|
<li>Konfiguration der Wallbox als <code>chargers</code>.</li>
|
|
<li>Konfiguration des EVU Zählers und evtl. weiterer Zähler unter <code>meters</code>.</li>
|
|
<li>Konfiguration des Netzanschlusses unter <code>site</code>. In einer Site wird der Netzanschluss mit
|
|
dem konfigurierten EVU Zähler (<code>meter</code>) verbunden.</li>
|
|
<li>Konfiguration eines Ladepunktes unter <code>loadpoints</code>. In einem Ladepunkt wird die
|
|
konfigurierte Wallbox (<code>charger</code>) mit dem Ladepunkt verbunden.</li>
|
|
<li>Start von <b>evcc</b> mit der neu erstellten Konfiguration: <code>evcc -c evcc.yaml</code></li>
|
|
</ol>
|
|
</p>
|
|
<p>Minimale Beispielkonfiguration für <b>evcc</b>:</p>
|
|
<p>
|
|
<code><pre class="mx-3">
|
|
uri: localhost:7070 # Adresse für UI
|
|
interval: 10s # Regelintervall
|
|
meters:
|
|
- name: evu-zähler
|
|
type: ... # Detailkonfiguration des EVU Zählers
|
|
- name: ladezähler
|
|
type: ... # Detailkonfiguration des Ladezählers (optional)
|
|
chargers:
|
|
- name: wallbox
|
|
type: ... # Detailkonfiguration der Wallbox
|
|
site:
|
|
title: Home
|
|
meters:
|
|
grid: evu-zähler # EVU Zähler
|
|
loadpoints:
|
|
- title: Ladepunkt # ui display name
|
|
charger: wallbox # charger
|
|
meters:
|
|
charge: ladezähler # Ladezählers (optional)
|
|
</pre></code>
|
|
</p>
|
|
<p>Viel Spass mit <b>evcc</b>! Bei Problemen kannst Du uns auf <a href="https://github.com/andig/evcc/issues">GitHub</a> erreichen.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</script>
|
|
|
|
<script type="text/x-template" id="site-template">
|
|
<div>
|
|
<div class="row">
|
|
<div class="d-none d-md-flex col-12 col-md-4 mt-md-4 align-items-end">
|
|
<p class="h1">{{state.title||"Home"}}</p>
|
|
</div>
|
|
<div class="col-12 col-md-8 mt-md-4" v-if="multi">
|
|
<site-details v-bind:state="state"></site-details>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="row d-none d-md-flex border-bottom"></div>
|
|
|
|
<div class="row" v-if="!multi">
|
|
<div class="d-none d-md-block col-md-4"></div>
|
|
<div class="col-12 col-md-8">
|
|
<site-details v-bind:state="state"></site-details>
|
|
</div>
|
|
</div>
|
|
|
|
<loadpoint v-for="(loadpoint,id) in state.loadpoints"
|
|
v-bind:id="id" :key="id" :state="loadpoint" :pv="state.gridConfigured" :multi="multi">
|
|
</loadpoint>
|
|
</div>
|
|
</script>
|
|
|
|
<script type="text/x-template" id="site-details-template">
|
|
<div class="row">
|
|
<div class="col-6 col-md-3 mt-3" v-if="state.gridConfigured">
|
|
<div class="mb-2 value" v-if="state.gridPower > 0">
|
|
Bezug <i class="text-primary fas fa-arrow-down"></i>
|
|
</div>
|
|
<div class="mb-2 value" v-else>
|
|
Einspeisung <i class="text-primary fas fa-arrow-up"></i>
|
|
</div>
|
|
<h2 class="value">
|
|
{{fmt(state.gridPower)}} <small class="text-muted">{{fmtUnit(state.gridPower)}}W</small>
|
|
</h2>
|
|
</div>
|
|
<div class="col-6 col-md-3 mt-3" v-if="state.pvConfigured">
|
|
<div class="mb-2 value">
|
|
Erzeugung <i class="fas fa-sun" v-bind:class="{'text-primary':state.pvPower<0,'text-muted':state.pvPower>=0}"></i>
|
|
</div>
|
|
<h2 class="value">
|
|
{{fmt(state.pvPower)}} <small class="text-muted">{{fmtUnit(state.pvPower)}}W</small>
|
|
</h2>
|
|
</div>
|
|
<div class="d-md-block col-6 col-md-3 mt-3" v-bind:class="{'d-none':!state.batterySoC}" v-if="state.batteryConfigured">
|
|
<div class="mb-2 value">Batterie
|
|
<i class="text-primary fas" v-bind:class="{'fa-arrow-down':state.batteryPower<0, 'fa-arrow-up':state.batteryPower>0}"></i>
|
|
</div>
|
|
<h2 class="value">
|
|
{{fmt(state.batteryPower)}} <small class="text-muted">{{fmtUnit(state.batteryPower)}}W</small>
|
|
</h2>
|
|
</div>
|
|
<div class="col-6 col-md-3 mt-3" v-if="state.batterySoC">
|
|
<div class="mb-2 value">SoC
|
|
<i class="text-primary fas fa-battery-three-quarters" v-bind:class="{'text-primary':state.batteryPower>0,'text-muted':state.batteryPower<0}"></i>
|
|
</div>
|
|
<h2 class="value">
|
|
{{state.batterySoC}} <small class="text-muted">%</small>
|
|
</h2>
|
|
</div>
|
|
</div>
|
|
</script>
|
|
|
|
<script type="text/x-template" id="loadpoint-template">
|
|
<div>
|
|
<div class="row" v-if="multi">
|
|
<div class="col-12 col-md-4 d-md-flex mt-3 mt-md-5 align-items-end">
|
|
<span class="h1 align-bottom">{{state.title||"Ladepunkt"}}</span>
|
|
</div>
|
|
|
|
<div class="col-12 col-md-8 d-none d-md-block mt-3 mt-md-5">
|
|
<loadpoint-details v-bind:state="state"></loadpoint-details>
|
|
</div>
|
|
|
|
<div class="col-12 d-md-none">
|
|
<div class="row mt-3 pb-3 bg-light">
|
|
<div class="col-12 mt-3">
|
|
<mode class="w-100" v-bind:mode="state.mode" :pv="pv" v-on:updated="targetMode"></mode>
|
|
</div>
|
|
<div class="col-12 mt-3" v-if="hasTargetSoC">
|
|
<soc class="w-100" v-bind:soc="state.targetSoC" :levels="state.socLevels" v-on:updated="targetSoC"></soc>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="row d-none d-md-flex mt-5 py-3 pb-4 text-center bg-light" v-if="!multi">
|
|
<div class="mt-3" v-bind:class="{'col-md-6':hasTargetSoC,'col-md-12':!hasTargetSoC}">
|
|
<mode v-bind:mode="state.mode" :pv="pv" :caption="true" v-on:updated="targetMode"></mode>
|
|
</div>
|
|
<div class="col-md-6 mt-3" v-if="hasTargetSoC">
|
|
<soc v-bind:soc="state.targetSoC" :levels="state.socLevels" :caption="true" v-on:updated="targetSoC"></soc>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="row d-md-none mt-2 pb-3 bg-light" v-if="!multi">
|
|
<div class="col-12 mt-3">
|
|
<mode class="w-100" v-bind:mode="state.mode" :pv="pv" v-on:updated="targetMode"></mode>
|
|
</div>
|
|
<div class="col-12 mt-3" v-if="hasTargetSoC">
|
|
<soc class="w-100" v-bind:soc="state.targetSoC" :levels="state.socLevels" v-on:updated="targetSoC"></soc>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="row" v-if="!multi">
|
|
<div class="col-12 col-md-4 d-none d-md-flex mt-3 mt-md-5 ">
|
|
<span class="h1 ">{{state.title||"Ladepunkt"}}</span>
|
|
</div>
|
|
<div class="col-12 col-md-8 mt-3 mt-md-5 align-items-end"
|
|
v-if="state.remoteDisabled">
|
|
<h1 class="d-md-inline d-none">
|
|
<span class="badge badge-warning font-base" v-if="state.remoteDisabled == 'soft'">
|
|
Adaptives PV-Laden deaktiviert durch {{state.remoteDisabledSource}}
|
|
</span>
|
|
<span class="badge badge-danger font-base" v-if="state.remoteDisabled == 'hard'">
|
|
Deaktiviert durch {{state.remoteDisabledSource}}
|
|
</span>
|
|
</h1>
|
|
<span class="d-md-none badge badge-warning font-base" v-if="state.remoteDisabled == 'soft'">
|
|
Adaptives PV-Laden deaktiviert durch {{state.remoteDisabledSource}}
|
|
</span>
|
|
<span class="d-md-none badge badge-danger font-base" v-if="state.remoteDisabled == 'hard'">
|
|
Deaktiviert durch {{state.remoteDisabledSource}}
|
|
</span>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="row border-bottom d-none d-md-block"></div>
|
|
|
|
<div class="row">
|
|
<div class="col-12 col-md-4 mt-3 mb-3 mb-md-0">
|
|
<vehicle v-bind:state="state"></vehicle>
|
|
</div>
|
|
|
|
<div class="col-12 col-md-4 d-none d-md-block mt-3" v-if="multi">
|
|
<div class="mb-2">Modus</div>
|
|
<mode class="btn-group-sm" v-bind:mode="state.mode" :pv="pv" v-on:updated="targetMode"></mode>
|
|
</div>
|
|
<div class="col-12 col-md-4 d-none d-md-block mt-3" v-if="multi && hasTargetSoC">
|
|
<div class="mb-2">Ladeziel</div>
|
|
<soc class="btn-group-sm" v-bind:soc="state.targetSoC" :levels="state.socLevels" v-on:updated="targetSoC"></soc>
|
|
</div>
|
|
|
|
<div class="col-md-8 d-none d-md-block" v-if="!multi">
|
|
<loadpoint-details v-bind:state="state"></loadpoint-details>
|
|
</div>
|
|
|
|
<div class="col-12 d-md-none">
|
|
<loadpoint-details v-bind:state="state"></loadpoint-details>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</script>
|
|
|
|
<script type="text/x-template" id="loadpoint-details-template">
|
|
<div class="row">
|
|
<div class="col-6 col-md-3 mt-3">
|
|
<div class="mb-2 value">Leistung
|
|
<i class="text-primary fa fa-temperature-low ml-1" v-if="state.climater=='heating'"></i>
|
|
<i class="text-primary fa fa-temperature-high ml-1" v-else-if="state.climater=='cooling'"></i>
|
|
<i class="text-primary fa fa-thermometer-half ml-1" v-else-if="state.climater=='on'"></i>
|
|
</div>
|
|
<h2 class="value">
|
|
{{fmt(state.chargePower)}} <small class="text-muted">{{fmtUnit(state.chargePower)}}W</small>
|
|
</h2>
|
|
</div>
|
|
<div class="col-6 col-md-3 mt-3">
|
|
<div class="mb-2 value">Geladen</div>
|
|
<h2 class="value">
|
|
{{fmt(state.chargedEnergy)}} <small class="text-muted">{{fmtUnit(state.chargedEnergy)}}Wh</small>
|
|
</h2>
|
|
</div>
|
|
|
|
<div class="col-6 col-md-3 mt-3">
|
|
<div class="mb-2 value">Dauer</div>
|
|
<h2 class="value">
|
|
{{fmtShortDuration(state.chargeDuration)}} <small
|
|
class="text-muted">{{fmtShortDurationUnit(state.chargeDuration)}}</small>
|
|
</h2>
|
|
</div>
|
|
|
|
<div class="col-6 col-md-3 mt-3" v-if="state.soc">
|
|
<div class="mb-2 value">Restzeit</div>
|
|
<h2 class="value">
|
|
{{fmtShortDuration(state.chargeEstimate)}} <small
|
|
class="text-muted">{{fmtShortDurationUnit(state.chargeEstimate)}}</small>
|
|
</h2>
|
|
</div>
|
|
</div>
|
|
</script>
|
|
|
|
<script type="text/x-template" id="mode-template">
|
|
<div class="btn-group btn-group-toggle bg-white shadow-none">
|
|
<label class="btn btn-outline-primary value disabled caption font-weight-bold" v-if="caption">
|
|
Modus
|
|
</label>
|
|
<label class="btn btn-outline-primary" v-bind:class="{active:mode=='off',first:!caption}">
|
|
<input type="radio" value="off" v-on:click="targetMode('off')">Stop
|
|
</label>
|
|
<label class="btn btn-outline-primary" v-bind:class="{active:mode=='now'}">
|
|
<input type="radio" value="now" v-on:click="targetMode('now')">Sofort
|
|
</label>
|
|
<label class="btn btn-outline-primary" v-bind:class="{active:mode=='minpv'}" v-if="pv">
|
|
<input type="radio" value="minpv" v-on:click="targetMode('minpv')">
|
|
<span class="d-inline d-lg-none">Min</span>
|
|
<span class="d-none d-lg-inline">Min + PV</span>
|
|
</label>
|
|
<label class="btn btn-outline-primary" v-bind:class="{active:mode=='pv'}" v-if="pv">
|
|
<input type="radio" value="pv" v-on:click="targetMode('pv')">
|
|
<span class="d-inline d-md-none">PV</span>
|
|
<span class="d-none d-md-inline">Nur PV</span>
|
|
</label>
|
|
</div>
|
|
</script>
|
|
|
|
<script type="text/x-template" id="soc-template">
|
|
<div class="btn-group btn-group-toggle bg-white shadow-none">
|
|
<label class="btn btn-outline-primary disabled caption font-weight-bold" v-if="caption">
|
|
Ladeziel
|
|
</label>
|
|
<label class="btn btn-outline-primary" v-for="(level,id) in levelsOrDefault" v-bind:level="level" :id="id"
|
|
:class="{active:soc==level,first:!caption&&id==0}">
|
|
<input type="radio" v-bind:value="level" v-on:click="targetSoC(level)">{{level}}%
|
|
</label>
|
|
</div>
|
|
</script>
|
|
|
|
<script type="text/x-template" id="vehicle-template">
|
|
<div>
|
|
<div class="mb-2">{{state.socTitle||"Fahrzeug"}}</div>
|
|
<div class="progress" style="height: 24px; font-size:100%; margin-top:16px">
|
|
<div class="progress-bar" role="progressbar" v-bind:class="{
|
|
'progress-bar-striped': state.charging,
|
|
'progress-bar-animated': state.charging,
|
|
'bg-light': !state.connected,
|
|
'text-secondary': !state.connected,
|
|
'bg-warning': state.connected && minSoCActive,
|
|
}" v-bind:style="{width: socChargeDisplayWidth+'%'}">{{socChargeDisplayValue}}
|
|
</div>
|
|
<div class="progress-bar" role="progressbar" v-bind:class="{
|
|
'progress-bar-striped': state.charging,
|
|
'progress-bar-animated': state.charging,
|
|
'bg-warning': true,
|
|
'bg-muted': true,
|
|
}" v-bind:style="{width: minSoCRemainingDisplayWidth+'%'}"
|
|
v-if="minSoCActive && (socChargeDisplayWidth < 100)">
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</script>
|
|
|
|
<script type="text/x-template" id="config-template">
|
|
<div class="container">
|
|
<!-- <h1 class="display-4 pt-3 mx-auto text-center">Konfiguration</h1>
|
|
<p class="lead mx-auto text-center">Details der Fahrzeug-, Wallbox- und Zählerkonfiguration.</p> -->
|
|
|
|
<div class="row mt-4 border-bottom">
|
|
<div class="col-12">
|
|
<p class="h1">{{state.title||"Home"}}</p>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="row h5">
|
|
<div class="col-md-4"></div>
|
|
<div class="col-6 col-md-2 py-3">
|
|
Netzzähler:
|
|
<span class="text-primary" v-if="state.gridConfigured">✓</span>
|
|
<span class="text-primary" v-else>—</span>
|
|
</div>
|
|
<div class="col-6 col-md-2 py-3">
|
|
PV Zähler:
|
|
<span class="text-primary" v-if="state.pvConfigured">✓</span>
|
|
<span class="text-primary" v-else>—</span>
|
|
</div>
|
|
<div class="col-6 col-md-2 py-3">
|
|
Batteriezähler:
|
|
<span class="text-primary" v-if="state.batteryConfigured">✓</span>
|
|
<span class="text-primary" v-else>—</span>
|
|
</div>
|
|
</div>
|
|
|
|
<div v-for="(loadpoint,id) in state.loadpoints" v-bind:loadpoint="loadpoint" :id="'loadpoint-'+id">
|
|
<div class="row mt-4 border-bottom">
|
|
<div class="col-12">
|
|
<p class="h1">{{loadpoint.title||"Ladepunkt"}}</p>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="row h5">
|
|
<div class="col-md-4"></div>
|
|
<div class="col-6 col-md-2 py-3">
|
|
Ladezähler:
|
|
<span class="text-primary" v-if="loadpoint.chargeConfigured">✓</span>
|
|
<span class="text-primary" v-else>—</span>
|
|
</div>
|
|
<div class="col-6 col-md-2 py-3">
|
|
Phasen:
|
|
<span class="text-primary">{{loadpoint.phases}}p</span>
|
|
</div>
|
|
<div class="col-6 col-md-2 py-3">
|
|
Min. Strom:
|
|
<span class="text-primary">{{loadpoint.minCurrent}}A</span>
|
|
</div>
|
|
<div class="col-6 col-md-2 py-3">
|
|
Max. Strom:
|
|
<span class="text-primary">{{loadpoint.maxCurrent}}A</span>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="row h5">
|
|
<div class="col-md-4"></div>
|
|
<div class="col-md-8 h2">
|
|
<div class="row py-3 h2 border-bottom">
|
|
<div class="col-12">
|
|
Fahrzeug
|
|
</div>
|
|
</div>
|
|
<div class="row h5">
|
|
<div class="col-6 py-3">
|
|
Modell:
|
|
<span class="text-primary">{{loadpoint.socTitle||"—"}}</span>
|
|
</div>
|
|
<div class="col-6 py-3">
|
|
Kapazität:
|
|
<span class="text-primary">{{loadpoint.socCapacity}}kWh</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
</script>
|
|
|
|
<footer class="pt-4 pb-2 pt-md-5 pb-md-4 mt-3 mt-md-5 border-top">
|
|
<div class="container">
|
|
<div class="row">
|
|
<div class="col-6">
|
|
<small class="text-muted">
|
|
<a href="https://github.com/andig/evcc/releases/tag/[[.Version]]">[[.Version]]</a>
|
|
(<a href="https://github.com/andig/evcc/commit/[[.Commit]]">[[.Commit]]</a>)
|
|
</small>
|
|
</div>
|
|
<div class="col-6 text-right">
|
|
<small class="text-muted">© 2020</small>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</footer>
|
|
<script src="js/app.js"></script>
|
|
|
|
</body>
|
|
</html>
|