• ctrl-tab
  • Registratie: Maart 2001
  • Laatst online: 12:26
RemmyB83 schreef op vrijdag 17 april 2026 @ 23:55:
[...]

Klinkt goed
Heb je dit al getest?
En hoe is het resultaat?
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..)

[ Voor 15% gewijzigd door ctrl-tab op 18-04-2026 00:18 ]

WP: Panasonic WP KIT-WC07L3E5 , Panasonic 50 liter buffer parallel, Boilervat Panasonic PAW-TD20C1E5-1 Solar: Goodwe SDT G2 GW6K-DT 6 kW


  • RemmyB83
  • Registratie: Augustus 2018
  • Laatst online: 19:36
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..)
Ik heb het er tussen gezet, en de standaard 5sec interval uitgeschakkeld.
Mooie test in iedergeval 🤗

🇳🇱Pijnacker Oost/West


  • ctrl-tab
  • Registratie: Maart 2001
  • Laatst online: 12:26
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 🤗
Top ben benieuwd naar je ervaring.

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


  • gast777
  • Registratie: Februari 2023
  • Laatst online: 00:58
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?
Klopt. De hoogste van de twee temperaturen wordt aan HA doorgegeven.

6 kWp solar | Daikin Intergas Hybride 8kW | Tesla Model Y RWD 2023 | Fiat 500e 2014 | Zendure SF2400AC 17 kWh


  • Henkoes
  • Registratie: Juni 2022
  • Laatst online: 19:22
gast777 schreef op zaterdag 18 april 2026 @ 00:53:
[...]


Klopt. De hoogste van de twee temperaturen wordt aan HA doorgegeven.
En soc level, wordt de laagste of hoogste doorgegeven aan Gielz?

  • Aardedraadje
  • Registratie: Mei 2013
  • Laatst online: 06:26

Aardedraadje

Met kabelschoen

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
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.

  • Gramser
  • Registratie: Juli 2020
  • Laatst online: 19:43
Henkoes schreef op zaterdag 18 april 2026 @ 05:45:
[...]


En soc level, wordt de laagste of hoogste doorgegeven aan Gielz?
Volgens mij is dat dan weer het gemiddelde van je stapels.

  • ctrl-tab
  • Registratie: Maart 2001
  • Laatst online: 12:26
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.
Ja daar heb je wel een punt. Wellicht een opmerking in de docs waard.

WP: Panasonic WP KIT-WC07L3E5 , Panasonic 50 liter buffer parallel, Boilervat Panasonic PAW-TD20C1E5-1 Solar: Goodwe SDT G2 GW6K-DT 6 kW

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
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.

6320wp | Zendure 2400 AC (14.4 kwh) | Bambu A1 | 2x Hisense 2AMW-42U4RRA | Daikin RXM/FTXM35R | HAOS op DS224+


  • Henkoes
  • Registratie: Juni 2022
  • Laatst online: 19:22
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.
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?
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?
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;
Afbeeldingslocatie: https://tweakers.net/i/5_TBJN7w1aWJfRQVubr25Fwryv8=/800x/filters:strip_exif()/f/image/KpJbzMlzy0bbHV2PJUoqi4cb.png?f=fotoalbum_large

6320wp | Zendure 2400 AC (14.4 kwh) | Bambu A1 | 2x Hisense 2AMW-42U4RRA | Daikin RXM/FTXM35R | HAOS op DS224+


  • hemertje
  • Registratie: Juli 2015
  • Laatst online: 20:15
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.
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

Gasloos 2019 + WP Panasonic H-serie 7kW + 300 liter boilervat + PV 12.415Wp + Home Assistant + Hyundai Ioniq 6 First Edition + Zaptec laadpaal


  • Gramser
  • Registratie: Juli 2020
  • Laatst online: 19:43
Dat is -denk ik- hetzelfde als toewijzen van een statisch IP adres? Heb ik met de HA Green wel gedaan.

  • DrNickB
  • Registratie: Juli 2017
  • Laatst online: 20:14
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.
Ja, hierdoor hoef je op je apparaten niks in te stellen en regelt je router het.
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

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.
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.

[ 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.


  • Gramser
  • Registratie: Juli 2020
  • Laatst online: 19:43
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.
Ja maar ik heb de zendures nog niet vastgezet. Alleen de HA Green. Dus alsnog goede tip!

  • Maarten60
  • Registratie: Oktober 2009
  • Laatst online: 17:14
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!
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.

  • Refl
  • Registratie: Februari 2008
  • Laatst online: 15:18
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.
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?

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)


  • hemertje
  • Registratie: Juli 2015
  • Laatst online: 20:15
Wai_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 8)
het ging mij meer hierom
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


  • hemertje
  • Registratie: Juli 2015
  • Laatst online: 20:15
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]
vanuit je readme:
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.
betekent dit dat je tijdens de grijze periodes geen NOM houdt?

Afbeeldingslocatie: https://tweakers.net/i/R3mHQo47nWB1fsIdCTv7yYgy1LU=/x800/filters:strip_exif()/f/image/VKjiFkmKHwGDJ3lIQXOsL6GQ.png?f=fotoalbum_large

[ 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


  • edjes
  • Registratie: December 2025
  • Laatst online: 19:55
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.

Afbeeldingslocatie: https://tweakers.net/i/q7KGaNHoIb8Z_eeaokx6g_qZ8I0=/fit-in/4000x4000/filters:no_upscale():strip_exif()/f/image/iMovI4ERjvUoAU1XNeGsxoVQ.png?f=user_large

De code:
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) }}
Het inputnumber:
code:
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

  • Gramser
  • Registratie: Juli 2020
  • Laatst online: 19:43
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

[ Voor 27% gewijzigd door Gramser op 18-04-2026 15:26 ]


  • hemertje
  • Registratie: Juli 2015
  • Laatst online: 20:15
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:
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) }}
Het inputnumber:
code:
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
even omdenken, dan kan je ook je opbrengsten weergeven toch?

ONGETEST!

Alle sensoren voor ROI berekening
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
# ----------------------------------------------------------------
# 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 %}
Input helpers voor tarieven en investering
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
# ----------------------------------------------------------------
# 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
Dashboard met alle metrics
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"
🔢 Nieuwe Sensoren:
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
Energie:
  • 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
Levensduur:
  • sensor.batterij_resterende_levensduur - Jaar resterend
  • sensor.batterij_cycli_per_jaar - Gebruiksintensiteit
📊 Dashboard Features:
  • 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
🛠️ Installatie:
Voeg templates toe aan configuration.yaml:
code:
1
template: !include zendure_roi_templates.yaml
Voeg inputs toe aan configuration.yaml:
code:
1
2
input_number: !include zendure_roi_inputs.yaml
input_datetime: !include zendure_roi_inputs.yaml
Importeer dashboard via Settings → Dashboards
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
Deze setup geeft je compleet inzicht in de economie van je Zendure batterij!

Gasloos 2019 + WP Panasonic H-serie 7kW + 300 liter boilervat + PV 12.415Wp + Home Assistant + Hyundai Ioniq 6 First Edition + Zaptec laadpaal


  • hemertje
  • Registratie: Juli 2015
  • Laatst online: 20:15
Gramser 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
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....

Gasloos 2019 + WP Panasonic H-serie 7kW + 300 liter boilervat + PV 12.415Wp + Home Assistant + Hyundai Ioniq 6 First Edition + Zaptec laadpaal


  • Gramser
  • Registratie: Juli 2020
  • Laatst online: 19:43
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....
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.

  • RemmyB83
  • Registratie: Augustus 2018
  • Laatst online: 19:36
ctrl-tab schreef op zaterdag 18 april 2026 @ 00:46:
[...]

Top ben benieuwd naar je ervaring.
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).
🤗👍

🇳🇱Pijnacker Oost/West


  • ralphkeb
  • Registratie: December 2010
  • Nu online
[/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 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?

  • remcoXP
  • Registratie: Februari 2002
  • Laatst online: 19:59
Zeer interresant hemeltjer en edjes. Uiteindelijk doen we het hier ook voor ;)
@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.


  • Hippe Lip
  • Registratie: Februari 2011
  • Laatst online: 19:12

Hippe Lip

Er valt altijd wat te leren

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
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…

Verdraagzaamheid is het hoogste gebod
en wie dat niet eert die schoppen we rot.
<John O`Mill>


  • DrNickB
  • Registratie: Juli 2017
  • Laatst online: 20:14
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…
Google: https://ekiwi-blog.de/en/...p-address-for-the-device/
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


  • edjes
  • Registratie: December 2025
  • Laatst online: 19:55
hemertje schreef op zaterdag 18 april 2026 @ 16:54:
[...]

even omdenken, dan kan je ook je opbrengsten weergeven toch?
Ik heb zes kantjes en maanden werk in een ROI. 8)

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:
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) }}
Dit is het dashboard, wel wat van mijn verwijzingen verwijderen ;-)
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
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: []

  • RemmyB83
  • Registratie: Augustus 2018
  • Laatst online: 19:36
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 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?
Je bent vergeten de code te plakken 😉

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 ]

🇳🇱Pijnacker Oost/West


  • Wai_AM
  • Registratie: April 2010
  • Nu online
ralphkeb 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?
Zonneplan volgens jeroen.nl
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


  • Hippe Lip
  • Registratie: Februari 2011
  • Laatst online: 19:12

Hippe Lip

Er valt altijd wat te leren

Dank je, @DrNickB. Eigenlijk ging het me meer om de (hier wel relevante) vragen

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>


  • Gramser
  • Registratie: Juli 2020
  • Laatst online: 19:43
@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.

Afbeeldingslocatie: https://tweakers.net/i/lU-8CXjTDv0iJAyQXXTs8X5oYLc=/x800/filters:strip_icc():strip_exif()/f/image/0sHNjy0ksgTLwGXl1V5RHsfH.jpg?f=fotoalbum_large
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]
De verdeling bepaald node-red @gast777. Het word iig zo optimaal mogelijk verdeelt voor je RTE en SOC.

6320wp | Zendure 2400 AC (14.4 kwh) | Bambu A1 | 2x Hisense 2AMW-42U4RRA | Daikin RXM/FTXM35R | HAOS op DS224+


  • Gramser
  • Registratie: Juli 2020
  • Laatst online: 19:43
Daar had ik wel vertrouwen in hoor - maar dit viel me in elk geval op als een verschil met HEMS…
Pagina: 1 ... 36 37 Laatste

Let op:
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.