WP: Panasonic WP KIT-WC07L3E5 , Panasonic 50 liter buffer parallel, Boilervat Panasonic PAW-TD20C1E5-1 Solar: Goodwe SDT G2 GW6K-DT 6 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 WP KIT-WC07L3E5 , Panasonic 50 liter buffer parallel, Boilervat Panasonic PAW-TD20C1E5-1 Solar: Goodwe SDT G2 GW6K-DT 6 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 WP KIT-WC07L3E5 , Panasonic 50 liter buffer parallel, Boilervat Panasonic PAW-TD20C1E5-1 Solar: Goodwe SDT G2 GW6K-DT 6 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.
6320wp | Zendure 2400 AC (14.4 kwh) | Bambu A1 | 2x Hisense 2AMW-42U4RRA | Daikin RXM/FTXM35R | HAOS op DS224+
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;
6320wp | Zendure 2400 AC (14.4 kwh) | Bambu A1 | 2x Hisense 2AMW-42U4RRA | Daikin RXM/FTXM35R | HAOS op DS224+
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]
6320wp | Zendure 2400 AC (14.4 kwh) | Bambu A1 | 2x Hisense 2AMW-42U4RRA | Daikin RXM/FTXM35R | HAOS op DS224+
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.