Beste medetweakers,
Her en der wel een en ander gevonden maar nooit echt een kant en klare oplossing dus als u mij toestaat hierbij een oplossing:
Situatie
(zonne)Boiler met ‘domme’ aan/uit heater 2000w aangestuurd middels Homeassistant.
Probleem
Wanneer teruglevering tussen 0-1999W is schakelt element niet in om electriciteit inname te voorkomen, met oog op de toekomst zonde. Deze energie kan de boiler in.
Oplossing
Electrisch element dimmen en aanstuurbaar maken met PID regelaar in HA, op basis van verschil in elektriciteit inname en teruglevering.
Boodschappenlijstje
Aanstuurbare vermogensregelaar (KEMO M240)
PWM/0-10V Zigbee/Zwave/Wifi Dimmer (ROBB SMARRT Zigbee 0-10V PWM Dimmer)
Zekering / Installatieautomaat 10A
Heatsink (oversized!)
Koelpasta
Montagemateriaal (gipsplaat, hout, schroeven, boutjes, moertjes, wago klemmen, lasdoosje, vlakstekkertjes, krimptang, opbouwstopcontact etc)
Bovenstaande in elkaar knutselen, let op dat de heatsink groot genoeg is en zijn warmte goed kwijt kan. Maximale temperatuur bij mij gemeten momenteel 45gr C na meerdere uren op 2000W.
Heatsink heb ik bevestigd aan de heatsink door er draad in te tappen met m3 boutjes vast te zetten. Uiteraard een rupsje koelpasta tussen de KEMO en de heatsink.
PID regelaar middels HomeAssistant
Benodigde helpers
Template sensor voor energie balans
Let op bij mij zitten er nog 2 thuisaccus in verwerkt zodat deze niet ontladen om de heater van prik te voorzien.
Code om de dimmer middels een slider aan te sturen, wel even de slider aanmaken middels een helper.
Met bovenstaande code kun je de PID regelaar finetunen in HA, dat finetunen is even wat werk maar daarna werkt het prima.
Code kan vast ook nog wat beter, werkt wel maar geeft af en toe een logentry in HA. Allang blij dat het werkt. Maar code-goeroes, hoor graag jullie verbeteringen.
Foto van mijn tijdelijke testsetup, naar eigen wens wat netter te maken natuurlijk. Hoor het graag als iemand een nette suggestie heeft hiervoor.
Her en der wel een en ander gevonden maar nooit echt een kant en klare oplossing dus als u mij toestaat hierbij een oplossing:
Situatie
(zonne)Boiler met ‘domme’ aan/uit heater 2000w aangestuurd middels Homeassistant.
Probleem
Wanneer teruglevering tussen 0-1999W is schakelt element niet in om electriciteit inname te voorkomen, met oog op de toekomst zonde. Deze energie kan de boiler in.
Oplossing
Electrisch element dimmen en aanstuurbaar maken met PID regelaar in HA, op basis van verschil in elektriciteit inname en teruglevering.
Boodschappenlijstje
Aanstuurbare vermogensregelaar (KEMO M240)
PWM/0-10V Zigbee/Zwave/Wifi Dimmer (ROBB SMARRT Zigbee 0-10V PWM Dimmer)
Zekering / Installatieautomaat 10A
Heatsink (oversized!)
Koelpasta
Montagemateriaal (gipsplaat, hout, schroeven, boutjes, moertjes, wago klemmen, lasdoosje, vlakstekkertjes, krimptang, opbouwstopcontact etc)
Bovenstaande in elkaar knutselen, let op dat de heatsink groot genoeg is en zijn warmte goed kwijt kan. Maximale temperatuur bij mij gemeten momenteel 45gr C na meerdere uren op 2000W.
Heatsink heb ik bevestigd aan de heatsink door er draad in te tappen met m3 boutjes vast te zetten. Uiteraard een rupsje koelpasta tussen de KEMO en de heatsink.
PID regelaar middels HomeAssistant
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
| alias: PID Control for Heater
triggers:
- seconds: /5
trigger: time_pattern
actions:
- variables:
kp: "{{ states('input_number.pid_kp') | float }}"
ki: "{{ states('input_number.pid_ki') | float }}"
kd: "{{ states('input_number.pid_kd') | float }}"
current_output: "{{ states('input_number.current_output') | float }}"
grid_feedback: "{{ states('sensor.teruglevering') | float(default=0) }}"
electriciteit_inname: "{{ states('sensor.electriciteit_inname') | float(default=0) }}"
error: "{{ states('sensor.energy_balance') | float }}"
integral: "{{ (states('input_number.integral') | float + error) | round(2) }}"
derivative: "{{ (error - states('input_number.last_error') | float) | round(2) }}"
pid_output: >-
{% set output = (kp * error) + (ki * integral) + (kd * derivative) %} {{
[0, [output, 255] | min] | max | float }}
- target:
entity_id: input_number.current_output
data:
value: "{{ pid_output | float }}"
action: input_number.set_value
- target:
entity_id: input_number.zonneboiler_dimmer_slider
data:
value: "{{ pid_output | float }}"
action: input_number.set_value
- target:
entity_id: input_number.integral
data:
value: "{{ integral | float }}"
action: input_number.set_value
- target:
entity_id: input_number.last_error
data:
value: "{{ error | float }}"
action: input_number.set_value |
Benodigde helpers
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
| pid_kp:
name: Kp (Proportional Gain)
initial: 0.005
min: 0
max: 5
step: 0.001
mode: box
pid_ki:
name: Ki (Integral Gain)
initial: 0.005
min: 0
max: 1
step: 0.001
mode: box
pid_kd:
name: Kd (Derivative Gain)
initial: 0.005
min: 0
max: 1
step: 0.001
mode: box
current_output:
name: Current Heater Output
initial: 0
min: 0
max: 255
step: 1
mode: box
integral:
name: Integral
initial: 0
min: -1000
max: 1000
step: 1
mode: box
last_error:
name: Last Error
initial: 0
min: -1000
max: 1000
step: 1
mode: box |
Template sensor voor energie balans
Let op bij mij zitten er nog 2 thuisaccus in verwerkt zodat deze niet ontladen om de heater van prik te voorzien.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| template:
- sensor:
- name: "Energy Balance"
unique_id: energy_balance_sensor
state: >-
{% set grid_feedback = states('sensor.teruglevering') | float %}
{% set electriciteit_inname = states('sensor.electriciteit_inname') | float %}
{% set discharge_battery1 = states('sensor.sessy_dspm_discharge_power') | float %}
{% set discharge_battery2 = states('sensor.sessy_d6vu_discharge_power') | float %}
{{ (grid_feedback - electriciteit_inname - discharge_battery1 - discharge_battery2) | round(0) }}
unit_of_measurement: "W" |
Code om de dimmer middels een slider aan te sturen, wel even de slider aanmaken middels een helper.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
| alias: Zonneboiler dimmer automatisering
description: ""
triggers:
- entity_id: input_number.zonneboiler_dimmer_slider
trigger: state
conditions: []
actions:
- data:
brightness: "{{ states('input_number.zonneboiler_dimmer_slider') | int }}"
target:
entity_id: light.robb_smarrt_rob_200_063_0_licht
action: light.turn_on
mode: single |
Met bovenstaande code kun je de PID regelaar finetunen in HA, dat finetunen is even wat werk maar daarna werkt het prima.
Code kan vast ook nog wat beter, werkt wel maar geeft af en toe een logentry in HA. Allang blij dat het werkt. Maar code-goeroes, hoor graag jullie verbeteringen.
Foto van mijn tijdelijke testsetup, naar eigen wens wat netter te maken natuurlijk. Hoor het graag als iemand een nette suggestie heeft hiervoor.
[ Voor 5% gewijzigd door sparkly op 07-10-2024 19:40 ]
LG Therma V HM163M U33 / 5kWp Zuid - 7,2kWp West - 2,8kWp Oost / 48HP 300l / 3x Multiplus 2/5000, 30kWh LFP
:strip_exif()/f/image/YBTnT6YQODuWR9UwPttypOJW.png?f=user_large)
/f/image/CCRmTVEgdRn7Lna52NO9D7H9.png?f=fotoalbum_large)
/f/image/tc9N1v3f4HoiZ7eFy7hCWMOV.png?f=fotoalbum_large)
:strip_exif()/f/image/3ZB9lZ2nABSDxfS0qbvVzsjF.png?f=user_large)
/f/image/9FkSQnvHHieQKcCXQMwVPXWT.png?f=fotoalbum_large)
/f/image/w20qL3mHZenRm7uRqXCa6Lee.png?f=fotoalbum_large)
:no_upscale():strip_icc():strip_exif()/f/image/RmHvqKijiC1TIfKmtKTJdKie.jpg?f=user_large)
:strip_exif()/f/image/bUE7qZXstN4elZ0o5wBeDrch.jpg?f=fotoalbum_large)
:strip_exif()/f/image/ZGT4uRXlgNbRrwZ4ad7DedWL.jpg?f=fotoalbum_large)
:strip_exif()/f/image/DSTS9UbHFPejl7WHwyKwJgH6.jpg?f=fotoalbum_large)
:strip_exif()/f/image/lOGUuOrXgjJ1ll2VP3TUghEW.jpg?f=fotoalbum_large)
/f/image/YY3bcPcq7zPRUyDcwF7lAwu2.png?f=fotoalbum_large)
/f/image/DDNIZFIKmtPzMOdGxXkMxndl.png?f=fotoalbum_large)
:gifsicle():strip_exif()/f/image/uv92pzdns0ppgoV4dMQ7eFAd.gif?f=user_large)
:strip_exif()/f/image/xhOdESV9kQ7ja4EmgxwsJifY.jpg?f=fotoalbum_large)
:strip_exif()/f/image/gvAuUZW9PQU0lEKmmdV15QGL.jpg?f=fotoalbum_large)
:strip_exif()/f/image/Zbhzoh7INkxCWEfPZMtoA5xN.jpg?f=fotoalbum_large)
:strip_exif()/f/image/H3q7Fh3KbyYBJi11XS8C6rvF.jpg?f=fotoalbum_large)
:strip_exif()/f/image/tpPVBvl82tw2T27GWqF8HNPM.jpg?f=fotoalbum_large)
:strip_exif()/f/image/T8i0Vvz70EwsiclZm1WegTZi.jpg?f=fotoalbum_large)
:strip_exif()/f/image/TSTqJKeJwc1N082lHNhplrJm.jpg?f=fotoalbum_large)
/f/image/c9CFxoY3RIVdddP0lQyU1sue.png?f=fotoalbum_large)
:strip_exif()/f/image/qpenST7nx1i43XohnQhxoqZW.jpg?f=fotoalbum_large)
:strip_exif()/f/image/p4Wm3ZFgricRwPZwYhSYf6d3.jpg?f=fotoalbum_large)
:strip_exif()/f/image/EirU4AGWL2vGRVEkn3hgxDkQ.gif?f=fotoalbum_large)
:strip_exif()/f/image/PzyXkDoWh69NsP00cPVTwyAp.gif?f=fotoalbum_large)
:strip_exif()/f/image/c3MZ9uvgpklFq15D0hNf7Gxj.gif?f=fotoalbum_large)
:strip_exif()/f/image/QNu4Bxri0zd4ss1hIxQ9Sld4.gif?f=fotoalbum_large)
:strip_exif()/f/image/2yR8Rmsb66XYeiGrQzdieHC8.gif?f=fotoalbum_large)
:strip_exif()/f/image/R7OnV8XuYfkvCBPH49mvG6Jr.gif?f=fotoalbum_large)
:strip_exif()/f/image/M6mrYQisgHf8X9j8TC5sZNPr.gif?f=fotoalbum_large)
:strip_exif()/f/image/YwUtkGwT7Lvv7k3nrIWkttOT.gif?f=fotoalbum_large)
:strip_exif()/f/image/DwMPagCdx34s7tFPoFwUTYSV.gif?f=fotoalbum_large)
:strip_exif()/f/image/lVxNyxvAgdXsYUzJsrY8UAnB.gif?f=fotoalbum_large)