Hoe kan ik interfacen met Wifi van Toros Vision warmtepomp

Pagina: 1 2 Laatste
Acties:

  • JoebarRC
  • Registratie: November 2016
  • Laatst online: 07-11 07:16
Sommige waardes bevatten een high en low bit, bv de kWh waardes.
In ESPHome een lambda berekening moeten doen
code:
1
(x >> 8) &0xFF
om de high bit te krijgen. Nu zijn alle waardes helemaal goed.
Hieronder een dashboard in ha, kan nu ook de setpoint van tapwater en de hysterese (de maxima daling van tapwater) met een slider schrijven naar de WP.
Enige wat niet kan is beïnvloeden wanneer de verwarming aangaat, dat loopt echt via de thermostaat en niet via modbus.. Maar…. Ik kan nu wel bv de set point van tapwater beïnvloeden en bv hoog zetten als de zon schijnt, dan zal de WP tapwater maken..
Voor de rest nog geen ideeen maar dit is al heel leuk

Dit is een compact dashboard, in de uitgebreide versie kan ik nu ook echt parameters aanpassen zoals in de microcom software.. Maar dat is echt voor debuggen en niet voor dagelijkse info

URL="https://tweakers.net/i/aJaFHXv-v5xHysMhBZEOzPO_udc=/fit-in/4000x4000/filters:no_upscale():strip_exif()/f/image/IKJ95lEMkqd3dQTWzb3mC2lL.png?f=user_large",,"1"]Afbeeldingslocatie: https://tweakers.net/i/tI3LM77YdnFPZPAJsIoUiiSxbS0=/x800/filters:strip_exif()/f/image/IKJ95lEMkqd3dQTWzb3mC2lL.png?f=fotoalbum_large[/URL]

  • Bert-R
  • Registratie: Januari 2018
  • Laatst online: 08-11 18:05
Dat is een prachtig resultaat! Kan je delen wat je gebruikt om dit te doen, zowel qua hardware als configuratie?

  • JoebarRC
  • Registratie: November 2016
  • Laatst online: 07-11 07:16
Oke, dit is het project tot nu toe, wat nog extra komt is een opentherm module en sketch zodat ik de thermostaat kan beïnvloeden. De modbus kan alles nu aansturen van de warmtepomp behalve de CV onderdelen want de toros heeft zelf geen idee van de temperatuur dat komt van de thermostaat.
Behalve dat is nu wel de toros te beïnvloeden op tapwater, je kan bv als er geen zon is de setpoint dynamisch verlagen zodat er geen tapwater gemaakt wordt en als de zon schijnt dit te verhogen. Werkt erg leuk

Dit is de electronica die gebruikt is, erg simpel, een esp32, een max485 bordje en een IR detector (ik heb er met 1 detector led) voor de kWH meter.

Afbeeldingslocatie: https://tweakers.net/i/NbPCqCfrGP_HSeH5XxXuYToxLN8=/800x/filters:strip_exif()/f/image/PhjgQapg8qAKTFCYrcgBc49a.png?f=fotoalbum_large

Als er geen communicatie is dan de aansluitingen A en B naar de modbus verwisselen. Ik moest ook uiteindelijk de 120ohm weerstand verwijderen, de bus had een te lage weerstand en slechte communicatie

Nu de ESPHome sketch;
Naast de modbus code gebruik ik ook een pulsmeter voor de kWh meter in de toros vision. Die code kan je natuurlijk verwijderen en heb je ook de extra bestanden niet nodig onder 'packages'

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
# Toros Vision warmtepomp interface via Modbus en kWh pulsmeter

esphome:
  name: toros-modbuskwh
  min_version: 2024.11.0
  name_add_mac_suffix: false
  platform: ESP32
  board: nodemcu-32s #esp32dev  

packages:
 basis: !include ./components/basis.yaml
 updates: !include ./components/updates.yaml
 status: !include ./components/status_led.yaml
 pulse: !include ./components/pulse_meter.yaml
 
substitutions:
# Define the GPIO pins
  pulse_pin: GPIO5
  status_led: GPIO2 #D4
  friendly_name: WP Modbus kwh meter


# disable logging
logger:
  baud_rate: 0


# Enable Home Assistant API
api:

# Allow Over-The-Air updates
ota:
- platform: esphome

wifi:
  ssid: "Access Point SSID"
  password: "Access Point wachtwoord"

web_server:

uart:
  tx_pin: GPIO17
  rx_pin: GPIO16
  baud_rate: 19200

modbus:
  id: modbus1
  flow_control_pin: GPIO4

modbus_controller:
- id: modbus_device
  address: 0x1   ## address of the Modbus slave device on the bus
  modbus_id: modbus1
  setup_priority: -10
  update_interval: 30s
 
# Number (slider) input voor WP settings zoals de tapwater temperatuur
# hiermee kan misschien ook de switch functie gebruikt worden met modbus control om later te toggelen tussen temps bij zon bv.
number:
- platform: modbus_controller #template
  modbus_controller_id: modbus_device
  name: "Gewenste Tapwater temp"
  id: tapwater_setpoint_ha
  address: 0x817A
  register_type: holding
  value_type: U_WORD
  entity_category: config
  icon: mdi:chart-bell-curve
  min_value: 35
  max_value: 55
  step: 1
  mode: slider #box
  lambda: "return x; "
  write_lambda: |-
      return x;  

- platform: modbus_controller #template
  modbus_controller_id: modbus_device
  name: "Tapwater ECO minimum"
  id: tapwater_eco_setpoint_ha
  address: 0x8264
  register_type: holding
  value_type: U_WORD
  entity_category: config
  icon: mdi:chart-bell-curve
  min_value: 30
  max_value: 45
  step: 1
  mode: slider #box
  lambda: "return x; "
  write_lambda: |-
      return x;        
      
- platform: modbus_controller #template
  modbus_controller_id: modbus_device
  name: "Tapwater Max daling temp:"
  id: tapwater_hysterese_ha
  address: 0x817B
  register_type: holding
  value_type: U_WORD
  entity_category: config
  icon: mdi:chart-bell-curve
  min_value: 2
  max_value: 12
  step: 1
  mode: slider #box
  lambda: "return x; "
  write_lambda: |-
      return x;    

sensor:
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: status
    name: "Status WP"
    address: 0x539E
    register_type: holding
    value_type: U_WORD
      
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: zomer_winter_stand
    name: "Zomer-winter-stand. 0 = winter"
    address: 0x81E6
    register_type: holding
    value_type: U_WORD
    accuracy_decimals: 0
    filters:
      - multiply: 1.0

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: actual_error
    name: "Actuale storing"
    address: 0x0032
    register_type: holding
    value_type: U_WORD
    accuracy_decimals: 0
    filters:
      - multiply: 1.0

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: vergrendeld
    name: "Vergrendeld"
    address: 0x0032
    register_type: holding
    value_type: U_WORD
    accuracy_decimals: 0
    filters:
      - multiply: 1.0

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: lage_druk_schakelaar
    name: "Lage druk schakelaar"
    address: 0x30CE
    register_type: holding
    value_type: U_WORD
    accuracy_decimals: 0
    filters:
      - multiply: 1.0

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: hoge_druk_schakelaar
    name: "Hoge druk schakelaar"
    address: 0x30CE
    register_type: holding
    value_type: U_WORD
    accuracy_decimals: 0
    filters:
      - multiply: 1.0

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: max_t_cpr
    name: "MaxT CPR"
    address: 0xF12B
    register_type: holding
    value_type: U_WORD
    accuracy_decimals: 0
    filters:
      - multiply: 1.0

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: max_t_ee
    name: "MaxT EE"
    address: 0xF830
    register_type: holding
    value_type: U_WORD
    accuracy_decimals: 0
    filters:
      - multiply: 1.0

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: ec1
    name: "EC1"
    address: 0xF12A
    register_type: holding
    value_type: U_WORD
    accuracy_decimals: 0
    filters:
      - multiply: 1.0

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: ec2
    name: "EC2"
    address: 0xFA70
    register_type: holding
    value_type: U_WORD
    accuracy_decimals: 0
    filters:
      - multiply: 1.0

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: afgiftesysteem
    name: "Afgiftesysteem(min:sec)"
    address: 0xF37C
    register_type: holding
    unit_of_measurement: "sec"
    value_type: U_WORD
    accuracy_decimals: 0
    filters:
      - multiply: 1.0

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: pompen
    name: "Pompen(min:sec)"
    address: 0xF37A
    register_type: holding
    unit_of_measurement: "sec"
    value_type: U_WORD
    accuracy_decimals: 0
    filters:
      - multiply: 1.0

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: warmtepomp
    name: "Warmtepomp(sec)"
    address: 0xF364
    register_type: holding
    unit_of_measurement: "sec"
    value_type: U_WORD
    accuracy_decimals: 0
    filters:
      - multiply: 1.0

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: cpr_aan_aan
    name: "CPR AAN-AAN (min:sec)"
    address: 0xF37E
    register_type: holding
    unit_of_measurement: "sec"
    value_type: U_WORD
    accuracy_decimals: 0
    filters:
      - multiply: 1.0

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: cpr_uit_aan
    name: "CPR UIT_AAN (min:sec)"
    address: 0xF380
    register_type: holding
    unit_of_measurement: "sec"
    value_type: U_WORD
    accuracy_decimals: 0
    filters:
      - multiply: 1.0

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: cpr_aan_uit
    name: "CPR AAN-UIT(min:sec)"
    address: 0xF382
    register_type: holding
    unit_of_measurement: "sec"
    value_type: U_WORD
    accuracy_decimals: 0
    filters:
      - multiply: 1.0


  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: tbu_buiten_actueel
    name: "Temp Buitensensor"
    address: 0x35F7
    register_type: holding
    unit_of_measurement: "°C"
    value_type: U_WORD
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: ttw_tapwater
    name: "Tapwater actueel"
    address: 0x3561
    register_type: holding
    unit_of_measurement: "°C"
    value_type: U_WORD
    accuracy_decimals: 1
    filters:
      - multiply: 0.1
  
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: tapwater_setpoint
    name: "Tapwater Gewenst"    
    address: 0x817A
    register_type: holding  
    unit_of_measurement: "°C"     
    value_type: U_WORD
    accuracy_decimals: 1
    
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: tapwater_eco_setpoint
    name: "Tapwater ECO minimum"    
    address: 0x8264
    register_type: holding  
    unit_of_measurement: "°C"     
    value_type: U_WORD
    accuracy_decimals: 1   
    
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: tapwater_hysterese
    name: "Tapwater Max Daling"    
    address: 0x817B
    register_type: holding  
    unit_of_measurement: "°C"      
    value_type: U_WORD
    accuracy_decimals: 1

  - platform: template
    id: tapwater_minimum_ha
    name: "Tapwater minimum temp"
    unit_of_measurement: "°C"
    lambda: "return id(tapwater_setpoint_ha).state - id(tapwater_hysterese).state;"

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: mengpositie_klep
    name: "Mengpositie klep (%)"
    address: 0x1DB6
    register_type: holding
    unit_of_measurement: "%"
    value_type: U_WORD
    accuracy_decimals: 1
    filters:
      - multiply: 1.0

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: tbr_bron_wp_in
    name: "TBR Bron WP IN"
    address: 0x5AAB
    register_type: holding
    unit_of_measurement: "C"
    value_type: U_WORD
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

# de kWh registers bevatten waardes voor 2 parameters. De highbit van het d_WORD is nodig en wordt via de lambda berekend      
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: standby_kwh
    name: "kWh Standby"
    address: 0x5334
    register_type: holding
    unit_of_measurement: "kWh"
    value_type: U_WORD
    lambda: |-
      uint16_t value = x;    
      uint16_t highbit = (value >> 8) & 0xFF;
      return highbit;

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: tapwater_kwh
    name: "kWh Tapwater"
    address: 0x533B
    register_type: holding
    unit_of_measurement: "kWh"
    value_type: U_WORD
    lambda: |-
      uint16_t value = x;    
      uint16_t highbit = (value >> 8) & 0xFF;
      return highbit;    

# warmte kWh zit in de lowbits van het register.       
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: warmte_kwh
    name: "kWh Warmte"
    address: 0x5352
    register_type: holding
    unit_of_measurement: "kWh"
    value_type: U_WORD
    lambda: |-
      uint16_t value = x;    
      uint16_t lowbit = value & 0xFF;
      return lowbit;    

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: actief_koel_kWh
    name: "kWh Koel"
    address: 0x5361
    register_type: holding
    unit_of_measurement: "kWh"
    value_type: U_WORD
    lambda: |-
      uint16_t value = x;    
      uint16_t highbit = (value >> 8) & 0xFF;
      return highbit;    
        
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: passief_koel_kWh
    name: "kWh Koel passief"
    address: 0x535D
    register_type: holding
    unit_of_measurement: "kWh"
    value_type: U_WORD
    lambda: |-
      uint16_t value = x;    
      uint16_t lowbit = value & 0xFF;
      return lowbit;  
  
  
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: totaal_kwh
    name: "kWh Totaal"
    address: 0x6557
    register_type: holding
    unit_of_measurement: "kWh"
    value_type: U_WORD    

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: actief_tap_uren
    name: "Actief Tap Uren"
    address: 0x53C4
    register_type: holding
    unit_of_measurement: "uur"
    value_type: U_WORD   

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: actief_CV_uren
    name: "Actief CV Uren"
    address: 0x5532
    register_type: holding
    unit_of_measurement: "uur"
    value_type: U_WORD   
    
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: actief_koel_uren
    name: "Actief Koel Uren"
    address: 0x5597
    register_type: holding
    unit_of_measurement: "uur"
    value_type: U_WORD   

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: passief_koel_uren
    name: "Passief Koel Uren"
    address: 0x5567
    register_type: holding
    unit_of_measurement: "uur"
    value_type: U_WORD   
            
# Vertalen van waardes naar tekst                
text_sensor:
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "Status"
    id: status_string
    address: 0x539E
    register_type: holding        
    lambda: |-
      uint16_t value = id(status).state;
      switch (value) {
        case 1: return std::string("Stand-By");
        case 2: return std::string("Passief Tapwater");
        case 4: return std::string("Actief Tapwater voor");
        case 8: return std::string("Passief CV");
        case 16: return std::string("Actief CV voor");
        case 32: return std::string("Passief Koelen");
        case 64: return std::string("Regenereren");
        case 256: return std::string("Noodbedrijf TapW");
        case 512: return std::string("Noodbedrijf CV");
        case 1028: return std::string("Actief TapWater");
        case 1040: return std::string("Actief CV");
        default: return std::string("Unknown");
      }
      return x;
      
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "Seizoen"
    id: seizoen_string
    address: 0x81E6
    register_type: holding        
    lambda: |-
      uint16_t value = id(zomer_winter_stand).state;
      switch (value) {
        case 0: return std::string("Winter");
        case 1: return std::string("Zomer");
        default: return std::string("Unknown");
      }
      return x;


Nu de extra packages;
basis: !include ./components/basis.yaml
updates: !include ./components/updates.yaml
status: !include ./components/status_led.yaml
pulse: !include ./components/pulse_meter.yaml

updates.yaml
code:
1
2
3
4
5
6
7
8
9
10
# OTA configuration #
ota:
  - platform: esphome
    id: ota_esphome
  - platform: http_request
    id: ota_http_request

http_request:
  timeout: 10s
  verify_ssl: false


status_led.yaml
code:
1
2
3
4
5
6
7
light:
  - platform: status_led
    internal: true
    id: led_red
    pin: 
        number: ${status_led}
        inverted: true


basis.yaml
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
# Basic configuration #
button:
  # Restart the ESP
  - platform: restart
    name: "Restart - WP kWh"

# Sensors for ESP version and WIFI information
text_sensor:
#   # Installed version
#   - platform: template
#     name: "Glow - Installed version"
#     id: glow_version
#     icon: "mdi:label-outline"
#     entity_category: diagnostic
#     lambda: |-
#       return {"${project_version}"};
#     update_interval: 6h
#   # ESPHome version
#   - platform: version
#     hide_timestamp: true
#     name: '${friendly_name} - ESPHome Version'
  # IP address and connected SSID
  - platform: wifi_info
    ip_address:
      name: '${friendly_name} - IP Address'
      icon: mdi:wifi
    ssid:
      name: '${friendly_name} - Connected SSID'
      icon: mdi:wifi-strength-2

sensor:
  # WiFi signal
  - platform: wifi_signal
    name: "${friendly_name} - WiFi Signal"
    update_interval: 120s

# Enable time component to reset energy at midnight
# https://esphome.io/components/time/homeassistant.html
time:
  - platform: homeassistant
    id: homeassistant_time


pulse_meter.yaml
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
# Pulse meter configuration #

# Enable Home Assistant API
api:
  services:
    - service: reset_total_energy
      then:
        - button.press:
            id: button_reset_total

number:
  # Set the pulse rate of the LED on your meter
  - platform: template
    id: select_pulse_rate
    name: 'Puls rate - imp/kWh'
    optimistic: true
    mode: box
    min_value: 100
    max_value: 10000
    step: 100
    restore_value: yes
    initial_value: 800  

  # Reset total energy to given value
  - platform: template
    id: select_reset_total
    name: 'Reset Value - Total Energy kWh'
    entity_category: config
    optimistic: true
    mode: box
    min_value: 0
    max_value: 1000000
    step: 1
    initial_value: 985  # energie oude WP stond op 617kWh . 985 @28 maart 2025

button:
  # Reset the total energy entity
  - platform: template
    id: button_reset_total
    name: "Reset - Total Energy"
    on_press:
      - pulse_meter.set_total_pulses:
          id: sensor_energy_pulse_meter
          value: !lambda "return id(select_reset_total).state * id(select_pulse_rate).state;"

sensor:
  # Pulse meter
  - platform: pulse_meter
    id: sensor_energy_pulse_meter
    name: '${friendly_name} - Power Consumption'
    unit_of_measurement: W
    state_class: measurement
    device_class: power
    icon: mdi:flash-outline
    accuracy_decimals: 0
    pin: ${pulse_pin}
    internal_filter: 100ms # in theory 800 pulse per kwh, max around 6kWh peak would be 1.33 pulse per second. 1/1.33 = 730ms so starting with 100ms as filter  
    timeout: 1min
    on_raw_value:
      then:
        - light.turn_off:
            id: led_red
        - delay: 0.2s
        - light.turn_on:
            id: led_red
    filters:
      # multiply value = (60 / imp value) * 1000
      # - multiply: 60
      - lambda: return x * ((60.0 / id(select_pulse_rate).state) * 1000.0);
      # Update the sensor with an average every 10th second. See
      - throttle_average: 5s
      - filter_out: NaN
      - timeout: 60s  # sent value will be NaN
      - timeout:
            timeout: 60s
            value: !lambda return 3;      
      - clamp:
         min_value: 1
         max_value: 5500 # max Wh usage, eliminate spikes
         ignore_out_of_range: true     

    total:
      id: sensor_total_energy
      name: '${friendly_name} - Total Energy'
      unit_of_measurement: kWh
      icon: mdi:circle-slice-3
      state_class: total_increasing
      device_class: energy
      accuracy_decimals: 3
      filters:
        # multiply value = 1 / imp value
        # - multiply: 0.001
        - lambda: return x * (1.0 / id(select_pulse_rate).state);
        # Update the sensor once per 0.1 kWh consumed, or every 5th minute, whichever happens sooner.
        - delta: 0.01
        - heartbeat: 60s
      
  # Total day usage
  - platform: total_daily_energy
    id: sensor_total_daily_energy
    name: '${friendly_name} - Daily Energy'
    power_id: sensor_energy_pulse_meter
    restore: true
    unit_of_measurement: kWh
    icon: mdi:circle-slice-3
    state_class: total_increasing
    device_class: energy
    accuracy_decimals: 3
    filters:
      # Multiplication factor from W to kW is 0.001
      - multiply: 0.001

Afbeeldingslocatie: https://tweakers.net/i/SvlVDQlXLeATOnqY0w-bKakwvEI=/x800/filters:strip_exif()/f/image/s0NZ8wBM75SRQbfiTHKZZkop.png?f=fotoalbum_large

[ Voor 100% gewijzigd door JoebarRC op 08-04-2025 12:48 ]


  • The Flying Dutchman
  • Registratie: Mei 2000
  • Laatst online: 29-07 21:57
Mooi gedaan!

Hou er rekening mee dat sommige waarden overflowen (kwh, aantal uren). Maximale waarde is 255. Ik geloof niet dat er ergens bijgeouden wordt hoe vaak de waarde over de kop is gegaan, dus dat zul je zelf moeten doen.

The Flying Dutchman


  • Bert-R
  • Registratie: Januari 2018
  • Laatst online: 08-11 18:05
JoebarRC schreef op dinsdag 8 april 2025 @ 11:08:
Oke, dit is het project tot nu toe...
Dank je voor het delen! Na de zomer verwacht ik meer tijd en ga ik hier in duiken.

  • Kr3Kr
  • Registratie: Maart 2002
  • Laatst online: 23:11

Kr3Kr

Melpomene

JoebarRC schreef op dinsdag 8 april 2025 @ 11:08:
Oke, dit is het project tot nu toe, wat nog extra komt is een opentherm module en sketch zodat ik de thermostaat kan beïnvloeden. De modbus kan alles nu aansturen van de warmtepomp behalve de CV onderdelen want de toros heeft zelf geen idee van de temperatuur dat komt van de thermostaat.
Behalve dat is nu wel de toros te beïnvloeden op tapwater, je kan bv als er geen zon is de setpoint dynamisch verlagen zodat er geen tapwater gemaakt wordt en als de zon schijnt dit te verhogen. Werkt erg leuk

Dit is de electronica die gebruikt is, erg simpel, een esp32, een max485 bordje en een IR detector (ik heb er met 1 detector led) voor de kWH meter.

[Afbeelding]

Als er geen communicatie is dan de aansluitingen A en B naar de modbus verwisselen. Ik moest ook uiteindelijk de 120ohm weerstand verwijderen, de bus had een te lage weerstand en slechte communicatie

Nu de ESPHome sketch;
Naast de modbus code gebruik ik ook een pulsmeter voor de kWh meter in de toros vision. Die code kan je natuurlijk verwijderen en heb je ook de extra bestanden niet nodig onder 'packages'

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
# Toros Vision warmtepomp interface via Modbus en kWh pulsmeter

esphome:
  name: toros-modbuskwh
  min_version: 2024.11.0
  name_add_mac_suffix: false
  platform: ESP32
  board: nodemcu-32s #esp32dev  

packages:
 basis: !include ./components/basis.yaml
 updates: !include ./components/updates.yaml
 status: !include ./components/status_led.yaml
 pulse: !include ./components/pulse_meter.yaml
 
substitutions:
# Define the GPIO pins
  pulse_pin: GPIO5
  status_led: GPIO2 #D4
  friendly_name: WP Modbus kwh meter


# disable logging
logger:
  baud_rate: 0


# Enable Home Assistant API
api:

# Allow Over-The-Air updates
ota:
- platform: esphome

wifi:
  ssid: "Access Point SSID"
  password: "Access Point wachtwoord"

web_server:

uart:
  tx_pin: GPIO17
  rx_pin: GPIO16
  baud_rate: 19200

modbus:
  id: modbus1
  flow_control_pin: GPIO4

modbus_controller:
- id: modbus_device
  address: 0x1   ## address of the Modbus slave device on the bus
  modbus_id: modbus1
  setup_priority: -10
  update_interval: 30s
 
# Number (slider) input voor WP settings zoals de tapwater temperatuur
# hiermee kan misschien ook de switch functie gebruikt worden met modbus control om later te toggelen tussen temps bij zon bv.
number:
- platform: modbus_controller #template
  modbus_controller_id: modbus_device
  name: "Gewenste Tapwater temp"
  id: tapwater_setpoint_ha
  address: 0x817A
  register_type: holding
  value_type: U_WORD
  entity_category: config
  icon: mdi:chart-bell-curve
  min_value: 35
  max_value: 55
  step: 1
  mode: slider #box
  lambda: "return x; "
  write_lambda: |-
      return x;  

- platform: modbus_controller #template
  modbus_controller_id: modbus_device
  name: "Tapwater ECO minimum"
  id: tapwater_eco_setpoint_ha
  address: 0x8264
  register_type: holding
  value_type: U_WORD
  entity_category: config
  icon: mdi:chart-bell-curve
  min_value: 30
  max_value: 45
  step: 1
  mode: slider #box
  lambda: "return x; "
  write_lambda: |-
      return x;        
      
- platform: modbus_controller #template
  modbus_controller_id: modbus_device
  name: "Tapwater Max daling temp:"
  id: tapwater_hysterese_ha
  address: 0x817B
  register_type: holding
  value_type: U_WORD
  entity_category: config
  icon: mdi:chart-bell-curve
  min_value: 2
  max_value: 12
  step: 1
  mode: slider #box
  lambda: "return x; "
  write_lambda: |-
      return x;    

sensor:
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: status
    name: "Status WP"
    address: 0x539E
    register_type: holding
    value_type: U_WORD
      
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: zomer_winter_stand
    name: "Zomer-winter-stand. 0 = winter"
    address: 0x81E6
    register_type: holding
    value_type: U_WORD
    accuracy_decimals: 0
    filters:
      - multiply: 1.0

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: actual_error
    name: "Actuale storing"
    address: 0x0032
    register_type: holding
    value_type: U_WORD
    accuracy_decimals: 0
    filters:
      - multiply: 1.0

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: vergrendeld
    name: "Vergrendeld"
    address: 0x0032
    register_type: holding
    value_type: U_WORD
    accuracy_decimals: 0
    filters:
      - multiply: 1.0

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: lage_druk_schakelaar
    name: "Lage druk schakelaar"
    address: 0x30CE
    register_type: holding
    value_type: U_WORD
    accuracy_decimals: 0
    filters:
      - multiply: 1.0

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: hoge_druk_schakelaar
    name: "Hoge druk schakelaar"
    address: 0x30CE
    register_type: holding
    value_type: U_WORD
    accuracy_decimals: 0
    filters:
      - multiply: 1.0

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: max_t_cpr
    name: "MaxT CPR"
    address: 0xF12B
    register_type: holding
    value_type: U_WORD
    accuracy_decimals: 0
    filters:
      - multiply: 1.0

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: max_t_ee
    name: "MaxT EE"
    address: 0xF830
    register_type: holding
    value_type: U_WORD
    accuracy_decimals: 0
    filters:
      - multiply: 1.0

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: ec1
    name: "EC1"
    address: 0xF12A
    register_type: holding
    value_type: U_WORD
    accuracy_decimals: 0
    filters:
      - multiply: 1.0

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: ec2
    name: "EC2"
    address: 0xFA70
    register_type: holding
    value_type: U_WORD
    accuracy_decimals: 0
    filters:
      - multiply: 1.0

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: afgiftesysteem
    name: "Afgiftesysteem(min:sec)"
    address: 0xF37C
    register_type: holding
    unit_of_measurement: "sec"
    value_type: U_WORD
    accuracy_decimals: 0
    filters:
      - multiply: 1.0

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: pompen
    name: "Pompen(min:sec)"
    address: 0xF37A
    register_type: holding
    unit_of_measurement: "sec"
    value_type: U_WORD
    accuracy_decimals: 0
    filters:
      - multiply: 1.0

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: warmtepomp
    name: "Warmtepomp(sec)"
    address: 0xF364
    register_type: holding
    unit_of_measurement: "sec"
    value_type: U_WORD
    accuracy_decimals: 0
    filters:
      - multiply: 1.0

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: cpr_aan_aan
    name: "CPR AAN-AAN (min:sec)"
    address: 0xF37E
    register_type: holding
    unit_of_measurement: "sec"
    value_type: U_WORD
    accuracy_decimals: 0
    filters:
      - multiply: 1.0

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: cpr_uit_aan
    name: "CPR UIT_AAN (min:sec)"
    address: 0xF380
    register_type: holding
    unit_of_measurement: "sec"
    value_type: U_WORD
    accuracy_decimals: 0
    filters:
      - multiply: 1.0

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: cpr_aan_uit
    name: "CPR AAN-UIT(min:sec)"
    address: 0xF382
    register_type: holding
    unit_of_measurement: "sec"
    value_type: U_WORD
    accuracy_decimals: 0
    filters:
      - multiply: 1.0


  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: tbu_buiten_actueel
    name: "Temp Buitensensor"
    address: 0x35F7
    register_type: holding
    unit_of_measurement: "°C"
    value_type: U_WORD
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: ttw_tapwater
    name: "Tapwater actueel"
    address: 0x3561
    register_type: holding
    unit_of_measurement: "°C"
    value_type: U_WORD
    accuracy_decimals: 1
    filters:
      - multiply: 0.1
  
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: tapwater_setpoint
    name: "Tapwater Gewenst"    
    address: 0x817A
    register_type: holding  
    unit_of_measurement: "°C"     
    value_type: U_WORD
    accuracy_decimals: 1
    
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: tapwater_eco_setpoint
    name: "Tapwater ECO minimum"    
    address: 0x8264
    register_type: holding  
    unit_of_measurement: "°C"     
    value_type: U_WORD
    accuracy_decimals: 1   
    
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: tapwater_hysterese
    name: "Tapwater Max Daling"    
    address: 0x817B
    register_type: holding  
    unit_of_measurement: "°C"      
    value_type: U_WORD
    accuracy_decimals: 1

  - platform: template
    id: tapwater_minimum_ha
    name: "Tapwater minimum temp"
    unit_of_measurement: "°C"
    lambda: "return id(tapwater_setpoint_ha).state - id(tapwater_hysterese).state;"

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: mengpositie_klep
    name: "Mengpositie klep (%)"
    address: 0x1DB6
    register_type: holding
    unit_of_measurement: "%"
    value_type: U_WORD
    accuracy_decimals: 1
    filters:
      - multiply: 1.0

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: tbr_bron_wp_in
    name: "TBR Bron WP IN"
    address: 0x5AAB
    register_type: holding
    unit_of_measurement: "C"
    value_type: U_WORD
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

# de kWh registers bevatten waardes voor 2 parameters. De highbit van het d_WORD is nodig en wordt via de lambda berekend      
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: standby_kwh
    name: "kWh Standby"
    address: 0x5334
    register_type: holding
    unit_of_measurement: "kWh"
    value_type: U_WORD
    lambda: |-
      uint16_t value = x;    
      uint16_t highbit = (value >> 8) & 0xFF;
      return highbit;

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: tapwater_kwh
    name: "kWh Tapwater"
    address: 0x533B
    register_type: holding
    unit_of_measurement: "kWh"
    value_type: U_WORD
    lambda: |-
      uint16_t value = x;    
      uint16_t highbit = (value >> 8) & 0xFF;
      return highbit;    

# warmte kWh zit in de lowbits van het register.       
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: warmte_kwh
    name: "kWh Warmte"
    address: 0x5352
    register_type: holding
    unit_of_measurement: "kWh"
    value_type: U_WORD
    lambda: |-
      uint16_t value = x;    
      uint16_t lowbit = value & 0xFF;
      return lowbit;    

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: actief_koel_kWh
    name: "kWh Koel"
    address: 0x5361
    register_type: holding
    unit_of_measurement: "kWh"
    value_type: U_WORD
    lambda: |-
      uint16_t value = x;    
      uint16_t highbit = (value >> 8) & 0xFF;
      return highbit;    
        
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: passief_koel_kWh
    name: "kWh Koel passief"
    address: 0x535D
    register_type: holding
    unit_of_measurement: "kWh"
    value_type: U_WORD
    lambda: |-
      uint16_t value = x;    
      uint16_t lowbit = value & 0xFF;
      return lowbit;  
  
  
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: totaal_kwh
    name: "kWh Totaal"
    address: 0x6557
    register_type: holding
    unit_of_measurement: "kWh"
    value_type: U_WORD    

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: actief_tap_uren
    name: "Actief Tap Uren"
    address: 0x53C4
    register_type: holding
    unit_of_measurement: "uur"
    value_type: U_WORD   

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: actief_CV_uren
    name: "Actief CV Uren"
    address: 0x5532
    register_type: holding
    unit_of_measurement: "uur"
    value_type: U_WORD   
    
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: actief_koel_uren
    name: "Actief Koel Uren"
    address: 0x5597
    register_type: holding
    unit_of_measurement: "uur"
    value_type: U_WORD   

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: passief_koel_uren
    name: "Passief Koel Uren"
    address: 0x5567
    register_type: holding
    unit_of_measurement: "uur"
    value_type: U_WORD   
            
# Vertalen van waardes naar tekst                
text_sensor:
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "Status"
    id: status_string
    address: 0x539E
    register_type: holding        
    lambda: |-
      uint16_t value = id(status).state;
      switch (value) {
        case 1: return std::string("Stand-By");
        case 2: return std::string("Passief Tapwater");
        case 4: return std::string("Actief Tapwater voor");
        case 8: return std::string("Passief CV");
        case 16: return std::string("Actief CV voor");
        case 32: return std::string("Passief Koelen");
        case 64: return std::string("Regenereren");
        case 256: return std::string("Noodbedrijf TapW");
        case 512: return std::string("Noodbedrijf CV");
        case 1028: return std::string("Actief TapWater");
        case 1040: return std::string("Actief CV");
        default: return std::string("Unknown");
      }
      return x;
      
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "Seizoen"
    id: seizoen_string
    address: 0x81E6
    register_type: holding        
    lambda: |-
      uint16_t value = id(zomer_winter_stand).state;
      switch (value) {
        case 0: return std::string("Winter");
        case 1: return std::string("Zomer");
        default: return std::string("Unknown");
      }
      return x;


Nu de extra packages;
basis: !include ./components/basis.yaml
updates: !include ./components/updates.yaml
status: !include ./components/status_led.yaml
pulse: !include ./components/pulse_meter.yaml

updates.yaml
code:
1
2
3
4
5
6
7
8
9
10
# OTA configuration #
ota:
  - platform: esphome
    id: ota_esphome
  - platform: http_request
    id: ota_http_request

http_request:
  timeout: 10s
  verify_ssl: false


status_led.yaml
code:
1
2
3
4
5
6
7
light:
  - platform: status_led
    internal: true
    id: led_red
    pin: 
        number: ${status_led}
        inverted: true


basis.yaml
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
# Basic configuration #
button:
  # Restart the ESP
  - platform: restart
    name: "Restart - WP kWh"

# Sensors for ESP version and WIFI information
text_sensor:
#   # Installed version
#   - platform: template
#     name: "Glow - Installed version"
#     id: glow_version
#     icon: "mdi:label-outline"
#     entity_category: diagnostic
#     lambda: |-
#       return {"${project_version}"};
#     update_interval: 6h
#   # ESPHome version
#   - platform: version
#     hide_timestamp: true
#     name: '${friendly_name} - ESPHome Version'
  # IP address and connected SSID
  - platform: wifi_info
    ip_address:
      name: '${friendly_name} - IP Address'
      icon: mdi:wifi
    ssid:
      name: '${friendly_name} - Connected SSID'
      icon: mdi:wifi-strength-2

sensor:
  # WiFi signal
  - platform: wifi_signal
    name: "${friendly_name} - WiFi Signal"
    update_interval: 120s

# Enable time component to reset energy at midnight
# https://esphome.io/components/time/homeassistant.html
time:
  - platform: homeassistant
    id: homeassistant_time


pulse_meter.yaml
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
# Pulse meter configuration #

# Enable Home Assistant API
api:
  services:
    - service: reset_total_energy
      then:
        - button.press:
            id: button_reset_total

number:
  # Set the pulse rate of the LED on your meter
  - platform: template
    id: select_pulse_rate
    name: 'Puls rate - imp/kWh'
    optimistic: true
    mode: box
    min_value: 100
    max_value: 10000
    step: 100
    restore_value: yes
    initial_value: 800  

  # Reset total energy to given value
  - platform: template
    id: select_reset_total
    name: 'Reset Value - Total Energy kWh'
    entity_category: config
    optimistic: true
    mode: box
    min_value: 0
    max_value: 1000000
    step: 1
    initial_value: 985  # energie oude WP stond op 617kWh . 985 @28 maart 2025

button:
  # Reset the total energy entity
  - platform: template
    id: button_reset_total
    name: "Reset - Total Energy"
    on_press:
      - pulse_meter.set_total_pulses:
          id: sensor_energy_pulse_meter
          value: !lambda "return id(select_reset_total).state * id(select_pulse_rate).state;"

sensor:
  # Pulse meter
  - platform: pulse_meter
    id: sensor_energy_pulse_meter
    name: '${friendly_name} - Power Consumption'
    unit_of_measurement: W
    state_class: measurement
    device_class: power
    icon: mdi:flash-outline
    accuracy_decimals: 0
    pin: ${pulse_pin}
    internal_filter: 100ms # in theory 800 pulse per kwh, max around 6kWh peak would be 1.33 pulse per second. 1/1.33 = 730ms so starting with 100ms as filter  
    timeout: 1min
    on_raw_value:
      then:
        - light.turn_off:
            id: led_red
        - delay: 0.2s
        - light.turn_on:
            id: led_red
    filters:
      # multiply value = (60 / imp value) * 1000
      # - multiply: 60
      - lambda: return x * ((60.0 / id(select_pulse_rate).state) * 1000.0);
      # Update the sensor with an average every 10th second. See
      - throttle_average: 5s
      - filter_out: NaN
      - timeout: 60s  # sent value will be NaN
      - timeout:
            timeout: 60s
            value: !lambda return 3;      
      - clamp:
         min_value: 1
         max_value: 5500 # max Wh usage, eliminate spikes
         ignore_out_of_range: true     

    total:
      id: sensor_total_energy
      name: '${friendly_name} - Total Energy'
      unit_of_measurement: kWh
      icon: mdi:circle-slice-3
      state_class: total_increasing
      device_class: energy
      accuracy_decimals: 3
      filters:
        # multiply value = 1 / imp value
        # - multiply: 0.001
        - lambda: return x * (1.0 / id(select_pulse_rate).state);
        # Update the sensor once per 0.1 kWh consumed, or every 5th minute, whichever happens sooner.
        - delta: 0.01
        - heartbeat: 60s
      
  # Total day usage
  - platform: total_daily_energy
    id: sensor_total_daily_energy
    name: '${friendly_name} - Daily Energy'
    power_id: sensor_energy_pulse_meter
    restore: true
    unit_of_measurement: kWh
    icon: mdi:circle-slice-3
    state_class: total_increasing
    device_class: energy
    accuracy_decimals: 3
    filters:
      # Multiplication factor from W to kW is 0.001
      - multiply: 0.001

[Afbeelding]
Whoa, lekker bezig. Dit is inderdaad wat ik voor ogen had. Leuk om na zo'n tijd weer terug te komen op dit onderwerp en alle vooruitgang te zien. Ik zal de komende tijd eens kijken of ik het na kan bouwen.

Over de opentherm-methode om de setpoint aan te passen: dit werkt (voor zover ik weet) niet omdat de Chronotherm Touch modulation thermostaat (die bij eigenlijk alle installaties toegepast worden) dit niet ondersteunen. Zie ook mijn bericht hierover in het OTGW topic met de bijbehorende antwoorden (die ik even niet kan vinden).

Wat wel kan is de eerder beschreven methode van tijdelijk via de modbus/serial de buitentemperatuur handmatig overschrijven.


Wat voor andere tweakers misschien ook wel goed is om te weten, vooral in deze periode: bij ons bouwproject zijn alle 6 de pompen ingeregeld om pas te beginnen met stoken als de buitentemperatuur onder de 17 graden gezakt is. In de handleiding en minicom lijkt het alsof dit alleen geldt als de Toros ingesteld is op 'Automatisch koelen/verwarmen'. Maar: Zelfs als hij op 'alleen verwarmen' staat, en de setpoint is bijv. 21°C, gemeten ruimte temperatuur is 19°C en buiten is het 18°C dan zal hij alsnog niet gaan stoken. De Remeha klantenservice beaamt dat dit "heel raar" is ("als u het 25°C in huis wil hebben moet hij gewoon luisteren!"). :?

Als je dit aan wilt passen, moet je in de Minicom onder de pagina "Installateur compact" de waarde voor "Stookgrens Tbu actueel" instellen op een logische waarde (bijv. 21). Dit doe je door op het getal te klikken, in de popup de waarde te wijzigen, en daarna op "Write OK" te drukken.

Gregor van Egdom Krekr


  • Kr3Kr
  • Registratie: Maart 2002
  • Laatst online: 23:11

Kr3Kr

Melpomene

Succes, ik heb @JoebarRC's Modbus code ook draaiend. Ik heb alleen nog een rare waarde:
code:
1
TBR Bron WP IN  6492.3 C


In principe zijn alle waardes die met de Minicom te lezen en schrijven zijn, ook via de Modbus benaderbaar.
De 'screens' zijn eigenlijk CSV-bestanden met de modbusregisters en hun eigenschappen. Mijn volgende stap is dat ik een aantal extra statistieken toe wil voegen, zoals beschreven in de "NL-Monitoring.scr";
code:
1
2
3
4
5
6
7
8
9
"I",1,4,"42E6",0,"Tvu (BRON WP UIT)","",0,0,0,0,"0",0,3572,14103,3572,12408,"0",4,2
"I",1,4,"3AF8",0,"Tvi (BRON WP IN)","",0,0,0,0,"0",0,3196,14103,3196,12408,"0",4,2
"I",1,4,"17DA",0,"Tci (CV WP IN)","Not Assigned",0,0,0,0,"0",0,3948,14103,3948,12408,"0",4,2
"I",1,4,"178F",0,"Tcu (CV COND UIT)","Not Assigned",0,0,0,0,"0",0,4324,14103,4324,12408,"0",4,2
"I",1,4,"3F6B",0,"=Tau (CV WP UIT)","Not Assigned",0,0,0,0,"0",0,4700,14103,4700,12408,"0",4,2
"I",1,1,"36F4",0,"FVD (Flow bron in Hz)","Not Assigned",0,0,0,0,"0",0,5452,14103,5452,12408,"0",4,0
"I",1,4,"500B",0,"Tzc (ZONNECOLLECTOR)","Not Assigned",0,0,0,0,"0",0,2444,14103,2444,12408,"0",4,2
"I",1,3,"5AAB",0,"Tbr (BRON WP IN)","Not Assigned",0,0,0,0,"0",0,2820,14103,2820,12408,"0",4,2
"I",1,3,"3561",0,"=Ttw (TAPWATER)","Not Assigned",0,0,0,0,"0",0,5076,14103,5076,12408,"0",4,2



Stap daarna zou zijn om de werking van de pomp te beïnvloeden, bijv. op basis van EPEX prijs of PV-opbrengst:
1) de buitensensor tijdelijk via modbus te regelen (0x81C9 = 2)
2) een temperatuur hoger dan de stookgrens in te stellen (bijv. 0x35F7 = 400), in tienden graden
3) een timeout op die waarde in te stellen (0x81CA = 1), in uren
4) evt. na een uur alles weer terug op de buitensensor zetten (0x81C9 = 1)

Daarmee kun je niet de ruimtesetpoint beïnvloeden, maar wel tijdelijk het stoken uit zetten / uitstellen, bijv. op momenten dat dit niet uitkomt i.v.m. piekprijzen.

Een tip voor het debuggen: hang een pc'tje/laptop met minicom en remote desktop aan de andere poort, dan kun je live meekijken wat er veranderd.

@JoebarRC zou je nog je HA 'card' code willen delen, want die van jou ziet er een stuk netter uit!

[ Voor 5% gewijzigd door Kr3Kr op 19-09-2025 10:42 ]

Gregor van Egdom Krekr


  • Foreigner
  • Registratie: Augustus 2019
  • Laatst online: 01-11 15:21
Kr3Kr schreef op zaterdag 13 september 2025 @ 17:12:
[...]

Whoa, lekker bezig. Dit is inderdaad wat ik voor ogen had. Leuk om na zo'n tijd weer terug te komen op dit onderwerp en alle vooruitgang te zien. Ik zal de komende tijd eens kijken of ik het na kan bouwen.

Over de opentherm-methode om de setpoint aan te passen: dit werkt (voor zover ik weet) niet omdat de Chronotherm Touch modulation thermostaat (die bij eigenlijk alle installaties toegepast worden) dit niet ondersteunen. Zie ook mijn bericht hierover in het OTGW topic met de bijbehorende antwoorden (die ik even niet kan vinden).

Wat wel kan is de eerder beschreven methode van tijdelijk via de modbus/serial de buitentemperatuur handmatig overschrijven.


Wat voor andere tweakers misschien ook wel goed is om te weten, vooral in deze periode: bij ons bouwproject zijn alle 6 de pompen ingeregeld om pas te beginnen met stoken als de buitentemperatuur onder de 17 graden gezakt is. In de handleiding en minicom lijkt het alsof dit alleen geldt als de Toros ingesteld is op 'Automatisch koelen/verwarmen'. Maar: Zelfs als hij op 'alleen verwarmen' staat, en de setpoint is bijv. 21°C, gemeten ruimte temperatuur is 19°C en buiten is het 18°C dan zal hij alsnog niet gaan stoken. De Remeha klantenservice beaamt dat dit "heel raar" is ("als u het 25°C in huis wil hebben moet hij gewoon luisteren!"). :?

Als je dit aan wilt passen, moet je in de Minicom onder de pagina "Installateur compact" de waarde voor "Stookgrens Tbu actueel" instellen op een logische waarde (bijv. 21). Dit doe je door op het getal te klikken, in de popup de waarde te wijzigen, en daarna op "Write OK" te drukken.
Heel goed inzicht, bedankt hiervoor. Wat betreft de temperatuurdrempels: op de Chrono-thermostaat kun je de ketelinstellingen openen en de volgende opties instellen:

244 - verwarmen
243 - koelen

(bijvoorbeeld 244 ingesteld op 15 °C en 243 ingesteld op 17 °C - als de buitentemperatuur hoger is dan 17 °C gedurende het aantal uren dat je pomp is ingesteld, dan begint deze te “koelen”)

In mijn tests moet het verschil tussen de drempels 2 °C zijn en moet de buitentemperatuur gedurende ongeveer 12-24 uur boven (of onder) de ingestelde drempels liggen. Je kunt ook het aantal uren wijzigen om hiermee rekening te houden, maar ik weet niet wat de code daarvoor is en of je daarvoor de software moet gebruiken.

  • Kr3Kr
  • Registratie: Maart 2002
  • Laatst online: 23:11

Kr3Kr

Melpomene

Foreigner schreef op maandag 22 september 2025 @ 14:43:
[...]


Heel goed inzicht, bedankt hiervoor. Wat betreft de temperatuurdrempels: op de Chrono-thermostaat kun je de ketelinstellingen openen en de volgende opties instellen:

244 - verwarmen
243 - koelen

(bijvoorbeeld 244 ingesteld op 15 °C en 243 ingesteld op 17 °C - als de buitentemperatuur hoger is dan 17 °C gedurende het aantal uren dat je pomp is ingesteld, dan begint deze te “koelen”)

In mijn tests moet het verschil tussen de drempels 2 °C zijn en moet de buitentemperatuur gedurende ongeveer 12-24 uur boven (of onder) de ingestelde drempels liggen. Je kunt ook het aantal uren wijzigen om hiermee rekening te houden, maar ik weet niet wat de code daarvoor is en of je daarvoor de software moet gebruiken.
Klopt, dat was ik alweer vergeten. Ik kwam gisteren toevallig ook weer dit (heel leesbare en mooie :+ ) document tegen:
Afbeeldingslocatie: https://tweakers.net/i/u3090XShS28OS1527xtUP5Gaifg=/x800/filters:strip_exif()/f/image/FQ8p0DXDWydjYCOjs9BVRzYM.png?f=fotoalbum_large

Gisteren nog de buren geholpen (die een baby van een week oud hebben!) waarbij de ketel, zelfs nadat die drempels anders ingesteld stonden, in 'zomerbedrijf' bleef hangen (Chronotherm stond op 'alleen verwarmen'). Het was ondertussen lekker fris in huis. Niets hielp: Setpoint op 25°C, in/uit/in winterbedrijf via de thermostaat, parameter 0013 van de Chronotherm 0/1...

Pas toen ik de Zomer-winterbedrijf op "0" zette via de Minicom wilde hij beginnen. Die dame stond al de hele avond onder de douche om op te warmen, moet je voorstellen dat je de monteur moet bellen.

Gregor van Egdom Krekr


  • Foreigner
  • Registratie: Augustus 2019
  • Laatst online: 01-11 15:21
Dat is een geweldige pagina! Wat ik ooit hoop te vinden is de servicehandleiding met uitleg voor alle verborgen codes.

  • cyspoz
  • Registratie: September 2001
  • Laatst online: 09-10 21:46

cyspoz

Relaxed, het zijn maar 1 en 0

Is het ook mogelijk om het opwarmen van het tapwater te sturen op basis van de energie prijs? Met andere woorden, het voorraad vat in een batterij veranderen?

  • borft
  • Registratie: Januari 2002
  • Laatst online: 10-11 13:57
cyspoz schreef op donderdag 9 oktober 2025 @ 14:33:
Is het ook mogelijk om het opwarmen van het tapwater te sturen op basis van de energie prijs? Met andere woorden, het voorraad vat in een batterij veranderen?
In theorie kan je dat doen door de gewenste sww temperatuur te varieren, waardoor de wp gaan verwarmen of niet.

  • borft
  • Registratie: Januari 2002
  • Laatst online: 10-11 13:57
Kr3Kr schreef op vrijdag 19 september 2025 @ 10:36:
Succes, ik heb @JoebarRC's Modbus code ook draaiend. Ik heb alleen nog een rare waarde:
Nice, vraagje, hoe heb je het fysiek aangesloten op de WP? heb je zelf een kabel/ connector gemaakt, of heb je die ergens vandaan gehaald?

  • Jbuitenhuis
  • Registratie: Oktober 2025
  • Laatst online: 04-11 23:58
Na een lange zoektocht online dit topic van voor naar achter doorgelezen, mooi werk en uitzoekwerk!

Hier een hele nieuwbouwwijk met 420 toros vision tvpt5 warmtepompen die allemaal een “slimme” warmtepomp willen. Ik gok dat als er een kant en klare oplossing is er best wel een verdienmodel aanvast zit als het helemaal uit gewerkt is :)

Vooral het warmtevat bijvullen en temp omhoog bij lage temp / zon uren is bij iedereen wel wenselijk.

Op de site van remeha hebben ze het wel over een smart app om de parameters uit te lezen/ in te stellen. Maar ik verwacht dat deze niet zomaar communiceert met “onze” wp.

https://www.remeha.nl/zakelijk/tools-en-apps/recom-software Iemand als de recom software van remeha uitgeprobeerd?

  • Bert-R
  • Registratie: Januari 2018
  • Laatst online: 08-11 18:05
Jbuitenhuis schreef op donderdag 23 oktober 2025 @ 21:59:
Op de site van remeha hebben ze het wel over een smart app om de parameters uit te lezen/ in te stellen. Maar ik verwacht dat deze niet zomaar communiceert met “onze” wp.

https://www.remeha.nl/zakelijk/tools-en-apps/recom-software Iemand als de recom software van remeha uitgeprobeerd?
Ik denk dat dit weinig kans maakt. Er staat een hele lijst Remeha-producten op, maar geen Toros Vision.

Mag ik je een side-track-vraag stellen? Hebben jullie in die wijk een installateur die verstand heeft van dit type warmtepomp? Ik heb er de hele wereld al naar afgezocht, maar nog niemand gevonden.

  • Bert-R
  • Registratie: Januari 2018
  • Laatst online: 08-11 18:05
Er ging iets mis op de site, waardoor deze post dubbel was

[ Voor 90% gewijzigd door Bert-R op 25-10-2025 15:32 . Reden: Er ging iets mis op de site, waardoor deze post dubbel was ]


  • Kr3Kr
  • Registratie: Maart 2002
  • Laatst online: 23:11

Kr3Kr

Melpomene

borft schreef op donderdag 9 oktober 2025 @ 16:20:
[...]
Nice, vraagje, hoe heb je het fysiek aangesloten op de WP? heb je zelf een kabel/ connector gemaakt, of heb je die ergens vandaan gehaald?
Ik heb de kabel zelf gemaakt. Wat je hiervoor nodig hebt, is een krimptang, wat draad, een 6 pins Molex Microfit housing (43025-0600) en drie contacten (43030-0007 , maar bestel vooral meer ;))
Jbuitenhuis schreef op donderdag 23 oktober 2025 @ 21:59:
Na een lange zoektocht online dit topic van voor naar achter doorgelezen, mooi werk en uitzoekwerk!

Hier een hele nieuwbouwwijk met 420 toros vision tvpt5 warmtepompen die allemaal een “slimme” warmtepomp willen. Ik gok dat als er een kant en klare oplossing is er best wel een verdienmodel aanvast zit als het helemaal uit gewerkt is :)

Vooral het warmtevat bijvullen en temp omhoog bij lage temp / zon uren is bij iedereen wel wenselijk.
Een kant-en-klare oplossing wordt door bijv. Econtro aangeboden, maar daarbij zit je dan wel aan een dienstverleningscontract vast. Een kant-en-klare oplossing is nog niet zo makkelijk - e.e.a. is namelijk afhankelijk van het energiecontract wat men heeft, hun wensen, enz.
ESPhome update
Ik heb weer een paar uurtjes kunnen besteden, en een hoop parameters toegevoegd. Ik draai dit script nu thuis, maar ik zou het wel in de gaten houden: als het koud wordt in huis ben je zelf verantwoordelijk ;)

Belangrijkste toevoegingen:
- Via een select kun je nu de bron van de buitentemperatuur-informatie kiezen, en er is een parameter voor de handmatige buitentemperatuur. Hiermee zou het mogelijk moeten zijn om de WP te 'sturen' - eventjes niet, of juist wel stoken. Dit heb ik kort kunnen testen en lijkt te werken.

- Alle starts, kWh's, enz. zijn zo veel mogelijk toegevoegd.

Een hoop parameters kloppen nog niet (temperaturen *10 enz.), maar het begint ergens op te lijken. Disclaimer is dat grootste gedeelte AI-gegenereerd is :)

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
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
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
esphome:
  name: toros-modbus
  friendly_name: Toros Vision Modbus bridge
  min_version: 2024.11.0 # Using a recent version for syntax correctness
  name_add_mac_suffix: false

esp32:
  board: nodemcu-32s
  framework:
    type: esp-idf

# You can include other components here as needed
# packages:
#  basis: !include ./components/basis.yaml
#  updates: !include ./components/updates.yaml
#  status: !include ./components/status_led.yaml
#  pulse: !include ./components/pulse_meter.yaml
 
substitutions:
  # Define the GPIO pins
  pulse_pin: GPIO5
  status_led: GPIO2 #D4
  friendly_name: WP Modbus kwh meter

# disable logging
logger:
  baud_rate: 0

# Enable Home Assistant API
api:

# Allow Over-The-Air updates
ota:
- platform: esphome

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

web_server:

uart:
  tx_pin: GPIO13
  rx_pin: GPIO14
  baud_rate: 19200
  stop_bits: 1

modbus:
  id: modbus1
  flow_control_pin: GPIO27

modbus_controller:
- id: modbus_device
  address: 0x1   # Address of the Modbus slave device on the bus
  modbus_id: modbus1
  setup_priority: -10
  update_interval: 30s
 
#=======================================================================
# SELECT - Writable drop-down selection in HA
#=======================================================================
select:
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "Outside Temperature Source"
    id: outside_temp_source
    address: 0x81C9
    entity_category: config
    icon: mdi:thermometer-lines
    value_type: U_WORD
    optionsmap:
      "Onboard": 1
      "Modbus": 2
      "OpenTherm": 3

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "Season Setting"
    id: season_setting
    address: 0x81E6
    entity_category: config
    icon: mdi:sun-snowflake
    value_type: U_WORD
    optionsmap:
      "Winter": 0
      "Zomer": 1

#=======================================================================
# SWITCH - Writable On/Off parameters
#=======================================================================
switch:
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "Cooling Curve Enabled"
    id: cooling_curve_enabled
    address: 0x81B2
    entity_category: config
    icon: mdi:snowflake-thermometer
    register_type: holding

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "Compressor Protection from Evaporator"
    id: comp_protection_evaporator
    address: 0x81DC
    bitmask: 0b0000000000000001 # BIT0
    entity_category: config
    register_type: holding

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "Compressor Protection from Outside Air"
    id: comp_protection_outside_air
    address: 0x81DC
    bitmask: 0b0000000000000010 # BIT1
    entity_category: config
    register_type: holding

#=======================================================================
# NUMBER - Writable parameters for configuration from Home Assistant
#=======================================================================
number:
  # --- DHW Settings ---
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "Set DHW Setpoint"
    id: tapwater_setpoint_ha
    address: 0x817A
    value_type: U_WORD
    entity_category: config
    icon: mdi:water-boiler-edit
    unit_of_measurement: "°C"
    min_value: 35
    max_value: 55
    step: 1
    mode: slider

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "Set DHW Eco Setpoint"
    id: tapwater_eco_setpoint_ha
    address: 0x8264
    value_type: U_WORD
    entity_category: config
    icon: mdi:leaf-circle-outline
    unit_of_measurement: "°C"
    min_value: 30
    max_value: 45
    step: 1
    mode: slider

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "Set DHW Hysteresis"
    id: tapwater_hysterese_ha
    address: 0x817B
    value_type: U_WORD
    entity_category: config
    icon: mdi:arrow-expand-vertical
    unit_of_measurement: "K"
    min_value: 2
    max_value: 12
    step: 1
    mode: slider

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "Set Anti-Legionella Setpoint"
    id: anti_legionella_setpoint
    address: 0x8188
    value_type: U_WORD
    entity_category: config
    icon: mdi:bacteria-outline
    unit_of_measurement: "°C"
    min_value: 55
    max_value: 70
    step: 1
    mode: slider

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "Set Anti-Legionella Interval"
    id: anti_legionella_interval
    address: 0x8232
    value_type: U_WORD
    entity_category: config
    icon: mdi:timer-sync-outline
    unit_of_measurement: "h"
    min_value: 24
    max_value: 720
    step: 24
    mode: box

  # --- Heating/Cooling Curve & Thresholds ---
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "Set Central Heating Hysteresis"
    id: cv_hysterese
    address: 0x1275
    value_type: U_WORD
    entity_category: config
    unit_of_measurement: "K"
    icon: mdi:arrow-expand-vertical
    min_value: 0.5
    max_value: 10.0
    step: 0.1
    mode: box
    write_lambda: |-
      return x * 10;

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "Set Heating Curve"
    id: stooklijn
    address: 0x825B
    value_type: U_WORD
    entity_category: config
    icon: mdi:chart-line
    min_value: 0.2
    max_value: 3.0
    step: 0.1
    mode: slider
    write_lambda: |-
      return x * 10;

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "Set Heating Curve Offset"
    id: stooklijn_offset
    address: 0x825C
    value_type: S_WORD
    entity_category: config
    unit_of_measurement: "K"
    icon: mdi:arrow-up-down
    min_value: -10
    max_value: 10
    step: 0.5
    mode: box
    write_lambda: |-
      return x * 10;

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "Set Winter Mode Threshold"
    id: winter_threshold
    address: 0x81E8
    value_type: S_WORD
    entity_category: config
    unit_of_measurement: "°C"
    icon: mdi:snowflake-thermometer
    min_value: -10
    max_value: 25
    step: 1
    mode: slider

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "Set Summer Mode Threshold"
    id: summer_threshold
    address: 0x81E9
    value_type: S_WORD
    entity_category: config
    unit_of_measurement: "°C"
    icon: mdi:sun-thermometer-outline
    min_value: 10
    max_value: 30
    step: 1
    mode: slider
    
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "Set Heating Limit Outside Temp"
    id: heating_limit_temp
    address: 0x826A
    value_type: S_WORD
    entity_category: config
    unit_of_measurement: "°C"
    icon: mdi:radiator
    min_value: -10
    max_value: 25
    step: 1
    mode: slider
    
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "Set Cooling Limit Outside Temp"
    id: cooling_limit_temp
    address: 0x826B
    value_type: S_WORD
    entity_category: config
    unit_of_measurement: "°C"
    icon: mdi:air-conditioner
    min_value: 15
    max_value: 40
    step: 1
    mode: slider

  # --- General/Misc Settings ---
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "Set Manual Outside Air Temp"
    id: manual_outside_air_temp
    address: 0x35F7
    value_type: S_WORD
    entity_category: config
    unit_of_measurement: "°C"
    icon: mdi:thermometer-plus
    min_value: -40
    max_value: 255
    step: 0.1
    mode: box
    #write_lambda: |-
    #  return x * 10;

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "Set Outside Temperature Timeout"
    id: outside_temp_timeout
    address: 0x81CA
    value_type: U_WORD
    entity_category: config
    unit_of_measurement: "h"
    icon: mdi:timer-sand
    min_value: 1
    max_value: 255
    step: 1
    mode: box

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "Set Endpoint Limitation Curve"
    id: end_setpoint_limit
    address: 0x81E0
    value_type: U_WORD
    entity_category: config
    unit_of_measurement: "°C"
    icon: mdi:chart-bell-curve-cumulative
    min_value: 10
    max_value: 90
    step: 1
    mode: slider

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "Set Temperature for Missing Sensor"
    id: missing_sensor_temp
    address: 0x8263
    value_type: S_WORD
    entity_category: config
    unit_of_measurement: "°C"
    icon: mdi:thermometer-off
    min_value: -20
    max_value: 30
    step: 1
    mode: slider

#=======================================================================
# SENSOR - Read-only values from the heatpump
#=======================================================================
sensor:
  # --- Core Status & Temps ---
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: status
    name: "Status WP"
    address: 0x539E
    register_type: holding
    value_type: U_WORD
    
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    id: actual_error
    name: "Actual Error Code"
    address: 0x0032
    register_type: holding
    value_type: U_WORD
    
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "Outside Temperature"
    address: 0x35F7
    register_type: holding
    unit_of_measurement: "°C"
    device_class: temperature
    state_class: measurement
    value_type: S_WORD
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "DHW Temperature"
    address: 0x3561
    register_type: holding
    unit_of_measurement: "°C"
    device_class: temperature
    state_class: measurement
    value_type: U_WORD
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  # --- Sensors for Writable Values (to see current state) ---
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "Current DHW Setpoint"
    address: 0x817A
    register_type: holding
    unit_of_measurement: "°C"
    icon: mdi:water-boiler
    value_type: U_WORD

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "Current DHW Eco Setpoint"
    address: 0x8264
    register_type: holding
    unit_of_measurement: "°C"
    icon: mdi:leaf
    value_type: U_WORD
    
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "Current DHW Hysteresis"
    address: 0x817B
    register_type: holding
    unit_of_measurement: "K"
    icon: mdi:arrow-expand-vertical
    value_type: U_WORD

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "Current Central Heating Hysteresis"
    address: 0x1275
    register_type: holding
    unit_of_measurement: "K"
    icon: mdi:arrow-expand-vertical
    value_type: U_WORD
    accuracy_decimals: 1
    filters:
      - multiply: 0.1
      
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "Current Heating Curve"
    address: 0x825B
    register_type: holding
    icon: mdi:chart-line
    value_type: U_WORD
    accuracy_decimals: 1
    filters:
      - multiply: 0.1
      
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "Current Heating Curve Offset"
    address: 0x825C
    register_type: holding
    unit_of_measurement: "K"
    icon: mdi:arrow-up-down
    value_type: S_WORD
    accuracy_decimals: 1
    filters:
      - multiply: 0.1
      
  # --- Monitoring CSV Sensors ---
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "Source Temp Out (Tvu)"
    address: 0x42E6
    register_type: holding
    unit_of_measurement: "°C"
    device_class: temperature
    state_class: measurement
    value_type: S_WORD
    accuracy_decimals: 1
    filters:
      - multiply: 0.1
      
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "Source Temp In (Tvi)"
    address: 0x3AF8
    register_type: holding
    unit_of_measurement: "°C"
    device_class: temperature
    state_class: measurement
    value_type: S_WORD
    accuracy_decimals: 1
    filters:
      - multiply: 0.1
      
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "CV Temp In (Tci)"
    address: 0x17DA
    register_type: holding
    unit_of_measurement: "°C"
    device_class: temperature
    state_class: measurement
    value_type: S_WORD
    accuracy_decimals: 1
    filters:
      - multiply: 0.1
      
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "CV Condenser Temp Out (Tcu)"
    address: 0x178F
    register_type: holding
    unit_of_measurement: "°C"
    device_class: temperature
    state_class: measurement
    value_type: S_WORD
    accuracy_decimals: 1
    filters:
      - multiply: 0.1
      
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "CV Temp Out (Tau)"
    address: 0x3F6B
    register_type: holding
    unit_of_measurement: "°C"
    device_class: temperature
    state_class: measurement
    value_type: S_WORD
    accuracy_decimals: 1
    filters:
      - multiply: 0.1
      
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "Solar Collector Temperature"
    address: 0x500B
    register_type: holding
    unit_of_measurement: "°C"
    device_class: temperature
    state_class: measurement
    value_type: S_WORD
    accuracy_decimals: 1
    filters:
      - multiply: 0.1
      
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "Source Temp In (Tbr)"
    address: 0x5AAB
    register_type: holding
    unit_of_measurement: "°C"
    device_class: temperature
    state_class: measurement
    value_type: S_WORD
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "Source Flow"
    address: 0x36F4
    register_type: holding
    unit_of_measurement: "Hz"
    icon: mdi:pump
    state_class: measurement
    value_type: U_WORD
    accuracy_decimals: 0
  
  - platform: template
    name: "DHW Minimum Temperature"
    unit_of_measurement: "°C"
    device_class: temperature
    state_class: measurement
    lambda: "return id(tapwater_setpoint_ha).state - id(tapwater_hysterese_ha).state;"

  # --- kWh Energy Counters ---
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "kWh Standby"
    address: 0x5334
    register_type: holding
    unit_of_measurement: "kWh"
    device_class: energy
    state_class: total_increasing
    value_type: U_WORD
    #lambda: "return (x >> 8) & 0xFF;"

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "kWh Passive DHW"
    address: 0x5334
    register_type: holding
    unit_of_measurement: "kWh"
    device_class: energy
    state_class: total_increasing
    value_type: U_WORD
    #lambda: "return x & 0xFF;"

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "kWh Active DHW"
    address: 0x533B
    register_type: holding
    unit_of_measurement: "kWh"
    device_class: energy
    state_class: total_increasing
    value_type: U_WORD
    #lambda: "return (x >> 8) & 0xFF;"
    
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "kWh EE DHW"
    address: 0x533B
    register_type: holding
    unit_of_measurement: "kWh"
    device_class: energy
    state_class: total_increasing
    value_type: U_WORD
    #lambda: "return x & 0xFF;"
    
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "kWh Passive Heating"
    address: 0x5352
    register_type: holding
    unit_of_measurement: "kWh"
    device_class: energy
    state_class: total_increasing
    value_type: U_WORD
    #lambda: "return (x >> 8) & 0xFF;"

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "kWh Active Heating"
    address: 0x5352
    register_type: holding
    unit_of_measurement: "kWh"
    device_class: energy
    state_class: total_increasing
    value_type: U_WORD
    #lambda: "return x & 0xFF;"
    
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "kWh EE Heating"
    address: 0x535D
    register_type: holding
    unit_of_measurement: "kWh"
    device_class: energy
    state_class: total_increasing
    value_type: U_WORD
    #lambda: "return (x >> 8) & 0xFF;"
    
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "kWh Passive Cooling"
    address: 0x535D
    register_type: holding
    unit_of_measurement: "kWh"
    device_class: energy
    state_class: total_increasing
    value_type: U_WORD
    #lambda: "return x & 0xFF;"
    
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "kWh Active Cooling"
    address: 0x5361
    register_type: holding
    unit_of_measurement: "kWh"
    device_class: energy
    state_class: total_increasing
    value_type: U_WORD
    #lambda: "return (x >> 8) & 0xFF;"
    
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "kWh Regeneration"
    address: 0x5361
    register_type: holding
    unit_of_measurement: "kWh"
    device_class: energy
    state_class: total_increasing
    value_type: U_WORD
    #lambda: "return x & 0xFF;"
    
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "kWh Emergency DHW"
    address: 0x536E
    register_type: holding
    unit_of_measurement: "kWh"
    device_class: energy
    state_class: total_increasing
    value_type: U_WORD
    #lambda: "return (x >> 8) & 0xFF;"
    
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "kWh Emergency Heating"
    address: 0x536E
    register_type: holding
    unit_of_measurement: "kWh"
    device_class: energy
    state_class: total_increasing
    value_type: U_WORD
    #lambda: "return x & 0xFF;"

  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "Zonnepanelen kWh"
    address: 0x6557
    register_type: holding
    unit_of_measurement: "kWh"
    device_class: energy
    state_class: total_increasing
    value_type: U_WORD
    
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "Totale Woning kWh"
    address: 0x6558
    register_type: holding
    unit_of_measurement: "kWh"
    device_class: energy
    state_class: total_increasing
    value_type: U_WORD

  # --- Hour Counters ---
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "Passive DHW Hours"
    address: 0x53A2
    register_type: holding
    unit_of_measurement: "h"
    icon: mdi:clock-time-eight
    state_class: total_increasing
    value_type: U_WORD
    
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "Active DHW Hours"
    address: 0x53C4
    register_type: holding
    unit_of_measurement: "h"
    icon: mdi:clock-time-eight
    state_class: total_increasing
    value_type: U_WORD
    
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "EE DHW Hours"
    address: 0x53F7
    register_type: holding
    unit_of_measurement: "h"
    icon: mdi:clock-time-eight
    state_class: total_increasing
    value_type: U_WORD
    
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "Passive Heating Hours"
    address: 0x5501
    register_type: holding
    unit_of_measurement: "h"
    icon: mdi:clock-time-eight
    state_class: total_increasing
    value_type: U_WORD
    
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "Active Heating Hours"
    address: 0x5532
    register_type: holding
    unit_of_measurement: "h"
    icon: mdi:clock-time-eight
    state_class: total_increasing
    value_type: U_WORD
    
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "EE Heating Hours"
    address: 0x5554
    register_type: holding
    unit_of_measurement: "h"
    icon: mdi:clock-time-eight
    state_class: total_increasing
    value_type: U_WORD
    
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "Passive Cooling Hours"
    address: 0x5567
    register_type: holding
    unit_of_measurement: "h"
    icon: mdi:clock-time-eight
    state_class: total_increasing
    value_type: U_WORD
    
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "Active Cooling Hours"
    address: 0x5597
    register_type: holding
    unit_of_measurement: "h"
    icon: mdi:clock-time-eight
    state_class: total_increasing
    value_type: U_WORD
    
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "Regeneration Hours"
    address: 0x55A4
    register_type: holding
    unit_of_measurement: "h"
    icon: mdi:clock-time-eight
    state_class: total_increasing
    value_type: U_WORD
    
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "Emergency DHW Hours"
    address: 0x55C2
    register_type: holding
    unit_of_measurement: "h"
    icon: mdi:clock-time-eight
    state_class: total_increasing
    value_type: U_WORD
    
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "Emergency Heating Hours"
    address: 0x55F1
    register_type: holding
    unit_of_measurement: "h"
    icon: mdi:clock-time-eight
    state_class: total_increasing
    value_type: U_WORD

  # --- Start Counters ---
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "Passive DHW Starts"
    address: 0x53AD
    register_type: holding
    icon: mdi:play-count
    state_class: total_increasing
    value_type: U_WORD
    
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "Active DHW Starts"
    address: 0x53CB
    register_type: holding
    icon: mdi:play-count
    state_class: total_increasing
    value_type: U_WORD
    
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "EE DHW Starts"
    address: 0x53F8
    register_type: holding
    icon: mdi:play-count
    state_class: total_increasing
    value_type: U_WORD
    
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "Passive Heating Starts"
    address: 0x550E
    register_type: holding
    icon: mdi:play-count
    state_class: total_increasing
    value_type: U_WORD
    
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "Active Heating Starts"
    address: 0x553D
    register_type: holding
    icon: mdi:play-count
    state_class: total_increasing
    value_type: U_WORD
    
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "EE Heating Starts"
    address: 0x555B
    register_type: holding
    icon: mdi:play-count
    state_class: total_increasing
    value_type: U_WORD
    
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "Passive Cooling Starts"
    address: 0x5568
    register_type: holding
    icon: mdi:play-count
    state_class: total_increasing
    value_type: U_WORD
    
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "Active Cooling Starts"
    address: 0x5598
    register_type: holding
    icon: mdi:play-count
    state_class: total_increasing
    value_type: U_WORD
    
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "Regeneration Starts"
    address: 0x55AB
    register_type: holding
    icon: mdi:play-count
    state_class: total_increasing
    value_type: U_WORD
    
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "Emergency DHW Starts"
    address: 0x55CD
    register_type: holding
    icon: mdi:play-count
    state_class: total_increasing
    value_type: U_WORD
    
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "Emergency Heating Starts"
    address: 0x55FE
    register_type: holding
    icon: mdi:play-count
    state_class: total_increasing
    value_type: U_WORD

#=======================================================================
# TEXT SENSOR - For translating states into human-readable text
#=======================================================================
text_sensor:
  - platform: modbus_controller
    modbus_controller_id: modbus_device
    name: "Status Text"
    id: status_string
    address: 0x539E
    register_type: holding        
    lambda: |-
      if (id(status).has_state()) {
        // CORRECTED: Cast the float state to an integer for the switch
        switch ((int)id(status).state) {
          case 1: return {"Stand-By"};
          case 2: return {"Passive DHW"};
          case 4: return {"Active DHW Pre-Run"};
          case 8: return {"Passive Heating"};
          case 16: return {"Active Heating Pre-Run"};
          case 32: return {"Passive Cooling"};
          case 64: return {"Regenerating"};
          case 256: return {"Emergency DHW"};
          case 512: return {"Emergency Heating"};
          case 1028: return {"Active DHW"};
          case 1040: return {"Active Heating"};
          default: return {"Unknown"};
        }
      }
      return {"Unknown"};


Ook heb ik de "screens" doorgelopen op parameters en deze gegroepeerd in een markdown gezet voor mijn eigen documentatie;

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
35F7    Outside temperature (manual)

30CE    Lage druk schakelaar
30CE    Hoge druk schakelaar
F12B    MaxT CPR
F830    MaxT EE
F12A    EC1
FA70    EC2
F37C    Afgiftesysteem(min:sec)
F37A    Pompen(min:sec)
F364    Warmtepomp(sec)
F37E    CPR AAN-AAN (min:sec)
F380    CPR UIT_AAN (min:sec)
F382    CPR AAN-UIT(min:sec)

# Temperature sensors
500B    TZC ZONNECOLLECTOR
35F7    TBU BUITEN Actueel
3561    TTW TAPWATER
5AAB    TBR Bron WP IN
3AF8    TVI Bron WP IN
178F    TCU CV WP UIT
178F    Tcu (CV COND UIT)

3F6B    TAU CV WP UIT na EE
3F6B    Tau (CV WP UIT)

42E6    TVU Bron WP UIT
17DA    TCI CV WP IN
4D25    TBU BUITEN Gemiddeld
42E6    Tvu (BRON WP UIT)
3AF8    Tvi (BRON WP IN)
178F    Tcu (CV COND UIT)
3F6B    Tau (CV WP UIT)
500B    Tzc (ZONNECOLLECTOR)
5AAB    Tbr (BRON WP IN)
3561    Ttw (TAPWATER)

539E    Status warmtepomp
356E    Actuele regelwaarde

F3F6    Solarpomp [%]
1DB6    Mengpositie klep (%)
F831    Condensorpomp [%]
3301    Verdamperpomp [%]

36F4    Debiet verdamper (Hz)
36F4    FVD (Flow bron in Hz)

FA78    Positie 2-wegklep (s)
F103    Real flow ON-OFF
F104    Flowcheck

# Software versions
0098    FW custom versie
0504    FW basis versie
00A4    FW instellingen versie
14E5    FW CRC-code

# Energy usage
5334    Standby_kWh
5334    Passief_tap_kWh
533B    Actief_tap_kWh
533B    EE_tap_kWh
5352    Passief_CV_kWh
5352    Actief_CV_kWh
535D    EE_CV_kWh
535D    Passief_koel_kWh
5361    Actief_koel_kWh
5361    Regeneratie_kWh
536E    Noodbedrijf_tap_kWh
536E    Noodbedrijf_CV_kWh
6557    Zonnepanelen (kWh 1)
6558    Totale woning (kWh2)

# Hours of usage
53A2    Passief_tap_uren
53C4    Actief_tap_uren
53F7    EE_tap_uren
5501    Passief_CV_uren
5532    Actief_CV_uren
5554    EE_CV_uren
5567    Passief_koel_uren
5597    Actief_koel_uren
55A4    Regeneratie_uren
55C2    Noodbedrijf_tap_uren
55F1    Noodbedrijf_CV_uren

# Number of starts
53AD    Passief_tap_starts
53CB    Actief_tap_starts
53F8    EE_tap_starts
550E    Passief_CV_starts
553D    Actief_CV_starts
555B    EE_CV_starts
5568    Passief_koel_starts
5598    Actief_koel_starts
55AB    Regeneratie_starts
55CD    Noodbedrijf_tap_starts
55FE    Noodbedrijf_CV_starts


To be continued. Op naar energie-aanbod-gestuurd verwarmen!

Gregor van Egdom Krekr


  • Kr3Kr
  • Registratie: Maart 2002
  • Laatst online: 23:11

Kr3Kr

Melpomene

Nog een screenshot van hoe het er nu in Home Assistant uit ziet voor de liefhebbers
Afbeeldingslocatie: https://tweakers.net/i/56LFIgm0Ei7iZntchoKN3AVgwdA=/800x/filters:strip_exif()/f/image/ESnwjHf2vSQUIgBURBxpyBXC.png?f=fotoalbum_large

Gregor van Egdom Krekr

Pagina: 1 2 Laatste