Embedded Software Developer @ HomeWizard | Doet soms wat voor Home Assistant
:no_upscale():strip_icc():strip_exif()/f/image/Nz4reKL7SS73hjhoBM4hLJiq.jpg?f=user_large)
Moet alleen de zon nog gaan schijnen
(de grafieken zijn ook gewijzigd met de 2024.2 update
[ Voor 6% gewijzigd door PeteSplit op 06-02-2025 10:00 ]
LG (AWHP R32) / ESPhome (ESP32) / GoodWe 4K-DT (5kWp) / Homewizard (1 PiB) / Home Assistant (NUC)
Ik mis de batterij nog hopelijk volgende week!PeteSplit schreef op donderdag 6 februari 2025 @ 00:28:
Hartelijk dank voor het vele werk, nu heb ik het energy dashboard compleet![]()
[Afbeelding]
Moet alleen de zon nog gaan schijnen![]()
(de grafieken zijn ook gewijzigd met de update)
(Jij de watermeter nog hehehe)

Ik draai al sinds maandag de beta van HA en sinds gisteravond de stable release.
Gisteren heb ik een paar extra dingetjes toegevoegd in mijn HA dashboard: schatting hoe lang het duurt tot dat de accu vol/leeg is. Lijkt goed te werken.
Kijk eens naar apexcharts kan je echt veel coolere dingen makenPilovali schreef op donderdag 6 februari 2025 @ 10:39:
[Afbeelding]
Ik draai al sinds maandag de beta van HA en sinds gisteravond de stable release.
Gisteren heb ik een paar extra dingetjes toegevoegd in mijn HA dashboard: schatting hoe lang het duurt tot dat de accu vol/leeg is. Lijkt goed te werken.
Ben ook wel benieuwd naar je berekening
[ Voor 5% gewijzigd door crryp op 06-02-2025 10:58 ]
6320wp | Zendure 2400 AC (14.4 kwh) | Bambu A1 | 2x Hisense 2AMW-42U4RRA | Daikin RXM/FTXM35R | HAOS op DS224+
Maar dit is wat je gaat zien. In weze krijg je via long term statistics dan een aardig overzicht. Het laat ook zien dat bij een minimaal vermogen zoals ik vandaag had, de efficiency om te huilen is.
/f/image/PnltntdjYZICdtdxzns5iEQb.png?f=fotoalbum_large)
@Devke 56% is niet best.
De tweede komt binnenkort binnen. Is nodig ook aangezien ik voornamelijk verwarm met de airco wat een grote besparing is ten opzichte van het hele huis verwarmen met gas en overal thermostaat kranen plaatsen. De Plug-in Battery is hier alweer bijna leeg en hij was vol rond 1600 uur.
:strip_exif()/f/image/CmKD87WDuPls1sxfPThm43m6.jpg?f=fotoalbum_large)
:strip_exif()/f/image/N1X9RJvw382LTk1xP6TJmDAv.jpg?f=fotoalbum_large)
Hier de code voor de geïnteresseerden.
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
| views:
- title: Home
sections:
- type: grid
cards:
- type: gauge
entity: sensor.plug_in_battery_power
unit: Watt
needle: true
view_layout:
position: sidebar
name: Plug-in batterij 1
max: 800
min: -800
severity:
green: 0
yellow: -800
red: 800
- type: grid
cards:
- type: history-graph
entities:
- sun.sun
logarithmic_scale: false
grid_options:
columns: full
rows: 3
hours_to_show: 24
column_span: 3
- type: grid
cards:
- type: heading
heading_style: title
heading: Plug-in Battery
- type: picture
image: >-
https://cdn.homewizard.com/wp-content/uploads/2024/06/homewizard-battery-stack-800x800.webp
- type: grid
cards:
- type: heading
heading_style: title
heading: Plug-in Battery 1 import
- type: statistic
period:
calendar:
period: day
stat_type: change
name: ' Import vandaag'
unit: kWh
view_layout:
position: sidebar
entity: sensor.plug_in_battery_energy_import
- type: statistic
period:
calendar:
period: day
offset: -1
stat_type: change
name: ' Import gisteren'
unit: kWh
view_layout:
position: sidebar
entity: sensor.plug_in_battery_energy_import
- type: statistic
period:
calendar:
period: week
stat_type: change
name: Import week
unit: kWh
view_layout:
position: sidebar
entity: sensor.plug_in_battery_energy_import
- type: statistic
period:
calendar:
period: month
stat_type: change
unit: kWh
view_layout:
position: sidebar
entity: sensor.plug_in_battery_energy_import
name: Import Maand
- type: statistic
period:
calendar:
period: year
stat_type: change
unit: kWh
view_layout:
position: sidebar
entity: sensor.plug_in_battery_energy_import
name: Import jaar
- type: horizontal-stack
cards: []
- type: heading
heading_style: title
heading: Plug-in Battery 1 export
- type: statistic
period:
calendar:
period: day
stat_type: change
name: ' Export vandaag'
unit: kWh
view_layout:
position: sidebar
entity: sensor.plug_in_battery_energy_export
- type: statistic
period:
calendar:
period: day
offset: -1
stat_type: change
name: ' Export gisteren'
unit: kWh
view_layout:
position: sidebar
entity: sensor.plug_in_battery_energy_export
- type: statistic
period:
calendar:
period: week
stat_type: change
name: ' Export week'
unit: kWh
view_layout:
position: sidebar
entity: sensor.plug_in_battery_energy_export
- type: statistic
period:
calendar:
period: month
stat_type: change
name: ' Export maand'
unit: kWh
view_layout:
position: sidebar
entity: sensor.plug_in_battery_energy_export
- type: statistic
period:
calendar:
period: year
stat_type: change
name: ' Export jaar'
unit: kWh
view_layout:
position: sidebar
entity: sensor.plug_in_battery_energy_export
column_span: 3
- type: grid
cards:
- show_current: true
show_forecast: true
type: weather-forecast
entity: weather.huis
forecast_type: daily
- type: grid
cards:
- chart_type: line
period: 5minute
type: statistics-graph
entities:
- sensor.plug_in_battery_power
stat_types:
- mean
title: Plug-in Battery 1
days_to_show: 1
hide_legend: true
logarithmic_scale: false
grid_options:
columns: 36
rows: 7
- type: heading
heading: New section
column_span: 3
badges:
- type: entity
entity: sensor.plug_in_battery_power
- type: entity
entity: sensor.plug_in_battery_energy_export
- type: entity
entity: sensor.plug_in_battery_energy_import
- type: entity
entity: sensor.plug_in_battery_battery_cycles
- type: entity
entity: button.plug_in_battery_identify
- type: entity
entity: sensor.plug_in_battery_state_of_charge
cards: [] |
77 kWh EV | 3,38 kWp SolarEdge SE3000 | 2x Technaxx 300W Solar | Drie HomeWizard PiBs | LG 3,5 kW Standaard Plus | 100 liter QH Boiler
Dit dashboard ga ik stap voor stap behandelen niet alles in een keer want dat kost best wel veel tijd. Dus ik ga deze post komende tijd regelmatig aanpassen maar we gaan hier naar toe werken.
De energy flow links boven is nog niet custom maar overgenomen van het energy dashboard deze ga ik ook nog zelf bewerken maar dit komt later.
/f/image/2R8a6VFmw71ZxOb9eMrKVyzi.png?f=fotoalbum_large)
'
Stap 1 is het installeren van mushroom:
https://github.com/piitaya/lovelace-mushroom
Stap 2 zal zijn de knoppen maken om door de dagen te reizen:
:strip_exif()/f/image/NpgouvYZZnywp0m9khhTg8mX.png?f=user_large)
Eerst hebben we een Numeriek helper nodig, deze kan je via de interface aanmaken. (als je geen inputveld kan kiezen moet je je profiel eerst op advanced mode zetten. Dit doe je links onderin op je profiel en dan is dat een switch die je kan omzetten)
We noemen deze: graph_browser_daily
:strip_exif()/f/image/IbeVGHRifpCdH7GHop2jKqvC.png?f=user_large)
Vervolgens hebben we een sensor template helper nodig die er voor zorgt dat er een offset string dynamich aangepast kan worden door te drukken op deze knoppen:
We noemen deze: graph_browser_daily_string
HIervoor gebruiken we het volgende template:
1
2
3
4
5
6
7
8
| {% set offset = states('input_number.graph_browser_daily') | int %}
{% if offset == 0 %}
+
{% elif offset > 0 %}
+{{ offset }}day
{% else %}
{{ offset }}day
{% endif %} |
Nu kunnen we de knoppen aanmaken dit zijn badges boven aan het dashboard.
Min knop:
1
2
3
4
5
6
7
8
9
| type: custom:mushroom-template-badge
content: Dag
icon: mdi:minus
color: red
tap_action:
action: perform-action
perform_action: input_number.decrement
target:
entity_id: input_number.graph_browser_daily |
Pagina knop:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| type: entity
show_name: false
show_state: true
show_icon: true
entity: sensor.graph_browser_daily_string
color: ""
visibility:
- condition: state
entity: sensor.graph_browser_daily_string
state_not: +
tap_action:
action: perform-action
perform_action: input_number.set_value
target:
entity_id: input_number.graph_browser_daily
data:
value: 0 |
Plus knop:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| type: custom:mushroom-template-badge
content: Dag
icon: mdi:plus
color: red
label: ""
tap_action:
action: perform-action
perform_action: input_number.increment
target:
entity_id: input_number.graph_browser_daily
visibility:
- condition: numeric_state
entity: input_number.graph_browser_daily
below: 0 |
Stap 3 installeren van 2 plugins:
custom-template-card
Deze gebruiken we om variabele te kunnen zetten en aanpassen binnen onze cards
https://github.com/iantrich/config-template-card
Apexcharts
Hier maken we de grafieken in.
https://github.com/RomRider/apexcharts-card
Stap 4:
Stroomverbruik:
:strip_exif()/f/image/7kWRrgBv1yfGkQh5By0mgA1j.png?f=user_large)
Eerste grafiek aanmaken deze heeft enkel de huidig vermogen sensor nodig van de p1 meter.
Pas deze aan in de code naar jou p1 meter sensor! (deze maakt ook gebruik van de eerder aangemaakte sensors om door de tijd te reizen)
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
| type: custom:config-template-card
variables:
offset: states['sensor.graph_browser_daily_string'].state
entities:
- sensor.graph_browser_daily_string
card:
type: custom:apexcharts-card
experimental:
color_threshold: true
brush: true
span:
start: day
offset: ${offset}
header:
show: true
show_states: true
colorize_states: true
apex_config:
legend:
show: false
grid:
strokeDashArray: 0
borderColor: rgb(52,52,52)
xaxis:
axisBorder:
show: false
color: rgb(52,52,52)
tickAmount: 1
axisTicks:
show: false
labels:
style:
colors: rgb(128,128,128)
yaxis:
decimalsInFloat: 0
tickAmount: 6
labels:
style:
colors: rgb(128,128,128)
chart:
height: 250px
zoom:
enabled: true
all_series_config:
type: area
curve: smooth
extend_to: now
stroke_width: 0
group_by:
func: avg
duration: 15min
series:
- entity: sensor.p1_meter_vermogen
name: Grid
color: rgb(66,73,241)
float_precision: 0
color_threshold:
- value: 0.01
opacity: 0.4
color: rgb(66,73,241)
- value: 600
opacity: 0.8
color: rgb(66,73,241)
- value: 800
opacity: 1
color: rgb(66,73,241)
- value: 0
opacity: 0.4
color: rgb(30,227,137)
- value: -600
opacity: 0.8
color: rgb(30,227,137)
- value: -800
opacity: 1
color: rgb(30,227,137) |
[ Voor 82% gewijzigd door crryp op 20-02-2025 21:42 ]
:strip_exif()/f/image/0qcA19dLhpaJn0RaYUVIvasp.png?f=user_large)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| type: custom:apexcharts-card
header:
show: true
title: Herkomst stroom
show_states: true
colorize_states: true
chart_type: donut
update_interval: 15s
all_series_config:
float_precision: 0
show:
datalabels: false
legend_value: false
series:
- entity: sensor.hw_mk_p1_01_active_power
name: Net
transform: "return x < 0 ? 0 : x"
color: red
- entity: sensor.hw_mk_battery1_vermogen
name: Batterij
transform: "return x > 0 ? 0 : 0-x"
color: orange
- entity: sensor.hw_zl_kwh_01_active_power
name: Zonnepanelen
transform: return 0-x
color: green |
Bij batterij heb je de keuze uit 2 transforms. Wil je alleen zien waar de stroom vandaan komt, dan gebruik je deze:
1
| transform: "return x > 0 ? 0 : 0-x" |
Wil je ook zien of je batterij laadt (niet zichtbaar in de grafiek, wel in de header) kies dan deze:
1
| transform: "return 0-x" |
Hetzelfde geldt voor 'Net'; als je alleen wilt zien waar de stroom vandaan komt, dan gebruik je deze transform:
1
| transform: "return x < 0 ? 0 : x" |
Wil je ook zien of je teruglevert op het net (wederom enkel in de header), haal dan de transform weg.
Wil je liever een piechart dan een donut, verander dan chart_type: donut in chart_type: pie
En als je het plaatje van een uur/dag/maand/jaar etc. wil zien, gebruik dan in plaats van de directe meters de Utility Meter helpers en vergeet die dan niet te calibreren met de 'Utility Meter: Calibrate' action (Developer Tools -> Actions)
[ Voor 19% gewijzigd door RiDo78 op 21-02-2025 13:49 . Reden: Code geoptimaliseert en utility-meter hint toegevoegd. ]
Ik heb de donut nog even goed bekeken en wederom deze aangepast
Hou rekening mee dat mijn zonnepanelen een positieve waarde geven als meting. Heb je een hw kwh meter is dit negatief.
Voor de bovenste donut heb je nog een helper nodig die realtime je "eigen zonneverbruik" bepaalt noem deze bijv: sensor.eigen_verbruik_real_time
Voor als je zonnepanelen sensor een positieve waarde geeft:
1
2
3
4
5
6
| {% set huidige_opwek_zonnepanelen = states('sensor.scrape_power_solis') | float(0) %}
{% set batterij_vermogen = states('sensor.batteries_huidige_vermogen_totaal') | float(0) %}
{% set p1_vermogen = states('sensor.p1_meter_vermogen') | float(0) %}
{% set batterij_vermogen_real = batterij_vermogen if batterij_vermogen > 0 else 0 %}
{% set p1_vermogen_real = p1_vermogen if p1_vermogen < 0 else 0 %}
{{ huidige_opwek_zonnepanelen + p1_vermogen_real - batterij_vermogen_real }} |
En deze voor als je een negatieve waarde heb in je zonneopwek sensor:
1
2
3
4
5
6
| {% set huidige_opwek_zonnepanelen = states('sensor.scrape_power_solis') | float(0) *-1 %}
{% set batterij_vermogen = states('sensor.batteries_huidige_vermogen_totaal') | float(0) %}
{% set p1_vermogen = states('sensor.p1_meter_vermogen') | float(0) %}
{% set batterij_vermogen_real = batterij_vermogen if batterij_vermogen > 0 else 0 %}
{% set p1_vermogen_real = p1_vermogen if p1_vermogen < 0 else 0 %}
{{ huidige_opwek_zonnepanelen + p1_vermogen_real - batterij_vermogen_real }} |
Zie hier resultaat:
/f/image/ZzMaPYeRqIwFwH0RP23PcIhS.png?f=fotoalbum_large)
:strip_exif()/f/image/G5iZLaMlElrkbXFzLCMQY3cI.png?f=user_large)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
| type: vertical-stack
cards:
- type: heading
icon: mdi:home-lightning-bolt
heading: Energie
heading_style: title
badges: []
- type: vertical-stack
cards:
- type: custom:apexcharts-card
header:
show: true
title: Vermogen verdeling gebruik
show_states: true
colorize_states: true
update_interval: 15s
chart_type: donut
apex_config:
dataLabels:
formatter: |
EVAL:function(value) {
return value.toFixed(0) + " %";
}
style:
colors:
- black
plotOptions:
pie:
donut:
labels:
show: true
total:
show: true
label: Totaal
formatter: |
EVAL:function(w) {
return w.globals.seriesTotals.reduce((a, b) => {return (a + b)} , 0).toFixed(0) + " W"
}
all_series_config:
float_precision: 0
show:
datalabels: false
legend_value: false
series:
- entity: sensor.p1_meter_vermogen
name: Net
color: rgb(66,73,241)
transform: "return x < 0 ? 0 : x"
- entity: sensor.batteries_huidige_vermogen_totaal
name: Batterij
transform: "return x > 0 ? 0 : 0-x"
color: rgb(232, 150, 48)
- entity: sensor.eigen_verbruik_real_time
name: Zonnepanelen
transform: "return x > 0 ? x : 0"
color: rgb(30,227,137)
- type: vertical-stack
cards:
- type: custom:apexcharts-card
header:
show: true
title: Vermogen verdeling teruglevering
show_states: true
colorize_states: true
update_interval: 15s
chart_type: donut
apex_config:
dataLabels:
formatter: |
EVAL:function(value) {
return value.toFixed(0) + " %";
}
style:
colors:
- black
plotOptions:
pie:
donut:
labels:
show: true
total:
show: true
label: Totaal
formatter: |
EVAL:function(w) {
return w.globals.seriesTotals.reduce((a, b) => {return (a + b)} , 0).toFixed(0) + " W"
}
all_series_config:
float_precision: 0
show:
datalabels: false
legend_value: false
series:
- entity: sensor.p1_meter_vermogen
name: Net
color: rgb(66,73,241)
transform: "return x < 0 ? x * -1 : 0"
- entity: sensor.batteries_huidige_vermogen_totaal
name: Batterij
transform: "return x > 0 ? x : 0"
color: rgb(232, 150, 48)
visibility:
- condition: and
conditions:
- condition: or
conditions:
- condition: numeric_state
entity: sensor.p1_meter_vermogen
below: 0
- condition: numeric_state
entity: sensor.batteries_huidige_vermogen_totaal
above: 0
- condition: numeric_state
entity: sensor.scrape_power_solis
above: 0
visibility:
- condition: numeric_state
entity: input_number.graph_browser_daily
above: -1 |
[ Voor 47% gewijzigd door crryp op 23-02-2025 15:56 ]
Een van de dingen die ik jammer vind is dat het display op dit moment enkel het persentage kan laten zien hoe vol of hoe leeg de batterijen zijn. Uiteraard zie je wel qua kleur wat hij aan het doen is maar toch is een cirkeltje met huidig vermogen veel leuker!
Dus maar weer eens aan de slag gegaan met HA, okal zeg ik het zelf vind ik het een mooi resultaat.
Batterij aan het opladen, net vermogen proberen op 0 te houden:
:strip_exif()/f/image/HDCya7HsIuaVm4HSs72HGWt4.png?f=user_large)
Batterij aan het omschakelen en de rust stand:
:strip_exif()/f/image/SNhonrlk67vQLOVZy98C1CMF.png?f=user_large)
Batterij volle bak aan het opladen en nog overschot naar het net (helaas)
:strip_exif()/f/image/3XNgL53uj2qiMv6B0bZittcs.png?f=user_large)
Batterij aan het ontladen richting het huis:
:strip_exif()/f/image/sHesnpjN1dZT6hTwcnDLX3dD.png?f=user_large)
Wanneer je deze combineert met de eerder gedeelde verbruiks donut krijg je een leuk overzicht:
:strip_exif()/f/image/VWoPmcWjLPbwGdYcuchcbReZ.png?f=user_large)
Nu wil je deze intergratie ook gebruiken kan je mijn YAML code gebruiken.
Je hebt hiervoor 3 intergraties nodig (te installeren via HACS).
Layout card:
https://github.com/thomasloven/lovelace-layout-card
Card mod:
https://github.com/thomasloven/lovelace-card-mod
Apexcharts:
https://github.com/RomRider/apexcharts-card
Sensoren die je in de YAML moet vervangen:
sensor.batteries_huidige_vermogen_totaal
(totaal huidig wattage van je batterij / batterijen)
sensor.batteries_totaal_batterij_laadniveau
(totaal van je laat niveau van je batterij / batterijen tot 100 procent maximaal dus heb je er meerdere deel dan in je template sensor het totaal door het aantal batterijen)
sensor.p1_meter_vermogen
(huidig vermogen van je p1 meter)
sensor.batteries_totaal_export_vandaag
(totaal aan export van de batterij / batterijen)
sensor.batteries_totaal_import_vandaag
(totaal aan import van de batterij / batterijen)
Ook zal je in de yaml opzoek moeten gaan naar de berekeningen die in de verschillende cirkels zitten:
Batterij vermogen cirkels staan op: 1600 en -1600
Batterij laadpercentage uiteraard op: 100
P1 vermogen staat op: 5000 en -5000
Letop!! de sensoren en berekeningen staan op meerdere plaatsen in de YAML.
Helaas staan de grafieken dubbel in de YAML om reverse te kunnen doen en de kleuren aan te kunnen passen. Dit ging helaas niet met sensor values in de card-mod css, dan renderen de cirkels niet meer goed.
Als je hem gaat gebruiken laat het weten (vind ik leuk)
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
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
| type: custom:layout-card
layout_type: custom:grid-layout
cards:
- type: vertical-stack
cards:
- type: conditional
conditions:
- condition: numeric_state
entity: sensor.batteries_huidige_vermogen_totaal
above: -1
below: 1
card:
type: custom:apexcharts-card
view_layout:
grid-area: graph1
chart_type: radialBar
series:
- entity: sensor.batteries_huidige_vermogen_totaal
color: white
max: -1600
apex_config:
plotOptions:
radialBar:
offsetY: 0
startAngle: 0
endAngle: 360
hollow:
margin: 15
size: 70
background: transparent
dataLabels:
name:
show: true
offsetY: 49px
formatter: |
EVAL:function(value) {
return 'W';
}
value:
show: true
offsetY: -7
formatter: |
EVAL:function(value) {
return (value * -1600 / 100);
}
card_mod:
style: |
ha-card {
background: none;
box-shadow: none;
border: none;
padding: 0;
width: 330px;
margin-top: 77%;
margin-left: -90%
}
.apexcharts-datalabel-value {
font-size: 30px;
}
.apexcharts-datalabel-label {
font-size: 25px;
}
.apexcharts-radial-series {
transform: scale(-1,1) translate(-94%)
}
ha-card::before {
content: "";
width: 30px;
height: 30px;
display: block;
position: absolute;
top: 18%;
left: 46%;
position: absolute;
background-color: white;
-webkit-mask: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><title>power-plug-battery</title><path fill="currentColor" d="M12 10C12 9.35 11.57 8.7 11 8.32C10.7 8.12 10.35 8 10 8V4H8V8H4V4H2V8C1 8 0 9 0 10V15.5L3.5 19V22H8.5V19L12 15.5V10M12.33 4C12.22 4 12.11 4 12 4.04V6.59C12.3 6.77 12.56 7 12.79 7.21C13.44 7.87 14 8.85 14 10V16.33L11 19.33V20.67C11 21.4 11.6 22 12.33 22H21.67C22 22 22.36 21.86 22.61 21.61C22.86 21.36 23 21 23 20.67V5.33C23 4.6 22.4 4 21.67 4H20V2H14V4H12.33Z" /></svg>') no-repeat center;
mask: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><title>power-plug-battery</title><path fill="currentColor" d="M12 10C12 9.35 11.57 8.7 11 8.32C10.7 8.12 10.35 8 10 8V4H8V8H4V4H2V8C1 8 0 9 0 10V15.5L3.5 19V22H8.5V19L12 15.5V10M12.33 4C12.22 4 12.11 4 12 4.04V6.59C12.3 6.77 12.56 7 12.79 7.21C13.44 7.87 14 8.85 14 10V16.33L11 19.33V20.67C11 21.4 11.6 22 12.33 22H21.67C22 22 22.36 21.86 22.61 21.61C22.86 21.36 23 21 23 20.67V5.33C23 4.6 22.4 4 21.67 4H20V2H14V4H12.33Z" /></svg>') no-repeat center;
-webkit-mask-size: contain;
mask-size: contain;
}
#spinner-wrapper{
display:none;
}
- type: conditional
conditions:
- condition: numeric_state
entity: sensor.batteries_huidige_vermogen_totaal
above: 0
card:
type: custom:apexcharts-card
view_layout:
grid-area: graph1
chart_type: radialBar
series:
- entity: sensor.batteries_huidige_vermogen_totaal
color: rgb(66,73,241)
max: 1600
apex_config:
plotOptions:
radialBar:
offsetY: 0
startAngle: 0
endAngle: 360
hollow:
margin: 15
size: 70
background: transparent
dataLabels:
name:
show: true
offsetY: 49px
formatter: |
EVAL:function(value) {
return 'W';
}
value:
show: true
offsetY: -7
formatter: |
EVAL:function(value) {
return (value * 1600 / 100).toFixed(0);
}
card_mod:
style: |
ha-card {
background: none;
box-shadow: none;
border: none;
padding: 0;
width: 330px;
margin-top: 77%;
margin-left: -90%
}
.apexcharts-datalabel-value {
font-size: 30px;
}
.apexcharts-datalabel-label {
font-size: 25px;
}
ha-card::before {
content: "";
width: 30px;
height: 30px;
display: block;
position: absolute;
top: 18%;
left: 46%;
position: absolute;
background-color: rgb(66,73,241);
-webkit-mask: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><title>power-plug-battery</title><path fill="currentColor" d="M12 10C12 9.35 11.57 8.7 11 8.32C10.7 8.12 10.35 8 10 8V4H8V8H4V4H2V8C1 8 0 9 0 10V15.5L3.5 19V22H8.5V19L12 15.5V10M12.33 4C12.22 4 12.11 4 12 4.04V6.59C12.3 6.77 12.56 7 12.79 7.21C13.44 7.87 14 8.85 14 10V16.33L11 19.33V20.67C11 21.4 11.6 22 12.33 22H21.67C22 22 22.36 21.86 22.61 21.61C22.86 21.36 23 21 23 20.67V5.33C23 4.6 22.4 4 21.67 4H20V2H14V4H12.33Z" /></svg>') no-repeat center;
mask: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><title>power-plug-battery</title><path fill="currentColor" d="M12 10C12 9.35 11.57 8.7 11 8.32C10.7 8.12 10.35 8 10 8V4H8V8H4V4H2V8C1 8 0 9 0 10V15.5L3.5 19V22H8.5V19L12 15.5V10M12.33 4C12.22 4 12.11 4 12 4.04V6.59C12.3 6.77 12.56 7 12.79 7.21C13.44 7.87 14 8.85 14 10V16.33L11 19.33V20.67C11 21.4 11.6 22 12.33 22H21.67C22 22 22.36 21.86 22.61 21.61C22.86 21.36 23 21 23 20.67V5.33C23 4.6 22.4 4 21.67 4H20V2H14V4H12.33Z" /></svg>') no-repeat center;
-webkit-mask-size: contain;
mask-size: contain;
}
#spinner-wrapper{
display:none;
}
- type: conditional
conditions:
- condition: numeric_state
entity: sensor.batteries_huidige_vermogen_totaal
below: 0
card:
type: custom:apexcharts-card
view_layout:
grid-area: graph1
chart_type: radialBar
series:
- entity: sensor.batteries_huidige_vermogen_totaal
color: rgb(30, 227, 137)
max: -1600
apex_config:
plotOptions:
radialBar:
offsetY: 0
startAngle: 0
endAngle: 360
hollow:
margin: 15
size: 70
background: transparent
dataLabels:
name:
show: true
offsetY: 49px
formatter: |
EVAL:function(value) {
return 'W';
}
value:
show: true
offsetY: -7
formatter: |
EVAL:function(value) {
return (value * -1600 / 100).toFixed(0);
}
card_mod:
style: |
ha-card {
background: none;
box-shadow: none;
border: none;
padding: 0;
width: 330px;
margin-top: 77%;
margin-left: -90%
}
.apexcharts-datalabel-value {
font-size: 30px;
}
.apexcharts-datalabel-label {
font-size: 25px;
}
.apexcharts-radial-series {
transform: scale(-1,1) translate(-94%)
}
ha-card::before {
content: "";
width: 30px;
height: 30px;
display: block;
position: absolute;
top: 18%;
left: 46%;
position: absolute;
background-color: rgb(30, 227, 137);
-webkit-mask: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><title>power-plug-battery</title><path fill="currentColor" d="M12 10C12 9.35 11.57 8.7 11 8.32C10.7 8.12 10.35 8 10 8V4H8V8H4V4H2V8C1 8 0 9 0 10V15.5L3.5 19V22H8.5V19L12 15.5V10M12.33 4C12.22 4 12.11 4 12 4.04V6.59C12.3 6.77 12.56 7 12.79 7.21C13.44 7.87 14 8.85 14 10V16.33L11 19.33V20.67C11 21.4 11.6 22 12.33 22H21.67C22 22 22.36 21.86 22.61 21.61C22.86 21.36 23 21 23 20.67V5.33C23 4.6 22.4 4 21.67 4H20V2H14V4H12.33Z" /></svg>') no-repeat center;
mask: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><title>power-plug-battery</title><path fill="currentColor" d="M12 10C12 9.35 11.57 8.7 11 8.32C10.7 8.12 10.35 8 10 8V4H8V8H4V4H2V8C1 8 0 9 0 10V15.5L3.5 19V22H8.5V19L12 15.5V10M12.33 4C12.22 4 12.11 4 12 4.04V6.59C12.3 6.77 12.56 7 12.79 7.21C13.44 7.87 14 8.85 14 10V16.33L11 19.33V20.67C11 21.4 11.6 22 12.33 22H21.67C22 22 22.36 21.86 22.61 21.61C22.86 21.36 23 21 23 20.67V5.33C23 4.6 22.4 4 21.67 4H20V2H14V4H12.33Z" /></svg>') no-repeat center;
-webkit-mask-size: contain;
mask-size: contain;
}
#spinner-wrapper{
display:none;
}
- type: vertical-stack
cards:
- type: conditional
conditions:
- condition: numeric_state
entity: sensor.batteries_huidige_vermogen_totaal
above: -1
below: 1
card:
type: custom:apexcharts-card
view_layout:
grid-area: graph2
chart_type: radialBar
series:
- entity: sensor.batteries_totaal_batterij_laadniveau
color: white
max: 100
apex_config:
plotOptions:
radialBar:
offsetY: 0
startAngle: 0
endAngle: 360
hollow:
margin: 15
size: 70
background: transparent
dataLabels:
name:
show: true
offsetY: 35px
formatter: |
EVAL:function(value) {
return '%';
}
value:
show: true
offsetY: -12
formatter: |
EVAL:function(value) {
return (value * 100 / 100).toFixed(0);
}
card_mod:
style: |
ha-card {
background: none;
box-shadow: none;
border: none;
padding: 0;
width: 300px
}
.apexcharts-datalabel-value {
font-size: 20px
}
.apexcharts-datalabel-label {
font-size: 17px
}
ha-card::before {
content: "";
width: 20px;
height: 20px;
display: block;
position: absolute;
top: 18%;
left: 47%;
-webkit-mask: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><title>battery-70</title><path d="M16,10H8V6H16M16.67,4H15V2H9V4H7.33A1.33,1.33 0 0,0 6,5.33V20.67C6,21.4 6.6,22 7.33,22H16.67A1.33,1.33 0 0,0 18,20.67V5.33C18,4.6 17.4,4 16.67,4Z" /></svg>') no-repeat center;
mask: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><title>battery-70</title><path d="M16,10H8V6H16M16.67,4H15V2H9V4H7.33A1.33,1.33 0 0,0 6,5.33V20.67C6,21.4 6.6,22 7.33,22H16.67A1.33,1.33 0 0,0 18,20.67V5.33C18,4.6 17.4,4 16.67,4Z" /></svg>') no-repeat center;
-webkit-mask-size: contain;
mask-size: contain;
background-color: white
}
#spinner-wrapper{
display:none;
}
- type: conditional
conditions:
- condition: numeric_state
entity: sensor.batteries_huidige_vermogen_totaal
below: 0
card:
type: custom:apexcharts-card
view_layout:
grid-area: graph2
chart_type: radialBar
series:
- entity: sensor.batteries_totaal_batterij_laadniveau
color: rgb(30,227,137)
max: 100
apex_config:
plotOptions:
radialBar:
offsetY: 0
startAngle: 0
endAngle: 360
hollow:
margin: 15
size: 70
background: transparent
dataLabels:
name:
show: true
offsetY: 35px
formatter: |
EVAL:function(value) {
return '%';
}
value:
show: true
offsetY: -12
formatter: |
EVAL:function(value) {
return (value * 100 / 100).toFixed(0);
}
card_mod:
style: |
ha-card {
background: none;
box-shadow: none;
border: none;
padding: 0;
width: 300px
}
.apexcharts-datalabel-value {
font-size: 20px
}
.apexcharts-datalabel-label {
font-size: 17px
}
ha-card::before {
content: "";
width: 20px;
height: 20px;
display: block;
position: absolute;
top: 18%;
left: 47%;
-webkit-mask: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><title>battery-70</title><path d="M16,10H8V6H16M16.67,4H15V2H9V4H7.33A1.33,1.33 0 0,0 6,5.33V20.67C6,21.4 6.6,22 7.33,22H16.67A1.33,1.33 0 0,0 18,20.67V5.33C18,4.6 17.4,4 16.67,4Z" /></svg>') no-repeat center;
mask: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><title>battery-70</title><path d="M16,10H8V6H16M16.67,4H15V2H9V4H7.33A1.33,1.33 0 0,0 6,5.33V20.67C6,21.4 6.6,22 7.33,22H16.67A1.33,1.33 0 0,0 18,20.67V5.33C18,4.6 17.4,4 16.67,4Z" /></svg>') no-repeat center;
-webkit-mask-size: contain;
mask-size: contain;
background-color: rgb(30,227,137)
}
#spinner-wrapper{
display:none;
}
- type: conditional
conditions:
- condition: numeric_state
entity: sensor.batteries_huidige_vermogen_totaal
above: 0
card:
type: custom:apexcharts-card
view_layout:
grid-area: graph2
chart_type: radialBar
series:
- entity: sensor.batteries_totaal_batterij_laadniveau
color: rgb(66,73,241)
max: 100
apex_config:
plotOptions:
radialBar:
offsetY: 0
startAngle: 0
endAngle: 360
hollow:
margin: 15
size: 70
background: transparent
dataLabels:
name:
show: true
offsetY: 35px
formatter: |
EVAL:function(value) {
return '%';
}
value:
show: true
offsetY: -12
formatter: |
EVAL:function(value) {
return (value * 100 / 100).toFixed(0);
}
card_mod:
style: |
ha-card {
background: none;
box-shadow: none;
border: none;
padding: 0;
width: 300px
}
.apexcharts-datalabel-value {
font-size: 20px
}
.apexcharts-datalabel-label {
font-size: 17px
}
ha-card::before {
content: "";
width: 20px;
height: 20px;
display: block;
position: absolute;
top: 18%;
left: 47%;
-webkit-mask: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><title>battery-70</title><path d="M16,10H8V6H16M16.67,4H15V2H9V4H7.33A1.33,1.33 0 0,0 6,5.33V20.67C6,21.4 6.6,22 7.33,22H16.67A1.33,1.33 0 0,0 18,20.67V5.33C18,4.6 17.4,4 16.67,4Z" /></svg>') no-repeat center;
mask: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><title>battery-70</title><path d="M16,10H8V6H16M16.67,4H15V2H9V4H7.33A1.33,1.33 0 0,0 6,5.33V20.67C6,21.4 6.6,22 7.33,22H16.67A1.33,1.33 0 0,0 18,20.67V5.33C18,4.6 17.4,4 16.67,4Z" /></svg>') no-repeat center;
-webkit-mask-size: contain;
mask-size: contain;
background-color: rgb(66,73,241)
}
#spinner-wrapper{
display:none;
}
- type: vertical-stack
cards:
- type: conditional
conditions:
- condition: numeric_state
entity: sensor.p1_meter_vermogen
above: -1
card:
type: custom:apexcharts-card
chart_type: radialBar
series:
- entity: sensor.p1_meter_vermogen
color: rgb(66,73,241)
max: 5000
apex_config:
plotOptions:
radialBar:
offsetY: 0
startAngle: 0
endAngle: 360
hollow:
margin: 15
size: 70
background: transparent
dataLabels:
name:
show: true
offsetY: 35px
formatter: |
EVAL:function(value) {
return 'W';
}
value:
show: true
offsetY: -12
formatter: |
EVAL:function(value) {
return (value * 5000 / 100);
}
card_mod:
style: |
ha-card {
background: none;
box-shadow: none;
border: none;
padding: 0;
width: 300px;
}
.apexcharts-datalabel-value {
font-size: 20px
}
.apexcharts-datalabel-label {
font-size: 17px
}
ha-card::before {
content: "";
width: 20px;
height: 20px;
display: block;
position: absolute;
top: 18%;
left: 47%;
background-color: rgb(66,73,241);
-webkit-mask: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><title>transmission-tower</title><path d="M8.28,5.45L6.5,4.55L7.76,2H16.23L17.5,4.55L15.72,5.44L15,4H9L8.28,5.45M18.62,8H14.09L13.3,5H10.7L9.91,8H5.38L4.1,10.55L5.89,11.44L6.62,10H17.38L18.1,11.45L19.89,10.56L18.62,8M17.77,22H15.7L15.46,21.1L12,15.9L8.53,21.1L8.3,22H6.23L9.12,11H11.19L10.83,12.35L12,14.1L13.16,12.35L12.81,11H14.88L17.77,22M11.4,15L10.5,13.65L9.32,18.13L11.4,15M14.68,18.12L13.5,13.64L12.6,15L14.68,18.12Z" /></svg>') no-repeat center;
mask: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><title>transmission-tower</title><path d="M8.28,5.45L6.5,4.55L7.76,2H16.23L17.5,4.55L15.72,5.44L15,4H9L8.28,5.45M18.62,8H14.09L13.3,5H10.7L9.91,8H5.38L4.1,10.55L5.89,11.44L6.62,10H17.38L18.1,11.45L19.89,10.56L18.62,8M17.77,22H15.7L15.46,21.1L12,15.9L8.53,21.1L8.3,22H6.23L9.12,11H11.19L10.83,12.35L12,14.1L13.16,12.35L12.81,11H14.88L17.77,22M11.4,15L10.5,13.65L9.32,18.13L11.4,15M14.68,18.12L13.5,13.64L12.6,15L14.68,18.12Z" /></svg>') no-repeat center;
-webkit-mask-size: contain;
mask-size: contain;
}
#spinner-wrapper{
display:none;
}
- type: conditional
conditions:
- condition: numeric_state
entity: sensor.p1_meter_vermogen
below: 0
card:
type: custom:apexcharts-card
chart_type: radialBar
series:
- entity: sensor.p1_meter_vermogen
color: rgb(30,227,137);
max: -5000
apex_config:
plotOptions:
radialBar:
offsetY: 0
startAngle: 0
endAngle: 360
hollow:
margin: 15
size: 70
background: transparent
dataLabels:
name:
show: true
offsetY: 35px
formatter: |
EVAL:function(value) {
return 'W';
}
value:
show: true
offsetY: -12
formatter: |
EVAL:function(value) {
return (value * -5000 / 100);
}
card_mod:
style: |
ha-card {
background: none;
box-shadow: none;
border: none;
padding: 0;
width: 300px;
}
.apexcharts-datalabel-value {
font-size: 20px
}
.apexcharts-datalabel-label {
font-size: 17px
}
.apexcharts-radial-series {
transform: scale(-1,1) translate(-93%)
}
ha-card::before {
content: "";
width: 20px;
height: 20px;
display: block;
position: absolute;
top: 18%;
left: 47%;
background-color: rgb(30,227,137);
-webkit-mask: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><title>transmission-tower</title><path d="M8.28,5.45L6.5,4.55L7.76,2H16.23L17.5,4.55L15.72,5.44L15,4H9L8.28,5.45M18.62,8H14.09L13.3,5H10.7L9.91,8H5.38L4.1,10.55L5.89,11.44L6.62,10H17.38L18.1,11.45L19.89,10.56L18.62,8M17.77,22H15.7L15.46,21.1L12,15.9L8.53,21.1L8.3,22H6.23L9.12,11H11.19L10.83,12.35L12,14.1L13.16,12.35L12.81,11H14.88L17.77,22M11.4,15L10.5,13.65L9.32,18.13L11.4,15M14.68,18.12L13.5,13.64L12.6,15L14.68,18.12Z" /></svg>') no-repeat center;
mask: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><title>transmission-tower</title><path d="M8.28,5.45L6.5,4.55L7.76,2H16.23L17.5,4.55L15.72,5.44L15,4H9L8.28,5.45M18.62,8H14.09L13.3,5H10.7L9.91,8H5.38L4.1,10.55L5.89,11.44L6.62,10H17.38L18.1,11.45L19.89,10.56L18.62,8M17.77,22H15.7L15.46,21.1L12,15.9L8.53,21.1L8.3,22H6.23L9.12,11H11.19L10.83,12.35L12,14.1L13.16,12.35L12.81,11H14.88L17.77,22M11.4,15L10.5,13.65L9.32,18.13L11.4,15M14.68,18.12L13.5,13.64L12.6,15L14.68,18.12Z" /></svg>') no-repeat center;
-webkit-mask-size: contain;
mask-size: contain;
}
#spinner-wrapper{
display:none;
}
view_layout:
grid-area: graph3
- type: entity
entity: sensor.batteries_totaal_export_vandaag
view_layout:
grid-area: graph4
icon: mdi:battery-minus
state_color: false
name: " "
unit: kWh
card_mod:
style: |
ha-card {
background: none;
box-shadow: none;
border: none;
margin-top: 70px;
padding: 0;
}
.header .icon {
position: absolute;
margin-left: 14%;
margin-top: 10%;
color: rgb(30,227,137)
}
.info .value {
font-size: 14px !important;
color: rgb(30,227,137)
}
.info .measurement {
font-size: 13px;
color: rgb(30,227,137)
}
- type: entity
entity: sensor.batteries_totaal_import_vandaag
view_layout:
grid-area: graph5
icon: mdi:battery-plus
state_color: false
name: " "
unit: kWh
card_mod:
style: |
ha-card {
background: none;
box-shadow: none;
border: none;
margin-top: -30px;
padding: 0;
}
.header .icon {
position: absolute;
margin-left: 14%;
margin-top: 20%;
color: rgb(66,73,241)
}
.info .value {
font-size: 14px !important;
color: rgb(66,73,241)
}
.info .measurement {
font-size: 13px;
color: rgb(66,73,241)
}
layout:
grid-template-columns: 90px 210px
grid-template-rows: 160px 185px
grid-template-areas: |
"graph1 graph2 graph4"
"graph1 graph3 graph5" |
/f/image/Wcz3XQeKt1oVtwAmJbSCrJQ3.png?f=fotoalbum_large)
Dit voorbeeld geeft een live-weergave van het vermogen. Maar je kunt er ook een datum-prikker aanhangen (zoals bij de energy-pagina), de sensoren aanpassen van vermogen (W) naar import/export (kWh) en dan kun je het verbruik per dag zien.
Aangezien deze graph werkt op het actuele vermogen en die ook negatief kan zijn (zoals bij de kWh meter als de zonnepanelen erachter aan het opwekken zijn), heb je wel een paar templates nodig om te zorgen dat je enkel relevante positieve getallen krijgt.
Dus voor de batterij heb je er twee nodig:
Ontladen: (sensor.hw_mk_batterij1_ontladen)
1
| {% if(states('sensor.hw_mk_battery1_vermogen') | float) < 0 %} {{ (0 - ( states('sensor.hw_mk_battery1_vermogen') | float)) }}{% else %} 0 {% endif %} |
Opladen: (sensor.hw_mk_batterij1_opladen)
1
| {% if(states('sensor.hw_mk_battery1_vermogen') | float) > 0 %} {{ ( states('sensor.hw_mk_battery1_vermogen') | float) }}{% else %} 0 {% endif %} |
Ook voor je P1 meter heb je er twee nodig. Al kun je er voor kiezen om de positieve templates achterwege te laten; de huidige versie lijkt de negatieve waarden te negeren. Zo heb ik in mijn voorbeeld twee templates voor de batterij en een voor het net (teruglevering). Voor de levering heb ik de gewone active_power sensor van de P1 meter wat ook gewoon werkt.
Anyway, de kaart kun je hier vinden: https://github.com/MindFreeze/ha-sankey-chart
En dit is de config van het bovenstaande voorbeeld (maar wel met mijn sensoren er in). Let daarbij op het volgende:
• een sensor moet als 'Entity' gedefinieerd zijn en moet daarnaast bij de parent als child worden aangegeven.
• een entity zonder parent 'floating' zichtbaar wordt in de grafiek, maar als een parent verwijst naar een entity die je nog niet hebt uitgeschreven resulteert in een foutmelding. Dat laatste kun je (tijdelijk) oplossen met ignore_missing_entities: true op te nemen in de config.
• Elk niveau heet een 'section', de volgorde van de items in een section bepaalt de volgorde waarin ze getoond worden. Dus definieer je in sectie 3 eerst de woonkamer en dan de slaapkamer, definieer dan ook in sectie 4 eerst de verbruikers in de woonkamer en dan pas de slaapkamer. Anders krijg je kruisende lijnen.
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
| height: 600
unit_prefix: ""
round: 1
convert_units_to: ""
min_box_height: 3
min_box_distance: 5
show_states: true
show_units: true
sections:
- entities:
- type: entity
children:
- total
- sensor.hw_mk_batterij1_opladen
- sensor.hw_mk_p1_teruglevering
entity_id: sensor.tpl_hw_zl_kwh_01_power_generated
color: green
name: Zon
- type: entity
children:
- total
entity_id: sensor.hw_mk_p1_01_active_power
name: Net
color: red
- type: entity
children:
- total
name: Batterij
entity_id: sensor.hw_mk_batterij1_ontladen
color: orange
- entities:
- type: entity
children: []
entity_id: sensor.hw_mk_batterij1_opladen
name: Batterij
color: orange
- type: remaining_parent_state
children:
- keuken
- meterkast
- slaapkamer
- zolder
- woonkamer
- unknown
entity_id: total
name: Total Consumption
- type: entity
children: []
entity_id: sensor.hw_mk_p1_teruglevering
name: Net
color: red
- entities:
- type: remaining_child_state
children:
- sensor.hw_kk_koelkast_01_active_power
- sensor.hw_kk_magnetron_01_active_power
- sensor.hw_kk_vaatwasser_01_active_power
entity_id: keuken
name: Keuken
- type: remaining_child_state
children:
- sensor.hw_mk_wk_switch_01_active_power
- sensor.hw_mk_router_01_vermogen
- sensor.hw_mk_aux_01_vermogen_2
entity_id: meterkast
name: Meterkast
- type: remaining_child_state
children:
- sensor.hw_sk_nachtkastjes_01_active_power
- sensor.hw_sk_tv_01_active_power
entity_id: slaapkamer
name: Slaapkamer
- type: remaining_child_state
children:
- sensor.hw_zl_computer_02_vermogen_2
- sensor.hw_zl_wasmachine_01_active_power
- sensor.hw_zl_wasdroger_01_active_power
- sensor.hw_zl_computer_01_active_power
- sensor.hw_zl_cv_01_active_power
- sensor.hw_zl_ventilatie_01_active_power
entity_id: zolder
name: Zolder
- type: remaining_child_state
children:
- sensor.hw_wk_tvset_01_active_power
entity_id: woonkamer
name: Woonkamer
- type: remaining_parent_state
children: []
entity_id: unknown
name: Unknown
- entities:
- type: entity
children: []
entity_id: sensor.hw_kk_koelkast_01_active_power
name: Koelkast
color: darkred
- type: entity
children: []
entity_id: sensor.hw_kk_magnetron_01_active_power
name: Magnetron
- type: entity
children: []
entity_id: sensor.hw_kk_vaatwasser_01_active_power
name: Vaatwasser
- entity_id: sensor.hw_mk_aux_01_vermogen_2
name: Netwerk
type: entity
- type: entity
name: Router
entity_id: sensor.hw_mk_router_01_vermogen
- type: entity
entity_id: sensor.hw_mk_wk_switch_01_active_power
name: WK-switch
- type: entity
children: []
entity_id: sensor.hw_sk_nachtkastjes_01_active_power
name: Nachtkastjes
- type: entity
children: []
entity_id: sensor.hw_sk_tv_01_active_power
name: TV
- type: entity
children: []
entity_id: sensor.hw_zl_wasmachine_01_active_power
name: Wasmachine
- type: entity
children: []
entity_id: sensor.hw_zl_wasdroger_01_active_power
name: Droger
- type: entity
children: []
entity_id: sensor.hw_zl_computer_01_active_power
name: Computer 1
- type: entity
children: []
entity_id: sensor.hw_zl_cv_01_active_power
name: CV
- type: entity
children: []
entity_id: sensor.hw_zl_ventilatie_01_active_power
name: Ventilatie
- entity_id: sensor.hw_zl_computer_02_vermogen_2
type: entity
children: []
name: Computer 2
- type: entity
children: []
entity_id: sensor.hw_wk_tvset_01_active_power
name: TV
energy_date_selection: false
type: custom:sankey-chart
min_state: 0
show_names: true
show_icons: false
wide: false |
/f/image/IsJbZL5mFOJg7DpgUr64nLNB.png?f=fotoalbum_large)
De code is nagenoeg hetzelfde als bovenstaand, maar alle entities moeten worden aangepast van *_active_power naar *_totale_energie_import (of soortgelijk) en regel 151 wordt: energy_date_selection: true
Bovendien heb je de datum-selector kaart nodig:
1
| type: energy-date-selection |
Op die manier kun je het verbruik (en de opwek) over allehande perioden inzichtelijk maken.
/f/image/SgTJjYeLJXV5GNsUiS8q2KcS.png?f=fotoalbum_large)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
| height: 600
unit_prefix: k
round: 1
energy_date_selection: true
convert_units_to: ""
min_box_height: 3
min_box_distance: 5
show_states: true
show_units: true
type: custom:sankey-chart
min_state: 0
show_names: true
show_icons: false
wide: true
sections:
- entities:
- type: entity
name: Zon
icon: mdi:weather-sunny
children:
- total
- sensor.hw_mk_battery1_energy_import
- sensor.hw_mk_p1_01_total_power_export
entity_id: sensor.hw_zl_kwh_01_total_power_export
color: green
- type: entity
name: Net
children:
- total
entity_id: sensor.hw_mk_p1_01_total_power_import
color: red
- type: entity
name: Batterij
children:
- total
- sensor.hw_mk_p1_01_total_power_export
entity_id: sensor.hw_mk_battery1_energie_export
color: orange
- entities:
- type: entity
children: []
entity_id: sensor.hw_mk_battery1_energy_import
name: Batterij
color: orange
- type: entity
children: []
entity_id: sensor.hw_mk_p1_01_total_power_export
name: Net
color: red
- type: remaining_parent_state
children: []
entity_id: total
name: Total Consumption |
Zo kun je mooi de verschillende stromen gedurende de ingestelde tijd inzichtelijk maken.
Ik zie bijvoorbeeld in één oogopslag dat ik 28 februari 2,4 kWh van het net heb geplukt. Had ik die dag dus nóg een volgeladen HW batterij gehad, had ik maar 0,3 kWh van het net geplukt. Een derde batterij was die dag dus overkill geweest. Tegelijkertijd waren mijn zonnepanelen niet in staat geweest om die batterij weer volledig te vullen. Dus was een tweede batterij wellicht ook al teveel van het goede.
Zelf bereken ik de RTE nu totaal gezien dit het meest nauwkeurig is. Wel wil ik binnenkort uitbreiden naar een RTE per volledige cyclus.
Heeft iemand al zelf de SOC en SOH bepaald i.p.v de standaard van homewizard?
Ik draai trouwens mijn grafieken in plotly:
/f/image/5jlLuN1wiJmFZgNu3zYNjvii.png?f=fotoalbum_large)
Hierin is NOM de duur per dag in percentage dat ik 0 afneem van het net, in tijd.
Binnenkort ook maar een tijd aanmaken voor de langste duur NOM gedraaid.
Weet iemand al wanneer er meer informatie beschikbaar komt via de app of API. Zou toch wel graag minstens dat alles OK signaal via HA krijgen.
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
| alias: Batterij status indicator description: "" triggers: - trigger: state entity_id: - input_boolean.batterijen_status_indicator from: "off" to: "on" - trigger: state entity_id: - sensor.battery_1_laden_ontladen_kleur - trigger: state entity_id: - sensor.battery_2_laden_ontladen_kleur - trigger: state entity_id: - sensor.battery_3_laden_ontladen_kleur conditions: - condition: state entity_id: input_boolean.batterijen_status_indicator state: "on" actions: - action: light.turn_on data: rgb_color: > {% set s = states('sensor.battery_1_laden_ontladen_kleur') %} {{ s.replace('rgb(', '').replace(')', '').split(', ') | map('int') | list }} brightness_pct: 70 target: device_id: 063b880e298692fd - action: light.turn_on data: rgb_color: > {% set s = states('sensor.battery_2_laden_ontladen_kleur') %} {{ s.replace('rgb(', '').replace(')', '').split(', ') | map('int') | list }} brightness_pct: 70 target: device_id: bbae5c22877cb - action: light.turn_on data: rgb_color: > {% set s = states('sensor.battery_3_laden_ontladen_kleur') %} {{ s.replace('rgb(', '').replace(')', '').split(', ') | map('int') | list }} brightness_pct: 70 target: device_id: 573c681944d0b3 mode: single |
Resultaat voor 3 accus!
:strip_exif()/f/image/qo9kvxiGTP0JCwuLgINo2mXJ.jpg?f=fotoalbum_large)
[ Voor 51% gewijzigd door crryp op 28-10-2025 11:57 ]
Een lamp is de high over staffel en de andere binnen de staffel weer detail level.
:strip_exif()/f/image/zAyy456Rv7Fs2aos66E3SylU.jpg?f=fotoalbum_large)
[ Voor 5% gewijzigd door crryp op 31-10-2025 10:48 ]
De minimale spread instelling doet niets en is voor je eigen automatisering. Voor de Zendure batterijen werkt dit als volgt wellicht kun je hier wat van overnemen https://github.com/Gielz1986/Zendure-HA-zenSDK;ArthurMorgan schreef op zaterdag 6 december 2025 @ 10:01:
Ik ben aan het stoeien met de dynamische integratie van @gielz in HA. Meeste snap ik (denk ik) wel nu. Maar ik loop wel vast op "Dynamisch Minimale Spread". Ik heb alles doorgelopen, maar kan nergens vinden dat het iets doet. Klopt dat?
In de automatisering moet ik die blijkbaar gaan uitlezen om er pas vervolgens iets mee te doen.
Andere globale vraag. Ik heb heel erg het idee dat je voor echt optimaal gebruik nog steeds elke dag wat parameters moet gaan aanpassen. Nu het donker is en er (bij mij) echt 0 wattuur de batterij nog opgaat afgezien van SOCdrifts is het prima te automatiseren. Maar als je wel opwek hebt is het toch nog altijd zo dat je goed moet kijken naar wat de verwachte zonopbrengst de dag erna is om in elk geval te zorgen dat de batterij vol zit voor de dure uren.
/f/image/KgeMh2y4xHohDecNmDejt4t6.png?f=fotoalbum_large)
:strip_exif()/f/image/tLae05Um1YQc2AyvFMYys2V6.png?f=user_large)
/f/image/QKQZf0ar7dUO40MZIWWFe40p.png?f=fotoalbum_large)
Je kunt het redelijk set and forget instellen zelfs zonder dat je de zonopbrengst gaat in programmeren. Laad een deel goedkoop op dagelijks met voldoende spread en laat de rest leeg voor eventueel zon. In november t/m februari is er nauwlijks zon.
6320wp | Zendure 2400 AC (14.4 kwh) | Bambu A1 | 2x Hisense 2AMW-42U4RRA | Daikin RXM/FTXM35R | HAOS op DS224+
/f/image/ehzXpZVLxyZG5hYKCS8JoR1U.png?f=fotoalbum_large)
/f/image/Mp3Yga1Pfq6jInfPZqkYb83F.png?f=fotoalbum_large)
:strip_exif()/f/image/TXE5avljAsd1Yc5alGIm8Ioj.jpg?f=fotoalbum_large)
/f/image/6Lcx8mxfkW61vR8ul7drVPJ9.png?f=fotoalbum_large)
:strip_exif()/f/image/cNQMJInohu59HLn22mXnz7Io.png?f=user_large)
:strip_exif()/f/image/x9Wvqy42CUGQy6LGNC3eQMhi.png?f=user_large)
:strip_exif()/f/image/3fJVXXAKfr53V3uHHhjCyONI.jpg?f=fotoalbum_large)
:strip_exif()/f/image/cWcXrRQhwxMmdwnE6tRvuqLx.jpg?f=fotoalbum_large)
:strip_exif()/f/image/kIa96AfuRIBwGNKG80dO9zAM.jpg?f=fotoalbum_large)