Nou, een beetje een half on/off topic maar denk wel dat dit de juiste plek is om dit met jullie te delen.
De leaf (ze1 2020>) is notoir onbetrouwbaar met zijn SoC weergeven en tevens heeft deze ook geen optie om maar te laden tot bijv 80%.
Teveld stopt binnenkort de salderingsregeling dus wil graag wat slimmer gaan laden.
Nu heb ik de afgelopen tijd iets geknutseld wat eigelijk ver doet wat ik (en misschien jullie) wil(len).
Ik heb dus een leaf, een SmartEVSE, P1 Meter, shelleEM en home assistant.
Ik heb alles toegevoegd aan HA en 3 automations gemaakt (samen met AI):
stap 1: stap 1 EV - Nissan Leaf SoC Binnenhalen bij aansluiten (Lineair)
stap 2: stap 2 EV - Nissan Leaf Slim Laden met Automatische Timer Override
stap3: stap 3 EV Reset Laadsessie bij loskoppelen auto
tevens dit dasboard gemaakt:
Het werkt zo:
stap 1 vraagt de SoC op, na 1min doet ie dat nog eens en checkt ie of die up2date is (dit is de enige manier die 'betrouwbaar' lijkt te zijn. Een helper met formule wordt geupdate en deze houd vanaf dat moment (zolang kabel connected) de SoC bij obv startwaarde + geladen Kwh omgerekend naar %.
stap 2: ik kan een vertrektijd / SoC instellen. Stel ik nix in (datum in verleden) dan laad de auto via solar tot de max solar SoC. Stel ik wel een vertrektijd in gaat hij ook solar chargen tot max 80% (batterij besparing). Maar mocht hij het niet halen met de zon schakeld hij over naar smart (16A) om te zorgen dat hij wel op tijd klaar is.
Mocht ik iets willen wat niet kan, krijg ik hier ook een melding van.
stap3: bij het loskoppelen krijg ik een melding met aantal geladen KWH en worden alle waardes gereset om weer met een schone lei te kunnen beginnen.
Aangezien alles (behalve het ophalen van de SoC in het begin) lokaal werken is de ervaring tot op heden goed.
Voor de liefhebbers de codes:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
| alias: stap 1 EV - Nissan Leaf SoC Binnenhalen bij aansluiten (Lineair)
description: >-
Drukt 2x op update, controleert de tijdstempel na 15s en kopieert altijd de
SoC.
triggers:
- trigger: state
entity_id: sensor.smartevse_6450_evplugstate
from: Disconnected
to: Connected
conditions:
- condition: state
entity_id: binary_sensor.leaf_klaar_om_te_laden
state: "off"
actions:
- delay: "00:00:10"
- action: button.press
target:
entity_id: button.leaf_update_data
- delay: "00:01:00"
- action: button.press
target:
entity_id: button.leaf_update_data
- delay: "00:00:15"
- choose:
- conditions:
- condition: template
value_template: >-
{{ (as_timestamp(now()) -
as_timestamp(states('sensor.leaf_last_updated'), 0)) / 60 < 3 }}
sequence:
- action: notify.mobile_app_oneplus_nord4_maurice
data:
title: 🚗 SoC Leaf Succesvol
message: >-
De SoC is succesvol opgehaald! Huidige waarde: {{
states('sensor.leaf_battery_level') }}%.
- conditions:
- condition: template
value_template: >-
{{ (as_timestamp(now()) -
as_timestamp(states('sensor.leaf_last_updated'), 0)) / 60 >= 3 }}
sequence:
- action: notify.mobile_app_oneplus_nord4_maurice
data:
title: ⚠️ SoC Leaf Controleren
message: >-
De cloud-data is niet op tijd vernieuwd. Controleer de SoC
handmatig.
- action: input_number.set_value
target:
entity_id: input_number.leaf_start_soc
data:
value: "{{ states('sensor.leaf_battery_level') | float(0) }}"
mode: single |
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
| alias: stap 2 EV - Nissan Leaf Slim Laden met Automatische Timer Override
description: >-
Solar laden tot de handmatig ingestelde Solar laadgrens. Indien nodig
automatische via Smart netstroom bijladen tot de minimale Target SoC (Harde
ondergrens) bereikt is.
triggers:
- trigger: state
entity_id: binary_sensor.leaf_klaar_om_te_laden
to: "on"
id: start_solar
- trigger: time_pattern
minutes: /1
id: check_timer
conditions:
- condition: template
value_template: >-
{{ states('select.smartevse_6450_mode') not in ['unavailable', 'unknown']
}}
- condition: template
value_template: >-
{{ states('sensor.current_leaf_battery_level_virtual') not in
['unavailable', 'unknown'] }}
actions:
- choose:
- conditions:
- condition: state
entity_id: binary_sensor.leaf_klaar_om_te_laden
state: "on"
- condition: template
value_template: >-
{% set actueel =
states('sensor.current_leaf_battery_level_virtual') | float(0) %}
{% set zon_grens = states('input_number.leaf_maximaal_solar_soc')
| float(80) %} {{ actueel < zon_grens }}
- condition: template
value_template: "{{ states('select.smartevse_6450_mode') in ['Off', 'Smart'] }}"
- condition: template
value_template: >-
{% set vertrektijd_toekomst =
as_timestamp(states('input_datetime.leaf_vertrektijd'), 0) >
as_timestamp(now()) %} {% if vertrektijd_toekomst %}
{% set actuele_soc = states('sensor.current_leaf_battery_level_virtual') | float(0) %}
{% set target_soc = states('input_number.leaf_target_soc') | float(100) %}
{% set uren_nodig = (target_soc - actuele_soc) / 10 %}
{% set seconden_nodig = uren_nodig * 3600 %}
{% set seconden_tot_vertrek = as_timestamp(states('input_datetime.leaf_vertrektijd'), 0) - as_timestamp(now()) %}
{{ seconden_tot_vertrek > seconden_nodig }}
{% else %}
true
{% endif %}
sequence:
- if:
- condition: template
value_template: >-
{{ states('sensor.current_leaf_battery_level_virtual') |
float(0) < states('input_number.leaf_target_soc') | float(100)
}}
then:
- action: input_boolean.turn_off
target:
entity_id: input_boolean.leaf_minimale_soc_gemeld
- action: select.select_option
target:
entity_id: select.smartevse_6450_mode
data:
option: Solar
- conditions:
- condition: state
entity_id: binary_sensor.leaf_klaar_om_te_laden
state: "on"
- condition: template
value_template: >-
{% set actueel =
states('sensor.current_leaf_battery_level_virtual') | float(0) %}
{% set zon_grens = states('input_number.leaf_maximaal_solar_soc')
| float(80) %} {{ actueel >= zon_grens }}
- condition: template
value_template: "{{ states('select.smartevse_6450_mode') in ['Solar', 'Smart'] }}"
- condition: template
value_template: >-
{% set actueel =
states('sensor.current_leaf_battery_level_virtual') | float(0) %}
{% set target_soc = states('input_number.leaf_target_soc') |
float(100) %} {{ actueel >= target_soc }}
sequence:
- action: select.select_option
target:
entity_id: select.smartevse_6450_mode
data:
option: "Off"
- action: notify.mobile_app_oneplus_nord4_maurice
data:
title: 🔋 Lader Gepauzeerd
message: >-
De ingestelde Solar-limiet ({{
states('input_number.leaf_maximaal_solar_soc') | round(0) }}%)
is bereikt. De Leaf is nu {{
states('sensor.current_leaf_battery_level_virtual') | round(0)
}}%.
- conditions:
- condition: trigger
id: check_timer
- condition: state
entity_id: binary_sensor.leaf_klaar_om_te_laden
state: "on"
- condition: template
value_template: >-
{{ as_timestamp(states('input_datetime.leaf_vertrektijd'), 0) >
as_timestamp(now()) }}
- condition: template
value_template: >-
{% set actuele_soc =
states('sensor.current_leaf_battery_level_virtual') | float(0) %}
{% set target_soc = states('input_number.leaf_target_soc') |
float(100) %} {% set uren_nodig = (target_soc - actuele_soc) / 10
%} {% set seconden_nodig = uren_nodig * 3600 %} {% set vertrektijd
= as_timestamp(states('input_datetime.leaf_vertrektijd'), 0) %} {%
set seconden_tot_vertrek = vertrektijd - as_timestamp(now()) %} {{
seconden_nodig > (seconden_tot_vertrek + 120) }}
- condition: template
value_template: >-
{{ (as_timestamp(now()) -
as_timestamp(state_attr('automation.stap_2_ev_nissan_leaf_slim_laden_met_automatische_timer_override',
'last_triggered'), 0)) > 60 or
states('select.smartevse_6450_mode') != 'Smart' }}
sequence:
- if:
- condition: template
value_template: "{{ states('select.smartevse_6450_mode') != 'Smart' }}"
then:
- action: select.select_option
target:
entity_id: select.smartevse_6450_mode
data:
option: Smart
- action: notify.mobile_app_oneplus_nord4_maurice
data:
title: "⚠️ LET OP: Minimaal doel onhaalbaar!"
message: >-
Er is onvoldoende tijd om de minimale Target SoC van {{
states('input_number.leaf_target_soc') | round(0) }}% te halen.
Huidige status: {{
states('sensor.current_leaf_battery_level_virtual') | round(0)
}}%.
- conditions:
- condition: trigger
id: check_timer
- condition: state
entity_id: binary_sensor.leaf_klaar_om_te_laden
state: "on"
- condition: template
value_template: >-
{{ as_timestamp(states('input_datetime.leaf_vertrektijd'), 0) >
as_timestamp(now()) }}
- condition: template
value_template: >-
{{ states('sensor.current_leaf_battery_level_virtual') | float(0)
< states('input_number.leaf_target_soc') | float(100) }}
- condition: template
value_template: "{{ states('select.smartevse_6450_mode') != 'Smart' }}"
- condition: template
value_template: >-
{% set actuele_soc =
states('sensor.current_leaf_battery_level_virtual') | float(0) %}
{% set target_soc = states('input_number.leaf_target_soc') |
float(100) %} {% set uren_nodig = (target_soc - actuele_soc) / 10
%} {% set seconden_nodig = uren_nodig * 3600 %} {% set vertrektijd
= as_timestamp(states('input_datetime.leaf_vertrektijd'), 0) %} {%
set seconden_tot_vertrek = vertrektijd - as_timestamp(now()) %} {{
0 < seconden_tot_vertrek <= seconden_nodig }}
sequence:
- action: input_boolean.turn_off
target:
entity_id: input_boolean.leaf_minimale_soc_gemeld
- action: select.select_option
target:
entity_id: select.smartevse_6450_mode
data:
option: Smart
- action: notify.mobile_app_oneplus_nord4_maurice
data:
title: 🚀 Smart Laden Gestart
message: >-
Overgeschakeld naar Smart om de minimale ondergrens van {{
states('input_number.leaf_target_soc') | round(0) }}% tijdig te
behalen. Huidige SoC: {{
states('sensor.current_leaf_battery_level_virtual') | round(0)
}}%.
- conditions:
- condition: state
entity_id: binary_sensor.leaf_klaar_om_te_laden
state: "on"
- condition: template
value_template: >-
{{ states('sensor.current_leaf_battery_level_virtual') | float(0)
>= states('input_number.leaf_target_soc') | float(100) }}
- condition: state
entity_id: input_boolean.leaf_minimale_soc_gemeld
state: "off"
sequence:
- action: input_boolean.turn_on
target:
entity_id: input_boolean.leaf_minimale_soc_gemeld
- action: notify.mobile_app_oneplus_nord4_maurice
data:
title: 🚗 Minimale SoC Bereikt!
message: >-
De Leaf heeft de gewenste {{
states('input_number.leaf_target_soc') | round(0) }}% bereikt.
Indien de zon schijnt, laadt hij nu rustig verder richting je
Solar grens ({{ states('input_number.leaf_maximaal_solar_soc') |
round(0) }}%).
- conditions:
- condition: state
entity_id: binary_sensor.leaf_klaar_om_te_laden
state: "on"
- condition: template
value_template: >-
{% set actueel =
states('sensor.current_leaf_battery_level_virtual') | float(0) %}
{% set zon_grens = states('input_number.leaf_maximaal_solar_soc')
| float(80) %} {{ actueel >= zon_grens or actueel >= 100 }}
- condition: template
value_template: "{{ states('select.smartevse_6450_mode') != 'Off' }}"
sequence:
- action: select.select_option
target:
entity_id: select.smartevse_6450_mode
data:
option: "Off"
- action: notify.mobile_app_oneplus_nord4_maurice
data:
title: ✅ Laden Voltooid
message: >-
De auto is opgeladen tot {{
states('sensor.current_leaf_battery_level_virtual') | round(0)
}}%. (Jouw ingestelde Solar grens was: {{
states('input_number.leaf_maximaal_solar_soc') | round(0) }}%).
Het laden is gestopt.
mode: single |
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
| alias: stap 3 EV Reset Laadsessie bij loskoppelen auto
description: >-
Reset de laadsessie teller, start-SoC naar 0, zet de vertrektijd op NU, reset
de notificatie-helper en zet de lader op Off zodra de kabel wordt
losgekoppeld.
triggers:
- trigger: state
entity_id: sensor.smartevse_6450_evplugstate
from: Connected
to: Disconnected
conditions: []
actions:
- action: input_boolean.turn_off
target:
entity_id: input_boolean.leaf_minimale_soc_gemeld
- action: input_number.set_value
target:
entity_id: input_number.leaf_start_soc
data:
value: 0
- action: input_datetime.set_datetime
target:
entity_id: input_datetime.leaf_vertrektijd
data:
timestamp: "{{ as_timestamp(now()) }}"
- action: select.select_option
target:
entity_id: select.smartevse_6450_mode
data:
option: "Off"
- action: notify.mobile_app_oneplus_nord4_maurice
data:
title: 🔌 Leaf Ontkoppeld
message: >-
Laadsessie van {{ states('sensor.shellyem_laadpaal_laadsessie_ev_kwh')
}} kWh afgerond. Systeem succesvol gereset!
- action: utility_meter.reset
target:
entity_id: sensor.shellyem_laadpaal_laadsessie_ev_kwh
mode: single |
Ik sta open voor feedback