EvaPower aansturen met de slimme meter simulator.
Ik heb hier al eerder gemeld dat ik aan het knoeien was met een slimme meter simulator om Eva te laten doen wat ik wil ipv dat Eva volledig zijn eigen gang gaat. Ik heb hier leuke vorderingen mee gemaakt, maar bene r nog niet helemaal. Mocht iemand anders ook willen proberen, dan hier de stappen die ik heb genomen:
1) Aanschaffen van de slimme meter simulator
https://www.benefactus.nl...meter-simulator-met-wifi/
Uiteraard kun je zelf ook iets maken met een nodemcu boardtje en ESPHome, maar deze is kant en klaar en niet duur.
2) Haal je Eva P1 meter uit de slimme meter en steek deze in de simulator. Hierbij ga ik er wel van uit dat je een HomeWizard P1 meter in je slimme meter hebt zitten en dat die zijn data doorstuurt naar Home Assistant
3) zet Eva in de slimme modus Eigen verbruik
4) aanmaken RestAPI's in Home Assistant configuration.yaml
5) Maak een helper toggle aan in HA, hiermee kun je kiezen welke data naar de Eva P1 meter wordt gestuurd; een kopie van je HW p1 meting of iets anders wat Eva tot een bepaalde actie verleidt. Bij mij heet deze input_boolean.evapower_dao_volgen
6) Maak een automation welke je de keuze biedt tussen Eva volgt HW P1 of Eva doet iets anders
Dan sta je nu voor de keuze hoe je Eva aan gaat sturen. Ik heb gekozen voor Day Ahead Optimizer (zie dit topic https://gathering.tweaker...Bfilter_topicstarter%5D=1)
Ik laat Eva nog niet voor de volle 100% door DAO sturen. Eva luister naar DAO wat betreft activitieit: Laden, Ontladen en Idle (niks doen). Ik volg het vermogen van DAO (nog) niet.
Wel heb ik de mogelijkheid ingesteld om het maximale laadvermogen van 2000W te limiteren middels een helper input_number.evapower_max_laadvermogen tussen 0 en 2000. Dit omdat afhankelijk van de hoeveelheid EvaMAtes 2000W een beetje veel kan zijn.
Als Eva laad of ontlaadt, dan gebeurt dit obv zoveel als mogelijk NOM
Ik heb nog 2 automations aangemaakt om te bepalen in welke status EVa zich bevind en wat het advies van DAO is:
Status Eva:
DAO status advies:
Om deze te kunnen gebruiken moet je wel eerst de twee Dropdown helpers (battery_mode_dao en battery_mode_actual)aanmaken met als keuzes Charging, Discharging en Idle
Tenslotte is er dan de template sensor welke berekent wat er in het P1 bericht voor de EvaPower komt te staan als je Eva wilt manipuleren:
Hier is geheid het een en ander op aan te merken. Ik ben er niet zeker van of dit altijd echt lekker werkt, de tijd zal het leren. Opbouwende kritiek en suggesties voor verbetering zijn welkom
PS het actuele vermogen van Eva meet ik middels een HW plug. Heb je die niet, dan kun je het via de alpha ESS integratie proberen https://github.com/CharlesGillanders/homeassistant-alphaESS. Die geeft ook het actuele vermogen van Eva, maar daar zit best wat vertraging in.
Ik heb hier al eerder gemeld dat ik aan het knoeien was met een slimme meter simulator om Eva te laten doen wat ik wil ipv dat Eva volledig zijn eigen gang gaat. Ik heb hier leuke vorderingen mee gemaakt, maar bene r nog niet helemaal. Mocht iemand anders ook willen proberen, dan hier de stappen die ik heb genomen:
1) Aanschaffen van de slimme meter simulator
https://www.benefactus.nl...meter-simulator-met-wifi/
Uiteraard kun je zelf ook iets maken met een nodemcu boardtje en ESPHome, maar deze is kant en klaar en niet duur.
2) Haal je Eva P1 meter uit de slimme meter en steek deze in de simulator. Hierbij ga ik er wel van uit dat je een HomeWizard P1 meter in je slimme meter hebt zitten en dat die zijn data doorstuurt naar Home Assistant
3) zet Eva in de slimme modus Eigen verbruik
4) aanmaken RestAPI's in Home Assistant configuration.yaml
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| rest_command:
set_p1simulator_date:
url: "http://[IP ADRES SIMULATOR]/setrtc.cmd?date={{value}}"
set_p1simulator_time:
url: "http://[IP ADRES SIMULATOR/setrtc.cmd?time={{value}}"
set_p1simulator_l1:
url: "http://[IP ADRES SIMULATOR/setvalue.cmd?fieldname=electricity.current_L1&value={{ value }}"
method: get
set_p1simulator_l2:
url: "http://[IP ADRES SIMULATOR/setvalue.cmd?fieldname=electricity.current_L2&value=0"
method: get
set_p1simulator_l3:
url: "http://[IP ADRES SIMULATOR/setvalue.cmd?fieldname=electricity.current_L3&value=0"
method: get |
5) Maak een helper toggle aan in HA, hiermee kun je kiezen welke data naar de Eva P1 meter wordt gestuurd; een kopie van je HW p1 meting of iets anders wat Eva tot een bepaalde actie verleidt. Bij mij heet deze input_boolean.evapower_dao_volgen
6) Maak een automation welke je de keuze biedt tussen Eva volgt HW P1 of Eva doet iets anders
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
| alias: P1 sim EvaPower Power L1
description: ""
triggers:
- entity_id:
- sensor.p1_meter_active_power
trigger: state
- entity_id:
- sensor.batterij_laadvermogen_dao
trigger: state
actions:
- if:
- condition: state
entity_id: input_boolean.evapower_dao_volgen
state: "on"
then:
- data:
value: >-
{{ (states('sensor.batterij_laadvermogen_dao') | float / 230) |
round(4) }}
action: rest_command.set_p1simulator_l1
alias: Publiceer de DAO power naar de simulator
else:
- data:
value: >-
{{ (states('sensor.p1_meter_active_power') | float / 230) | round(4)
}}
action: rest_command.set_p1simulator_l1
alias: Kopieer P1 meting naar de simulator
mode: single |
Dan sta je nu voor de keuze hoe je Eva aan gaat sturen. Ik heb gekozen voor Day Ahead Optimizer (zie dit topic https://gathering.tweaker...Bfilter_topicstarter%5D=1)
Ik laat Eva nog niet voor de volle 100% door DAO sturen. Eva luister naar DAO wat betreft activitieit: Laden, Ontladen en Idle (niks doen). Ik volg het vermogen van DAO (nog) niet.
Wel heb ik de mogelijkheid ingesteld om het maximale laadvermogen van 2000W te limiteren middels een helper input_number.evapower_max_laadvermogen tussen 0 en 2000. Dit omdat afhankelijk van de hoeveelheid EvaMAtes 2000W een beetje veel kan zijn.
Als Eva laad of ontlaadt, dan gebeurt dit obv zoveel als mogelijk NOM
Ik heb nog 2 automations aangemaakt om te bepalen in welke status EVa zich bevind en wat het advies van DAO is:
Status Eva:
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
| alias: Set_EvaPower_mode_actual
description: ""
triggers:
- trigger: state
entity_id:
- sensor.evapower_power
conditions: []
actions:
- choose:
- conditions:
- condition: and
conditions:
- condition:
- condition: not
conditions:
- condition: state
entity_id: input_select.battery_mode_actual
state: Charging
alias: state is not Charging
- condition: numeric_state
entity_id: sensor.evapower_power
above: 2
alias: Not charging en power > 2
sequence:
- action: input_select.select_option
metadata: {}
data:
option: Charging
target:
entity_id: input_select.battery_mode_actual
alias: Not charging en power > 2, set Charging
- conditions:
- condition: and
conditions:
- condition: numeric_state
entity_id: sensor.evapower_power
below: -2
- alias: state is not Discharging
condition: and
conditions:
- condition: not
conditions:
- condition: state
entity_id: input_select.battery_mode_actual
state: Discharging
sequence:
- action: input_select.select_option
metadata: {}
data:
option: Discharging
target:
entity_id: input_select.battery_mode_actual
alias: Not discharging en power < -2, set Discharging
- conditions:
- condition: and
conditions:
- condition: state
entity_id: input_select.battery_mode_actual
state: Charging
- condition: numeric_state
entity_id: sensor.evapower_power
below: 2
- condition: numeric_state
entity_id: sensor.evapower_power
above: -2
sequence:
- action: input_select.select_option
metadata: {}
data:
option: Idle
target:
entity_id: input_select.battery_mode_actual
alias: Charging, -2 < power < 2, Idle
- conditions:
- condition: and
conditions:
- condition: state
entity_id: input_select.battery_mode_actual
state: Discharging
- condition: numeric_state
entity_id: sensor.evapower_power
above: -2
- condition: numeric_state
entity_id: sensor.evapower_power
below: 2
sequence:
- action: input_select.select_option
metadata: {}
data:
option: Idle
target:
entity_id: input_select.battery_mode_actual
alias: Discharging, -2< power < 2, Idle
mode: single |
DAO status advies:
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: Set_EvaPower_mode_dao
description: ""
triggers:
- trigger: state
entity_id:
- input_number.battery_feedin_grid
conditions: []
actions:
- choose:
- conditions:
- condition: numeric_state
entity_id: input_number.battery_feedin_grid
above: 1
sequence:
- action: input_select.select_option
metadata: {}
data:
option: Charging
target:
entity_id: input_select.battery_mode_dao
- conditions:
- condition: numeric_state
entity_id: input_number.battery_feedin_grid
below: -1
sequence:
- action: input_select.select_option
metadata: {}
data:
option: Discharging
target:
entity_id: input_select.battery_mode_dao
- conditions: []
sequence:
- action: input_select.select_option
metadata: {}
data:
option: Idle
target:
entity_id: input_select.battery_mode_dao
mode: single |
Om deze te kunnen gebruiken moet je wel eerst de twee Dropdown helpers (battery_mode_dao en battery_mode_actual)aanmaken met als keuzes Charging, Discharging en Idle
Tenslotte is er dan de template sensor welke berekent wat er in het P1 bericht voor de EvaPower komt te staan als je Eva wilt manipuleren:
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
| - name: "Batterij Laadvermogen DAO"
unique_id: batterij_laadvermogen_dao
unit_of_measurement: "W"
state_class: measurement
device_class: power
state: >-
{% set net_afname = states('sensor.p1_meter_active_power') | float(0) %}
{% set Bat_Actual_Power = states('sensor.evapower_power') | float(0) %}
{% set Bat_Max_Disharge_Power = states('input_number.battery_feedin_grid') | float(0) %}
{% set Bat_Max_Charge_Power = states('input_number.evapower_max_laadvermogen') | float(0) %}
{% set DAO_mode = states('input_select.battery_mode_dao') %}
{% set Bat_mode = states('input_select.battery_mode_actual') %}
{% set Bat_Soc = states('sensor.alg001124080450_instantaneous_battery_soc') | float %}
{% if DAO_mode == 'Charging' %}
{% if Bat_mode == 'Charging' %}
{%if net_afname >= 0 %}
{{(net_afname) | round(0)}}
{% else %} {# DAO Charge, Bat Charge en P1 negatief. Regel naar max_laadvermogen. Modus eigen gebruik #}
{{[(Bat_Actual_Power - Bat_Max_Charge_Power), Bat_Actual_Power + net_afname] | max | round(0)}}
{% endif %}
{% elif Bat_mode == 'Idle' %}
{% if net_afname > 100 %} {# DAO Charge, Bat Idle en P1 negatief. Voorkom discharge en publiceer 0 W #}
{{0}}
{% elif net_afname < -100 %} {# DAO Charge, Bat Idle en P1 negatief. Regel naar max_laadvermogen. Modus eigen gebruik #}
{{[(Bat_Actual_Power - Bat_Max_Charge_Power), Bat_Actual_Power + net_afname] | max | round(0)}}
{% endif %}
{% elif Bat_mode == 'Discharging' %}
{{(Bat_Actual_Power / 2) | round(0)}} {# DAO Charge, Bat Discharge. Regel naar 0: actual bat power / 2. Bat naar Idle #}
{% endif %}
{% elif DAO_mode == 'Discharging' %}
{% if Bat_mode == 'Charging' %}
{{(Bat_Actual_Power / 2) | round(0)}} {# DAO Discharge, Bat Charge. Regel naar 0: actual bat power / 2. Bat naar Idle #}
{% elif Bat_mode == 'Idle' %}
{% if net_afname < -100 %}
{{0}} {# DAO Discharge, Bat Idle en P1 negatief (teruglevering aan net). Hou de bat op 0. Modus eigen gebruik Eva blijft idle #}
{% elif net_afname > 100 %}
{{(net_afname) | round(0)}} {# DAO Discharge, Bat Idle en P1 positief afname van net). Neem de waarde van de P1 meter over. Modus eigen gebruik Eva gaat ontladen #}
{% else %}
{{ 0 }} {# Voeg deze toe voor helderheid #}
{% endif %}
{% elif Bat_mode == 'Discharging'%}
{% if net_afname > 0 %} {# DAO Discharge, Bat Discharge en P1 positief (afname van net). Regel naar de max discharge_power. Modus eigen gebruik #}
{{(net_afname) | round(0)}} {# DAO Discharge, Bat Discharge en P1 positief (afname van net). Neem de waarde van de P1 meter over. Modus eigen gebruik #}
{% else %}
{{ net_afname | round(0)}} {# DAO Discharge, Bat Discharging en P1 negatief (teruglevering aan net). Regel naar 0 zodat Eva naar Idle gaat #}
{% endif %}
{% endif %}
{% elif DAO_mode == 'Idle' %}
{% if Bat_mode == 'Charging' %}
{{(Bat_Actual_Power / 2) | round(0)}} {# DAO Idle, Bat Charge. Regel naar 0: actual bat power / 2. Bat naar Idle #}
{% elif Bat_mode == 'Idle' %}
{{ 0 | round(1)}} {# DAO Idle, Bat Idle. Hou op 0 #}
{% elif Bat_mode == 'Discharging' %}
{{(Bat_Actual_Power / 2) | round(0)}} {# DAO Idle, Bat Discharge. Regel naar 0: actual bat power / 2. Bat naar Idle #}
{% endif %}
{% else %}
{{ 0 }}
{% endif %} |
Hier is geheid het een en ander op aan te merken. Ik ben er niet zeker van of dit altijd echt lekker werkt, de tijd zal het leren. Opbouwende kritiek en suggesties voor verbetering zijn welkom
PS het actuele vermogen van Eva meet ik middels een HW plug. Heb je die niet, dan kun je het via de alpha ESS integratie proberen https://github.com/CharlesGillanders/homeassistant-alphaESS. Die geeft ook het actuele vermogen van Eva, maar daar zit best wat vertraging in.
/f/image/96H9HYv6oEj67GMojeSpS8W8.png?f=fotoalbum_large)
:no_upscale():strip_icc():strip_exif()/f/image/dUqGiKvxciqnBCBhL42VolNr.jpg?f=user_large)
/f/image/0Hloe8PWiHztSuOu3eqB15lR.png?f=fotoalbum_large)
:strip_exif()/f/image/5sANWnYV26mUy3gan8y3vH7n.jpg?f=fotoalbum_large)
:strip_exif()/f/image/51ujkumVj6jJuthcEkKxGmnd.jpg?f=fotoalbum_large)
:strip_exif()/f/image/DrBF3pS5maIQMWZwwEjCAP78.jpg?f=fotoalbum_large)
:strip_exif()/f/image/9NUlPCdp7Ww8aLmrkskbB72y.jpg?f=fotoalbum_large)
/f/image/yf9Pq4XTeK7sDW9yXRbz3ab1.png?f=fotoalbum_large)
:strip_exif()/f/image/c9WwuKJJuX55NthStLGSg08G.jpg?f=fotoalbum_large)
:no_upscale():strip_icc():strip_exif()/f/image/DFsIgDCG7OnABNajrEbs6a9l.jpg?f=user_large)
:no_upscale():strip_icc():strip_exif()/f/image/8wQyD65vS65sT5yN6B5N6Swu.jpg?f=user_large)
:strip_exif()/f/image/NZjkXlt90ItJzgh1ytpEijlJ.jpg?f=fotoalbum_large)
:strip_exif()/f/image/5hdSyha8My28JHbjY2Lf03b4.jpg?f=fotoalbum_large)
/f/image/FoJrbfFFcT2eT9LkUVpWPug2.png?f=fotoalbum_large)
/f/image/8dOSEBYDuMHlP345CsRmwive.png?f=fotoalbum_large)
:strip_exif()/f/image/OmHdciM92kDV4nRFklGMhGQy.jpg?f=fotoalbum_large)