#───────────────────────────────────────────────────────────────────────────────
# Description:
#───────────────────────────────────────────────────────────────────────────────
# View to configure and display scheduled charging using the EV Smart Charging
# integration (https://github.com/jonasbkarlsson/ev_smart_charging/)
#
#───────────────────────────────────────────────────────────────────────────────
# Custom components required:
#───────────────────────────────────────────────────────────────────────────────
# - vertical-stack-in-card - https://github.com/ofekashery/vertical-stack-in-card
# - apex-charts - https://github.com/RomRider/apexcharts-card
# - bar-card - https://github.com/custom-cards/bar-card
icon: mdi:car-electric
title: EV Smart Charging
panel: true
cards:
- type: horizontal-stack
cards:
##########################################################################
### Display planned charging ###
##########################################################################
- type: custom:vertical-stack-in-card
cards:
- type: markdown
content: >
### Status
{% set status = states.sensor.ev_smart_charging_status.state -%}
{% set status = status | replace('Waiting for charging to begin','Venter på start af planlagt opladning den ') -%}
{% set status = status | replace("Waiting for new prices","Venter på opdatering af elpriser") -%}
{% set status = status | replace("No charging planned","Ingen opladning er planlagt") -%}
{% set status = status | replace("Charging","Opladning") -%}
{% set status = status | replace("Keeping charger on","Opladning afsluttes ikke") -%}
{% set status = status | replace("Disconnected","Bil er ikke tilsluttet") -%}
{% set status = status | replace("Smart charging not active","Automatisk opladning er deaktiveret") -%}
{% set status = status | replace("Low price charging","Opladning ved lav pris") -%}
{% set status = status | replace("Low SOC charging","Opladning ved lavt batteri") -%}
{{status -}}
{{ iif(states.sensor.ev_smart_charging_charging.state=='on',' begyndte ','') -}}
{% if state_attr('sensor.ev_smart_charging_charging','Charging is planned') == True -%}
{{ state_attr('sensor.ev_smart_charging_charging','Charging start time') | as_timestamp | timestamp_custom('%d-%m-%Y, kl. %H:%M') -}}
{% endif -%} {%
if state_attr('sensor.ev_smart_charging_charging','Charging is planned') == True -%} , der afsluttes
{{state_attr('sensor.ev_smart_charging_charging','Charging stop time') | as_timestamp | timestamp_custom('%d-%m-%Y, kl. %H:%M') | replace('/','.') -}}
{% endif %}
- type: entities
entities:
- entity: switch.ev_smart_charging_smart_charging_activated
name: Automatisk opladning
icon: mdi:auto-fix
- type: section
label: Batteri
- type: custom:bar-card
show_header_toggle: false
height: 30px
entity_row: true
animation:
"0":
state: "on"
speed: 5
severity:
- color: Red
to: "20"
from: "0"
- color: Orange
from: "21"
to: "49"
- color: Yellow
from: "50"
to: "60"
- color: LawnGreen
from: "61"
to: "74"
- color: Green
from: "75"
to: "100"
positions:
icon: "off"
indicator: "off"
name: "off"
value: inside
entities:
- entity: sensor.ev_smart_charging_charging
attribute: EV SOC
icon: mdi:battery-70
unit_of_measurement: "%"
state_color: false
- type: attribute
entity: sensor.ev_smart_charging_charging
attribute: EV SOC
name: Nuværende batteri
suffix: "%"
icon: mdi:battery-medium
- type: attribute
entity: sensor.ev_smart_charging_charging
attribute: EV target SOC
name: Oplad til
suffix: "%"
icon: mdi:battery-charging
- type: markdown
content: >-
***
{% set soc = state_attr('sensor.ev_smart_charging_charging','EV SOC') | float -%}
{% set tsoc = state_attr('sensor.ev_smart_charging_charging','EV target SOC') | float -%}
{% set speed = states.number.ev_smart_charging_charging_speed.state | float -%}
| Resterende estimeret ladetid: |
{{ ((tsoc-soc)/speed*60) | int }} min.
|
***
- type: markdown
content: |
### Planlagt opladning
- type: custom:apexcharts-card
now:
show: true
label: Nu
color: "#ffc0cb"
locale: en
header:
show: true
title: ""
show_states: true
standard_format: true
graph_span: 2d
yaxis:
- min: ~0
apex_config:
forceNiceScale: true
span:
start: day
apex_config:
legend:
show: false
xaxis:
labels:
show: true
format: HH
rotate: -45
rotateAlways: true
hideOverlappingLabels: true
style:
fontSize: 10
fontWeight: 10
chart:
height: 245px
dataLabels:
enabled: true
offsetY: 0
textAnchor: top
style:
fontSize: 10px
colors:
- "#fff"
distributed: true
background:
enabled: false
formatter: |
EVAL:function(value) {
return value.toFixed(2);
}
series:
- entity: sensor.ev_smart_charging_charging
name: Elpris
unit: " kr."
color: purple
data_generator: >
return entity.attributes.raw_two_days.map((entry) => { return [new
Date(entry.start), entry.value]; });
type: line
float_precision: 2
show:
in_header: before_now
extend_to: false
color_threshold:
- value: -1
color: green
- value: 1
color: green
- value: 2
color: yellow
- value: 2.5
color: orange
- value: 3
color: red
- value: 4
color: darkred
- value: 5
color: black
- entity: sensor.ev_smart_charging_charging
name: Opvarmning
data_generator: >
return entity.attributes.charging_schedule.map((entry) => { return
[new Date(entry.start), entry.value]; });
type: area
curve: stepline
color: darkgrey
stroke_width: 3
show:
in_header: false
extend_to: false
- entity: sensor.ev_smart_charging_charging
name: Prisloft
unit: " kr."
float_precision: 2
color: red
stroke_width: 2
data_generator: >
return entity.attributes.raw_two_days.map((entry) => { return [new
Date(entry.start),
hass.states['number.ev_smart_charging_electricity_price_limit'].state];
});
type: line
extend_to: false
- entity: sensor.ev_smart_charging_charging
name: Lav pris
unit: " kr."
color: darkgreen
stroke_width: 2
float_precision: 2
data_generator: >
return entity.attributes.raw_two_days.map((entry) => { return [new
Date(entry.start),
hass.states['number.ev_smart_charging_low_price_charging_level'].state];
});
type: line
extend_to: false
experimental:
color_threshold: true
##########################################################################
### Configure scheduled charging (1 of 3) ###
##########################################################################
- type: custom:vertical-stack-in-card
title: Konfiguration (1/3)
cards:
- type: markdown
content: >-
**Start af opladning**
Det tidligste tidspunkt på dagen, hvor
opladningen må starte. Hvis 'None' er valgt, vil start af opladning ikke
være begrænset til et specifikt tidspunkt.
- type: entities
entities:
- entity: select.ev_smart_charging_charge_start_time
name: Start-tidspunkt
icon: mdi:clock-start
- type: markdown
content: >-
**Slut på opladning**
Det seneste tidspunkt på dagen, hvor opladning
skal nå måltemperaturen. Hvis 'None' er valgt, vil opladningen blive
optimeret ved at bruge alle timer med tilgængelig prisinformation,
herunder før morgendagens priser er tilgængelige.
- type: entities
entities:
- entity: select.ev_smart_charging_charge_completion_time
name: Slut-tidspunkt
icon: mdi:clock-end
- type: divider
- type: markdown
content: >-
**Opladningshastighed**
Opladningshastigheden udtrykt i procent pr.
time. Hvis elbilen f.eks. har et 77 kWh batteri, og opladeren kan levere
11 kW (3-faset 16 A), skal du indstille denne parameter til 14,3
(11/77*100). Hvis der er begrænsninger i opladningseffekten, bør du anføre
en lavere værdi.
- type: entities
entities:
- entity: number.ev_smart_charging_charging_speed
name: Opladningshastighed
- type: divider
- type: markdown
content: >-
**Anvend prisloft**
Hvis du anvender prisloft, vil opladning ikke blive
udført i timer, hvor elprisen er over det fastsatte prisloft på
{{states.number.ev_smart_charging_electricity_price_limit.state|float}}
kr.
**BEMÆRK:** Dette kan føre til, at opladningen ikke når det
ønskede batteriniveau.
- type: entities
entities:
- entity: switch.ev_smart_charging_apply_price_limit
name: Anvend prisloft
icon: mdi:format-paragraph-spacing
- entity: number.ev_smart_charging_electricity_price_limit
name: Prisloft
##########################################################################
### Configure scheduled charging (2 of 3) ###
##########################################################################
- type: custom:vertical-stack-in-card
title: Konfiguration (2/3)
cards:
- type: markdown
content: >-
**Oplad ved lavt batteri**
Når denne er aktiveret, sker opladningen
straks til det angivne minimumsniveau
({{states.number.ev_smart_charging_minimum_ev_soc.state|int}}%), hvis
batteriet er under den angivne grænse for lav batteri
({{states.number.ev_smart_charging_low_soc_charging_level.state|int}}%),
når bilen tilsluttes ladeboksen.
**BEMÆRK:** Opladningen sker uden
hensyn til de aktuelle priser.
- type: entities
entities:
- entity: switch.ev_smart_charging_low_soc_charging
name: Oplad ved lavt batteri
icon: mdi:battery-charging-10
- entity: number.ev_smart_charging_low_soc_charging_level
name: Lav batteri-%
icon: mdi:battery-low
- entity: number.ev_smart_charging_minimum_ev_soc
name: Oplad altid til min. %
icon: mdi:battery-charging
- type: section
- type: markdown
content: >-
**Oplad ved lav pris**
Når denne er aktiveret, sker opladningen straks,
hvis elprisen er under den angivne prisgrænse
({{states.number.ev_smart_charging_low_price_charging_level.state|float}}
kr.)
- type: entities
entities:
- entity: switch.ev_smart_charging_low_price_charging
name: Oplad ved lav pris
icon: mdi:format-paragraph-spacing
- entity: number.ev_smart_charging_low_price_charging_level
name: Prisgrænse
- type: markdown
content: >-
**Opportunistisk opladning**
Når denne er aktiveret, reduceres
prisgrænsen yderligere, hvis prisen i slutningen af dagen er lavere end
prisloftet * Opportunistisk grænse / 100.
Når det opportunistiske
niveau er sat til
{{states.number.ev_smart_charging_opportunistic_level.state|int}}, sættes
prisgrænsen således til
{{states.number.ev_smart_charging_opportunistic_level.state|int}}% af
prisloftet på
{{states.number.ev_smart_charging_electricity_price_limit.state|float}} =
{{(states.number.ev_smart_charging_opportunistic_level.state|int)/100*(states.number.ev_smart_charging_electricity_price_limit.state|float)}}
kr. Hvis priserne for i morgen er tilgængelige, vil prisen i slutningen af
dagen i morgen blive brugt som udløser.
- type: entities
entities:
- entity: switch.ev_smart_charging_opportunistic_charging
name: Opportunistisk opladning
icon: mdi:chart-bar-stacked
- entity: number.ev_smart_charging_opportunistic_level
name: Opportunistisk grænse
icon: mdi:percent-box
##########################################################################
### Configure scheduled charging (3 of 3) ###
##########################################################################
- type: custom:vertical-stack-in-card
title: Konfiguration (3/3)
cards:
- type: markdown
content: >-
**Sammenhængende opladning**
Når denne er aktiveret, sker opladningen
som udgangspunkt i én sammenhængende opladningssession. Hvis den er slået
fra, planlægges opladning på timerne med laveste elpris, selvom de ikke er
sammenhængende. Opladningen kan derfor starte og stoppe flere gange.
- type: entities
entities:
- entity: switch.ev_smart_charging_continuous_charging_preferred
name: Planlæg sammenhængende opladning
icon: mdi:recycle-variant
- type: section
- type: markdown
content: >-
**Afslut ikke opladning**
Når denne er aktiveret, vil sensoren
`ev_smart_charging_charging` ikke slukke efter en afsluttet
opladningssession. Funktionen er beregnet til at gøre det muligt at
foretage forkonditionering før afgang med brug af strøm fra ladeboksen.
Det vil sige, at forvarmning/afkøling af bilen kan ske fra elnettet i
stedet for batteriet. Hvis denne mulighed bruges, vil funktionen
Elprisgrænse blive slået fra, og omvendt.
**BEMÆRK** Det er
krævet, at status på bilens opkobling styres korrekt for at denne funktion
kan fungere. Der er også en antagelse om, at selve elbilen stopper
opladningen, når det planlagte batteriniveau er nået.
- type: entities
entities:
- entity: switch.ev_smart_charging_keep_charger_on
name: Afslut ikke opladning