WP: Panasonic KIT-WC07L3E5 7kw , buffer PAW-BTANK50L-2, Boiler PAW-TD20C1E5-1 | Solar: Goodwe SDT G2 GW6K-DT 6 kW | Battery: 2x Zendure SF 2400 AC totaal 17.2 kW
Ik heb het er tussen gezet, en de standaard 5sec interval uitgeschakkeld.ctrl-tab schreef op zaterdag 18 april 2026 @ 00:08:
[...]
Heb het als zodanig draaien inderdaad. Heb het idee dat hij wat rustiger reageert nu maar het is wat lastig vergelijken gezien er vrij veel activiteit was vanavond.
Maar je kan er donder op zeggen dat hij sneller zal reageren op fluctuaties.
Met bv een 5 seconden interval heb je kans dat je voor langere tijd eindigt op iets tegen de 5 seconden delay, en hoe hoger je interval hoe groter het potentiele delay. (had hem zelf op 11 staan, dat is helemaal erg, dan kan je tot 10 seconden extra achter lopen..)
Mooie test in iedergeval 🤗
Top ben benieuwd naar je ervaring.RemmyB83 schreef op zaterdag 18 april 2026 @ 00:32:
[...]
Ik heb het er tussen gezet, en de standaard 5sec interval uitgeschakkeld.
Mooie test in iedergeval 🤗
Zat even wat te zoeken en indirect kan zowel de timebased trigger, als een state based trigger , configurabel gemaakt worden.
Dus een veldje met de tijd in seconden, of een DSMR4 vinkje zou moeten kunnen binnen de configuratie.
Misschien een idee voor een pr
WP: Panasonic KIT-WC07L3E5 7kw , buffer PAW-BTANK50L-2, Boiler PAW-TD20C1E5-1 | Solar: Goodwe SDT G2 GW6K-DT 6 kW | Battery: 2x Zendure SF 2400 AC totaal 17.2 kW
Klopt. De hoogste van de twee temperaturen wordt aan HA doorgegeven.Gramser schreef op vrijdag 17 april 2026 @ 21:55:
Helder! En nu geeft hij bij mij 1 temperatuur weer - ik heb twee inverters. Laat hij de warmste zien?
6 kWp solar | Daikin Intergas Hybride 8kW | Tesla Model Y RWD 2023 | Fiat 500e 2014 | Zendure SF2400AC 17 kWh
En soc level, wordt de laagste of hoogste doorgegeven aan Gielz?gast777 schreef op zaterdag 18 april 2026 @ 00:53:
[...]
Klopt. De hoogste van de twee temperaturen wordt aan HA doorgegeven.
Ik heb het ook zo draaien, aansturing Gielz synchroon met P1, ook op DSMR4. Ik kan beamen dat dit goed werkt.ctrl-tab schreef op vrijdag 17 april 2026 @ 22:59:
@gielz Ik heb mogelijk een zinnige suggestie voor een toekomstige versie.
Ik heb zelf een DSMR4 meter en die update dus maar om de 10 seconden.
In de docs wordt 5 seconden als trigger geadviseerd in de automation.
Dit kan resulteren in een forse extra delay als je op het verkeerde moment in time zit, die ook even kan aanhouden. Eigenlijk met elke time based trigger heb je problemen met een DSMR 4 meter.
Om deze toch zo adequaat mogelijk te laten werken heb ik de time based trigger vervangen door onderstaande.
Nu weet je zeker dat hij op het juiste moment een change door voert op de baterij (namelijk als de homewizard daadwerkelijk iets nieuws rapporteert).code:
1 2 3 4 5 6 7 8 9- trigger: state entity_id: sensor.homewizard_p1_power id: aansturing_trigger not_from: - unknown - unavailable not_to: - unknown - unavailable
Maar aangezien DSMR4 zijn uittrede aan het doen is en DSMR5 hier al redelijk de standaard lijkt te zijn, kan ik me voorstellen dat @gielz er geen zin in heeft een manier te zoeken om dit te laten werken voor zowel DSMR4 én DSMR5 gebruikers, aangezien de batterij enigszins langzaam reageert werkt synchroniseren van P1 en de automatisering op DSMR5 namelijk juist averechts.
Volgens mij is dat dan weer het gemiddelde van je stapels.Henkoes schreef op zaterdag 18 april 2026 @ 05:45:
[...]
En soc level, wordt de laagste of hoogste doorgegeven aan Gielz?
Ja daar heb je wel een punt. Wellicht een opmerking in de docs waard.Aardedraadje schreef op zaterdag 18 april 2026 @ 06:23:
[...]
Ik heb het ook zo draaien, aansturing Gielz synchroon met P1, ook op DSMR4. Ik kan beamen dat dit goed werkt.
Maar aangezien DSMR4 zijn uittrede aan het doen is en DSMR5 hier al redelijk de standaard lijkt te zijn, kan ik me voorstellen dat @gielz er geen zin in heeft een manier te zoeken om dit te laten werken voor zowel DSMR4 én DSMR5 gebruikers, aangezien de batterij enigszins langzaam reageert werkt synchroniseren van P1 en de automatisering op DSMR5 namelijk juist averechts.
WP: Panasonic KIT-WC07L3E5 7kw , buffer PAW-BTANK50L-2, Boiler PAW-TD20C1E5-1 | Solar: Goodwe SDT G2 GW6K-DT 6 kW | Battery: 2x Zendure SF 2400 AC totaal 17.2 kW
Bij een slimme meter die per seconden meting heeft zal de aansturing volledig uit het lood gaan en nooit meer NOM kunnen draaien.ctrl-tab schreef op vrijdag 17 april 2026 @ 22:59:
@gielz Ik heb mogelijk een zinnige suggestie voor een toekomstige versie.
Ik heb zelf een DSMR4 meter en die update dus maar om de 10 seconden.
In de docs wordt 5 seconden als trigger geadviseerd in de automation.
Dit kan resulteren in een forse extra delay als je op het verkeerde moment in time zit, die ook even kan aanhouden. Eigenlijk met elke time based trigger heb je problemen met een DSMR 4 meter.
Om deze toch zo adequaat mogelijk te laten werken heb ik de time based trigger vervangen door onderstaande.
Nu weet je zeker dat hij op het juiste moment een change door voert op de baterij (namelijk als de homewizard daadwerkelijk iets nieuws rapporteert).code:
1 2 3 4 5 6 7 8 9- trigger: state entity_id: sensor.homewizard_p1_power id: aansturing_trigger not_from: - unknown - unavailable not_to: - unknown - unavailable
Dit is de reden dat er 5 sec interval gebruikt word. De batterij heeft namelijk 4 sec nodig om te reageren.
Zendure-HA.com | Run Zendure your way — in Home Assistant
Bedoel je met reageren: opbouwen/afbouwen naar de nieuwe input/output? Of bedoel je uberhaupt 4 seconden voordat de zendure weet dat hij iets moet doen?gielz schreef op zaterdag 18 april 2026 @ 08:02:
[...]
Bij een slimme meter die per seconden meting heeft zal de aansturing volledig uit het lood gaan en nooit meer NOM kunnen draaien.
Dit is de reden dat er 5 sec interval gebruikt word. De batterij heeft namelijk 4 sec nodig om te reageren.
De hele cyclus; ontvangen, verwerken en eventueel nog opstarten. Dit kan soms net binnen 4 sec. Maar daarom dus een 5 sec interval.Henkoes schreef op zaterdag 18 april 2026 @ 08:26:
[...]
Bedoel je met reageren: opbouwen/afbouwen naar de nieuwe input/output? Of bedoel je uberhaupt 4 seconden voordat de zendure weet dat hij iets moet doen?
Ziet er dan zo uit;
Zendure-HA.com | Run Zendure your way — in Home Assistant
In dezelfde experiabox kan je de ip-adressen vastzetten of wijzigen en vastzetten zodat ze na een herstart weer hetzelfde ip-adres krijgen als voorheen, dit regelt de zogenaamde DNS server van je Experiabox.Gramser schreef op vrijdag 17 april 2026 @ 23:05:
[...]
Dat hebben ze zelf gedaan… heb ik geen rol in gehad. Overgenomen uit het overzicht van de Experiabox.
Kijk eens bij ‘Leases’ of ‘MAC\ IP Routing’
Zo kan je zelf een overzicht maken en je up-adressen in huis logisch beheren
Gasloos 2019 + WP Panasonic H-serie 7kW + 300 liter boilervat + PV 12.415Wp + Home Assistant + Hyundai Ioniq 6 First Edition + Zaptec laadpaal
Ja, hierdoor hoef je op je apparaten niks in te stellen en regelt je router het.Gramser schreef op zaterdag 18 april 2026 @ 09:02:
Dat is -denk ik- hetzelfde als toewijzen van een statisch IP adres? Heb ik met de HA Green wel gedaan.
Enige wat je even moet onthouden dat als er een nieuw modem/router komt en/of een reset krijgt,
je dus ook alles weer opnieuw moet instellen.
Mini Server - PiHole, Backups, Nextcloud | NUC - HomeAssistant (docker), Zigbee2Mqtt (docker), ZwaveJSUI (docker), mqtt, P1-USB | Zendure SF800Pro | 1350Wp PV
Heb je ze wel als vast IP adres in de experiabox gezet? Anders kun je nog wel eens verrast worden als DHCP ze een ander IP adres gaat geven. Gebeurd vlgs mij o.a. al bij modem restart.Gramser schreef op vrijdag 17 april 2026 @ 23:05:
[...]
Dat hebben ze zelf gedaan… heb ik geen rol in gehad. Overgenomen uit het overzicht van de Experiabox.
De tip is je al gegeven zie ik.
[ Voor 4% gewijzigd door Devke op 18-04-2026 10:11 ]
Denk in kansen, niet in problemen. Homewizard Plug-In Battery 5.4 kWh. Zendure 2400 AC 17.2 kWh. Testen Accumate 4.8 kWh Plug-In Battery. 3330 Wp zonnepanelen. EV 77 kWh. Peblar Business Laadpaal.
Ja maar ik heb de zendures nog niet vastgezet. Alleen de HA Green. Dus alsnog goede tip!Devke schreef op zaterdag 18 april 2026 @ 10:09:
[...]
Heb je ze wel als vast IP adres in de experiabox gezet? Anders kun je nog wel eens verrast worden als DHCP ze een ander IP adres gaat geven. Gebeurd vlgs mij o.a. al bij modem restart.
De tip is je al gegeven zie ik.
Ter overweging (en iets geavanceeerder)Gramser schreef op zaterdag 18 april 2026 @ 10:17:
[...]
Ja maar ik heb de zendures nog niet vastgezet. Alleen de HA Green. Dus alsnog goede tip!
Je router kent statische (vast) en dynamische adressen (die kunnen veranderen). Je telefoon heeft meestal een dynamisch adres en meer ‘vaste’ apparaten als server (ha green), batterijen, tv en sensors een statisch adres.
Dynamische adressen worden door een dhcp server op je router uitgegeven. Die komen uit een zogenaamde pool. In je experia box kan je waarschijnlijk de reeks van de pool vinden of instellen.
Waarom vaste adressen? Sommige apparaten bv sensors of batterijen wil je besturen. Als je batterij of p1 sensor een dynamisch adres heeft en dat veranderd werken je automatiseringen niet meer, immers HA wil een commando naar je batterij sturen maar het adres is veranderd en de ‘verbinding’ verbroken. ( en zoek je jezelf kleurenblind waarom). Bijvoorbeeld ip-adres van P1 sensor in Gielz integratie.
Maar voor jezelf een indeling van de vaste adressen. Ik heb bijvoorbeeld een reeks voor alles wat met WP te maken heeft (192.168.x.220 tot .240) en een andere reeks voor alles wat met Zendure te maken heeft.
Als laatste het beste is de vaste adressen door je router uit te laten geven. Anders loop je risico dat een apparaat een vast ip-adres in de dhcp pool heeft en de router dit adres aan ander apparaat uitgeeft en je dus twee apparaten met zelfde adres hebt.
Dat maakt fout zoeken later ook weer makkelijker.
Succes met je HA reis.
Kleine toevoeging hierop voor @Gramser , ook al is het offtopic, nagenoeg alle apparaten starten dynamisch (dhcp). Dan kun je namelijk altijd verbinding maken: hoi ik ben nieuw hier, welk IP mag ik hebben?Maarten60 schreef op zaterdag 18 april 2026 @ 11:20:
[...]
Ter overweging (en iets geavanceeerder)
Je router kent statische (vast) en dynamische adressen (die kunnen veranderen). Je telefoon heeft meestal een dynamisch adres en meer ‘vaste’ apparaten als server (ha green), batterijen, tv en sensors een statisch adres.
Dynamische adressen worden door een dhcp server op je router uitgegeven. Die komen uit een zogenaamde pool. In je experia box kan je waarschijnlijk de reeks van de pool vinden of instellen.
Waarom vaste adressen? Sommige apparaten bv sensors of batterijen wil je besturen. Als je batterij of p1 sensor een dynamisch adres heeft en dat veranderd werken je automatiseringen niet meer, immers HA wil een commando naar je batterij sturen maar het adres is veranderd en de ‘verbinding’ verbroken. ( en zoek je jezelf kleurenblind waarom). Bijvoorbeeld ip-adres van P1 sensor in Gielz integratie.
Maar voor jezelf een indeling van de vaste adressen. Ik heb bijvoorbeeld een reeks voor alles wat met WP te maken heeft (192.168.x.220 tot .240) en een andere reeks voor alles wat met Zendure te maken heeft.
Als laatste het beste is de vaste adressen door je router uit te laten geven. Anders loop je risico dat een apparaat een vast ip-adres in de dhcp pool heeft en de router dit adres aan ander apparaat uitgeeft en je dus twee apparaten met zelfde adres hebt.
Dat maakt fout zoeken later ook weer makkelijker.
Succes met je HA reis.
De onderverdeling moet je ZELF maken in de router, je koppelt dan het mac adres van een zendure, HA server, etc. aan een vast IP. Dus als dan je Zendure met mac adres 00:00:00:00:00:00 aanklopt bij je netwerk dan weet je router, oh die krijgt altijd IP 192.168.1.100 als je dat instelt.
Ryzen 7600 | 7800XT | Mustang Mach-E & ID.3 | Peblar Business | 4860wp | SolarFlow 2400 AC+ (16,8kWh)
het ging mij meer hieromWai_AM schreef op vrijdag 17 april 2026 @ 10:07:
[...]
heb je nordpool ook op EN gezet ? anders heb je een mix van NL en EN
gielz schreef op donderdag 16 april 2026 @ 07:29:
[...]
Ik zou voor engelstalige gaan.
De werking van beide is 1-1 maar het voordeel is dat de engelse zendure. entiteiten heeft.
Vind je de entiteiten geen groot issue dan zijn beide een prima keuze.
Releases zijn altijd identiek ook in de testperiode.
Gasloos 2019 + WP Panasonic H-serie 7kW + 300 liter boilervat + PV 12.415Wp + Home Assistant + Hyundai Ioniq 6 First Edition + Zaptec laadpaal
vanuit je readme:gielz schreef op zaterdag 18 april 2026 @ 08:32:
[...]
De hele cyclus; ontvangen, verwerken en eventueel nog opstarten. Dit kan soms net binnen 4 sec. Maar daarom dus een 5 sec interval.
Ziet er dan zo uit;
[Afbeelding]
betekent dit dat je tijdens de grijze periodes geen NOM houdt?Dynamisch NOM (Duur)
Wanneer sensor.dynamisch_duurste_periode op JA staat zal hij NOM gaan ontladen en de rest van de tijd staat de batterij in standby.
[ Voor 18% gewijzigd door hemertje op 18-04-2026 12:52 ]
Gasloos 2019 + WP Panasonic H-serie 7kW + 300 liter boilervat + PV 12.415Wp + Home Assistant + Hyundai Ioniq 6 First Edition + Zaptec laadpaal
Onderdeel hiervan zou gemakkelijk in @gielz Gielz dashboard kunnen, namelijk het aantal gedraaide cycli van de batterij en de daarmee gepaard gaande kosten van slijtage. Beetje pijnlijk, wel realistisch ;-)
De capaciteit haal je op uit de Gielz zelf, de investeringskosten van de batterij middels een inputnumber.
:strip_exif()/f/image/iMovI4ERjvUoAU1XNeGsxoVQ.png?f=user_large)
De 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
| template:
# ----------------------------------------------------------------
# Cyclus-monitor — batterij slijtage
# ----------------------------------------------------------------
- trigger:
- platform: state
entity_id: sensor.solarflow_2400_ac_aggr_charge_total
sensor:
- name: "Batterij Totaal Aantal Cycli"
unique_id: battery_total_cycles
unit_of_measurement: "cycli"
icon: mdi:sync
state: >
{% set totaal_geladen = trigger.to_state.state | float(0) %}
{% set capaciteit = states('sensor.zendure_2400_ac_totale_capaciteit') | float(8.64) %}
{{ (totaal_geladen / capaciteit) | round(1) if totaal_geladen > 0 else 0 }}
- name: "Batterij Slijtage Kosten Totaal"
unique_id: battery_wear_cost_total
unit_of_measurement: "€"
icon: mdi:cash-clock
state: >
{% set cycli = states('sensor.batterij_totaal_aantal_cycli') | float(0) %}
{% set investering = states('input_number.battery_investment') | float(2600) %}
{# Slijtage per cyclus = investering / 6000 cycli (LiFePO4 levensduur) #}
{% set slijtage_per_cyclus = investering / 6000 %}
{{ (cycli * slijtage_per_cyclus) | round(2) }} |
1
2
3
4
5
6
7
8
9
10
| input_number:
battery_investment:
mode: box
name: "Investering batterij"
min: 0
max: 10000
step: 1
initial: 2600
unit_of_measurement: "€"
icon: mdi:battery-charging |
Ik krijg deze foutmelding:
battery 1 soc: unexpected status: 404 (Not Found) GET http://localhost:1880/properties/report
en
battery 1 power: unexpected status: 404 (Not Found) GET http://localhost:1880/properties/report
[ Voor 27% gewijzigd door Gramser op 18-04-2026 15:26 ]
even omdenken, dan kan je ook je opbrengsten weergeven toch?edjes schreef op zaterdag 18 april 2026 @ 15:14:
Ik heb inmiddels een zeer uitgebreide ROI geschreven voor mijn batterij, panelen en opbrengst in de grid.
Onderdeel hiervan zou gemakkelijk in @gielz Gielz dashboard kunnen, namelijk het aantal gedraaide cycli van de batterij en de daarmee gepaard gaande kosten van slijtage. Beetje pijnlijk, wel realistisch ;-)
De capaciteit haal je op uit de Gielz zelf, de investeringskosten van de batterij middels een inputnumber.
[Afbeelding]
De code:code:Het inputnumber:
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 27template: # ---------------------------------------------------------------- # Cyclus-monitor — batterij slijtage # ---------------------------------------------------------------- - trigger: - platform: state entity_id: sensor.solarflow_2400_ac_aggr_charge_total sensor: - name: "Batterij Totaal Aantal Cycli" unique_id: battery_total_cycles unit_of_measurement: "cycli" icon: mdi:sync state: > {% set totaal_geladen = trigger.to_state.state | float(0) %} {% set capaciteit = states('sensor.zendure_2400_ac_totale_capaciteit') | float(8.64) %} {{ (totaal_geladen / capaciteit) | round(1) if totaal_geladen > 0 else 0 }} - name: "Batterij Slijtage Kosten Totaal" unique_id: battery_wear_cost_total unit_of_measurement: "€" icon: mdi:cash-clock state: > {% set cycli = states('sensor.batterij_totaal_aantal_cycli') | float(0) %} {% set investering = states('input_number.battery_investment') | float(2600) %} {# Slijtage per cyclus = investering / 6000 cycli (LiFePO4 levensduur) #} {% set slijtage_per_cyclus = investering / 6000 %} {{ (cycli * slijtage_per_cyclus) | round(2) }}code:
1 2 3 4 5 6 7 8 9 10input_number: battery_investment: mode: box name: "Investering batterij" min: 0 max: 10000 step: 1 initial: 2600 unit_of_measurement: "€" icon: mdi:battery-charging
ONGETEST!
Alle sensoren voor ROI berekening
Input helpers voor tarieven en investeringcode:
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# ---------------------------------------------------------------- # Zendure ROI Calculator - Complete batterij economie # ---------------------------------------------------------------- template: # ---------------------------------------------------------------- # Cyclus-monitor - batterij slijtage (origineel van edjes) # ---------------------------------------------------------------- - trigger: - platform: state entity_id: sensor.solarflow_2400_ac_aggr_charge_total sensor: - name: "Batterij Totaal Aantal Cycli" unique_id: battery_total_cycles unit_of_measurement: "cycli" icon: mdi:sync state: > {% set totaal_geladen = trigger.to_state.state | float(0) %} {% set capaciteit = states('sensor.zendure_2400_ac_totale_capaciteit') | float(8.64) %} {{ (totaal_geladen / capaciteit) | round(1) if totaal_geladen > 0 else 0 }} - name: "Batterij Slijtage Kosten Totaal" unique_id: battery_wear_cost_total unit_of_measurement: "EUR" icon: mdi:cash-clock state: > {% set cycli = states('sensor.batterij_totaal_aantal_cycli') | float(0) %} {% set investering = states('input_number.battery_investment') | float(2600) %} {# Slijtage per cyclus = investering / 6000 cycli (LiFePO4 levensduur) #} {% set slijtage_per_cyclus = investering / 6000 %} {{ (cycli * slijtage_per_cyclus) | round(2) }} # ---------------------------------------------------------------- # Opbrengsten - energie besparingen en inkomsten # ---------------------------------------------------------------- - sensor: - name: "Batterij Totaal Opgeladen" unique_id: battery_total_charged unit_of_measurement: "kWh" icon: mdi:battery-charging-100 state: > {{ states('sensor.solarflow_2400_ac_aggr_charge_total') | float(0) | round(2) }} - name: "Batterij Totaal Ontladen" unique_id: battery_total_discharged unit_of_measurement: "kWh" icon: mdi:battery-discharging-100 state: > {{ states('sensor.solarflow_2400_ac_aggr_discharge_total') | float(0) | round(2) }} - name: "Batterij Efficiëntie" unique_id: battery_efficiency unit_of_measurement: "%" icon: mdi:percent state: > {% set opgeladen = states('sensor.batterij_totaal_opgeladen') | float(0) %} {% set ontladen = states('sensor.batterij_totaal_ontladen') | float(0) %} {% if opgeladen > 0 %} {{ ((ontladen / opgeladen) * 100) | round(1) }} {% else %} 0 {% endif %} - name: "Batterij Besparing Laadtarief" unique_id: battery_savings_low_tariff unit_of_measurement: "EUR" icon: mdi:cash-plus state: > {% set ontladen = states('sensor.batterij_totaal_ontladen') | float(0) %} {% set laad_tarief = states('input_number.electricity_price_low') | float(0.25) %} {% set piek_tarief = states('input_number.electricity_price_peak') | float(0.45) %} {% set besparing_per_kwh = piek_tarief - laad_tarief %} {{ (ontladen * besparing_per_kwh) | round(2) }} - name: "Batterij Zonnestroom Besparing" unique_id: battery_solar_savings unit_of_measurement: "EUR" icon: mdi:weather-sunny state: > {% set solar_opgeladen = states('sensor.zendure_solar_charge_total') | float(0) %} {% set feed_in_tarief = states('input_number.solar_feed_in_price') | float(0.09) %} {% set piek_tarief = states('input_number.electricity_price_peak') | float(0.45) %} {% set besparing_per_kwh = piek_tarief - feed_in_tarief %} {{ (solar_opgeladen * besparing_per_kwh) | round(2) }} # ---------------------------------------------------------------- # ROI Berekeningen # ---------------------------------------------------------------- - sensor: - name: "Batterij Totale Besparingen" unique_id: battery_total_savings unit_of_measurement: "EUR" icon: mdi:cash-multiple state: > {% set laad_tarief_besparing = states('sensor.batterij_besparing_laadtarief') | float(0) %} {% set solar_besparing = states('sensor.batterij_zonnestroom_besparing') | float(0) %} {{ (laad_tarief_besparing + solar_besparing) | round(2) }} - name: "Batterij Netto ROI" unique_id: battery_net_roi unit_of_measurement: "EUR" icon: mdi:trending-up state: > {% set totale_besparingen = states('sensor.batterij_totale_besparingen') | float(0) %} {% set slijtage_kosten = states('sensor.batterij_slijtage_kosten_totaal') | float(0) %} {{ (totale_besparingen - slijtage_kosten) | round(2) }} - name: "Batterij ROI Percentage" unique_id: battery_roi_percentage unit_of_measurement: "%" icon: mdi:percent state: > {% set netto_roi = states('sensor.batterij_netto_roi') | float(0) %} {% set investering = states('input_number.battery_investment') | float(2600) %} {% if investering > 0 %} {{ ((netto_roi / investering) * 100) | round(1) }} {% else %} 0 {% endif %} - name: "Batterij Terugverdientijd" unique_id: battery_payback_period unit_of_measurement: "jaar" icon: mdi:calendar-clock state: > {% set netto_roi = states('sensor.batterij_netto_roi') | float(0) %} {% set jaarlijkse_besparing = states('sensor.batterij_jaarlijkse_besparing') | float(0) %} {% if jaarlijkse_besparing > 0 %} {{ ((2600 - netto_roi) / jaarlijkse_besparing) | round(1) }} {% else %} 999 {% endif %} - name: "Batterij Jaarlijkse Besparing" unique_id: battery_annual_savings unit_of_measurement: "EUR/jaar" icon: mdi:calendar-today state: > {% set totale_besparingen = states('sensor.batterij_totale_besparingen') | float(0) %} {% set slijtage_kosten = states('sensor.batterij_slijtage_kosten_totaal') | float(0) %} {% set dagen_actief = (now().timestamp() - states('input_datetime.battery_install_date').timestamp()) / 86400 %} {% if dagen_actief > 0 %} {{ (((totale_besparingen - slijtage_kosten) / dagen_actief) * 365) | round(0) }} {% else %} 0 {% endif %} # ---------------------------------------------------------------- - sensor: - name: "Batterij Resterende Levensduur" unique_id: battery_remaining_life unit_of_measurement: "jaar" icon: mdi:heart-pulse state: > {% set cycli = states('sensor.batterij_totaal_aantal_cycli') | float(0) %} {% set resterende_cycli = (6000 - cycli) %} {% set cycli_per_jaar = states('sensor.batterij_cycli_per_jaar') | float(365) %} {% if cycli_per_jaar > 0 %} {{ (resterende_cycli / cycli_per_jaar) | round(1) }} {% else %} 20 {% endif %} - name: "Batterij Cycli per Jaar" unique_id: battery_cycles_per_year unit_of_measurement: "cycli/jaar" icon: mdi:calendar-sync state: > {% set cycli = states('sensor.batterij_totaal_aantal_cycli') | float(0) %} {% set dagen_actief = (now().timestamp() - states('input_datetime.battery_install_date').timestamp()) / 86400 %} {% if dagen_actief > 0 %} {{ ((cycli / dagen_actief) * 365) | round(0) }} {% else %} 0 {% endif %}
Dashboard met alle metricscode:
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# ---------------------------------------------------------------- # Zendure ROI Calculator - Input helpers # ---------------------------------------------------------------- input_number: battery_investment: mode: box name: "Investering Batterij" min: 0 max: 15000 step: 50 initial: 2600 unit_of_measurement: "EUR" icon: mdi:cash electricity_price_low: mode: box name: "Stroomtarief Laag" min: 0 max: 1 step: 0.01 initial: 0.25 unit_of_measurement: "EUR/kWh" icon: mdi:currency-eur electricity_price_peak: mode: box name: "Stroomtarief Piek" min: 0 max: 1 step: 0.01 initial: 0.45 unit_of_measurement: "EUR/kWh" icon: mdi:currency-eur solar_feed_in_price: mode: box name: "Zonnestroom Teruglever Tarief" min: 0 max: 1 step: 0.01 initial: 0.09 unit_of_measurement: "EUR/kWh" icon: mdi:solar-power input_datetime: battery_install_date: name: "Batterij Installatie Datum" has_time: true has_date: true icon: mdi:calendar-plus
🔢 Nieuwe Sensoren: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# ---------------------------------------------------------------- # Zendure ROI Dashboard - Complete economie overzicht # ---------------------------------------------------------------- type: grid square: false columns: 2 cards: # ---------------------------------------------------------------- # Header - Investering en ROI # ---------------------------------------------------------------- - type: entities title: "Zendure Batterij ROI" show_header_toggle: false entities: - entity: input_number.battery_investment name: "Investering" - entity: sensor.batterij_netto_roi name: "Netto ROI" - entity: sensor.batterij_roi_percentage name: "ROI %" - entity: sensor.batterij_terugverdientijd name: "Terugverdientijd" - entity: sensor.batterij_jaarlijkse_besparing name: "Jaarlijkse Besparing" # ---------------------------------------------------------------- # Cycli en Slijtage # ---------------------------------------------------------------- - type: entities title: "Batterij Gebruik" show_header_toggle: false entities: - entity: sensor.batterij_totaal_aantal_cycli name: "Totale Cycli" - entity: sensor.batterij_slijtage_kosten_totaal name: "Slijtage Kosten" - entity: sensor.batterij_resterende_levensduur name: "Resterende Levensduur" - entity: sensor.batterij_cycli_per_jaar name: "Cycli per Jaar" - entity: sensor.batterij_efficiëntie name: "Efficiëntie" # ---------------------------------------------------------------- # Energie en Opbrengsten # ---------------------------------------------------------------- - type: entities title: "Energie & Opbrengsten" show_header_toggle: false entities: - entity: sensor.batterij_totaal_opgeladen name: "Totaal Opgeladen" - entity: sensor.batterij_totaal_ontladen name: "Totaal Ontladen" - entity: sensor.batterij_besparing_laadtarief name: "Laadtarief Besparing" - entity: sensor.batterij_zonnestroom_besparing name: "Zonnestroom Besparing" - entity: sensor.batterij_totale_besparingen name: "Totale Besparingen" # ---------------------------------------------------------------- # Tarief Instellingen # ---------------------------------------------------------------- - type: entities title: "Tarief Instellingen" show_header_toggle: false entities: - entity: input_number.electricity_price_low name: "Laag Tarief" - entity: input_number.electricity_price_peak name: "Piek Tarief" - entity: input_number.solar_feed_in_price name: "Teruglever Tarief" - entity: input_datetime.battery_install_date name: "Installatie Datum" # ---------------------------------------------------------------- # ROI Grafiek # ---------------------------------------------------------------- - type: history-graph title: "ROI Ontwikkeling" hours_to_show: 168 # 1 week refresh_interval: 60 entities: - entity: sensor.batterij_netto_roi name: "Netto ROI" - entity: sensor.batterij_totale_besparingen name: "Totale Besparingen" - entity: sensor.batterij_slijtage_kosten_totaal name: "Slijtage Kosten" # ---------------------------------------------------------------- # Energie Grafiek # ---------------------------------------------------------------- - type: history-graph title: "Energie Stromen" hours_to_show: 168 # 1 week refresh_interval: 60 entities: - entity: sensor.batterij_totaal_opgeladen name: "Opgeladen" - entity: sensor.batterij_totaal_ontladen name: "Ontladen"
Economie:
- sensor.batterij_netto_roi - Netto winst/verlies
- sensor.batterij_roi_percentage - ROI in %
- sensor.batterij_terugverdientijd - Jaar om terug te verdienen
- sensor.batterij_jaarlijkse_besparing - Besparing per jaar
- sensor.batterij_totaal_opgeladen/ontladen - kWh totals
- sensor.batterij_efficiëntie - Round-trip efficiëntie
- sensor.batterij_besparing_laadtarief - Besparing door piek/laag tarief
- sensor.batterij_zonnestroom_besparing - Besparing door zonnestroom
- sensor.batterij_resterende_levensduur - Jaar resterend
- sensor.batterij_cycli_per_jaar - Gebruiksintensiteit
- ROI Overzicht - Investering, netto ROI, percentage, terugverdientijd
- Batterij Gebruik - Cycli, slijtage, efficiëntie, levensduur
- Energie & Opbrengsten - Opladen/ontladen, besparingen
- Tarief Instellingen - Aanpasbare tarieven
- Grafieken - ROI en energie trends
Voeg templates toe aan configuration.yaml:
1
| template: !include zendure_roi_templates.yaml |
1
2
| input_number: !include zendure_roi_inputs.yaml input_datetime: !include zendure_roi_inputs.yaml |
Configureer tarieven en installatie datum
💡 Voorbeeld Berekening:
- Investering: €2600
- Jaarlijkse besparing: €400
- Slijtage: €65/jaar
- Netto besparing: €335/jaar
- Terugverdientijd: 7.8 jaar
- ROI na 10 jaar: €750 winst
Gasloos 2019 + WP Panasonic H-serie 7kW + 300 liter boilervat + PV 12.415Wp + Home Assistant + Hyundai Ioniq 6 First Edition + Zaptec laadpaal
volgens mij moet je in EVCC iedere batterij apart ingevenGramser schreef op zaterdag 18 april 2026 @ 15:23:
Mag ik hier een vraag stellen over Zendure in HA, icm EVCC? Ik moet voor de thuisbatterij het IP-adres/de hostname opgeven, maar de @gast777 maakt meerdere zendures mogelijk. Wat vul ik daar in? Ik heb nu "localhost:1880" ingevuld maar daarmee leest EVCC de batetrijcapaciteit niet... maak ik een denkfout?
Ik krijg deze foutmelding:
battery 1 soc: unexpected status: 404 (Not Found) GET http://localhost:1880/properties/report
en
battery 1 power: unexpected status: 404 (Not Found) GET http://localhost:1880/properties/report
2 stuks dus bij jou
in het EVCC draadje kunnen ze je daar beter bij helpen dan hier....
Gasloos 2019 + WP Panasonic H-serie 7kW + 300 liter boilervat + PV 12.415Wp + Home Assistant + Hyundai Ioniq 6 First Edition + Zaptec laadpaal
Ik denk dat je gelijk hebt, en ik denk dat ik sowieso een denkfout maak. Denk dat ik het IP adres van mijn HA instantie moet hebben. Maar ik ga me even melden in het EVCC topic.hemertje schreef op zaterdag 18 april 2026 @ 16:55:
[...]
volgens mij moet je in EVCC iedere batterij apart ingeven
2 stuks dus bij jou
in het EVCC draadje kunnen ze je daar beter bij helpen dan hier....
Mijn ervaring (DSMR4)is dat dit nog net iets beter werkt, dan de 5 of 10sec interval. Hij kan hem tot nu toe goed op 0 houden(als het gevraagde vermogen binnen zijn bereik zit).
🤗👍
1. Installeer nordpool HACS integratie.
2. maak een bestand aan in de packages directory, bv. nordpool.yaml
3. plaats de volgende code erin:
4. Herstart Home Assistant
er worden 3 Nummer input gemaakt voor
btw_percentage
opslag_energieleverancier
energiebelasting
en 2 nordpool prijzen sensors
- sensor.nordpool_kwh_nl_eur_5_09_0
Dit is de sensor voor de totaal prijs ( vul de 3 input variabele in met je eigen dynamische leverancier kosten)
- sensor.nordpool_kwh_nl_eur_5_10_0
Dit is de sensor voor de kale marktprijs
Eenmaal aangemaakt dan wordt de totaal prijs pas zichtbaar na de komende kwartier na je invoer van de input variabelen.
[/quote]Ik heb alles zo geinstalleerd en werkend, maar toch kloppen mijn prijzen niet ten opzichte van de prijzen in de Zonneplan app, ja ik heb voor zover ik weet de Zonneplan prijzen gepakt:
btw_percentage : 0,21
opslag_energieleverancier : 0,1108
energiebelasting : 0,022
Verschil is dan Zonneplan: 24,24 cent, Nordpool 24,56 cent
Zonneplan werkt nog met uurprijzen, Nordpool met kwartierprijzen, kan hier het verschil inzitten?
@gielz ben jij bereid beide in je dashboard / package te verwerken? dat zou wel heel gaaf zijn,
Gadget-freakz.com. Feedback en tips zijn welkom.
En weet je toevallig of dit met de Fritzbox ook kan?hemertje schreef op zaterdag 18 april 2026 @ 09:00:
In dezelfde experiabox kan je de ip-adressen vastzetten of wijzigen en vastzetten zodat ze na een herstart weer hetzelfde ip-adres krijgen als voorheen, dit regelt de zogenaamde DNS server van je Experiabox.
Kijk eens bij ‘Leases’ of ‘MAC\ IP Routing’
Zo kan je zelf een overzicht maken en je up-adressen in huis logisch beheren
Ik zou mijn 2 Zundures erg graag een zelfgekozen en dus statisch IP-adres geven, maar ben er nog niet achter hoe ik dat zou moeten doen…
Verdraagzaamheid is het hoogste gebod
en wie dat niet eert die schoppen we rot.
<John O`Mill>
Google: https://ekiwi-blog.de/en/...p-address-for-the-device/Hippe Lip schreef op zaterdag 18 april 2026 @ 17:35:
[...]
En weet je toevallig of dit met de Fritzbox ook kan?
Ik zou mijn 2 Zundures erg graag een zelfgekozen en dus statisch IP-adres geven, maar ben er nog niet achter hoe ik dat zou moeten doen…
Maar niet 123 relevant voor dit toppic verder.
Mini Server - PiHole, Backups, Nextcloud | NUC - HomeAssistant (docker), Zigbee2Mqtt (docker), ZwaveJSUI (docker), mqtt, P1-USB | Zendure SF800Pro | 1350Wp PV
Ik heb zes kantjes en maanden werk in een ROI.hemertje schreef op zaterdag 18 april 2026 @ 16:54:
[...]
even omdenken, dan kan je ook je opbrengsten weergeven toch?
Hier, kan je spelen.
Uitgangspunt: zonnepanelen (solaredge), tibber
Het is erg complex, maar zeer volledig.
Plaats roi.yaml in packages
ROI.yaml: https://www.dropbox.com/s...hfemrk8dxxsb35xuyksi&dl=0
of hier is de hele 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
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
| ## ROI 1.02 ##
################################
## INPUT NUMBER ##
################################
input_number:
battery_efficiency:
mode: box
name: "Batterij efficiëntie"
min: 50
max: 100
step: 1
initial: 90
unit_of_measurement: "%"
icon: mdi:battery-heart-outline
sell_price_fixed:
mode: box
name: "Verkoopprijs vast (EUR/kWh)"
min: 0.0000
max: 0.5000
step: 0.0001
initial: 0.0248
unit_of_measurement: "€/kWh"
icon: mdi:currency-eur
battery_investment:
mode: box
name: "Investering batterij"
min: 0
max: 10000
step: 1
initial: 1500
unit_of_measurement: "€"
icon: mdi:battery-charging
################################
## UTILITY METER ##
################################
# Bronnen van waarheid:
# grid import/export → Tibber last_meter (cumulatief, reset nooit)
# solar productie → SolarEdge energy_today (dagelijks, reset ~02:08)
# batterij → Zendure AC import/export
# kosten/opbrengst → Tibber accumulated (dagelijks, reset middernacht)
utility_meter:
# --- 15-minuut meters ---
grid_import_15m:
source: sensor.tibber_pulse_edwin_last_meter_consumption
cycle: quarter-hourly
grid_export_15m:
source: sensor.tibber_pulse_edwin_last_meter_production
cycle: quarter-hourly
battery_charge_15m:
source: sensor.zendure_2400_ac_energie_import
cycle: quarter-hourly
battery_discharge_15m:
source: sensor.zendure_2400_ac_energie_export
cycle: quarter-hourly
solar_production_15m:
source: sensor.solar_production_interval
cycle: quarter-hourly
# --- Dagelijkse solar productie ---
solar_production_daily:
source: sensor.sensor_solaredge_energy_today_kwh
cycle: daily
# --- Batterij besparing (informatief) ---
battery_profit_daily:
source: sensor.battery_profit_15m
cycle: daily
battery_profit_monthly:
source: sensor.battery_profit_15m
cycle: monthly
battery_profit_yearly:
source: sensor.battery_profit_15m
cycle: yearly
# --- Arbitrage winst (informatief) ---
battery_arbitrage_daily:
source: sensor.battery_arbitrage_profit_15m
cycle: daily
battery_arbitrage_monthly:
source: sensor.battery_arbitrage_profit_15m
cycle: monthly
battery_arbitrage_yearly:
source: sensor.battery_arbitrage_profit_15m
cycle: yearly
# --- Solar export opbrengst (informatief) ---
roi_solar_export_profit_daily:
source: sensor.solar_export_profit_15m
cycle: daily
roi_solar_export_profit_monthly:
source: sensor.solar_export_profit_15m
cycle: monthly
roi_solar_export_profit_yearly:
source: sensor.solar_export_profit_15m
cycle: yearly
# --- Tibber kosten/opbrengst — bron van waarheid ---
# accumulated reset dagelijks — yearly meter telt deltas op
tibber_reward_monthly:
source: sensor.tibber_reward_daily
cycle: monthly
tibber_reward_yearly:
source: sensor.tibber_reward_daily
cycle: yearly
tibber_cost_monthly:
source: sensor.tibber_cost_daily
cycle: monthly
tibber_cost_yearly:
source: sensor.tibber_cost_daily
cycle: yearly
# --- System totaal yearly ---
# Hernoemd om conflict met oude database entries te vermijden
roi_system_profit_yearly:
source: sensor.system_total_profit_daily
cycle: yearly
roi_system_profit_monthly:
source: sensor.system_total_profit_daily
cycle: monthly
# --- Solar winst (direct verbruik + export, exclusief batterijlading) ---
solar_profit_daily:
source: sensor.solar_profit_15m
cycle: daily
solar_profit_yearly:
source: sensor.solar_profit_15m
cycle: yearly
################################
## TEMPLATE ##
################################
template:
# ----------------------------------------------------------------
# Solar interval: delta per update van SolarEdge dagelijkse teller
# Reset om ~02:08 → negatieve delta = 0
# ----------------------------------------------------------------
- trigger:
- platform: state
entity_id: sensor.sensor_solaredge_energy_today_kwh
sensor:
- name: "Solar Production Interval"
unique_id: solar_production_interval
unit_of_measurement: "kWh"
device_class: energy
state_class: total_increasing
state: >
{% set current = trigger.to_state.state | float(0) %}
{% set previous = trigger.from_state.state | float(0) if trigger.from_state else 0 %}
{% set delta = current - previous %}
{{ (delta if delta >= 0 else 0) | round(3) }}
# ----------------------------------------------------------------
# Tibber dagelijkse kosten en opbrengst — bron van waarheid
# Getriggerd op Tibber accumulated sensoren
# Reset dagelijks om middernacht door Tibber zelf
# ----------------------------------------------------------------
- trigger:
- platform: state
entity_id:
- sensor.tibber_pulse_edwin_accumulated_cost
- sensor.tibber_pulse_edwin_accumulated_reward
sensor:
- name: "Tibber Cost Daily"
unique_id: tibber_cost_daily_sensor
unit_of_measurement: "€"
icon: mdi:cash-minus
state: >
{{ states('sensor.tibber_pulse_edwin_accumulated_cost') | float(0) | round(4) }}
- name: "Tibber Reward Daily"
unique_id: tibber_reward_daily_sensor
unit_of_measurement: "€"
icon: mdi:cash-plus
state: >
{{ states('sensor.tibber_pulse_edwin_accumulated_reward') | float(0) | round(4) }}
- name: "Tibber Net Daily"
unique_id: tibber_net_daily
unit_of_measurement: "€"
icon: mdi:cash-sync
state: >
{# Netto stroomkosten vandaag: wat je betaald hebt min wat je ontvangen hebt #}
{% set cost = states('sensor.tibber_pulse_edwin_accumulated_cost') | float(0) %}
{% set reward = states('sensor.tibber_pulse_edwin_accumulated_reward') | float(0) %}
{{ (cost - reward) | round(4) }}
# ----------------------------------------------------------------
# Prijssensoren — inkoop én verkoop apart
# Trigger elke 5 minuten én bij wijziging van bronentiteit
# ----------------------------------------------------------------
- trigger:
- platform: time_pattern
minutes: "/5"
- platform: state
entity_id:
- sensor.edwin_electricity_price
- input_number.sell_price_fixed
sensor:
- name: "Electricity Buy Price EUR"
unique_id: electricity_buy_price_eur
unit_of_measurement: "€/kWh"
icon: mdi:lightning-bolt
state: >
{# Handrem: als Tibber wegvalt bewaar de laatste bekende prijs #}
{% set prijs = states('sensor.edwin_electricity_price') | float(-1) %}
{% if prijs < 0 %}
{{ states('sensor.electricity_buy_price_eur') | float(0) }}
{% else %}
{{ prijs | round(4) }}
{% endif %}
- name: "Electricity Sell Price EUR"
unique_id: electricity_sell_price_eur
unit_of_measurement: "€/kWh"
icon: mdi:lightning-bolt-outline
state: >
{# Handrem: als Tibber wegvalt bewaar de laatste bekende prijs #}
{# Na 2026: pas input_number.sell_price_fixed aan #}
{% set buy = states('sensor.edwin_electricity_price') | float(-1) %}
{% set aftrek = states('input_number.sell_price_fixed') | float(0.0248) %}
{% if buy < 0 %}
{{ states('sensor.electricity_sell_price_eur') | float(0) }}
{% else %}
{{ [buy - aftrek, 0] | max | round(4) }}
{% endif %}
# ----------------------------------------------------------------
# ROI sensoren — getriggerd op 15m meters én prijswijzigingen
# ----------------------------------------------------------------
- trigger:
- platform: state
entity_id:
- sensor.grid_import_15m
- sensor.grid_export_15m
- sensor.solar_production_15m
- sensor.battery_charge_15m
- sensor.battery_discharge_15m
- sensor.electricity_buy_price_eur
- sensor.electricity_sell_price_eur
- input_number.battery_efficiency
sensor:
# --- Waarde zonnepanelen direct verbruik + export (exclusief batterijlading) ---
#
# solar_to_grid = echte solar export (zonder batterij arbitrage)
# direct_home_auto = solar minus export minus batterijlading
# Batterijlading telt niet mee: die kun je ook in de winter met netstroom vullen
- name: "Solar Profit 15m"
unique_id: solar_profit_15m
unit_of_measurement: "€"
icon: mdi:solar-power
state: >
{# Puur de besparing van zon → huis/auto direct verbruik #}
{# Export naar net zit al bij Tibber reward — geen dubbeltelling #}
{# Batterijlading uitgefilterd — die stroom zetten we later in #}
{% set solar = states('sensor.solar_production_15m') | float(0) %}
{% set grid_exp = states('sensor.grid_export_15m') | float(0) %}
{% set bat_chg = states('sensor.battery_charge_15m') | float(0) %}
{% set bat_dis = states('sensor.battery_discharge_15m')| float(0) %}
{% set buy = states('sensor.electricity_buy_price_eur') | float(0) %}
{% set bat_to_grid = [bat_dis, grid_exp] | min %}
{% set solar_to_grid = [grid_exp - bat_to_grid, 0] | max %}
{% set direct_home_auto = [solar - solar_to_grid - bat_chg, 0] | max %}
{{ (direct_home_auto * buy) | round(5) }}
# --- Werkelijke kosten MET batterij ---
#
# + grid_import * inkoopprijs
# - grid_export * verkoopprijs
# + laadverlies als gewogen gemiddelde van solar/net aandeel
- name: "Cost with battery"
unique_id: cost_with_battery
unit_of_measurement: "€"
icon: mdi:battery-charging
state: >
{% set import_kwh = states('sensor.grid_import_15m') | float(-1) %}
{% set export_kwh = states('sensor.grid_export_15m') | float(-1) %}
{% set bat_chg = states('sensor.battery_charge_15m') | float(-1) %}
{% set buy = states('sensor.electricity_buy_price_eur') | float(-1) %}
{% set sell = states('sensor.electricity_sell_price_eur') | float(-1) %}
{% set eff = states('input_number.battery_efficiency') | float(90) / 100 %}
{% if import_kwh < 0 or export_kwh < 0 or bat_chg < 0 or buy < 0 or sell < 0 %}
{{ states('sensor.cost_with_battery') | float(0) }}
{% else %}
{% set grid_cost = import_kwh * buy %}
{% set grid_revenue = export_kwh * sell %}
{% set solar_15m = states('sensor.solar_production_15m') | float(0) %}
{% set total_in = import_kwh + solar_15m %}
{% set solar_ratio = (solar_15m / total_in) if total_in > 0 else 0 %}
{% set grid_ratio = (import_kwh / total_in) if total_in > 0 else 1 %}
{% set loss_price = solar_ratio * sell + grid_ratio * buy %}
{% set loss_cost = bat_chg * (1 - eff) * loss_price %}
{{ (grid_cost - grid_revenue + loss_cost) | round(5) }}
{% endif %}
# --- Virtuele kosten ZONDER batterij ---
#
# Werkelijk huisverbruik = solar + grid_imp + bat_dis - grid_exp - bat_chg
# Zonder batterij dekt solar dit verbruik direct:
# virtual_import = max(load - solar, 0) → inkoopprijs
# virtual_export = max(solar - load, 0) → verkoopprijs
- name: "Cost without battery"
unique_id: cost_without_battery
unit_of_measurement: "€"
icon: mdi:home-lightning-bolt
state: >
{% set solar = states('sensor.solar_production_15m') | float(-1) %}
{% set grid_imp = states('sensor.grid_import_15m') | float(-1) %}
{% set grid_exp = states('sensor.grid_export_15m') | float(-1) %}
{% set bat_chg = states('sensor.battery_charge_15m') | float(-1) %}
{% set bat_dis = states('sensor.battery_discharge_15m') | float(-1) %}
{% set buy = states('sensor.electricity_buy_price_eur') | float(-1) %}
{% set sell = states('sensor.electricity_sell_price_eur') | float(-1) %}
{% if solar < 0 or grid_imp < 0 or grid_exp < 0 or bat_chg < 0 or bat_dis < 0 or buy < 0 or sell < 0 %}
{{ states('sensor.cost_without_battery') | float(0) }}
{% else %}
{% set real_load = [solar + grid_imp + bat_dis - grid_exp - bat_chg, 0] | max %}
{% set virtual_import = [real_load - solar, 0] | max %}
{% set virtual_export = [solar - real_load, 0] | max %}
{{ ((virtual_import * buy) - (virtual_export * sell)) | round(5) }}
{% endif %}
# --- Besparing per 15 minuten dankzij de batterij ---
#
# Positief = batterij bespaart geld
# Negatief = batterij kost geld (bv. laden uit net op hoge prijs)
# FIX: als batterij niets doet én vol is → 0 (voorkomt SolarEdge buffering artefact)
- name: "Battery Profit 15m"
unique_id: battery_profit_15m
unit_of_measurement: "€"
icon: mdi:cash-plus
state: >
{% set without = states('sensor.cost_without_battery') | float(-999) %}
{% set with_b = states('sensor.cost_with_battery') | float(-999) %}
{% set bat_chg = states('sensor.battery_charge_15m') | float(0) %}
{% set bat_dis = states('sensor.battery_discharge_15m') | float(0) %}
{% set soc = states('sensor.solarflow_2400_ac_electric_level') | float(0) %}
{% if bat_chg <= 0.002 and bat_dis <= 0.002 and soc >= 98.5 %}
0
{% elif without == -999 or with_b == -999 %}
{{ states('sensor.battery_profit_15m') | float(0) }}
{% else %}
{{ (without - with_b) | round(5) }}
{% endif %}
# ----------------------------------------------------------------
# Solar export opbrengst per 15 minuten (informatief)
#
# solar_to_grid = max(grid_exp - bat_to_grid, 0)
# bat_to_grid = min(bat_dis, grid_exp)
# Geen overlap met arbitrage
# ----------------------------------------------------------------
- trigger:
- platform: state
entity_id:
- sensor.grid_export_15m
- sensor.battery_discharge_15m
- sensor.electricity_sell_price_eur
sensor:
- name: "Solar Export Profit 15m"
unique_id: solar_export_profit_15m
unit_of_measurement: "€"
icon: mdi:transmission-tower-export
state: >
{% set grid_exp = states('sensor.grid_export_15m') | float(-1) %}
{% set bat_dis = states('sensor.battery_discharge_15m') | float(-1) %}
{% set sell = states('sensor.electricity_sell_price_eur') | float(-1) %}
{% if grid_exp < 0 or bat_dis < 0 or sell < 0 %}
{{ states('sensor.solar_export_profit_15m') | float(0) }}
{% else %}
{% set bat_to_grid = [bat_dis, grid_exp] | min %}
{% set solar_to_grid = [grid_exp - bat_to_grid, 0] | max %}
{{ (solar_to_grid * sell) | round(5) }}
{% endif %}
# ----------------------------------------------------------------
# Arbitrage-winst per 15 minuten (informatief)
#
# bat_to_grid = min(bat_dis, grid_exp)
# cost_basis = buy als geladen vanuit net, 0 als geladen vanuit solar
# winst = omzet - kostenbasis (gecorrigeerd voor efficiëntie)
# ----------------------------------------------------------------
- trigger:
- platform: state
entity_id:
- sensor.battery_discharge_15m
- sensor.grid_export_15m
- sensor.grid_import_15m
- sensor.electricity_buy_price_eur
- sensor.electricity_sell_price_eur
- input_number.battery_efficiency
sensor:
- name: "Battery Arbitrage Profit 15m"
unique_id: battery_arbitrage_profit_15m
unit_of_measurement: "€"
icon: mdi:lightning-bolt-circle
state: >
{% set bat_dis = states('sensor.battery_discharge_15m') | float(-1) %}
{% set grid_exp = states('sensor.grid_export_15m') | float(-1) %}
{% set grid_imp = states('sensor.grid_import_15m') | float(-1) %}
{% set buy = states('sensor.electricity_buy_price_eur') | float(-1) %}
{% set sell = states('sensor.electricity_sell_price_eur') | float(-1) %}
{% set eff = states('input_number.battery_efficiency') | float(90) / 100 %}
{% if bat_dis < 0 or grid_exp < 0 or grid_imp < 0 or buy < 0 or sell < 0 %}
{{ states('sensor.battery_arbitrage_profit_15m') | float(0) }}
{% else %}
{% set bat_to_grid = [bat_dis, grid_exp] | min %}
{% set cost_basis = buy if grid_imp > 0 else 0 %}
{% set revenue = bat_to_grid * sell %}
{% set cost = (bat_to_grid / eff) * cost_basis %}
{{ [revenue - cost, 0] | max | round(5) }}
{% endif %}
# ----------------------------------------------------------------
# ROI totaaloverzicht
# Direct van bronnen — geen race condition
# ----------------------------------------------------------------
- trigger:
- platform: state
entity_id:
- sensor.tibber_reward_daily
- sensor.tibber_cost_daily
- sensor.battery_profit_daily
- sensor.battery_profit_yearly
- sensor.battery_arbitrage_daily
- sensor.battery_arbitrage_yearly
- sensor.solar_profit_daily
- input_number.battery_investment
sensor:
- name: "Battery ROI"
unique_id: battery_roi
unit_of_measurement: "%"
icon: mdi:chart-line
state: >
{# ROI op battery_profit_yearly alleen #}
{# Arbitrage zit er al in via cost_with_battery (zie FAQ) #}
{% set investering = states('input_number.battery_investment') | float(0) %}
{% set winst = states('sensor.battery_profit_yearly') | float(0) %}
{% if investering == 0 %}
0
{% else %}
{{ ((winst / investering) * 100) | round(2) }}
{% endif %}
- name: "System Total Profit Daily"
unique_id: system_total_profit_daily
unit_of_measurement: "€"
icon: mdi:solar-power-variant
state: >
{# Drie unieke winststromen zonder overlap: #}
{# 1. tibber_reward = solar export + arbitrage opbrengst (Tibber, exact) #}
{# 2. battery_profit = batterij besparing zelfverbruik (- arbitrage correctie) #}
{# 3. solar_profit = zon direct naar huis/auto besparing #}
{% set reward = states('sensor.tibber_reward_daily') | float(0) %}
{% set besparing = states('sensor.battery_profit_daily') | float(0) %}
{% set arbitrage = states('sensor.battery_arbitrage_daily') | float(0) %}
{% set solar_win = states('sensor.solar_profit_daily') | float(0) %}
{{ (reward + besparing - arbitrage + solar_win) | round(4) }}
- name: "Battery Payback Years"
unique_id: battery_payback_years
unit_of_measurement: "jaar"
icon: mdi:calendar-clock
state: >
{# Terugverdientijd op battery_profit_yearly — arbitrage zit er al in #}
{% set investering = states('input_number.battery_investment') | float(0) %}
{% set winst_jaar = states('sensor.battery_profit_yearly') | float(0) %}
{% if winst_jaar <= 0 or investering <= 0 %}
0
{% else %}
{% set jaren = (investering / winst_jaar) | round(1) %}
{{ [jaren, 99] | min }}
{% endif %}
- name: "Battery Payback Years Extrapolated"
unique_id: battery_payback_years_extrapolated
unit_of_measurement: "jaar"
icon: mdi:calendar-clock-outline
state: >
{# Extrapolatie op basis van maandwinst × 12 #}
{% set investering = states('input_number.battery_investment') | float(0) %}
{% set maand_winst = states('sensor.battery_profit_monthly') | float(0) %}
{% set jaar_extrap = maand_winst * 12 %}
{% if jaar_extrap <= 0 or investering <= 0 %}
0
{% else %}
{% set jaren = (investering / jaar_extrap) | round(1) %}
{{ [jaren, 99] | min }}
{% endif %}
# ----------------------------------------------------------------
# Cyclus-monitor — batterij slijtage
# ----------------------------------------------------------------
- trigger:
- platform: state
entity_id: sensor.solarflow_2400_ac_aggr_charge_total
sensor:
- name: "Batterij Totaal Aantal Cycli"
unique_id: battery_total_cycles
unit_of_measurement: "cycli"
icon: mdi:sync
state: >
{% set totaal_geladen = trigger.to_state.state | float(0) %}
{% set capaciteit = states('sensor.zendure_2400_ac_totale_capaciteit') | float(8.64) %}
{{ (totaal_geladen / capaciteit) | round(1) if totaal_geladen > 0 else 0 }}
- name: "Batterij Slijtage Kosten Totaal"
unique_id: battery_wear_cost_total
unit_of_measurement: "€"
icon: mdi:cash-clock
state: >
{% set cycli = states('sensor.batterij_totaal_aantal_cycli') | float(0) %}
{% set investering = states('input_number.battery_investment') | float(2600) %}
{# Slijtage per cyclus = investering / 6000 cycli (LiFePO4 levensduur) #}
{% set slijtage_per_cyclus = investering / 6000 %}
{{ (cycli * slijtage_per_cyclus) | round(2) }} |
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
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
| title: Batterij ROI
path: batterij-roi
icon: mdi:cash-fast
type: sections
max_columns: 2
sections:
- cards:
- square: false
columns: 5
type: grid
cards:
- type: custom:button-card
entity: sensor.zendure_p1_power_kw
show_state: true
show_icon: false
name: Stroom
state_display: |
[[[
const v = parseFloat(entity.state);
if (isNaN(v)) return entity.state;
if (v >= -0.1 && v <= 0.1) {
if (v < 0) return `v ${Math.abs(v).toFixed(2)}`;
if (v > 0) return `^ ${v.toFixed(2)}`;
return `${v.toFixed(2)}`;
}
if (v < -0.1) return `${Math.abs(v).toFixed(2)}`;
return `${v.toFixed(2)} kW`;
]]]
state:
- operator: <
value: -0.1
styles:
card:
- color: white
- background-color: green
- operator: ">"
value: 0.1
styles:
card:
- color: white
- background-color: tomato
- operator: ">="
value: -0.1
styles:
card:
- color: black
- background-color: white
- type: custom:button-card
entity: sensor.p1_actueel_kw
show_state: true
show_icon: false
name: Stroom
state_display: |
[[[
const v = parseFloat(entity.state);
if (isNaN(v)) return entity.state;
if (v >= -0.1 && v <= 0.1) {
if (v < 0) return `v ${Math.abs(v).toFixed(2)}`;
if (v > 0) return `^ ${v.toFixed(2)}`;
return `${v.toFixed(2)}`;
}
if (v < -0.1) return `${Math.abs(v).toFixed(2)}`;
return `${v.toFixed(2)} kW`;
]]]
state:
- operator: <
value: -0.1
styles:
card:
- color: white
- background-color: green
- operator: ">"
value: 0.1
styles:
card:
- color: white
- background-color: tomato
- operator: ">="
value: -0.1
styles:
card:
- color: black
- background-color: white
- type: custom:button-card
entity: sensor.solarflow_2400_ac_electric_level
show_state: true
show_icon: false
name: Batterij
triggers_update:
- sensor.zendure_2400_ac_modus
styles:
card:
- color: white
- background-color: |
[[[
const state = states['sensor.zendure_2400_ac_modus']?.state;
if (state === 'Opladen') return 'green';
if (state === 'Ontladen') return 'tomato';
return 'gray';
]]]
state_display: |
[[[
return entity.state + ' %';
]]]
- type: custom:button-card
entity: sensor.sensor_solaredge_current_power_kwh
show_state: true
show_icon: false
name: Zon
state:
- operator: ">"
value: 0
styles:
card:
- color: white
- background-color: green
- operator: "="
value: 0
styles:
card:
- background-color: white
- type: custom:button-card
entity: sensor.sensor_tibberprijs
show_state: true
show_icon: false
name: Prijs
state_display: |
[[[
const v = parseFloat(entity.state);
if (isNaN(v)) return entity.state;
return `${v.toFixed(1)} C`;
]]]
state:
- operator: <
value: 23
styles:
card:
- color: white
- background-color: green
- operator: ">"
value: 23
styles:
card:
- color: white
- background-color: tomato
- type: custom:button-card
entity: sensor.dynamisch_duurste_periode
show_state: false
show_name: false
icon: mdi:cash-clock
state:
- value: Ja
styles:
card:
- background-color: green
- color: white
icon:
- color: white
- value: Nee
styles:
card:
- background-color: var(--card-background-color)
- color: var(--primary-text-color)
- show_name: false
show_icon: true
type: button
entity: input_button.update_roi
tap_action:
action: toggle
- type: custom:gap-card
- show_name: true
show_icon: true
type: button
tap_action:
action: navigate
navigation_path: /lovelace/energie
name: Panelen
- show_name: true
show_icon: true
type: button
tap_action:
action: navigate
navigation_path: /lovelace/tesla
name: Autos
- square: false
type: grid
columns: 3
cards:
- type: gauge
name: Vermogen
entity: sensor.zendure_2400_ac_vermogen_aansturing
needle: true
min: -2400
max: 2400
severity:
green: -2400
yellow: -100
red: 100
- type: gauge
name: Laad%
entity: sensor.zendure_2400_ac_laadpercentage
needle: true
min: 0
max: 100
severity:
green: 50
yellow: 15
red: 0
- type: gauge
entity: sensor.zendure_2400_ac_omvormer_temperatuur
needle: true
severity:
green: 0
yellow: 55
red: 60
name: Omvormer
- type: entities
entities:
- entity: automation.zendure_zomer_winter_goedkoopst_duurst
- entity: input_select.zendure_2400_ac_modus_selecteren
- type: entities
entities:
- entity: sensor.electricity_buy_price_eur
name: Inkoopprijs
icon: mdi:lightning-bolt
- entity: sensor.electricity_sell_price_eur
name: Verkoopprijs
icon: mdi:lightning-bolt-outline
show_header_toggle: false
- type: heading
heading: Batterij
heading_style: title
icon: mdi:home-battery-outline
- type: entities
title: Besparing (zelfverbruik + arbitrage)
entities:
- entity: sensor.battery_profit_daily
name: Vandaag
icon: mdi:battery-charging
- entity: sensor.battery_profit_monthly
name: Deze maand
icon: mdi:battery-charging
- entity: sensor.battery_profit_yearly
name: Dit jaar
icon: mdi:battery-charging
show_header_toggle: false
- type: entities
title: Arbitrage (zit al in besparing)
entities:
- entity: sensor.battery_arbitrage_daily
name: Vandaag
icon: mdi:lightning-bolt-circle
- entity: sensor.battery_arbitrage_monthly
name: Deze maand
icon: mdi:lightning-bolt-circle
- entity: sensor.battery_arbitrage_yearly
name: Dit jaar
icon: mdi:lightning-bolt-circle
show_header_toggle: false
- type: history-graph
title: Batterij besparing (24u)
hours_to_show: 24
entities:
- entity: sensor.battery_profit_daily
- type: custom:apexcharts-card
apex_config:
chart:
height: 150px
header:
show: true
title: Batterij besparing — 30 dagen
show_states: true
colorize_states: true
graph_span: 30d
series:
- entity: sensor.battery_profit_monthly
name: Besparing (EUR)
color: "#378ADD"
show:
in_chart: false
in_header: true
- entity: sensor.battery_profit_daily
name: Besparing (EUR)
color: "#378ADD"
stroke_width: 0
type: column
show:
in_chart: true
in_header: false
group_by:
func: max
duration: 1d
- type: custom:apexcharts-card
apex_config:
chart:
height: 150px
header:
show: true
title: Opbrengst & besparing per maand — 12 maanden
show_states: true
colorize_states: true
graph_span: 365d
series:
- entity: sensor.tibber_reward_monthly
name: Tibber opbrengst (EUR)
color: "#EF9F27"
stroke_width: 0
type: column
group_by:
func: max
duration: 30d
- entity: sensor.battery_profit_monthly
name: Besparing (EUR)
color: "#378ADD"
stroke_width: 0
type: column
group_by:
func: max
duration: 30d
- cards:
- type: entities
entities:
- entity: sensor.battery_profit_daily
name: Batterij besparing
icon: mdi:battery-plus-variant
- entity: sensor.solar_profit_daily
icon: mdi:solar-power-variant
name: Solar → grid
- entity: sensor.roi_solar_export_profit_daily
name: Solar export
icon: mdi:export-variant
- entity: sensor.tibber_reward_daily
name: Tibber opbrengst (solar + arbitr)
- entity: sensor.tibber_cost_daily
name: Tibber kosten
- type: divider
- entity: sensor.tibber_net_daily
- entity: sensor.battery_arbitrage_daily
name: Batterij arbitrage
icon: mdi:swap-vertical-circle-outline
- type: divider
- entity: sensor.system_total_profit_daily
name: Totaal systeem opbrengst
icon: mdi:piggy-bank
title: Vandaag totalen
- type: heading
heading: Zonnepanelen & Net
heading_style: title
icon: mdi:solar-power-variant
- type: entities
title: SolarEdge — productie
entities:
- entity: sensor.solar_production_daily
name: Productie vandaag
icon: mdi:solar-power
- entity: sensor.sensor_solaredge_energy_today_kwh
name: Productie vandaag (live)
icon: mdi:solar-power-variant
- entity: sensor.solar_production_15m
name: Productie afgelopen kwartier
icon: mdi:solar-power
show_header_toggle: false
- type: entities
title: Tibber — net vandaag
entities:
- entity: sensor.tibber_pulse_edwin_accumulated_production
name: Teruggeleverd aan net
icon: mdi:transmission-tower-export
- entity: sensor.tibber_pulse_edwin_accumulated_consumption
name: Afgenomen van net
icon: mdi:transmission-tower-import
show_header_toggle: false
- type: entities
title: Tibber vandaag — €€€
entities:
- entity: sensor.tibber_reward_daily
name: Opbrengst teruglevering
icon: mdi:cash-plus
- entity: sensor.tibber_cost_daily
name: Stroomkosten
icon: mdi:cash-minus
- entity: sensor.tibber_net_daily
name: Netto stroomkosten
icon: mdi:cash-sync
- entity: sensor.edwin_monthly_cost
name: Maandrekening Tibber
icon: mdi:calendar-month
show_header_toggle: false
- type: entities
title: Tibber — teruglevering €
entities:
- entity: sensor.tibber_reward_daily
name: Vandaag
icon: mdi:cash-plus
- entity: sensor.tibber_reward_monthly
name: Deze maand
icon: mdi:cash-plus
- entity: sensor.tibber_reward_yearly
name: Dit jaar
icon: mdi:cash-plus
show_header_toggle: false
- type: entities
entities:
- entity: sensor.solar_profit_15m
icon: mdi:transmission-tower-off
- entity: sensor.solar_profit_daily
name: Solar - Grid dagelijks
icon: mdi:transmission-tower-off
- entity: sensor.solar_profit_yearly
name: Solar - Grid jaarlijks
icon: mdi:transmission-tower-off
title: Solar → Grid (geschat)
- type: heading
heading: Totalen
heading_style: title
- type: entities
title: ROI + Panelen export + Panelen grid
entities:
- entity: sensor.system_total_profit_daily
name: Totaal winst vandaag
icon: mdi:solar-power-variant
- entity: sensor.roi_system_profit_yearly
name: Totaal winst dit jaar
icon: mdi:solar-power-variant
- type: divider
- entity: sensor.battery_roi
name: Batterij ROI % (cumulatief)
icon: mdi:chart-line
- entity: sensor.battery_payback_years
name: Terugverdientijd (werkelijk)
icon: mdi:calendar-clock
- entity: sensor.battery_payback_years_extrapolated
name: Terugverdientijd (schatting obv huidige maand)
icon: mdi:calendar-clock-outline
- type: divider
- entity: sensor.batterij_totaal_aantal_cycli
name: Totaal aantal cycli (van 6000)
- entity: sensor.batterij_slijtage_kosten_totaal
show_header_toggle: false
- type: heading
heading: Instellingen
heading_style: title
- type: entities
entities:
- entity: input_number.battery_efficiency
name: Efficiëntie batterij
icon: mdi:battery-heart-outline
- entity: input_number.sell_price_fixed
name: Verkoopaftrek (EUR/kWh)
icon: mdi:currency-eur
- entity: input_number.battery_investment
name: Investering batterij (EUR)
icon: mdi:cash
show_header_toggle: false
- type: markdown
content: >-
**Batterij installatie 8-12-2025
Betrouwbare ROI vanaf 12-4-2026**
*Arbitrage* = 'handelen' middels extra teruggeleverde stroom naar het
net met dynamisch ontladen
*Gemaakt met Claude.ai*
Bij problemen upload:
roi.yaml
roi_dashboard.yaml
roi_faq.md
cards: [] |
Je bent vergeten de code te plakken 😉ralphkeb schreef op zaterdag 18 april 2026 @ 17:29:
[/quote]Voor nieuwe HA gebruikers die een makkelijk manier willen voor dynamische prijzen en Gielz integratie via packages methode hebben geinstalleerd:
1. Installeer nordpool HACS integratie.
2. maak een bestand aan in de packages directory, bv. nordpool.yaml
3. plaats de volgende code erin:
4. Herstart Home Assistant
er worden 3 Nummer input gemaakt voor
btw_percentage
opslag_energieleverancier
energiebelasting
en 2 nordpool prijzen sensors
- sensor.nordpool_kwh_nl_eur_5_09_0
Dit is de sensor voor de totaal prijs ( vul de 3 input variabele in met je eigen dynamische leverancier kosten)
- sensor.nordpool_kwh_nl_eur_5_10_0
Dit is de sensor voor de kale marktprijsEenmaal aangemaakt dan wordt de totaal prijs pas zichtbaar na de komende kwartier na je invoer van de input variabelen.
[/quote]
Ik heb alles zo geinstalleerd en werkend, maar toch kloppen mijn prijzen niet ten opzichte van de prijzen in de Zonneplan app, ja ik heb voor zover ik weet de Zonneplan prijzen gepakt:
btw_percentage : 0,21
opslag_energieleverancier : 0,1108
energiebelasting : 0,022
Verschil is dan Zonneplan: 24,24 cent, Nordpool 24,56 cent
Zonneplan werkt nog met uurprijzen, Nordpool met kwartierprijzen, kan hier het verschil inzitten?
Edit: ik dacht dat je een code wilde posten.
Maar omdat je 'quote tekens' niet goed staan, zag ik niet dat je een vraag had.
[ Voor 4% gewijzigd door RemmyB83 op 18-04-2026 18:26 ]
Zonneplan volgens jeroen.nlralphkeb schreef op zaterdag 18 april 2026 @ 17:29:
Ik heb alles zo geinstalleerd en werkend, maar toch kloppen mijn prijzen niet ten opzichte van de prijzen in de Zonneplan app, ja ik heb voor zover ik weet de Zonneplan prijzen gepakt:
btw_percentage : 0,21
opslag_energieleverancier : 0,1108
energiebelasting : 0,022
Verschil is dan Zonneplan: 24,24 cent, Nordpool 24,56 cent
Zonneplan werkt nog met uurprijzen, Nordpool met kwartierprijzen, kan hier het verschil inzitten?
btw: 0,21
opslag energieleverancier: 0,0165
energiebelasting = 0,0916
Als ik dat gebruik dan komt het precies overeen.
[ Voor 3% gewijzigd door Wai_AM op 18-04-2026 18:49 ]
10x270Wp, 6x365Wp, 4x450Wp, WeHeat Flint P40, Green Energy Smartboiler 60L Mono, Home Wizard PIB, Zendure SF2400AC 11,52 kWh
Dank je, @DrNickB. Eigenlijk ging het me meer om de (hier wel relevante) vragenDrNickB schreef op zaterdag 18 april 2026 @ 17:43:
[...]
Google: https://ekiwi-blog.de/en/...p-address-for-the-device/
Maar niet 123 relevant voor dit toppic verder.
1. hoe je de Zendure een zelfgekozen IP-adres kunt geven en
2. of je het IP-adres van een bestaande Zendure kunt wijzigen, of dat een eenmaal ‘gekozen’ adres altijd hetzelfde blijft?
Dat laatste ws niet omdat elke Zendure via DHCP een IP-adres toegewezen krijgt.
Maar ik zou ze dus heel graag een zelfgekozen adres geven.
Verdraagzaamheid is het hoogste gebod
en wie dat niet eert die schoppen we rot.
<John O`Mill>
Is dat in de gielz automatisering anders? Er komt bij mij nu bij een toren een bepaald wattage binnen, maar bij de andere niks. En die ander is nog niet vol.
De verdeling bepaald node-red @gast777. Het word iig zo optimaal mogelijk verdeelt voor je RTE en SOC.Gramser schreef op zaterdag 18 april 2026 @ 19:13:
@gielz er valt me iets op: in HEMS zal het laadvermogen altijd gelijkmatig over de aansturende zendures worden verdeeld. Dus als er 1000W wordt geladen krijgt - bij twee torens - elke toren 500.
Is dat in de gielz automatisering anders? Er komt bij mij nu bij een toren een bepaald wattage binnen, maar bij de andere niks. En die ander is nog niet vol.
[Afbeelding]
Zendure-HA.com | Run Zendure your way — in Home Assistant
2x Zendure 2400AC+ met 2x de 3000 accu erbij
1x Zendure 2400AC+ zonder accu (die komen in de loop vd week)
Daarom de proxy voor nu ingesteld met de 2 systemen, ze worden herkend en hij ontlaad. Echter heb ik een vrij fors verbruik nu (~2kw) omdat de warmtepomp loopt (tapwater, allemaal onder de douche gestaan). Echter ontlaad hij max maar met 1200 watt en het lijkt erop of het 2e systeem helemaal niet bijschakelt: krijg dus geen NOM. Wat doe ik verkeerd?
PS: systemen zitten nog in beide in volledig ongebruikte groepen in stopcontact nu (veranda), heb ze limited op 1600 laden en 1200 ontladen. Worden in de loop vd week vast aangesloten.
PS2: de max vermogensinstellingen: als ik bijvoorbeeld 3000 instel, is dit dan 1500 w per apparaat?
PS3: is Zendure 2400 AC Energie Import en Zendure 2400 AC Energie Export de juiste sensor om in het energy dashboard te stoppen als je een proxy gebruik?
[ Voor 38% gewijzigd door Tortelli op 18-04-2026 20:57 ]
Het zelfgekozen ip-adres wordt door de router verstrekt. Dus daar vastleggen conform handleiding @DrNickBHippe Lip schreef op zaterdag 18 april 2026 @ 19:06:
[...]
1. hoe je de Zendure een zelfgekozen IP-adres kunt geven en
Ja je kunt een (vast) ip altijd wijzigen. Nieuw adres in router aanmaken, daarna activeren door of device een reset te geven waardoor hij zich bij router meldt voor een ip adres en dan het nieuwe ip-adres krijgt. Of door je router te rebooten (kies wel een goed moment want alle internetverbindingen vervallen tijdelijk.)2. of je het IP-adres van een bestaande Zendure kunt wijzigen, of dat een eenmaal ‘gekozen’ adres altijd hetzelfde blijft?
Ja, die methode was me eigenlijk al bekend…Maarten60 schreef op zaterdag 18 april 2026 @ 21:56:
[...]
Het zelfgekozen ip-adres wordt door de router verstrekt. Dus daar vastleggen conform handleiding @DrNickB
… maar dit punt kan ik niet helemaal volgen: wat bedoel je met “nieuw adres in router aanmaken”? Je kunt een adres niet ‘aanmaken’, het is er al. En ik kan me niet bedenken hoe ik aan een device dat met DHCP zijn adres krijgt toegewezen, een ander adres kan toewijzen.Ja je kunt een (vast) ip altijd wijzigen. Nieuw adres in router aanmaken, daarna activeren door of device een reset te geven waardoor hij zich bij router meldt voor een ip adres en dan het nieuwe ip-adres krijgt. Of door je router te rebooten (kies wel een goed moment want alle internetverbindingen vervallen tijdelijk.)
Hoe bedoel je dat, @Maarten60?
Verdraagzaamheid is het hoogste gebod
en wie dat niet eert die schoppen we rot.
<John O`Mill>
Dit staat in de readme van de proxy:Gramser schreef op zaterdag 18 april 2026 @ 19:13:
@gielz er valt me iets op: in HEMS zal het laadvermogen altijd gelijkmatig over de aansturende zendures worden verdeeld. Dus als er 1000W wordt geladen krijgt - bij twee torens - elke toren 500.
Is dat in de gielz automatisering anders? Er komt bij mij nu bij een toren een bepaald wattage binnen, maar bij de andere niks. En die ander is nog niet vol.
[Afbeelding]
Automatische Standby mode bij lagere vermogens
Bij lage belasting wordt een van de Zendures eerst in standby en dan na 5 minuten in een slaap modus gezet, ten behoeve van de efficiëntie.
Bij 2 Zendures achter de Proxy zijn de standaard grenzen 40% en 100% van het als maximum ingestelde vermogen van 1 device (wat verschillend kan zijn voor opladen en ontladen). Normaliter is dat bij een SF2400AC dus 40% en 100% van 2400 Watt (960W en 2400W):
onder 960W - altijd 1 device
boven 2400W - altijd 2 devices
Daar tussenin blijft het zoals het is.
Bij 3 Zendures hetzelfde, maar wat ingewikkelder:
onder 960W - altijd 1 device
boven 4800W - altijd 3 devices
als 1 actief is, boven de 2400W naar 2 devices
als 3 actief zijn, onder de 1920W (40% van 4800W) naar 2 devices
Daarnaast wisselen ze van actief device als het verschil in SoC >=5% wordt. En als ze tegelijk laden/ontladen, balanceert het vermogen, zodat de SoC dicht bij elkaar blijft.
Je, het vermogen dat je instelt is voor het gehele apparaat dat HA ziet. Dus al je Zendures samen. Als je 3000 instelt en je hebt 2 Zendures, dan zal elke Zendure op max 1500 ingesteld worden.Tortelli schreef op zaterdag 18 april 2026 @ 20:40:
Echter ontlaad hij max maar met 1200 watt en het lijkt erop of het 2e systeem helemaal niet bijschakelt: krijg dus geen NOM. Wat doe ik verkeerd?
PS: systemen zitten nog in beide in volledig ongebruikte groepen in stopcontact nu (veranda), heb ze limited op 1600 laden en 1200 ontladen. Worden in de loop vd week vast aangesloten.
PS2: de max vermogensinstellingen: als ik bijvoorbeeld 3000 instel, is dit dan 1500 w per apparaat?
6 kWp solar | Daikin Intergas Hybride 8kW | Tesla Model Y RWD 2023 | Fiat 500e 2014 | Zendure SF2400AC 17 kWh
Veel, maar zeker niet alle routers denk ik, kunnen een MAC-adres aan een IP-adres binnen je DHCP-range koppelen. Dus: meldt zich dat apparaat (MAC-adres) op je router aan, dan geeft je router niet een random DHCP-adres, maar precies dat (gereserveerde) IP-adres dat je in je router hebt ingesteld voor dat apparaat (IP/MAC binding).Hippe Lip schreef op zaterdag 18 april 2026 @ 22:02:
[...]
… maar dit punt kan ik niet helemaal volgen: wat bedoel je met “nieuw adres in router aanmaken”?
Op die manier 'dwing' je dus een vast IP-adres af, maar vanuit de router, niet vanuit het apparaat (Zendure).
Is idd. off-topic, en nogal router-specifiek hoe je dat moet instellen.
categorie: Modems en routers
[ Voor 11% gewijzigd door Devke op 19-04-2026 08:39 ]
Denk in kansen, niet in problemen. Homewizard Plug-In Battery 5.4 kWh. Zendure 2400 AC 17.2 kWh. Testen Accumate 4.8 kWh Plug-In Battery. 3330 Wp zonnepanelen. EV 77 kWh. Peblar Business Laadpaal.
Ja ook de fritzboxHippe Lip schreef op zaterdag 18 april 2026 @ 17:35:
[...]
En weet je toevallig of dit met de Fritzbox ook kan?
Ik zou mijn 2 Zundures erg graag een zelfgekozen en dus statisch IP-adres geven, maar ben er nog niet achter hoe ik dat zou moeten doen…
Gasloos 2019 + WP Panasonic H-serie 7kW + 300 liter boilervat + PV 12.415Wp + Home Assistant + Hyundai Ioniq 6 First Edition + Zaptec laadpaal
Gaaf! En wat een werkedjes schreef op zaterdag 18 april 2026 @ 17:53:
[...]
Ik heb zes kantjes en maanden werk in een ROI.![]()
Hier, kan je spelen.
Uitgangspunt: zonnepanelen (solaredge), tibber
Het is erg complex, maar zeer volledig.
Plaats roi.yaml in packages
ROI.yaml: https://www.dropbox.com/s...hfemrk8dxxsb35xuyksi&dl=0
of hier is de hele code:code:Dit is het dashboard, wel wat van mijn verwijzingen verwijderen ;-)
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 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535## ROI 1.02 ## ################################ ## INPUT NUMBER ## ################################ input_number: battery_efficiency: mode: box name: "Batterij efficiëntie" min: 50 max: 100 step: 1 initial: 90 unit_of_measurement: "%" icon: mdi:battery-heart-outline sell_price_fixed: mode: box name: "Verkoopprijs vast (EUR/kWh)" min: 0.0000 max: 0.5000 step: 0.0001 initial: 0.0248 unit_of_measurement: "€/kWh" icon: mdi:currency-eur battery_investment: mode: box name: "Investering batterij" min: 0 max: 10000 step: 1 initial: 1500 unit_of_measurement: "€" icon: mdi:battery-charging ################################ ## UTILITY METER ## ################################ # Bronnen van waarheid: # grid import/export → Tibber last_meter (cumulatief, reset nooit) # solar productie → SolarEdge energy_today (dagelijks, reset ~02:08) # batterij → Zendure AC import/export # kosten/opbrengst → Tibber accumulated (dagelijks, reset middernacht) utility_meter: # --- 15-minuut meters --- grid_import_15m: source: sensor.tibber_pulse_edwin_last_meter_consumption cycle: quarter-hourly grid_export_15m: source: sensor.tibber_pulse_edwin_last_meter_production cycle: quarter-hourly battery_charge_15m: source: sensor.zendure_2400_ac_energie_import cycle: quarter-hourly battery_discharge_15m: source: sensor.zendure_2400_ac_energie_export cycle: quarter-hourly solar_production_15m: source: sensor.solar_production_interval cycle: quarter-hourly # --- Dagelijkse solar productie --- solar_production_daily: source: sensor.sensor_solaredge_energy_today_kwh cycle: daily # --- Batterij besparing (informatief) --- battery_profit_daily: source: sensor.battery_profit_15m cycle: daily battery_profit_monthly: source: sensor.battery_profit_15m cycle: monthly battery_profit_yearly: source: sensor.battery_profit_15m cycle: yearly # --- Arbitrage winst (informatief) --- battery_arbitrage_daily: source: sensor.battery_arbitrage_profit_15m cycle: daily battery_arbitrage_monthly: source: sensor.battery_arbitrage_profit_15m cycle: monthly battery_arbitrage_yearly: source: sensor.battery_arbitrage_profit_15m cycle: yearly # --- Solar export opbrengst (informatief) --- roi_solar_export_profit_daily: source: sensor.solar_export_profit_15m cycle: daily roi_solar_export_profit_monthly: source: sensor.solar_export_profit_15m cycle: monthly roi_solar_export_profit_yearly: source: sensor.solar_export_profit_15m cycle: yearly # --- Tibber kosten/opbrengst — bron van waarheid --- # accumulated reset dagelijks — yearly meter telt deltas op tibber_reward_monthly: source: sensor.tibber_reward_daily cycle: monthly tibber_reward_yearly: source: sensor.tibber_reward_daily cycle: yearly tibber_cost_monthly: source: sensor.tibber_cost_daily cycle: monthly tibber_cost_yearly: source: sensor.tibber_cost_daily cycle: yearly # --- System totaal yearly --- # Hernoemd om conflict met oude database entries te vermijden roi_system_profit_yearly: source: sensor.system_total_profit_daily cycle: yearly roi_system_profit_monthly: source: sensor.system_total_profit_daily cycle: monthly # --- Solar winst (direct verbruik + export, exclusief batterijlading) --- solar_profit_daily: source: sensor.solar_profit_15m cycle: daily solar_profit_yearly: source: sensor.solar_profit_15m cycle: yearly ################################ ## TEMPLATE ## ################################ template: # ---------------------------------------------------------------- # Solar interval: delta per update van SolarEdge dagelijkse teller # Reset om ~02:08 → negatieve delta = 0 # ---------------------------------------------------------------- - trigger: - platform: state entity_id: sensor.sensor_solaredge_energy_today_kwh sensor: - name: "Solar Production Interval" unique_id: solar_production_interval unit_of_measurement: "kWh" device_class: energy state_class: total_increasing state: > {% set current = trigger.to_state.state | float(0) %} {% set previous = trigger.from_state.state | float(0) if trigger.from_state else 0 %} {% set delta = current - previous %} {{ (delta if delta >= 0 else 0) | round(3) }} # ---------------------------------------------------------------- # Tibber dagelijkse kosten en opbrengst — bron van waarheid # Getriggerd op Tibber accumulated sensoren # Reset dagelijks om middernacht door Tibber zelf # ---------------------------------------------------------------- - trigger: - platform: state entity_id: - sensor.tibber_pulse_edwin_accumulated_cost - sensor.tibber_pulse_edwin_accumulated_reward sensor: - name: "Tibber Cost Daily" unique_id: tibber_cost_daily_sensor unit_of_measurement: "€" icon: mdi:cash-minus state: > {{ states('sensor.tibber_pulse_edwin_accumulated_cost') | float(0) | round(4) }} - name: "Tibber Reward Daily" unique_id: tibber_reward_daily_sensor unit_of_measurement: "€" icon: mdi:cash-plus state: > {{ states('sensor.tibber_pulse_edwin_accumulated_reward') | float(0) | round(4) }} - name: "Tibber Net Daily" unique_id: tibber_net_daily unit_of_measurement: "€" icon: mdi:cash-sync state: > {# Netto stroomkosten vandaag: wat je betaald hebt min wat je ontvangen hebt #} {% set cost = states('sensor.tibber_pulse_edwin_accumulated_cost') | float(0) %} {% set reward = states('sensor.tibber_pulse_edwin_accumulated_reward') | float(0) %} {{ (cost - reward) | round(4) }} # ---------------------------------------------------------------- # Prijssensoren — inkoop én verkoop apart # Trigger elke 5 minuten én bij wijziging van bronentiteit # ---------------------------------------------------------------- - trigger: - platform: time_pattern minutes: "/5" - platform: state entity_id: - sensor.edwin_electricity_price - input_number.sell_price_fixed sensor: - name: "Electricity Buy Price EUR" unique_id: electricity_buy_price_eur unit_of_measurement: "€/kWh" icon: mdi:lightning-bolt state: > {# Handrem: als Tibber wegvalt bewaar de laatste bekende prijs #} {% set prijs = states('sensor.edwin_electricity_price') | float(-1) %} {% if prijs < 0 %} {{ states('sensor.electricity_buy_price_eur') | float(0) }} {% else %} {{ prijs | round(4) }} {% endif %} - name: "Electricity Sell Price EUR" unique_id: electricity_sell_price_eur unit_of_measurement: "€/kWh" icon: mdi:lightning-bolt-outline state: > {# Handrem: als Tibber wegvalt bewaar de laatste bekende prijs #} {# Na 2026: pas input_number.sell_price_fixed aan #} {% set buy = states('sensor.edwin_electricity_price') | float(-1) %} {% set aftrek = states('input_number.sell_price_fixed') | float(0.0248) %} {% if buy < 0 %} {{ states('sensor.electricity_sell_price_eur') | float(0) }} {% else %} {{ [buy - aftrek, 0] | max | round(4) }} {% endif %} # ---------------------------------------------------------------- # ROI sensoren — getriggerd op 15m meters én prijswijzigingen # ---------------------------------------------------------------- - trigger: - platform: state entity_id: - sensor.grid_import_15m - sensor.grid_export_15m - sensor.solar_production_15m - sensor.battery_charge_15m - sensor.battery_discharge_15m - sensor.electricity_buy_price_eur - sensor.electricity_sell_price_eur - input_number.battery_efficiency sensor: # --- Waarde zonnepanelen direct verbruik + export (exclusief batterijlading) --- # # solar_to_grid = echte solar export (zonder batterij arbitrage) # direct_home_auto = solar minus export minus batterijlading # Batterijlading telt niet mee: die kun je ook in de winter met netstroom vullen - name: "Solar Profit 15m" unique_id: solar_profit_15m unit_of_measurement: "€" icon: mdi:solar-power state: > {# Puur de besparing van zon → huis/auto direct verbruik #} {# Export naar net zit al bij Tibber reward — geen dubbeltelling #} {# Batterijlading uitgefilterd — die stroom zetten we later in #} {% set solar = states('sensor.solar_production_15m') | float(0) %} {% set grid_exp = states('sensor.grid_export_15m') | float(0) %} {% set bat_chg = states('sensor.battery_charge_15m') | float(0) %} {% set bat_dis = states('sensor.battery_discharge_15m')| float(0) %} {% set buy = states('sensor.electricity_buy_price_eur') | float(0) %} {% set bat_to_grid = [bat_dis, grid_exp] | min %} {% set solar_to_grid = [grid_exp - bat_to_grid, 0] | max %} {% set direct_home_auto = [solar - solar_to_grid - bat_chg, 0] | max %} {{ (direct_home_auto * buy) | round(5) }} # --- Werkelijke kosten MET batterij --- # # + grid_import * inkoopprijs # - grid_export * verkoopprijs # + laadverlies als gewogen gemiddelde van solar/net aandeel - name: "Cost with battery" unique_id: cost_with_battery unit_of_measurement: "€" icon: mdi:battery-charging state: > {% set import_kwh = states('sensor.grid_import_15m') | float(-1) %} {% set export_kwh = states('sensor.grid_export_15m') | float(-1) %} {% set bat_chg = states('sensor.battery_charge_15m') | float(-1) %} {% set buy = states('sensor.electricity_buy_price_eur') | float(-1) %} {% set sell = states('sensor.electricity_sell_price_eur') | float(-1) %} {% set eff = states('input_number.battery_efficiency') | float(90) / 100 %} {% if import_kwh < 0 or export_kwh < 0 or bat_chg < 0 or buy < 0 or sell < 0 %} {{ states('sensor.cost_with_battery') | float(0) }} {% else %} {% set grid_cost = import_kwh * buy %} {% set grid_revenue = export_kwh * sell %} {% set solar_15m = states('sensor.solar_production_15m') | float(0) %} {% set total_in = import_kwh + solar_15m %} {% set solar_ratio = (solar_15m / total_in) if total_in > 0 else 0 %} {% set grid_ratio = (import_kwh / total_in) if total_in > 0 else 1 %} {% set loss_price = solar_ratio * sell + grid_ratio * buy %} {% set loss_cost = bat_chg * (1 - eff) * loss_price %} {{ (grid_cost - grid_revenue + loss_cost) | round(5) }} {% endif %} # --- Virtuele kosten ZONDER batterij --- # # Werkelijk huisverbruik = solar + grid_imp + bat_dis - grid_exp - bat_chg # Zonder batterij dekt solar dit verbruik direct: # virtual_import = max(load - solar, 0) → inkoopprijs # virtual_export = max(solar - load, 0) → verkoopprijs - name: "Cost without battery" unique_id: cost_without_battery unit_of_measurement: "€" icon: mdi:home-lightning-bolt state: > {% set solar = states('sensor.solar_production_15m') | float(-1) %} {% set grid_imp = states('sensor.grid_import_15m') | float(-1) %} {% set grid_exp = states('sensor.grid_export_15m') | float(-1) %} {% set bat_chg = states('sensor.battery_charge_15m') | float(-1) %} {% set bat_dis = states('sensor.battery_discharge_15m') | float(-1) %} {% set buy = states('sensor.electricity_buy_price_eur') | float(-1) %} {% set sell = states('sensor.electricity_sell_price_eur') | float(-1) %} {% if solar < 0 or grid_imp < 0 or grid_exp < 0 or bat_chg < 0 or bat_dis < 0 or buy < 0 or sell < 0 %} {{ states('sensor.cost_without_battery') | float(0) }} {% else %} {% set real_load = [solar + grid_imp + bat_dis - grid_exp - bat_chg, 0] | max %} {% set virtual_import = [real_load - solar, 0] | max %} {% set virtual_export = [solar - real_load, 0] | max %} {{ ((virtual_import * buy) - (virtual_export * sell)) | round(5) }} {% endif %} # --- Besparing per 15 minuten dankzij de batterij --- # # Positief = batterij bespaart geld # Negatief = batterij kost geld (bv. laden uit net op hoge prijs) # FIX: als batterij niets doet én vol is → 0 (voorkomt SolarEdge buffering artefact) - name: "Battery Profit 15m" unique_id: battery_profit_15m unit_of_measurement: "€" icon: mdi:cash-plus state: > {% set without = states('sensor.cost_without_battery') | float(-999) %} {% set with_b = states('sensor.cost_with_battery') | float(-999) %} {% set bat_chg = states('sensor.battery_charge_15m') | float(0) %} {% set bat_dis = states('sensor.battery_discharge_15m') | float(0) %} {% set soc = states('sensor.solarflow_2400_ac_electric_level') | float(0) %} {% if bat_chg <= 0.002 and bat_dis <= 0.002 and soc >= 98.5 %} 0 {% elif without == -999 or with_b == -999 %} {{ states('sensor.battery_profit_15m') | float(0) }} {% else %} {{ (without - with_b) | round(5) }} {% endif %} # ---------------------------------------------------------------- # Solar export opbrengst per 15 minuten (informatief) # # solar_to_grid = max(grid_exp - bat_to_grid, 0) # bat_to_grid = min(bat_dis, grid_exp) # Geen overlap met arbitrage # ---------------------------------------------------------------- - trigger: - platform: state entity_id: - sensor.grid_export_15m - sensor.battery_discharge_15m - sensor.electricity_sell_price_eur sensor: - name: "Solar Export Profit 15m" unique_id: solar_export_profit_15m unit_of_measurement: "€" icon: mdi:transmission-tower-export state: > {% set grid_exp = states('sensor.grid_export_15m') | float(-1) %} {% set bat_dis = states('sensor.battery_discharge_15m') | float(-1) %} {% set sell = states('sensor.electricity_sell_price_eur') | float(-1) %} {% if grid_exp < 0 or bat_dis < 0 or sell < 0 %} {{ states('sensor.solar_export_profit_15m') | float(0) }} {% else %} {% set bat_to_grid = [bat_dis, grid_exp] | min %} {% set solar_to_grid = [grid_exp - bat_to_grid, 0] | max %} {{ (solar_to_grid * sell) | round(5) }} {% endif %} # ---------------------------------------------------------------- # Arbitrage-winst per 15 minuten (informatief) # # bat_to_grid = min(bat_dis, grid_exp) # cost_basis = buy als geladen vanuit net, 0 als geladen vanuit solar # winst = omzet - kostenbasis (gecorrigeerd voor efficiëntie) # ---------------------------------------------------------------- - trigger: - platform: state entity_id: - sensor.battery_discharge_15m - sensor.grid_export_15m - sensor.grid_import_15m - sensor.electricity_buy_price_eur - sensor.electricity_sell_price_eur - input_number.battery_efficiency sensor: - name: "Battery Arbitrage Profit 15m" unique_id: battery_arbitrage_profit_15m unit_of_measurement: "€" icon: mdi:lightning-bolt-circle state: > {% set bat_dis = states('sensor.battery_discharge_15m') | float(-1) %} {% set grid_exp = states('sensor.grid_export_15m') | float(-1) %} {% set grid_imp = states('sensor.grid_import_15m') | float(-1) %} {% set buy = states('sensor.electricity_buy_price_eur') | float(-1) %} {% set sell = states('sensor.electricity_sell_price_eur') | float(-1) %} {% set eff = states('input_number.battery_efficiency') | float(90) / 100 %} {% if bat_dis < 0 or grid_exp < 0 or grid_imp < 0 or buy < 0 or sell < 0 %} {{ states('sensor.battery_arbitrage_profit_15m') | float(0) }} {% else %} {% set bat_to_grid = [bat_dis, grid_exp] | min %} {% set cost_basis = buy if grid_imp > 0 else 0 %} {% set revenue = bat_to_grid * sell %} {% set cost = (bat_to_grid / eff) * cost_basis %} {{ [revenue - cost, 0] | max | round(5) }} {% endif %} # ---------------------------------------------------------------- # ROI totaaloverzicht # Direct van bronnen — geen race condition # ---------------------------------------------------------------- - trigger: - platform: state entity_id: - sensor.tibber_reward_daily - sensor.tibber_cost_daily - sensor.battery_profit_daily - sensor.battery_profit_yearly - sensor.battery_arbitrage_daily - sensor.battery_arbitrage_yearly - sensor.solar_profit_daily - input_number.battery_investment sensor: - name: "Battery ROI" unique_id: battery_roi unit_of_measurement: "%" icon: mdi:chart-line state: > {# ROI op battery_profit_yearly alleen #} {# Arbitrage zit er al in via cost_with_battery (zie FAQ) #} {% set investering = states('input_number.battery_investment') | float(0) %} {% set winst = states('sensor.battery_profit_yearly') | float(0) %} {% if investering == 0 %} 0 {% else %} {{ ((winst / investering) * 100) | round(2) }} {% endif %} - name: "System Total Profit Daily" unique_id: system_total_profit_daily unit_of_measurement: "€" icon: mdi:solar-power-variant state: > {# Drie unieke winststromen zonder overlap: #} {# 1. tibber_reward = solar export + arbitrage opbrengst (Tibber, exact) #} {# 2. battery_profit = batterij besparing zelfverbruik (- arbitrage correctie) #} {# 3. solar_profit = zon direct naar huis/auto besparing #} {% set reward = states('sensor.tibber_reward_daily') | float(0) %} {% set besparing = states('sensor.battery_profit_daily') | float(0) %} {% set arbitrage = states('sensor.battery_arbitrage_daily') | float(0) %} {% set solar_win = states('sensor.solar_profit_daily') | float(0) %} {{ (reward + besparing - arbitrage + solar_win) | round(4) }} - name: "Battery Payback Years" unique_id: battery_payback_years unit_of_measurement: "jaar" icon: mdi:calendar-clock state: > {# Terugverdientijd op battery_profit_yearly — arbitrage zit er al in #} {% set investering = states('input_number.battery_investment') | float(0) %} {% set winst_jaar = states('sensor.battery_profit_yearly') | float(0) %} {% if winst_jaar <= 0 or investering <= 0 %} 0 {% else %} {% set jaren = (investering / winst_jaar) | round(1) %} {{ [jaren, 99] | min }} {% endif %} - name: "Battery Payback Years Extrapolated" unique_id: battery_payback_years_extrapolated unit_of_measurement: "jaar" icon: mdi:calendar-clock-outline state: > {# Extrapolatie op basis van maandwinst × 12 #} {% set investering = states('input_number.battery_investment') | float(0) %} {% set maand_winst = states('sensor.battery_profit_monthly') | float(0) %} {% set jaar_extrap = maand_winst * 12 %} {% if jaar_extrap <= 0 or investering <= 0 %} 0 {% else %} {% set jaren = (investering / jaar_extrap) | round(1) %} {{ [jaren, 99] | min }} {% endif %} # ---------------------------------------------------------------- # Cyclus-monitor — batterij slijtage # ---------------------------------------------------------------- - trigger: - platform: state entity_id: sensor.solarflow_2400_ac_aggr_charge_total sensor: - name: "Batterij Totaal Aantal Cycli" unique_id: battery_total_cycles unit_of_measurement: "cycli" icon: mdi:sync state: > {% set totaal_geladen = trigger.to_state.state | float(0) %} {% set capaciteit = states('sensor.zendure_2400_ac_totale_capaciteit') | float(8.64) %} {{ (totaal_geladen / capaciteit) | round(1) if totaal_geladen > 0 else 0 }} - name: "Batterij Slijtage Kosten Totaal" unique_id: battery_wear_cost_total unit_of_measurement: "€" icon: mdi:cash-clock state: > {% set cycli = states('sensor.batterij_totaal_aantal_cycli') | float(0) %} {% set investering = states('input_number.battery_investment') | float(2600) %} {# Slijtage per cyclus = investering / 6000 cycli (LiFePO4 levensduur) #} {% set slijtage_per_cyclus = investering / 6000 %} {{ (cycli * slijtage_per_cyclus) | round(2) }}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 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476title: Batterij ROI path: batterij-roi icon: mdi:cash-fast type: sections max_columns: 2 sections: - cards: - square: false columns: 5 type: grid cards: - type: custom:button-card entity: sensor.zendure_p1_power_kw show_state: true show_icon: false name: Stroom state_display: | [[[ const v = parseFloat(entity.state); if (isNaN(v)) return entity.state; if (v >= -0.1 && v <= 0.1) { if (v < 0) return `v ${Math.abs(v).toFixed(2)}`; if (v > 0) return `^ ${v.toFixed(2)}`; return `${v.toFixed(2)}`; } if (v < -0.1) return `${Math.abs(v).toFixed(2)}`; return `${v.toFixed(2)} kW`; ]]] state: - operator: < value: -0.1 styles: card: - color: white - background-color: green - operator: ">" value: 0.1 styles: card: - color: white - background-color: tomato - operator: ">=" value: -0.1 styles: card: - color: black - background-color: white - type: custom:button-card entity: sensor.p1_actueel_kw show_state: true show_icon: false name: Stroom state_display: | [[[ const v = parseFloat(entity.state); if (isNaN(v)) return entity.state; if (v >= -0.1 && v <= 0.1) { if (v < 0) return `v ${Math.abs(v).toFixed(2)}`; if (v > 0) return `^ ${v.toFixed(2)}`; return `${v.toFixed(2)}`; } if (v < -0.1) return `${Math.abs(v).toFixed(2)}`; return `${v.toFixed(2)} kW`; ]]] state: - operator: < value: -0.1 styles: card: - color: white - background-color: green - operator: ">" value: 0.1 styles: card: - color: white - background-color: tomato - operator: ">=" value: -0.1 styles: card: - color: black - background-color: white - type: custom:button-card entity: sensor.solarflow_2400_ac_electric_level show_state: true show_icon: false name: Batterij triggers_update: - sensor.zendure_2400_ac_modus styles: card: - color: white - background-color: | [[[ const state = states['sensor.zendure_2400_ac_modus']?.state; if (state === 'Opladen') return 'green'; if (state === 'Ontladen') return 'tomato'; return 'gray'; ]]] state_display: | [[[ return entity.state + ' %'; ]]] - type: custom:button-card entity: sensor.sensor_solaredge_current_power_kwh show_state: true show_icon: false name: Zon state: - operator: ">" value: 0 styles: card: - color: white - background-color: green - operator: "=" value: 0 styles: card: - background-color: white - type: custom:button-card entity: sensor.sensor_tibberprijs show_state: true show_icon: false name: Prijs state_display: | [[[ const v = parseFloat(entity.state); if (isNaN(v)) return entity.state; return `${v.toFixed(1)} C`; ]]] state: - operator: < value: 23 styles: card: - color: white - background-color: green - operator: ">" value: 23 styles: card: - color: white - background-color: tomato - type: custom:button-card entity: sensor.dynamisch_duurste_periode show_state: false show_name: false icon: mdi:cash-clock state: - value: Ja styles: card: - background-color: green - color: white icon: - color: white - value: Nee styles: card: - background-color: var(--card-background-color) - color: var(--primary-text-color) - show_name: false show_icon: true type: button entity: input_button.update_roi tap_action: action: toggle - type: custom:gap-card - show_name: true show_icon: true type: button tap_action: action: navigate navigation_path: /lovelace/energie name: Panelen - show_name: true show_icon: true type: button tap_action: action: navigate navigation_path: /lovelace/tesla name: Autos - square: false type: grid columns: 3 cards: - type: gauge name: Vermogen entity: sensor.zendure_2400_ac_vermogen_aansturing needle: true min: -2400 max: 2400 severity: green: -2400 yellow: -100 red: 100 - type: gauge name: Laad% entity: sensor.zendure_2400_ac_laadpercentage needle: true min: 0 max: 100 severity: green: 50 yellow: 15 red: 0 - type: gauge entity: sensor.zendure_2400_ac_omvormer_temperatuur needle: true severity: green: 0 yellow: 55 red: 60 name: Omvormer - type: entities entities: - entity: automation.zendure_zomer_winter_goedkoopst_duurst - entity: input_select.zendure_2400_ac_modus_selecteren - type: entities entities: - entity: sensor.electricity_buy_price_eur name: Inkoopprijs icon: mdi:lightning-bolt - entity: sensor.electricity_sell_price_eur name: Verkoopprijs icon: mdi:lightning-bolt-outline show_header_toggle: false - type: heading heading: Batterij heading_style: title icon: mdi:home-battery-outline - type: entities title: Besparing (zelfverbruik + arbitrage) entities: - entity: sensor.battery_profit_daily name: Vandaag icon: mdi:battery-charging - entity: sensor.battery_profit_monthly name: Deze maand icon: mdi:battery-charging - entity: sensor.battery_profit_yearly name: Dit jaar icon: mdi:battery-charging show_header_toggle: false - type: entities title: Arbitrage (zit al in besparing) entities: - entity: sensor.battery_arbitrage_daily name: Vandaag icon: mdi:lightning-bolt-circle - entity: sensor.battery_arbitrage_monthly name: Deze maand icon: mdi:lightning-bolt-circle - entity: sensor.battery_arbitrage_yearly name: Dit jaar icon: mdi:lightning-bolt-circle show_header_toggle: false - type: history-graph title: Batterij besparing (24u) hours_to_show: 24 entities: - entity: sensor.battery_profit_daily - type: custom:apexcharts-card apex_config: chart: height: 150px header: show: true title: Batterij besparing — 30 dagen show_states: true colorize_states: true graph_span: 30d series: - entity: sensor.battery_profit_monthly name: Besparing (EUR) color: "#378ADD" show: in_chart: false in_header: true - entity: sensor.battery_profit_daily name: Besparing (EUR) color: "#378ADD" stroke_width: 0 type: column show: in_chart: true in_header: false group_by: func: max duration: 1d - type: custom:apexcharts-card apex_config: chart: height: 150px header: show: true title: Opbrengst & besparing per maand — 12 maanden show_states: true colorize_states: true graph_span: 365d series: - entity: sensor.tibber_reward_monthly name: Tibber opbrengst (EUR) color: "#EF9F27" stroke_width: 0 type: column group_by: func: max duration: 30d - entity: sensor.battery_profit_monthly name: Besparing (EUR) color: "#378ADD" stroke_width: 0 type: column group_by: func: max duration: 30d - cards: - type: entities entities: - entity: sensor.battery_profit_daily name: Batterij besparing icon: mdi:battery-plus-variant - entity: sensor.solar_profit_daily icon: mdi:solar-power-variant name: Solar → grid - entity: sensor.roi_solar_export_profit_daily name: Solar export icon: mdi:export-variant - entity: sensor.tibber_reward_daily name: Tibber opbrengst (solar + arbitr) - entity: sensor.tibber_cost_daily name: Tibber kosten - type: divider - entity: sensor.tibber_net_daily - entity: sensor.battery_arbitrage_daily name: Batterij arbitrage icon: mdi:swap-vertical-circle-outline - type: divider - entity: sensor.system_total_profit_daily name: Totaal systeem opbrengst icon: mdi:piggy-bank title: Vandaag totalen - type: heading heading: Zonnepanelen & Net heading_style: title icon: mdi:solar-power-variant - type: entities title: SolarEdge — productie entities: - entity: sensor.solar_production_daily name: Productie vandaag icon: mdi:solar-power - entity: sensor.sensor_solaredge_energy_today_kwh name: Productie vandaag (live) icon: mdi:solar-power-variant - entity: sensor.solar_production_15m name: Productie afgelopen kwartier icon: mdi:solar-power show_header_toggle: false - type: entities title: Tibber — net vandaag entities: - entity: sensor.tibber_pulse_edwin_accumulated_production name: Teruggeleverd aan net icon: mdi:transmission-tower-export - entity: sensor.tibber_pulse_edwin_accumulated_consumption name: Afgenomen van net icon: mdi:transmission-tower-import show_header_toggle: false - type: entities title: Tibber vandaag — €€€ entities: - entity: sensor.tibber_reward_daily name: Opbrengst teruglevering icon: mdi:cash-plus - entity: sensor.tibber_cost_daily name: Stroomkosten icon: mdi:cash-minus - entity: sensor.tibber_net_daily name: Netto stroomkosten icon: mdi:cash-sync - entity: sensor.edwin_monthly_cost name: Maandrekening Tibber icon: mdi:calendar-month show_header_toggle: false - type: entities title: Tibber — teruglevering € entities: - entity: sensor.tibber_reward_daily name: Vandaag icon: mdi:cash-plus - entity: sensor.tibber_reward_monthly name: Deze maand icon: mdi:cash-plus - entity: sensor.tibber_reward_yearly name: Dit jaar icon: mdi:cash-plus show_header_toggle: false - type: entities entities: - entity: sensor.solar_profit_15m icon: mdi:transmission-tower-off - entity: sensor.solar_profit_daily name: Solar - Grid dagelijks icon: mdi:transmission-tower-off - entity: sensor.solar_profit_yearly name: Solar - Grid jaarlijks icon: mdi:transmission-tower-off title: Solar → Grid (geschat) - type: heading heading: Totalen heading_style: title - type: entities title: ROI + Panelen export + Panelen grid entities: - entity: sensor.system_total_profit_daily name: Totaal winst vandaag icon: mdi:solar-power-variant - entity: sensor.roi_system_profit_yearly name: Totaal winst dit jaar icon: mdi:solar-power-variant - type: divider - entity: sensor.battery_roi name: Batterij ROI % (cumulatief) icon: mdi:chart-line - entity: sensor.battery_payback_years name: Terugverdientijd (werkelijk) icon: mdi:calendar-clock - entity: sensor.battery_payback_years_extrapolated name: Terugverdientijd (schatting obv huidige maand) icon: mdi:calendar-clock-outline - type: divider - entity: sensor.batterij_totaal_aantal_cycli name: Totaal aantal cycli (van 6000) - entity: sensor.batterij_slijtage_kosten_totaal show_header_toggle: false - type: heading heading: Instellingen heading_style: title - type: entities entities: - entity: input_number.battery_efficiency name: Efficiëntie batterij icon: mdi:battery-heart-outline - entity: input_number.sell_price_fixed name: Verkoopaftrek (EUR/kWh) icon: mdi:currency-eur - entity: input_number.battery_investment name: Investering batterij (EUR) icon: mdi:cash show_header_toggle: false - type: markdown content: >- **Batterij installatie 8-12-2025 Betrouwbare ROI vanaf 12-4-2026** *Arbitrage* = 'handelen' middels extra teruggeleverde stroom naar het net met dynamisch ontladen *Gemaakt met Claude.ai* Bij problemen upload: roi.yaml roi_dashboard.yaml roi_faq.md cards: []
Heb je een paar screenshots hoe dat in HA eruit ziet?
Gasloos 2019 + WP Panasonic H-serie 7kW + 300 liter boilervat + PV 12.415Wp + Home Assistant + Hyundai Ioniq 6 First Edition + Zaptec laadpaal
hemertje schreef op zondag 19 april 2026 @ 08:50:
[...]
Gaaf! En wat een werk![]()
Heb je een paar screenshots hoe dat in HA eruit ziet?
/f/image/B9AFwpZaheUlXaad7bwhx06I.png?f=fotoalbum_large)
/f/image/FIMdsBT5B2ecgZZQixuKNCtJ.png?f=fotoalbum_large)
/f/image/riGhlS7Pd6z4FjfELmaLGBaz.png?f=fotoalbum_large)
/f/image/v1lcG6kfshioMfSGIa3nQinC.png?f=fotoalbum_large)
Ik snap alleen even niet zo goed hoe je dit goed werkend krijgt en misschien zit ik er wel naast wat in mijn situatie dan beter is, maar ook in de duren uren wilt de batterij gaan laden terwijl dit niet nodig is lijkt mij. In de TS staat hier verder ook niks over. Heb wel de verschillende faq gelezen op github en de modussen enz.
Iemand die mij hierbij een zetje in de juiste richting kan geven? Ik zag net ook dat @edjes een yaml had gedeeld om te zien hoeveel je verdient hebt etc etc. Is daar ergens een stappenplan van? Dat ziet er namelijk ook heel nice uit!
deze heb je nu in het Giel dashboard geintegreerd zie ik?
of toch een los dashboard?
wat doet die zomer-winter-viagielz? heb je een linkje?
Gasloos 2019 + WP Panasonic H-serie 7kW + 300 liter boilervat + PV 12.415Wp + Home Assistant + Hyundai Ioniq 6 First Edition + Zaptec laadpaal
Die zomer-winter stuurt Gielz weer aan wat hij moet doen volgens onderstaand schema.hemertje schreef op zondag 19 april 2026 @ 10:32:
[...]
deze heb je nu in het Giel dashboard geintegreerd zie ik?
of toch een los dashboard?
wat doet die zomer-winter-viagielz? heb je een linkje?
Ik heb een zomer modus, dan gooit hij de batterij vol met zon, en dan NOM+dyn (met opladen uit net uit; goedkope periodes = 0).
Voorts een helper om te bepalen of de batterij goed vol 2 uur voor zonsondergang, dan gaat hij de hele nacht NOMMEN. En anders gooit hij de batterij leeg wat er is op de dure momenten.
En heel belangrijk, als de auto laadt, dan moet hij naar standby, daar is ook een kleine automation voor die een helper aanstuurt.
/f/image/z0ADxzzMh7yOA99Xv2NalCk0.png?f=fotoalbum_large)
:strip_exif()/f/image/1F0zil2OBkl3apqEds3qmRRT.png?f=user_large)
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: Zendure - zomer-winter-viagielz
description: >
Stuurt Zendure 2400 AC, prijs, Nul op de meter, zomernacht-helper, PV-drempel
bij goedkope periodes, spread-check en status feedback. Gebruik geen andere
start-stop automations hiernaast!
triggers:
- trigger: state
entity_id:
- sensor.dynamisch_goedkoopste_periode
- sensor.dynamisch_duurste_periode
- input_boolean.zendure_zomernacht_nom_toegestaan
- sensor.sensor_tibberprijs
- input_boolean.zendure_zomer_mode
- input_boolean.autoisaanhetladen
- trigger: numeric_state
entity_id:
- sensor.sensor_solaredge_current_power_kwh
above: 0.2
for:
hours: 0
minutes: 5
seconds: 0
- trigger: numeric_state
entity_id:
- sensor.sensor_solaredge_current_power_kwh
below: 0.8
for:
hours: 0
minutes: 5
seconds: 0
- trigger: numeric_state
entity_id: sensor.zendure_p1_power_kw
above: 5
for: "00:02:00"
- trigger: sun
event: sunset
offset: "-02:30:00"
- trigger: sun
event: sunrise
offset: "02:30:00"
actions:
- choose:
- conditions:
- condition: or
conditions:
- condition: numeric_state
entity_id: sensor.zendure_p1_power_kw
above: 5
- condition: state
entity_id: switch.nicolaas_charge
state: "on"
enabled: false
- condition: state
entity_id: binary_sensor.renault5_charging
state: charging
enabled: false
- condition: state
entity_id: input_boolean.autoisaanhetladen
state: "on"
sequence:
- choose:
- conditions:
- condition: state
entity_id: input_select.zendure_2400_ac_modus_selecteren
state: Standby
sequence: []
default:
- target:
entity_id: input_select.zendure_2400_ac_modus_selecteren
data:
option: Standby
action: input_select.select_option
- target:
entity_id: input_text.zendure_automation_status
data:
value: Auto laden → batterij in Standby
action: input_text.set_value
- conditions:
- condition: state
entity_id: input_boolean.zendure_zomer_mode
state: "on"
sequence:
- choose:
- conditions:
- condition: state
entity_id: input_select.zendure_2400_ac_modus_selecteren
state:
- Dynamisch Handelen + NOM
sequence: []
default:
- action: input_select.select_option
target:
entity_id: input_select.zendure_2400_ac_modus_selecteren
data:
option: Dynamisch Handelen + NOM
- action: input_text.set_value
target:
entity_id: input_text.zendure_automation_status
data:
value: Zomer modus actief — Dynamisch Handelen + NOM
- conditions:
- condition: state
entity_id: sensor.dynamisch_duurste_periode
state: Ja
- condition: numeric_state
entity_id: sensor.zendure_2400_ac_laadpercentage
above: 15
sequence:
- choose:
- conditions:
- condition: state
entity_id: input_select.zendure_2400_ac_modus_selecteren
state: Nul op de meter
sequence: []
default:
- target:
entity_id: input_select.zendure_2400_ac_modus_selecteren
data:
option: Nul op de meter
action: input_select.select_option
- target:
entity_id: input_text.zendure_automation_status
data:
value: "Dure periode: ontladen via NOM"
action: input_text.set_value
- conditions:
- condition: state
entity_id: sensor.dynamisch_goedkoopste_periode
state: Ja
- condition: numeric_state
entity_id: sensor.sensor_solaredge_current_power_kwh
below: 0.5
- condition: numeric_state
entity_id: sensor.dynamisch_spread_indicatie
above: input_number.dynamisch_minimale_spread
- condition: numeric_state
entity_id: sensor.zendure_2400_ac_laadpercentage
below: 99
sequence:
- choose:
- conditions:
- condition: state
entity_id: input_select.zendure_2400_ac_modus_selecteren
state: Snel opladen
sequence: []
default:
- target:
entity_id: input_select.zendure_2400_ac_modus_selecteren
data:
option: Snel opladen
action: input_select.select_option
- target:
entity_id: input_text.zendure_automation_status
data:
value: "Goedkope periode: snel opladen"
action: input_text.set_value
- conditions:
- condition: numeric_state
entity_id: sensor.sensor_solaredge_current_power_kwh
above: 0.79
- condition: state
entity_id: sensor.dynamisch_goedkoopste_periode
state: Nee
enabled: false
sequence:
- target:
entity_id: input_select.zendure_2400_ac_modus_selecteren
data:
option: Nul op de meter
action: input_select.select_option
- target:
entity_id: input_text.zendure_automation_status
data:
value: "Goede zon: laden via NOM"
action: input_text.set_value
- conditions:
- condition: numeric_state
entity_id: sensor.sensor_solaredge_current_power_kwh
above: 0.3
- condition: numeric_state
entity_id: sensor.sensor_solaredge_current_power_kwh
below: 0.79
sequence:
- target:
entity_id: input_select.zendure_2400_ac_modus_selecteren
data:
option: Alleen slim opladen
action: input_select.select_option
- target:
entity_id: input_text.zendure_automation_status
data:
value: "Matige zon: alleen slim opladen"
action: input_text.set_value
- conditions:
- condition: sun
after: sunset
after_offset: "-02:30:00"
before: sunrise
before_offset: "02:30:00"
- condition: state
entity_id: input_boolean.zendure_zomernacht_nom_toegestaan
state: "on"
sequence:
- target:
entity_id: input_select.zendure_2400_ac_modus_selecteren
data:
option: Nul op de meter
action: input_select.select_option
- target:
entity_id: input_text.zendure_automation_status
data:
value: "Zomernacht: hele nacht NOM"
action: input_text.set_value
- conditions:
- condition: numeric_state
entity_id: sensor.zendure_p1_power_kw
below: -0.8
sequence:
- target:
entity_id: input_select.zendure_2400_ac_modus_selecteren
data:
option: Nul op de meter
action: input_select.select_option
- target:
entity_id: input_text.zendure_automation_status
data:
value: Error SolarEdge? Genoeg zon → NOM
action: input_text.set_value
default:
- target:
entity_id: input_select.zendure_2400_ac_modus_selecteren
data:
option: Standby
action: input_select.select_option
- target:
entity_id: input_text.zendure_automation_status
data:
value: Neutraal – standby
action: input_text.set_value
mode: restart |
Voor dit jaar is dynamisch handelen meest rendabele optie.Flexiilex schreef op zondag 19 april 2026 @ 10:16:
Ik heb nu een weekje 8,16 kWh staan waarvan dit eerst aangestuurd werd door HEMS. Toch wilde ik voor 2026 niet NOM gaan draaien maar een modus waarin dit jaar meer winst valt te halen. Ik heb de integratie nu sinds gisteren draaien maar ik snap dus nog niet echt welke modus dit jaar rendabel is. Zelf vermoed ik dynamisch NOM (duur) ivm veel opwek op de dag en eigenlijk weinig momenten waarbij de accu zou moeten bijspringen om het huis op NOM te krijgen.
Ik snap alleen even niet zo goed hoe je dit goed werkend krijgt en misschien zit ik er wel naast wat in mijn situatie dan beter is, maar ook in de duren uren wilt de batterij gaan laden terwijl dit niet nodig is lijkt mij. In de TS staat hier verder ook niks over. Heb wel de verschillende faq gelezen op github en de modussen enz.
Iemand die mij hierbij een zetje in de juiste richting kan geven? Ik zag net ook dat @edjes een yaml had gedeeld om te zien hoeveel je verdient hebt etc etc. Is daar ergens een stappenplan van? Dat ziet er namelijk ook heel nice uit!
Voor volgend jaar moet ik nog even kijken welke modus van Gielz op welk moment moet worden ingeschakeld. Wordt een langere termijn projectje omdat ik naast uitgesteld terugleveren ook op termijn opbrengst voorspelling er in wil betrekken.
Maar ik start waarschijnlijk met een aantal goedkope en dure uren ingesteld. Tot start goedkoop alleen slim ontladen, dan vanaf start goedkoop NOM, vanaf start duur maximaal ontladen tot 30% (restcapaciteit tot de zon weer op gang is) en tenslotte alleen slim ontladen.
Daarbovenop een trigger die bij verbruik boven 7kW (of boven 12A op L3) de standby modus selecteert omdat ik dan de auto aan het laden ben.
Edit: winter stand is natuurlijk gewoon NOM...
Ik zie ik zie wat jij niet ziet, en het is....... ach laat ook maar je ziet het toch niet!
:strip_exif()/f/image/c0Ho8Y72MVIkTrULgUbuCknD.jpg?f=fotoalbum_large)
Op deze manier gaat er erg veel terug het net op.
Edit: net even de batterijen op standby gezet en daarna weer op smart matching. Nu lijken zelfs alle sensoren niet beschikbaar en wordt er ook niet geladen. Hulp is welkom 🙂
Edit 2: na een herstart van de batterijen en eerst even HEMS geactiveerd te hebben, lijkt de boel het weer te doen. Opvallend was dat in HEMS hetzelfde beeld te zien was. Wat dat nou getriggerd heeft…. Ik hou het in de gaten.
[ Voor 22% gewijzigd door Gramser op 19-04-2026 12:12 ]
Je uitgangspunten lijken in te houden dat dit alleen werkt als je een contract bij Tibber hebt? Ik zit ergens anders (en wil daar niet weg), maar zou dit graag gebruiken.edjes schreef op zaterdag 18 april 2026 @ 17:53:
Ik heb zes kantjes en maanden werk in een ROI.![]()
Hier, kan je spelen.
Uitgangspunt: zonnepanelen (solaredge), tibber
Het is erg complex, maar zeer volledig.
Plaats roi.yaml in packages
ROI.yaml: https://www.dropbox.com/s...hfemrk8dxxsb35xuyksi&dl=0
Informatiehonger...
Verdraagzaamheid is het hoogste gebod
en wie dat niet eert die schoppen we rot.
<John O`Mill>
Ik gebruik tot nu toe je Dynamisch-HA integratie, maar voor de Zendure heb ik de Zendure-HA-zenSDK nodig, als ik het goed begrijp.
Kunnen die twee naast elkaar draaien, of moet ik die Dynamisch-HA eerst verwijderen voordat ik de Zendure-HA-zenSDK kan installeren?
Verdraagzaamheid is het hoogste gebod
en wie dat niet eert die schoppen we rot.
<John O`Mill>
Klopt en zonnepanelen van solaredge hebt.Hippe Lip schreef op zondag 19 april 2026 @ 13:21:
[...]
Je uitgangspunten lijken in te houden dat dit alleen werkt als je een contract bij Tibber hebt? Ik zit ergens anders (en wil daar niet weg), maar zou dit graag gebruiken.
Informatiehonger...
Maar met wat puzzelen waar al jouw sensoren vandaan komen kan je dit toch prima vertimmeren?
Bij elke berekening staat wat het doel is en als je zonnepanelen info weg laat is het een stuk beknopter.
De basisberekening is welke kosten heb je nu met batterij versus welke virtuele kosten zou je hebben zonder batterij. De rest erom heen is heel veel info met name over hoe rendabel de solars zijn.
Gooi deze yaml en faq in claude.ai bijvoorbeeld en pas aan op je eigen situatie.
Ik heb ook een FAQ, die kan je meeposten naar de AI:
https://www.dropbox.com/s...2v67z40pryulq1ch778p&dl=0
[ Voor 3% gewijzigd door edjes op 19-04-2026 14:35 ]
Ik vind het knap dat je dit allemaal voor elkaar hebt gekregen, en met ons wil delen.edjes schreef op zondag 19 april 2026 @ 14:32:
[...]
Klopt en zonnepanelen van solaredge hebt.
Maar met wat puzzelen waar al jouw sensoren vandaan komen kan je dit toch prima vertimmeren?
Bij elke berekening staat wat het doel is en als je zonnepanelen info weg laat is het een stuk beknopter.
De basisberekening is welke kosten heb je nu met batterij versus welke virtuele kosten zou je hebben zonder batterij. De rest erom heen is heel veel info met name over hoe rendabel de solars zijn.
Gooi deze yaml en faq in claude.ai bijvoorbeeld en pas aan op je eigen situatie.
Ik heb ook een FAQ, die kan je meeposten naar de AI:
https://www.dropbox.com/s...2v67z40pryulq1ch778p&dl=0
Maar het is mijn net even te complex om dit allemaal na te lopen en aan te passen.
Misschien is net als bij gielz integratie, het mogelijk om een instellingen tab te maken?
Dan kunnen andere mensen met minder ervaring net als ik, het ook makkelijker aanpassen.
In iedergeval mijn complimenten voor je dashboard 👌
Op je screenshot is te zien dat de Proxy naar beide Zendures de opdracht stuurt om met 2400 Watt te laden, dus dat ziet er goed uit.Gramser schreef op zondag 19 april 2026 @ 11:46:
Ik heb toch het idee dat er iets niet helemaal lekker loopt bij Smart Charging. Er komt heel veel vermogen van de panelen, dus de beide zendures zouden met elk 2400W mogen laden. Maar dat doen ze niet, slechts een van de twee is aan het laden en de ander doet niks. Wat gaat hier verkeerd?
[Afbeelding]
Op deze manier gaat er erg veel terug het net op.
Edit: net even de batterijen op standby gezet en daarna weer op smart matching. Nu lijken zelfs alle sensoren niet beschikbaar en wordt er ook niet geladen. Hulp is welkom 🙂
Edit 2: na een herstart van de batterijen en eerst even HEMS geactiveerd te hebben, lijkt de boel het weer te doen. Opvallend was dat in HEMS hetzelfde beeld te zien was. Wat dat nou getriggerd heeft…. Ik hou het in de gaten.
Maar om een of andere reden doen de Zendures dat niet. De vraag is wat de reden hiervoor is.
Is je wifi verbinding naar de beide Zendures "Uitstekend"? Misschien vallen er opdrachten weg?
6 kWp solar | Daikin Intergas Hybride 8kW | Tesla Model Y RWD 2023 | Fiat 500e 2014 | Zendure SF2400AC 17 kWh
Dank voor je reactie! Ja ik denk dat dit niet aan jouw werk lag - dit moet iets in de zendures geweest zijn. Ik zag dat het ook in HEMS gebeurde toen ik dat weer activeerde. Het laden van de ene Zendure bleef op 728W staan terwijl de andere standby stond - met 4kW teruglevering… WiFi verbinding heb ik altijd op uitstekend zien staan - maar nu niet specifiek op gelet.gast777 schreef op zondag 19 april 2026 @ 15:02:
[...]
Op je screenshot is te zien dat de Proxy naar beide Zendures de opdracht stuurt om met 2400 Watt te laden, dus dat ziet er goed uit.
Maar om een of andere reden doen de Zendures dat niet. De vraag is wat de reden hiervoor is.
Is je wifi verbinding naar de beide Zendures "Uitstekend"? Misschien vallen er opdrachten weg?
Je kunt Dynamisch-HA verwijderen in de configuration.yaml of je package. Naast elkaar laten werken heeft weinig zin.Hippe Lip schreef op zondag 19 april 2026 @ 13:26:
@gielz
Ik gebruik tot nu toe je Dynamisch-HA integratie, maar voor de Zendure heb ik de Zendure-HA-zenSDK nodig, als ik het goed begrijp.
Kunnen die twee naast elkaar draaien, of moet ik die Dynamisch-HA eerst verwijderen voordat ik de Zendure-HA-zenSDK kan installeren?
Zendure-HA.com | Run Zendure your way — in Home Assistant
Dit weet ik wel wat het is en dat is opgelost in de laatste Proxy versie.Gramser schreef op zondag 19 april 2026 @ 15:33:
En dan een laatste observatie die ik niet helemaal kan plaatsen: ik ben aan het laden en ontladen tegelijk, aan Power te zien…?
[Afbeelding]
Wat er gebeurt is het volgende. Je hebt twee Zendures. Bij lagere vermogens is er 1 daarvan aktief, de andere in standby. Als er gewisseld wordt van device of als je van 2 naar 1 device gaat, wordt er dus een op 0 Watt gezet. Na 5 minuten zet de proxy die op 'slaapmode' oftewel smartmode=0 oftewel 'opslaan in Flash'. Daarna heb ik hier ook gezien dat "outputPackPower" een laag vermogen aangeeft, rond de 20 Watt. Dit is Zendure gedrag en is niets aan te doen en op zichzelf geen probleem.
De huidige versie van Gielz ziet dat als Opladen met 20W, terwijl de andere Zendure aan het Ontladen is. De proxy combineert deze waarden in een device. Zo krijg je het beeld in je screenshot met laden en ontladen tegelijk.
Dat alleen is nog niet echt een probleem eigenlijk, hoewel het er wat raar uitziet. Maar ik heb gezien dat dit ook kan leiden tot wat ander incorrect gedrag omdat Gielz HA dit ziet als Opladen terwijl je eigenlijk aan het ontladen bent. Daardoor kreeg ik het fenomeen dat na een device wissel weer een wissel terug gedaan werd, wat niet de bedoeling is.
In de nieuwste Proxy versie is dit dus opgelost. De Proxy houdt nu rekening met dit Zendure gedrag en zorgt ervoor dat altijd laden of ontladen op 0 Watt is. In bovenstaande situatie wordt nu het kleine 'oplaad' getal van het grote 'ontlaad' getal afgetrokken en dan aan HA doorgegeven.
Dus ik zou aanraden om de laatste Proxy versie op je node-RED te zetten.
6 kWp solar | Daikin Intergas Hybride 8kW | Tesla Model Y RWD 2023 | Fiat 500e 2014 | Zendure SF2400AC 17 kWh
Via jouw NR heb ik 2x een sf800plus draaien.gast777 schreef op zondag 19 april 2026 @ 17:37:
[...]
Dit weet ik wel wat het is en dat is opgelost in de laatste Proxy versie.
Wat er gebeurt is het volgende. Je hebt twee Zendures. Bij lagere vermogens is er 1 daarvan aktief, de andere in standby. Als er gewisseld wordt van device of als je van 2 naar 1 device gaat, wordt er dus een op 0 Watt gezet. Na 5 minuten zet de proxy die op 'slaapmode' oftewel smartmode=0 oftewel 'opslaan in Flash'. Daarna heb ik hier ook gezien dat "outputPackPower" een laag vermogen aangeeft, rond de 20 Watt. Dit is Zendure gedrag en is niets aan te doen en op zichzelf geen probleem.
De huidige versie van Gielz ziet dat als Opladen met 20W, terwijl de andere Zendure aan het Ontladen is. De proxy combineert deze waarden in een device. Zo krijg je het beeld in je screenshot met laden en ontladen tegelijk.
Dat alleen is nog niet echt een probleem eigenlijk, hoewel het er wat raar uitziet. Maar ik heb gezien dat dit ook kan leiden tot wat ander incorrect gedrag omdat Gielz HA dit ziet als Opladen terwijl je eigenlijk aan het ontladen bent. Daardoor kreeg ik het fenomeen dat na een device wissel weer een wissel terug gedaan werd, wat niet de bedoeling is.
In de nieuwste Proxy versie is dit dus opgelost. De Proxy houdt nu rekening met dit Zendure gedrag en zorgt ervoor dat altijd laden of ontladen op 0 Watt is. In bovenstaande situatie wordt nu het kleine 'oplaad' getal van het grote 'ontlaad' getal afgetrokken en dan aan HA doorgegeven.
Dus ik zou aanraden om de laatste Proxy versie op je node-RED te zetten.
En op 1 van de 2 batterijen heb ik zonnepanelen aangesloten, en ivm terugleverkosten heb ik de export geblokkeerd. Dus alleen opwekken wat ik nodig heb.
Zou het kunnen dat als de batterij met zonnepanelen vol is, dat die zonnepanelen ook stoppen met leveren voor dat de andere batterij vol is omdat je ze ombeurten laat laden?
Helder! Maar, ik heb jouw proxy twee dagen terug geinstalleerd - is dat niet de nieuwste versie dan?gast777 schreef op zondag 19 april 2026 @ 17:37:
[...]
Dit weet ik wel wat het is en dat is opgelost in de laatste Proxy versie.
Wat er gebeurt is het volgende. Je hebt twee Zendures. Bij lagere vermogens is er 1 daarvan aktief, de andere in standby. Als er gewisseld wordt van device of als je van 2 naar 1 device gaat, wordt er dus een op 0 Watt gezet. Na 5 minuten zet de proxy die op 'slaapmode' oftewel smartmode=0 oftewel 'opslaan in Flash'. Daarna heb ik hier ook gezien dat "outputPackPower" een laag vermogen aangeeft, rond de 20 Watt. Dit is Zendure gedrag en is niets aan te doen en op zichzelf geen probleem.
De huidige versie van Gielz ziet dat als Opladen met 20W, terwijl de andere Zendure aan het Ontladen is. De proxy combineert deze waarden in een device. Zo krijg je het beeld in je screenshot met laden en ontladen tegelijk.
Dat alleen is nog niet echt een probleem eigenlijk, hoewel het er wat raar uitziet. Maar ik heb gezien dat dit ook kan leiden tot wat ander incorrect gedrag omdat Gielz HA dit ziet als Opladen terwijl je eigenlijk aan het ontladen bent. Daardoor kreeg ik het fenomeen dat na een device wissel weer een wissel terug gedaan werd, wat niet de bedoeling is.
In de nieuwste Proxy versie is dit dus opgelost. De Proxy houdt nu rekening met dit Zendure gedrag en zorgt ervoor dat altijd laden of ontladen op 0 Watt is. In bovenstaande situatie wordt nu het kleine 'oplaad' getal van het grote 'ontlaad' getal afgetrokken en dan aan HA doorgegeven.
Dus ik zou aanraden om de laatste Proxy versie op je node-RED te zetten.
Edit: ik geloof dat ik inderdaad een oude heb. Is het een kwestie van de huidige flow deleten en de nieuwe downloaden en deployen? En de ip-adressen weer ingeven?
Ik ga maar even een backup maken… blijven alle proxysensoren en het overzicht in het giekz dashboard wel intact?
[ Voor 7% gewijzigd door Gramser op 19-04-2026 18:19 ]
Toevallig heb ik gisteren en vandaag een nieuwe versie gepost (huidige is 20260419, de fix zit er in vanaf 20260418).Gramser schreef op zondag 19 april 2026 @ 18:08:
[...]
Helder! Maar, ik heb jouw proxy twee dagen terug geinstalleerd - is dat niet de nieuwste versie dan?
Edit: ik geloof dat ik inderdaad een oude heb. Is het een kwestie van de huidige flow deleten en de nieuwe downloaden en deployen? En de ip-adressen weer ingeven?
Ik ga maar even een backup maken… blijven alle proxysensoren en het overzicht in het giekz dashboard wel intact?
6 kWp solar | Daikin Intergas Hybride 8kW | Tesla Model Y RWD 2023 | Fiat 500e 2014 | Zendure SF2400AC 17 kWh
Idd flow verwijderen. Nieuwe toevoegen. IP adressen toevoegen en deploy. Als het goed is gaat hij direct verder. Backup maken kan voor de zekerheid. Alle sensoren blijven intact. Alleen als je gielz gaat updaten wel de proxy sensoren weer terugzetten in je package van gielz.Gramser schreef op zondag 19 april 2026 @ 18:08:
[...]
Helder! Maar, ik heb jouw proxy twee dagen terug geinstalleerd - is dat niet de nieuwste versie dan?
Edit: ik geloof dat ik inderdaad een oude heb. Is het een kwestie van de huidige flow deleten en de nieuwe downloaden en deployen? En de ip-adressen weer ingeven?
Ik ga maar even een backup maken… blijven alle proxysensoren en het overzicht in het giekz dashboard wel intact?
Denk in kansen, niet in problemen. Homewizard Plug-In Battery 5.4 kWh. Zendure 2400 AC 17.2 kWh. Testen Accumate 4.8 kWh Plug-In Battery. 3330 Wp zonnepanelen. EV 77 kWh. Peblar Business Laadpaal.
Wat gebruik je nu? Of gebruik je de integratie nog niet? Denk dat ik vanmorgen teveel gewisseld heb van modussen. Iemand een tip hoe je dan een “reset” kan geven? Naar een andere modus gaan stopte niet het gedrag om te laden.koboy schreef op zondag 19 april 2026 @ 11:32:
[...]
Voor dit jaar is dynamisch handelen meest rendabele optie.
Voor volgend jaar moet ik nog even kijken welke modus van Gielz op welk moment moet worden ingeschakeld. Wordt een langere termijn projectje omdat ik naast uitgesteld terugleveren ook op termijn opbrengst voorspelling er in wil betrekken.
Maar ik start waarschijnlijk met een aantal goedkope en dure uren ingesteld. Tot start goedkoop alleen slim ontladen, dan vanaf start goedkoop NOM, vanaf start duur maximaal ontladen tot 30% (restcapaciteit tot de zon weer op gang is) en tenslotte alleen slim ontladen.
Daarbovenop een trigger die bij verbruik boven 7kW (of boven 12A op L3) de standby modus selecteert omdat ik dan de auto aan het laden ben.
Edit: winter stand is natuurlijk gewoon NOM...
En, iedereen gebruik 1 uur ipv 15 min denk ik? De omvormer doet er namelijk 10 minuten over om van stand-by naar 2400 watt te gaan. Beetje zonde dus om op 15 min dynamisch handelen te gaan doen
Thanks @Devke ! Dan gaan we dat binnenkort ook maar even doen.Devke schreef op zondag 19 april 2026 @ 18:53:
[...]
Idd flow verwijderen. Nieuwe toevoegen. IP adressen toevoegen en deploy. Als het goed is gaat hij direct verder. Backup maken kan voor de zekerheid. Alle sensoren blijven intact. Alleen als je gielz gaat updaten wel de proxy sensoren weer terugzetten in je package van gielz.
Ik heb nog een vraag voor de kenners: het aantal relay switches - is dat het totaal van het aantal aansturende zendures? Dus als je twee torens hebt, zo’n beetje door twee delen voor het aantal per zendure?
Samsung Qled | Sonos Arc Ultra; Sub 2nd; 2x Era100 | PS5 | DS218+ | DIRIGERA | Iptv | B&W 607s3 | NAD C338 | Argon Audio TT4SE | Streetfishing |
Hij staat nu op dynamisch handelen in Gielz. 2400AC met 4x AB3000X. 6 uur goedkoop, 5 uur duur, minimale spread 25%.Flexiilex schreef op zondag 19 april 2026 @ 18:54:
[...]
Wat gebruik je nu? Of gebruik je de integratie nog niet? Denk dat ik vanmorgen teveel gewisseld heb van modussen. Iemand een tip hoe je dan een “reset” kan geven? Naar een andere modus gaan stopte niet het gedrag om te laden.
En, iedereen gebruik 1 uur ipv 15 min denk ik? De omvormer doet er namelijk 10 minuten over om van stand-by naar 2400 watt te gaan. Beetje zonde dus om op 15 min dynamisch handelen te gaan doen
Ontladen duurt dik 4 uur, opladen net een paar minuten meer dan 5 met de laatste update.
Wat ik zie is dat hij in een paar tellen naar vol vermogen gaat en terug, alleen het einde van het (ont)laden wordt teruggeregeld. Ik zou dus prima kwartier tarieven kunnen gebruiken, maar Zonneplan doet daar nog niet aan en rekent nog in uren.
Ik zie ik zie wat jij niet ziet, en het is....... ach laat ook maar je ziet het toch niet!
5 minuten werk, heb net de boel even weer naar de laatste versie gebracht.Gramser schreef op zondag 19 april 2026 @ 18:58:
[...]
Thanks @Devke ! Dan gaan we dat binnenkort ook maar even doen.
Ik heb nog een vraag voor de kenners: het aantal relay switches - is dat het totaal van het aantal aansturende zendures? Dus als je twee torens hebt, zo’n beetje door twee delen voor het aantal per zendure?
Denk in kansen, niet in problemen. Homewizard Plug-In Battery 5.4 kWh. Zendure 2400 AC 17.2 kWh. Testen Accumate 4.8 kWh Plug-In Battery. 3330 Wp zonnepanelen. EV 77 kWh. Peblar Business Laadpaal.
Ik ook, viel mee 🙂Devke schreef op zondag 19 april 2026 @ 19:48:
[...]
5 minuten werk, heb net de boel even weer naar de laatste versie gebracht.
Weet je toevallig ook hoe dat werkt met die relay switches?
Die begrijp ik ook niet helemaal eerlijk gezegd. Daar kan @gast777 wel iets over zeggen. Staan er 6 schakelingen dan is dat volgens mij over de hele Virtuele Zendure. Of ze nu bij Set 1, Set 2 of verdeeld zijn gevallen kun je er niet uithalen. Weet dit niet zeker dus @gast777 correct me if i am wrong.Gramser schreef op zondag 19 april 2026 @ 19:59:
[...]
Ik ook, viel mee 🙂
Weet je toevallig ook hoe dat werkt met die relay switches?
Denk in kansen, niet in problemen. Homewizard Plug-In Battery 5.4 kWh. Zendure 2400 AC 17.2 kWh. Testen Accumate 4.8 kWh Plug-In Battery. 3330 Wp zonnepanelen. EV 77 kWh. Peblar Business Laadpaal.
In de help/info staat dat 100 op een deels bewolkte dag normaal is. Ik heb er 189 nu. Twee torens dus ik dacht zo’n 90 per stuk.Devke schreef op zondag 19 april 2026 @ 20:12:
[...]
Die begrijp ik ook niet helemaal eerlijk gezegd. Daar kan @gast777 wel iets over zeggen. Staan er 6 schakelingen dan is dat volgens mij over de hele Virtuele Zendure. Of ze nu bij Set 1, Set 2 of verdeeld zijn gevallen kun je er niet uithalen. Weet dit niet zeker dus @gast777 correct me if i am wrong.
Vergelijken kan ik even niet met je. Hij staat hier veel op Dynamisch Handelen en dat zijn er maar een paar per dag.Gramser schreef op zondag 19 april 2026 @ 20:33:
[...]
In de help/info staat dat 100 op een deels bewolkte dag normaal is. Ik heb er 189 nu. Twee torens dus ik dacht zo’n 90 per stuk.
Denk in kansen, niet in problemen. Homewizard Plug-In Battery 5.4 kWh. Zendure 2400 AC 17.2 kWh. Testen Accumate 4.8 kWh Plug-In Battery. 3330 Wp zonnepanelen. EV 77 kWh. Peblar Business Laadpaal.
Als ik kijk in gielz integratie zou ik er 515 hebben gehad.Gramser schreef op zondag 19 april 2026 @ 19:59:
[...]
Ik ook, viel mee 🙂
Weet je toevallig ook hoe dat werkt met die relay switches?
Als ik in de Zendure integratie kijk zou batterij 1 er 150 hebben gehad en batterij 2 er 300.
Ik vind het verschil tussen tussen beide dan ook best wel opmerkelijk.
Bekijk jij dagelijks of je dynamisch wilt handelen of heb je notificatie ingesteld oid als er geen grote spread is voor dynamisch handelen zodat je hem op een andere modus kan zetten? Zo ja, welke modus dan?Devke schreef op zondag 19 april 2026 @ 20:36:
[...]
Vergelijken kan ik even niet met je. Hij staat hier veel op Dynamisch Handelen en dat zijn er maar een paar per dag.
Ik kijk dagelijks even. Bepaal dan voor die dag hoeveel uur laden en ontladen. Kijk daarbij naar spread indicatie. Boven de 30% dan vaak Dynamisch Handelen. Mocht er nog stroom overzijn in de batterij dan heb je kans dat ik hem na de handel nog even op NOM zet. Leeg voor de nieuwe dag. Dynamisch Handelen NOM dan vaak. Mocht ik vergeten terug te schakelen dan zorgt deze stand toch voor Dynamische handel.Flexiilex schreef op zondag 19 april 2026 @ 20:38:
[...]
Bekijk jij dagelijks of je dynamisch wilt handelen of heb je notificatie ingesteld oid als er geen grote spread is voor dynamisch handelen zodat je hem op een andere modus kan zetten? Zo ja, welke modus dan?
[ Voor 8% gewijzigd door Devke op 19-04-2026 20:43 ]
Denk in kansen, niet in problemen. Homewizard Plug-In Battery 5.4 kWh. Zendure 2400 AC 17.2 kWh. Testen Accumate 4.8 kWh Plug-In Battery. 3330 Wp zonnepanelen. EV 77 kWh. Peblar Business Laadpaal.
Belangrijk om te weten:
Ik draai Home Assistant via Docker op een Synology NAS.
Mijn Zendure kan ik niet update verder dan firmware 1.03, dat lijken meer mensen te hebben die er sinds kort mee zijn gestart las ik in forums van Zendure zelf.
Ik gebruik de Homewizard P1 meter.
Wat heb ik al gedaan:
Al drie keer alles verwijderd en volledig opnieuw gestart met wat ik moet doen volgens https://github.com/Gielz1...DK/blob/main/README.nl.md
Via Chatgpt geprobeerd tot een antwoord te komen.
Ik start met HEMS uitzetten in de app op mijn telefoon. Ik zet het vinkje om bij de accu "toevoegen aan HEMS", maar verwijder het niet of iets dergelijks. Vervolgens pas in de configuration file aan en zet ik de bestanden over.
Het lijkt maar niet te lukken. Heeft iemand anders een goed idee?
[ Voor 0% gewijzigd door slvans op 19-04-2026 20:48 . Reden: kleine aanpassingen ]
Waarom niet Dynamisch Handelen? Dat levert dit jaar met salderen nog het meeste op.Gramser schreef op zondag 19 april 2026 @ 20:38:
Snap ik. Op dagen als vandaag met zon/wolk/zon/wolk/etc en NoM, switcht hij blijkbaar veel 🙂
Met 2 omvormers kan je mooi wat kwh's verplaatsen in korte tijd.
[ Voor 12% gewijzigd door Pakhaas op 19-04-2026 20:51 ]
Aah slim, op hoeveel uur goedkoop en duur staan je instellingen? Gebaseerd op hoeveel kWh je hebt vermoed ik? Dus na dynamisch handelen zet je hem vaak nog dynamisch handelen + NOM zodat hij verder NOM gaat doen omdat er geen dure/goedkope uren meer zijn? Begrijp ik dat goed. En door Dynamisch handelen + NOM gaat hij wel weer de volgende dag handelen.Devke schreef op zondag 19 april 2026 @ 20:42:
[...]
Ik kijk dagelijks even. Bepaal dan voor die dag hoeveel uur laden en ontladen. Kijk daarbij naar spread indicatie. Boven de 30% dan vaak Dynamisch Handelen. Mocht er nog stroom overzijn in de batterij dan heb je kans dat ik hem na de handel nog even op NOM zet. Leeg voor de nieuwe dag. Dynamisch Handelen NOM dan vaak. Mocht ik vergeten terug te schakelen dan zorgt deze stand toch voor Dynamische handel.
Kom net kijken met de integratie dus moet t nog ff een beetje begrijpen. Er is ook niet echt een wiki in de TS of verzameling met info o.i.d.
Ohja, 25 of 30% dat komt door de laad en ontlaadverliezen anders verdien je niks natuurlijk maar mis ik daar nog iets over het hoofd? Morgen is bijvoorbeeld de spread niet zo enorm groot
Heeft iemand ook al iets moois gebouwd in HA waardoor je ke verdiensten per dag kan zien o.i.d? Ik zag paar posts terug wel iets voorbij komen dacht ik
[ Voor 13% gewijzigd door Flexiilex op 19-04-2026 20:54 ]
Zo doe ik het ook, maar zorg altijd wel dat de batterijen leeg zijn, of ik ontlaad de volgende ochtend als dan de tarieven hoger zijn (zoals vandaag en morgen ochtend).Devke schreef op zondag 19 april 2026 @ 20:42:
[...]
Ik kijk dagelijks even. Bepaal dan voor die dag hoeveel uur laden en ontladen. Kijk daarbij naar spread indicatie. Boven de 30% dan vaak Dynamisch Handelen. Mocht er nog stroom overzijn in de batterij dan heb je kans dat ik hem na de handel nog even op NOM zet. Leeg voor de nieuwe dag. Dynamisch Handelen NOM dan vaak. Mocht ik vergeten terug te schakelen dan zorgt deze stand toch voor Dynamische handel.
Op dagen met te weinig spread heb ik een automatisering die bij goedkope uren hem op alleen slim laden zet en max ontladen bij dure uren of NOM.
Je hebt een modus Dynamisch Handelen + NOM, dus hoef je overdag niets te wijzigen.Flexiilex schreef op zondag 19 april 2026 @ 20:51:
[...]
Aah slim, op hoeveel uur goedkoop en duur staan je instellingen? Gebaseerd op hoeveel kWh je hebt vermoed ik? Dus na dynamisch handelen zet je hem vaak nog dynamisch handelen + NOM zodat hij verder NOM gaat doen omdat er geen dure/goedkope uren meer zijn? Begrijp ik dat goed. En door Dynamisch handelen + NOM gaat hij wel weer de volgende dag handelen.
Kom net kijken met de integratie dus moet t nog ff een beetje begrijpen. Er is ook niet echt een wiki in de TS of verzameling met info o.i.d.
Ohja, 25 of 30% dat komt door de laad en ontlaadverliezen anders verdien je niks natuurlijk maar mis ik daar nog iets over het hoofd? Morgen is bijvoorbeeld de spread niet zo enorm groot
Heeft iemand ook al iets moois gebouwd in HA waardoor je ke verdiensten per dag kan zien o.i.d? Ik zag paar posts terug wel iets voorbij komen dacht ik
Ik heb gewoon nog een vast contract. Geen dynamische tarieven. En nog 11,5 TLV. Ik ben gewoon lekker aan het spelenPakhaas schreef op zondag 19 april 2026 @ 20:50:
[...]
Waarom niet Dynamisch Handelen? Dat levert dit jaar met salderen nog het meeste op.
Met 2 omvormers kan je mooi wat kwh's verplaatsen in korte tijd.
Ik probeer altijd alle uren te pakken. Standaard is 3. Vandaag waren er meer uren laag. Wat ik dan doe is die allemaal selecteren en het laadvermogen te verlagen. Bij 2400 Watt is de efficiency een 91%. Bij 1800 Watt is die 93%. Dus vandaag op 1800 gezet gezien de uren. Ontladen is altijd 3. Dan zijn ze een eind leeg. Wat je zegt, je moet wel zo plannen dat de batterijen vol komen.Flexiilex schreef op zondag 19 april 2026 @ 20:51:
[...]
Aah slim, op hoeveel uur goedkoop en duur staan je instellingen? Gebaseerd op hoeveel kWh je hebt vermoed ik? Dus na dynamisch handelen zet je hem vaak nog dynamisch handelen + NOM zodat hij verder NOM gaat doen omdat er geen dure/goedkope uren meer zijn? Begrijp ik dat goed. En door Dynamisch handelen + NOM gaat hij wel weer de volgende dag handelen.
Kom net kijken met de integratie dus moet t nog ff een beetje begrijpen. Er is ook niet echt een wiki in de TS of verzameling met info o.i.d.
Ohja, 25 of 30% dat komt door de laad en ontlaadverliezen anders verdien je niks natuurlijk maar mis ik daar nog iets over het hoofd? Morgen is bijvoorbeeld de spread niet zo enorm groot
Heeft iemand ook al iets moois gebouwd in HA waardoor je ke verdiensten per dag kan zien o.i.d? Ik zag paar posts terug wel iets voorbij komen dacht ik
:strip_exif()/f/image/cv0iFaHlMvV3TtECU8bpDMeq.jpg?f=fotoalbum_large)
Vandaag dus deze instelling. Genoeg goedkope uren. Duur maar 1. Waarom? Morgenochtend een betere prijs.
:strip_exif()/f/image/YiTSOCaFGXC8D3KTeLjFNexX.jpg?f=fotoalbum_large)
Dynamisch Handelen NOM zet ik hem dus neer als ik leeg wil zijn voor de nieuwe handel. Dan loopt de batterij dus verder leeg op NOM en zal bij de volgende goedkope uren weer laden.
Die 30% is idd voor het afdekken van laad- en ontlaadverliezen.
Denk in kansen, niet in problemen. Homewizard Plug-In Battery 5.4 kWh. Zendure 2400 AC 17.2 kWh. Testen Accumate 4.8 kWh Plug-In Battery. 3330 Wp zonnepanelen. EV 77 kWh. Peblar Business Laadpaal.
En teruglever boete? Dan is NOM idd wel goed. Maar is je batterij de volgende dag wel leeg?Gramser schreef op zondag 19 april 2026 @ 20:57:
[...]
Ik heb gewoon nog een vast contract. Geen dynamische tarieven. En nog 11,5 TLV. Ik ben gewoon lekker aan het spelen
Kun je überhaupt wel een eigen andere nieuwe automatisering via Home Assistant zelf aanmaken?slvans schreef op zondag 19 april 2026 @ 20:46:
Ik ben al een tijdje bezig en kom er helaas echt niet uit. Ik heb de Zendure 2400 AC+ gisteren ontvangen. Ik gebruik deze tot nu met de p1 meter via HEMS. Nu wil ik hem in Home Assistant krijgen. Dit wilde ik eerst doen via de Zendure integratie via HACS. Dit ging niet goed. Hij verbond wel, maar ik kreeg geen data door. Deze heb ik uiteindelijk uitgezet in Home Assistant. Ik wilde later naar de Gielz1986 ZenSDk gaan. Daar ben ik gister avond aan begonnen. Maar ik kom niet verder. Tot de stap dat je Automation moet plakken in de automatisering gaat alles goed. Daarna krijg ik de volgende foutmelding. (zie afbeelding onderaan)
Belangrijk om te weten:
Ik draai Home Assistant via Docker op een Synology NAS.
Mijn Zendure kan ik niet update verder dan firmware 1.03, dat lijken meer mensen te hebben die er sinds kort mee zijn gestart las ik in forums van Zendure zelf.
Ik gebruik de Homewizard P1 meter.
Wat heb ik al gedaan:
Al drie keer alles verwijderd en volledig opnieuw gestart met wat ik moet doen volgens https://github.com/Gielz1...DK/blob/main/README.nl.md
Via Chatgpt geprobeerd tot een antwoord te komen.
Ik start met HEMS uitzetten in de app op mijn telefoon. Ik zet het vinkje om bij de accu "toevoegen aan HEMS", maar verwijder het niet of iets dergelijks. Vervolgens pas in de configuration file aan en zet ik de bestanden over.
Het lijkt maar niet te lukken. Heeft iemand anders een goed idee?
[Afbeelding]
Zendure-HA.com | Run Zendure your way — in Home Assistant
De schakelingen die Gielz telt met Proxy gaan over het virtuele device. Normaliter zullen je beide Zendures altijd tegelijk schakelen. Ze gaan immers tegelijk laden of ontladen. Er is wel een uitzondering: als er een Zendure in 'slaap mode' (a.k.a. 'opslag in Flash') staat, dan stuurt de Proxy in die periode geen commando's naar dat device. Dus dan zal dat device ook niet schakelen op dat moment en lekker door blijven slapen. Zodra hij weer wakker gemaakt wordt krijgt hij direct een opdracht met daarin de dan geldende acMode (relais stand) door.Devke schreef op zondag 19 april 2026 @ 20:12:
[...]
Die begrijp ik ook niet helemaal eerlijk gezegd. Daar kan @gast777 wel iets over zeggen. Staan er 6 schakelingen dan is dat volgens mij over de hele Virtuele Zendure. Of ze nu bij Set 1, Set 2 of verdeeld zijn gevallen kun je er niet uithalen. Weet dit niet zeker dus @gast777 correct me if i am wrong.
Kort gezegd, de relaisschakeningen zullen in principe op beide devices hetzelfde zijn als wat Gielz aangeeft, als je de slaapstand niet meerekent. Vanwege de slaapstand zullen echter niet alle schakelingen op beide devices toegepast worden. Overall zal het dus per device wat minder zijn dan voor het virtuele device waar Gielz het voor bijhoudt.
6 kWp solar | Daikin Intergas Hybride 8kW | Tesla Model Y RWD 2023 | Fiat 500e 2014 | Zendure SF2400AC 17 kWh
Goede vraag. Ik zie nu dat ik überhaupt geen automatisering kan aanmaken. Ik heb al mijn automatiseringen nog in Homey zitten. Toevallig een idee hoe ik dit ga oplossen?gielz schreef op zondag 19 april 2026 @ 21:08:
[...]
Kun je überhaupt wel een eigen andere nieuwe automatisering via Home Assistant zelf aanmaken?
@Devke had jij ook niet exact hetzelfde probleem (lang geleden)?slvans schreef op zondag 19 april 2026 @ 21:13:
[...]
Goede vraag. Ik zie nu dat ik überhaupt geen automatisering kan aanmaken. Ik heb al mijn automatiseringen nog in Homey zitten. Toevallig een idee hoe ik dit ga oplossen?
Zendure-HA.com | Run Zendure your way — in Home Assistant
Ik heb geen terugleverboete. Batterij kan in deze periode inderdaad leeg zijn als de warmtepomp aanspringt. Dat verwacht ik komende week nog wel. En anders is er ook nog een auto die geladen wordt.Pakhaas schreef op zondag 19 april 2026 @ 21:03:
[...]
En teruglever boete? Dan is NOM idd wel goed. Maar is je batterij de volgende dag wel leeg?
En wat is “goed”? Ik wil eerst zien hoe NoM gaat, dus vind ik dit “goed” 😄
En @gielz. Klopt. Ff nadenken hoor dit is al ff terug. Zorg dat je automations.yaml in de hoofd directory van HA staat. Ik had in mijn configuration.yaml een verwijzing naar een subdirectory gezet. Een map waar al mijn automatiseringen bijelkaar stonden. Iedere automatisering in een apart bestand. Als je dan via de GUI ook automatiseringen wilt toevoegen dan werkt dit niet lekker. Beste is de de automatiseringen via de GUI toe te voegen. Dan krijg je wel 1 automations.yaml maar werkt wel.slvans schreef op zondag 19 april 2026 @ 21:13:
[...]
Goede vraag. Ik zie nu dat ik überhaupt geen automatisering kan aanmaken. Ik heb al mijn automatiseringen nog in Homey zitten. Toevallig een idee hoe ik dit ga oplossen?
Denk in kansen, niet in problemen. Homewizard Plug-In Battery 5.4 kWh. Zendure 2400 AC 17.2 kWh. Testen Accumate 4.8 kWh Plug-In Battery. 3330 Wp zonnepanelen. EV 77 kWh. Peblar Business Laadpaal.
Gisteren werkt het prima
I don't care if I feel Better as long as you feel worse
[ Voor 166% gewijzigd door nrewillemsen op 19-04-2026 23:11 ]
Na verdere tests heb ik de configuratie verder geoptimaliseerd. Ik heb nu een oplossing die korte pieken in de vermogensvraag (vanuit de batterij) effectief negeert.pasmanm schreef op vrijdag 17 april 2026 @ 20:48:
[...]
Goede tip, ga ik mee aan de slag. De uitdaging zit in de Quooker die kortstondig 2000W trekt; ik zoek dus die 10 seconden vertraging voordat de Zendure reageert.
Gezien de P1-meter elke seconde data pusht, test ik nu zowel een sample size van 10 als 20. Ik neem dit samen met mijn eigen logica mee in een vergelijking en koppel de resultaten van de drie varianten hier terug.
De logica werkt als volgt: bij een plotselinge P1-piek tussen de 300W en 1000W wordt de vraag gedurende 4 seconden genegeerd. Bij pieken boven de 1000W is dit 40 seconden. Deze tijdsintervallen zijn gebaseerd op een analyse van de historische P1-data; Ik heb ook geëxperimenteerd met de ingebouwde 'filter-outlier' functionaliteit, maar dit leverde met verschillende sample-sizes niet het gewenste resultaat op.
Zie hieronder de code voor in de configuration.yaml. Op de bijgevoegde grafiek is te zien hoe de gele lijn (gefilterd) de blauwe lijn (P1-vraag) volgt, waarbij korte pieken succesvol worden opgevangen."
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
| # 1. Two Helper Sensors for absolute power thresholds
- binary_sensor:
- name: "P1 Medium Power Spike"
state: "{{ states('sensor.homewizard_p1_vermogen') | float(0) >= 300 }}"
delay_on: "00:00:04"
- name: "P1 Large Power Spike"
state: "{{ states('sensor.homewizard_p1_vermogen') | float(0) >= 1000 }}"
delay_on: "00:00:40"
# 2. The Smart Filtered Sensor
- sensor:
- name: "P1 Filtered Power"
unique_id: p1_filtered_power_smoothed
unit_of_measurement: "W"
device_class: power
state_class: measurement
state: >
{% set p1_raw = states('sensor.homewizard_p1_vermogen') | float(0) %}
{% set zendure_ac = states('sensor.zendure_2400_ac_vermogen_aansturing') | float(0) %}
{% set is_medium = p1_raw >= 300 and p1_raw < 1000 %}
{% set is_large = p1_raw >= 1000 %}
{# 1. Bypass: If the Zendure is charging/active ( >0), we trust the P1 meter #}
{% if zendure_ac > 0 %}
{{ p1_raw }}
{# 2. Rule: Medium spike logic #}
{% elif is_medium and is_state('binary_sensor.p1_medium_power_spike', 'off') %}
0
{# 3. Rule: Large spike logic #}
{% elif is_large and is_state('binary_sensor.p1_large_power_spike', 'off') %}
0
{# 4. Default: Show raw power #}
{% else %}
{{ p1_raw }}
{% endif %} |
Dit topic is alleen voor de integratie met Home Assistant.
Zie voor algemeen: Het grote Zendure plug-and-play thuisaccu systemen topic
Voor integratie met Homey: Zendure Batterijen Slim aansturen met Athom Homey
Zoek voor andere zaken het juiste topic.
:strip_exif()/f/image/qehgNlgnb5deMDKWq2wss53u.jpg?f=fotoalbum_large)