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.