Dat zou inderdaad mooi zijn! Ik volg nu al een tijdje de % waardes voor IaqRh en IaqCo2 maar heb sterk de indruk dat er niet perse een 1:1 relatie tussen deze getallen is. Ik bedoel dan niet alleen dat het niet linear is, maar ik vraag me ook af of bijvoorbeeld 86% voor IaqRh altijd overeenkomt met hetzelfde RH percentage. Ik hoop het natuurlijk welicecreamfarmer schreef op zondag 2 februari 2025 @ 17:06:
[...]
Kun je niet een tabel maken waarbij je de PPM waarde of % vergelijkt met de waarde die consumenten kunnen zien? Dan zou je het zo kunnen vertalen.
Ik zie dat er recent nieuwe documentatie is van een connectivity board 2.0 voor de duco energy comfort. Ik kan deze echter online nog nergens te koop vinden, iemand hier ervaring mee? Het lijkt wel echt een ander bordje te zijn...
Kan het aan mij liggen maar ik zie helemaal niks van Duco na installatie. Ik zou tenminste in mijn overview iets van terug moeten zien maar ik zie niks.Sikerdebaard schreef op zaterdag 16 november 2024 @ 11:02:
[...]
Ik heb deze library gemaakt.
Hier is een preview van een HACS integratie voor Home Assistant: https://github.com/Sikerdebaard/hacs-ducobox-connector
Let op! Dit is een preview en op dit moment read-only. Daarnaast is de plug-in voornamelijk gemaakt voor de Ducobox Energy Comfort 325 dus het kan zijn dat je ineens wat niet-bestaande sensors in je home assistant krijgt. Die worden er nog niet uit gefilterd.
Installeren gaat via de gebruikelijke HACS manier:
[...]
[...]
[...]
[...]
Nieuwe functionaliteit en bugs worden toegevoegd wanneer ik tijd heb. Garantie tot aan de deur etc. etc.
Ik ben me ook aan het oriënteren op de aanschaf van een Duco Energy Comfort, maar neig eerder naar de versie met een max debiet van 225, de Duco Energy Comfort D225. Weet iemand of de add-on van SikerdeBaard ook daarop werkt? En anders, valt het debiet voor de D325 met de add-on in HA ook in te stellen op de afwezigheidsstand (met een debiet van 5% van het max)?
Iets anders wat ik me afvroeg bij het doorlezen van dit topic; ik ga ervan uit dat dit hele topic draait om het uitlezen van de co2 en luchtvochtigheidssensors van Duco zelf, correct? Misschien een stomme vraag ... maar zou elke DucoBox niet gewoon aangestuurd kunnen worden met HA automations die vertrouwen op externe (zigbee) CO2 en luchtvochtigheidssensors?
Iets anders wat ik me afvroeg bij het doorlezen van dit topic; ik ga ervan uit dat dit hele topic draait om het uitlezen van de co2 en luchtvochtigheidssensors van Duco zelf, correct? Misschien een stomme vraag ... maar zou elke DucoBox niet gewoon aangestuurd kunnen worden met HA automations die vertrouwen op externe (zigbee) CO2 en luchtvochtigheidssensors?
[ Voor 54% gewijzigd door FJA op 08-03-2025 11:13 ]
Ja, Duco en vele andere fabrikanten van apparatuur van huis installaties leveren het liefst via de installateur en zijn niet enthousiast over consumenten met vragen over optimalisatie van de installatie. Is in hun ogen alleen maar lastig en kost veel tijd. Ik heb onlangs gelezen, maar kan het niet terugvinden, dat de EU dit jaar nog met wetgeving komt die de fabrikant verplicht de data die men zelf uit de intstallatie haalt ook ter beschikking te stellen aan de consument. Hopelijk geeft dat een boost aan homeautomatisering en optimalisatie van installaties. Dat gezegd hebbende:FJA schreef op zaterdag 8 maart 2025 @ 10:52:
Ik ben me ook aan het oriënteren op de aanschaf van een Duco Energy Comfort (D325 of D225), maar doorslaggevend is of en hoe ik deze kan aansturen in Home Assistant. Ik houd dit topic dus nauwlettend in de gaten, maar word er helaas niet heel hoopvol van. Ook uit de websites en handleidingen van Duco krijg ik het idee dat ze de consument liever dom houden dan dat ze echt alle handvatten geven om de box op je eigen wensen aan te sturen ... maar goed, daar hebben we tweakers voor!
Ik ga er nu even van uit dat dit hele topic draait om het uitlezen van de co2 en luchtvochtigheidssensors van Duco zelf, correct? Misschien een stomme vraag ... maar zou elke DucoBox niet gewoon aangestuurd kunnen worden met HA automations die vertrouwen op externe (zigbee) CO2 en luchtvochtigheidssensors? En nog een aanvullende vraag: kan de add-on van SikerdeBaard het debiet alleen instellen op stand 1, 2 en 3 of kan ook de afwezigheidsstand worden geactiveerd, of misschien zelfs het debiet op precies het gewenste %? Ik ben namelijk alleenstaand in een kleine woning, en ben ook nog eens hele dagen weg van huis, dus ik wil ook de mogelijkheid hebben om het debiet op het absolute minimum in te stellen.
Ik heb zelf een Duco Energy Comfor D325 met twee zones met kleppen, CO2 gestuurd. Daarnaast heb ik de D325 met de oude (!) connection print https://www.123installati...x-connect-print-0000-4251 bekabeld gekoppelt aan mijn netwerk en monitor en bestuur de D325 via REST commands met Homeassistant.
De data die je met rest binnen kan halen zijn oa: alle 4 in en uitgaande temperaturen de echte CO2 waarden, RH en temp waarden van de Duco bedieningssensoren , de relatieve vochtigheid, de in en uitgaande druk, de bypass en de rest tijd van de filters. Best veel dus.
Omdat de eigen Duco sturing van de relatieve vochtigheid RH geen rekening houd met de RH buiten heb ik in homeassistant een automatisering die het setpoint van de RH aanpast afhankelijk van de RH buiten, dit vermijdt onnodig optoeren van de WTW als het mistig is of regend.
Daarnaast stuur ik de WTW hoog als de lamp van het toilet aangaat en via een paar buttons in homassistant kan ik de WTW ook bedienen.
En is er niemand thuis: gaat de WTW op het laagste niveau, is eigenlijk niet nodig omdat de CO2 regeling dat al doet.
En ja, je kan de Duco met niet Duco sensoren via Homeassistant RestCommands aansturen. Ik twijfel wel of je de WTW over een bereik van 0 tot 100% traploos kan aansturen, ik zie in mijn setup alleen drie instellingen voor low, medium en max speed. De Duco regelt zijn ventilatoren wel traploos via zijn eigen CO2 en RH opnemers, en dat doet de D325 eigenlijk heel goed.
Je hebt voor de communicatie met HA wel de oude connection print nodig, ik heb hem van marktplaats, nieuw is deze niet meer te krijgen. De nieuwe print, de connectivity board, is nutteloos voor homeautomatisering.
In het begin was het even uitzoeken maar over het algemeen ben ik tevreden over de D325: het houdt de CO2 waardes in de twee zones op een goed niveau (instelbaar) en na het douchen is de vochtigheid in de badkamer snel weer op een goed niveau.
2/1-kap 1988 | Extra vloer en muurisolatie | HR++ glas | WTW: Duco Energie Comfort 325 2-zones | WP: Adlar II 6kW | CV wonen: Jaga Strada Hybrid DBH, slapen: traditionele radiatoren | Solar: Enphase oost/west/zuid 4.2kVA | Homeassistant
Even een toevoeging.
Ik heb de HA addon van SikerdeBaard getest maar weer gedeinstalleerd omdat deze addon geen commando's kan geven naar de Duco, vermoedelijk een beperking van de nieuwe connectivity board waarmee de addon werkt. De addon geeft wel prima data door.
Ik heb de HA addon van SikerdeBaard getest maar weer gedeinstalleerd omdat deze addon geen commando's kan geven naar de Duco, vermoedelijk een beperking van de nieuwe connectivity board waarmee de addon werkt. De addon geeft wel prima data door.
[ Voor 9% gewijzigd door marnie op 08-03-2025 12:19 ]
2/1-kap 1988 | Extra vloer en muurisolatie | HR++ glas | WTW: Duco Energie Comfort 325 2-zones | WP: Adlar II 6kW | CV wonen: Jaga Strada Hybrid DBH, slapen: traditionele radiatoren | Solar: Enphase oost/west/zuid 4.2kVA | Homeassistant
Hey Marnie, bedankt voor je antwoord! Helaas dat die oude connect print nergens meer verkrijgbaar is, en wachten en hopen dat er een op marktplaats verschijnt is ook niet echt een optie waar ik erg warm voor loop ...
Wat dat betreft is er misschien wel een heel interessante ontwikkeling: kennelijk is er eergisteren een informatieblad voor de nieuwe connectivity board 2.0 vrijgegeven, waarin je ziet dat ook "afwezig" ingesteld kan worden. Dat is hoopgevend (voor wie daar behoefte aan heeft, net als ik
)! Te vinden onder een van de uitklap-menu'tjes op deze pagina: https://www.duco.eu/nl/pr...ehoren/connectivity-board
Misschien dat iemand met meer verstand van dit alles daaruit misschien ook kan afleiden of de nieuwe 2.0 misschien beter te integreren zal zijn in HA. Stom genoeg kan ik geen oude versie van een soortgelijk "informatieblad modbus TCP" vinden voor de oude connectivity board, zodat ik ook niet kan vergelijken wat er veranderd is aan deze versie 2.0.
Zeg je dat de HA add-on van SikerdeBaard de wtw-unit ook niet kan aansturen, ook niet met de nieuwe connectivity board? Wel toch? In dat geval zou de add-on van Sikerdebaard in combinatie met externe sensors een prima oplossing zijn toch? Dan rest mij alleen nog de vraag of het debiet traploos is in te stellen, OF dat de afwezigheidsstand valt in te schakelen via die add-on.Je hebt voor de communicatie met HA wel de oude connection print nodig, ik heb hem van marktplaats, nieuw is deze niet meer te krijgen. De nieuwe print, de connectivity board, is nutteloos voor homeautomatisering.
Wat dat betreft is er misschien wel een heel interessante ontwikkeling: kennelijk is er eergisteren een informatieblad voor de nieuwe connectivity board 2.0 vrijgegeven, waarin je ziet dat ook "afwezig" ingesteld kan worden. Dat is hoopgevend (voor wie daar behoefte aan heeft, net als ik
Misschien dat iemand met meer verstand van dit alles daaruit misschien ook kan afleiden of de nieuwe 2.0 misschien beter te integreren zal zijn in HA. Stom genoeg kan ik geen oude versie van een soortgelijk "informatieblad modbus TCP" vinden voor de oude connectivity board, zodat ik ook niet kan vergelijken wat er veranderd is aan deze versie 2.0.
[ Voor 9% gewijzigd door FJA op 08-03-2025 18:27 ]
Ik heb ca 1 maand geleden de Sikerdebaard add-on getest en geen mogelijkheid gezien om de Duco aan te sturen, misschien even navragen bij Sikerdebaart. Daarom blijf ik het oude board gebruiken met HA en REST.FJA schreef op zaterdag 8 maart 2025 @ 18:25:
Hey Marnie, bedankt voor je antwoord! Helaas dat die oude connect print nergens meer verkrijgbaar is, en wachten en hopen dat er een op marktplaats verschijnt is ook niet echt een optie waar ik erg warm voor loop ...
[...]
Zeg je dat de HA add-on van SikerdeBaard de wtw-unit ook niet kan aansturen, ook niet met de nieuwe connectivity board? Wel toch? In dat geval zou de add-on van Sikerdebaard in combinatie met externe sensors een prima oplossing zijn toch? Dan rest mij alleen nog de vraag of het debiet traploos is in te stellen, OF dat de afwezigheidsstand valt in te schakelen via die add-on.
Wat dat betreft is er misschien wel een heel interessante ontwikkeling: kennelijk is er eergisteren een informatieblad voor de nieuwe connectivity board 2.0 vrijgegeven, waarin je ziet dat ook "afwezig" ingesteld kan worden. Dat is hoopgevend (voor wie daar behoefte aan heeft, net als ik)! Te vinden onder een van de uitklap-menu'tjes op deze pagina: https://www.duco.eu/nl/pr...ehoren/connectivity-board
Misschien dat iemand met meer verstand van dit alles daaruit misschien ook kan afleiden of de nieuwe 2.0 misschien beter te integreren zal zijn in HA. Stom genoeg kan ik geen oude versie van een soortgelijk "informatieblad modbus TCP" vinden voor de oude connectivity board, zodat ik ook niet kan vergelijken wat er veranderd is aan deze versie 2.0.
Wat betreft modbus specs voor de oude print, misschien heb je hier iets aan:
https://www.duco.eu/Wes/C...l)_638328128557957132.pdf
te vinden op https://www.duco.eu/be_nl/gearchiveerde-systemen
2/1-kap 1988 | Extra vloer en muurisolatie | HR++ glas | WTW: Duco Energie Comfort 325 2-zones | WP: Adlar II 6kW | CV wonen: Jaga Strada Hybrid DBH, slapen: traditionele radiatoren | Solar: Enphase oost/west/zuid 4.2kVA | Homeassistant
Ik ben dit weekend ook even bezig geweest met mijn Duco Silent Connect met Communication Print (met de javascript code van de webserver en Google Gemini 2.5 Pro):
| Duco | ||
![]() | ![]() | ![]() |
![]() | ![]() | ![]() |
![]() | ||
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
| # configuration.yaml - Versie met Legacy Template Fan
default_config:
frontend:
themes: !include_dir_merge_named themes
automation: !include automations.yaml
script: !include scripts.yaml # Zorg dat de shortcut-scripts hierin staan!
scene: !include scenes.yaml
# --- DucoBox Basis REST Commando's ---
rest_command:
set_ducobox_mode:
url: "http://192.168.1.97/nodesetoperstate?node=1&value={{ state }}&t={{ now().timestamp() | int }}"
method: GET
verify_ssl: false
timeout: 10
set_ducobox_overrule:
url: "http://192.168.1.97/nodesetoverrule?node=1&value={{ value }}&t={{ now().timestamp() | int }}"
method: GET
verify_ssl: false
timeout: 10
set_ducobox_node_config:
url: "http://192.168.1.97/nodeconfigset?node={{ node }}¶={{ parameter }}&value={{ value }}&t={{ now().timestamp() | int }}"
method: GET
verify_ssl: false
timeout: 10
set_ducobox_box_config:
url: "http://192.168.1.97/{{ list | default('box') }}configset?mod={{ module }}¶={{ parameter }}&value={{ value }}&t={{ now().timestamp() | int }}"
method: GET
verify_ssl: false
timeout: 10
# --- RESTful Sensor Definities ---
rest:
# ... (Alle REST sensor definities blijven hier ongewijzigd) ...
# --- Node Info (Status, Vraag, Sensoren) ---
- resource: "http://192.168.1.97/nodeinfoget?node=1"
scan_interval: 15
verify_ssl: false
sensor:
- name: "DucoBox State"
unique_id: ducobox_node1_state
value_template: "{{ value_json.state }}"
icon: mdi:state-machine
json_attributes:
[
node,
devtype,
location,
state,
cntdwn,
endtime,
mode,
trgt,
actl,
ovrl,
snsr,
cerr,
swversion,
serialnb,
error,
show,
link,
temp,
co2,
rh,
]
- name: "DucoBox Mode"
unique_id: ducobox_node1_mode
value_template: "{{ value_json.mode }}"
icon: mdi:cog-outline
- name: "DucoBox Target Demand"
unique_id: ducobox_node1_target_demand
value_template: "{{ value_json.trgt }}"
unit_of_measurement: "%"
icon: mdi:target
state_class: measurement
- name: "DucoBox Actual Level"
unique_id: ducobox_node1_actual_level
value_template: "{{ value_json.actl }}"
unit_of_measurement: "%"
icon: mdi:speedometer
state_class: measurement
- name: "DucoBox Temperature"
unique_id: ducobox_node1_temp
value_template: "{{ value_json.temp }}"
device_class: temperature
state_class: measurement
unit_of_measurement: "°C"
- name: "DucoBox Humidity"
unique_id: ducobox_node1_rh
value_template: "{{ value_json.rh }}"
device_class: humidity
state_class: measurement
unit_of_measurement: "%"
- name: "DucoBox CO2"
unique_id: ducobox_node1_co2
value_template: "{{ value_json.co2 }}"
device_class: carbon_dioxide
state_class: measurement
unit_of_measurement: "ppm"
- resource: "http://192.168.1.97/nodeinfoget?node=137"
scan_interval: 60
verify_ssl: false
sensor:
- name: "DucoBox Kanaal CO2 Vraag"
unique_id: ducobox_kanaal_co2_vraag_137
value_template: "{{ value_json.snsr }}"
unit_of_measurement: "%"
icon: mdi:gauge-low
state_class: measurement
- resource: "http://192.168.1.97/nodeinfoget?node=138"
scan_interval: 60
verify_ssl: false
sensor:
- name: "DucoBox Kanaal RH Vraag"
unique_id: ducobox_kanaal_rh_vraag_138
value_template: "{{ value_json.snsr }}"
unit_of_measurement: "%"
icon: mdi:water-percent-alert
state_class: measurement
- resource: "http://192.168.1.97/boxinfoget"
scan_interval: 120
verify_ssl: false
sensor:
- name: "DucoBox Power Now"
unique_id: ducobox_boxinfo_power_now
value_template: "{{ value_json.Performance.PowerNow }}"
device_class: power
state_class: measurement
unit_of_measurement: "W"
- name: "DucoBox Power Average"
unique_id: ducobox_boxinfo_power_avg
value_template: "{{ value_json.Performance.PowerAvg }}"
device_class: power
state_class: measurement
unit_of_measurement: "W"
- name: "DucoBox Total Pressure"
unique_id: ducobox_boxinfo_total_pressure
value_template: "{{ value_json.Performance.PressureTotal }}"
unit_of_measurement: "Pa"
state_class: measurement
icon: mdi:gauge
- name: "DucoBox Calibration State"
unique_id: ducobox_boxinfo_calib_state
value_template: "{{ value_json.Calibration.CalibState }}"
icon: mdi:tune-variant
- name: "DucoBox Installer State"
unique_id: ducobox_boxinfo_installer_state
value_template: "{{ value_json.General.InstallerState }}"
icon: mdi:account-wrench
- resource: "http://192.168.1.97/board_info"
scan_interval: 3600
verify_ssl: false
sensor:
- name: "DucoBox Board Uptime Seconds"
unique_id: ducobox_board_uptime_seconds
value_template: "{{ value_json.uptime }}"
unit_of_measurement: "s"
icon: mdi:timer-outline
state_class: total_increasing
- name: "DucoBox Board SW Version"
unique_id: ducobox_board_sw_version
value_template: "{{ value_json.swversion }}"
icon: mdi:chip
- name: "DucoBox Board API Version"
unique_id: ducobox_board_api_version
value_template: "{{ value_json.apiversion }}"
icon: mdi:api
- name: "DucoBox Board MAC Address"
unique_id: ducobox_board_mac_address
value_template: "{{ value_json.mac }}"
icon: mdi:network-outline
- resource: "http://192.168.1.97/nodeconfigget?node=1"
scan_interval: 3600
verify_ssl: false
timeout: 10
sensor:
- name: "DucoBox Config Node 1 AutoMin"
unique_id: ducobox_config_node1_automin
value_template: "{{ value_json.AutoMin.Val }}"
unit_of_measurement: "%"
icon: mdi:fan-minus
- name: "DucoBox Config Node 1 AutoMax"
unique_id: ducobox_config_node1_automax
value_template: "{{ value_json.AutoMax.Val }}"
unit_of_measurement: "%"
icon: mdi:fan-plus
- name: "DucoBox Config Node 1 Capacity"
unique_id: ducobox_config_node1_capacity
value_template: "{{ value_json.Capacity.Val }}"
unit_of_measurement: "m³/h"
icon: mdi:wind-power-outline
- name: "DucoBox Config Node 1 Manual1 Level"
unique_id: ducobox_config_node1_manual1
value_template: "{{ value_json.Manual1.Val }}"
unit_of_measurement: "%"
icon: mdi:numeric-1-box-outline
- name: "DucoBox Config Node 1 Manual2 Level"
unique_id: ducobox_config_node1_manual2
value_template: "{{ value_json.Manual2.Val }}"
unit_of_measurement: "%"
icon: mdi:numeric-2-box-outline
- name: "DucoBox Config Node 1 Manual3 Level"
unique_id: ducobox_config_node1_manual3
value_template: "{{ value_json.Manual3.Val }}"
unit_of_measurement: "%"
icon: mdi:numeric-3-box-outline
- name: "DucoBox Config Node 1 ManualTimeout"
unique_id: ducobox_config_node1_manualtimeout
value_template: "{{ value_json.ManualTimeout.Val }}"
unit_of_measurement: "min"
icon: mdi:timer-sand
- name: "DucoBox Config Node 1 Location"
unique_id: ducobox_config_node1_location
value_template: "{{ value_json.Location }}"
icon: mdi:map-marker
- resource: "http://192.168.1.97/nodeconfigget?node=137"
scan_interval: 3600
verify_ssl: false
timeout: 10
sensor:
- name: "DucoBox Config Node 137 CO2Setpoint"
unique_id: ducobox_config_node137_co2setpoint
value_template: "{{ value_json.CO2Setpoint.Val }}"
unit_of_measurement: "ppm"
device_class: carbon_dioxide
- name: "DucoBox Config Node 137 TempDependent"
unique_id: ducobox_config_node137_tempdependent
value_template: "{{ 'ON' if value_json.TempDependent.Val == 1 else 'OFF' }}"
icon: mdi:thermometer-auto
- name: "DucoBox Config Node 137 SensorVisuLevel"
unique_id: ducobox_config_node137_sensorvisulevel
value_template: "{{ value_json.SensorVisuLevel.Val }}"
unit_of_measurement: "%"
icon: mdi:lightbulb-on-outline
- resource: "http://192.168.1.97/nodeconfigget?node=138"
scan_interval: 3600
verify_ssl: false
timeout: 10
sensor:
- name: "DucoBox Config Node 138 RHSetpoint"
unique_id: ducobox_config_node138_rhsetpoint
value_template: "{{ value_json.RHSetpoint.Val }}"
unit_of_measurement: "%"
device_class: humidity
- name: "DucoBox Config Node 138 RHDelta"
unique_id: ducobox_config_node138_rhdelta
value_template: "{{ 'ON' if value_json.RHDelta.Val == 1 else 'OFF' }}"
icon: mdi:delta
- name: "DucoBox Config Node 138 SensorVisuLevel"
unique_id: ducobox_config_node138_sensorvisulevel
value_template: "{{ value_json.SensorVisuLevel.Val }}"
unit_of_measurement: "%"
icon: mdi:lightbulb-on-outline
- resource: "http://192.168.1.97/boxconfigget"
scan_interval: 3600
verify_ssl: false
timeout: 10
sensor:
# ... (Alle Box Config sensoren blijven hier ongewijzigd) ...
- name: "DucoBox Config TimeZone"
unique_id: ducobox_config_box_timezone
value_template: "{{ value_json.Time.TimeZone.Val }}"
icon: mdi:map-clock
- name: "DucoBox Config Auto DST"
unique_id: ducobox_config_box_autodst
value_template: "{{ 'ON' if value_json.Time.AutoDaylightSavingTime.Val == 1 else 'OFF' }}"
icon: mdi:clock-check-outline
- name: "DucoBox Config Max High Level"
unique_id: ducobox_config_box_maxhighlevel
value_template: "{{ value_json.Fan.MaxHighLevel.Val }}"
unit_of_measurement: "%"
icon: mdi:fan-speed-3
- name: "DucoBox Config Calib On Man2"
unique_id: ducobox_config_box_calibonman2
value_template: "{{ 'ON' if value_json.Fan.CalibOnMan2.Val == 1 else 'OFF' }}"
icon: mdi:tune-variant
- name: "DucoBox Config GroundBound"
unique_id: ducobox_config_box_groundbound
value_template: "{{ 'ON' if value_json.Fan.GroundBound.Val == 1 else 'OFF' }}"
icon: mdi:earth-box
- name: "DucoBox Config HeadCount"
unique_id: ducobox_config_box_headcount
value_template: "{{ value_json.Fan.HeadCount.Val }}"
unit_of_measurement: "personen"
icon: mdi:account-group
- name: "DucoBox Config PwmInverted"
unique_id: ducobox_config_box_pwminverted
value_template: "{{ 'ON' if value_json.Fan.PwmInverted.Val == 1 else 'OFF' }}"
icon: mdi:swap-horizontal-variant
- name: "DucoBox Config VentCool Active Mon"
unique_id: ducobox_config_box_ventcool_mon
value_template: "{{ 'ON' if value_json.VentCool.ActiveMonday.Val == 1 else 'OFF' }}"
icon: mdi:calendar-week
- name: "DucoBox Config VentCool Active Tue"
unique_id: ducobox_config_box_ventcool_tue
value_template: "{{ 'ON' if value_json.VentCool.ActiveTuesday.Val == 1 else 'OFF' }}"
icon: mdi:calendar-week
- name: "DucoBox Config VentCool Active Wed"
unique_id: ducobox_config_box_ventcool_wed
value_template: "{{ 'ON' if value_json.VentCool.ActiveWednesday.Val == 1 else 'OFF' }}"
icon: mdi:calendar-week
- name: "DucoBox Config VentCool Active Thu"
unique_id: ducobox_config_box_ventcool_thu
value_template: "{{ 'ON' if value_json.VentCool.ActiveThursday.Val == 1 else 'OFF' }}"
icon: mdi:calendar-week
- name: "DucoBox Config VentCool Active Fri"
unique_id: ducobox_config_box_ventcool_fri
value_template: "{{ 'ON' if value_json.VentCool.ActiveFriday.Val == 1 else 'OFF' }}"
icon: mdi:calendar-week
- name: "DucoBox Config VentCool Active Sat"
unique_id: ducobox_config_box_ventcool_sat
value_template: "{{ 'ON' if value_json.VentCool.ActiveSaturday.Val == 1 else 'OFF' }}"
icon: mdi:calendar-week
- name: "DucoBox Config VentCool Active Sun"
unique_id: ducobox_config_box_ventcool_sun
value_template: "{{ 'ON' if value_json.VentCool.ActiveSunday.Val == 1 else 'OFF' }}"
icon: mdi:calendar-week
- name: "DucoBox Config VentCool StartTime"
unique_id: ducobox_config_box_ventcool_starttime
value_template: "{{ '%02d:%02d' | format(value_json.VentCool.StartTime.Val // 60, value_json.VentCool.StartTime.Val % 60) }}"
icon: mdi:clock-start
- name: "DucoBox Config VentCool StopTime"
unique_id: ducobox_config_box_ventcool_stoptime
value_template: "{{ '%02d:%02d' | format(value_json.VentCool.StopTime.Val // 60, value_json.VentCool.StopTime.Val % 60) }}"
icon: mdi:clock-end
- name: "DucoBox Config NightBoost Active"
unique_id: ducobox_config_box_nightboost_active
value_template: "{{ 'ON' if value_json.NightBoost.Active.Val == 1 else 'OFF' }}"
icon: mdi:weather-night
- name: "DucoBox Config NightBoost StartTemp"
unique_id: ducobox_config_box_nightboost_starttemp
value_template: "{{ value_json.NightBoost.StartTemp.Val }}"
unit_of_measurement: "°C"
device_class: temperature
- name: "DucoBox Config NightBoost StartMonth"
unique_id: ducobox_config_box_nightboost_startmonth
value_template: "{{ value_json.NightBoost.StartMonth.Val }}"
icon: mdi:calendar-month
- name: "DucoBox Config NightBoost StopMonth"
unique_id: ducobox_config_box_nightboost_stopmonth
value_template: "{{ value_json.NightBoost.StopMonth.Val }}"
icon: mdi:calendar-month
- name: "DucoBox Config NightBoost StartTime"
unique_id: ducobox_config_box_nightboost_starttime
value_template: "{{ '%02d:%02d' | format(value_json.NightBoost.StartTime.Val // 60, value_json.NightBoost.StartTime.Val % 60) }}"
icon: mdi:clock-start
- name: "DucoBox Config NightBoost StopTime"
unique_id: ducobox_config_box_nightboost_stoptime
value_template: "{{ '%02d:%02d' | format(value_json.NightBoost.StopTime.Val // 60, value_json.NightBoost.StopTime.Val % 60) }}"
icon: mdi:clock-end
# --- Template Entities (Moderne Structuur - Alleen Sensor) ---
template:
# --- Template Sensor ---
- sensor:
- name: "DucoBox Board Uptime"
unique_id: ducobox_board_uptime_friendly
icon: mdi:timer-sand
state: >
{% set uptime_sec = states('sensor.ducobox_board_uptime_seconds') | int(0) %}
{% set days = (uptime_sec // 86400) %}
{% set hours = (uptime_sec % 86400 // 3600) %}
{% set minutes = (uptime_sec % 3600 // 60) %}
{% if days > 0 %}
{{ days }}d {{ hours }}u {{ minutes }}m
{% elif hours > 0 %}
{{ hours }}u {{ minutes }}m
{% else %}
{{ minutes }}m
{% endif %}
# --- De moderne fan is hier verwijderd ---
# --- Legacy Template Fan ---
fan:
- platform: template
fans:
ducobox_ventilation: # Dit is de 'slug' of naam van de fan entiteit
friendly_name: "DucoBox Ventilatie" # Weergavenaam
unique_id: "ducobox_ventilation_control" # Voor consistentie en UI beheer
value_template: > # Voor aan/uit status
{{ states('sensor.ducobox_node1_state') not in ['EMPT', 'unknown'] }}
# Acties gebruiken de '- service:' syntax die eerder werkte
turn_on:
- service: rest_command.set_ducobox_mode
data: { state: "AUTO" }
turn_off:
- service: rest_command.set_ducobox_mode
data: { state: "EMPT" }
preset_modes: ["Auto", "Away", "Manual 1", "Manual 2", "Manual 3"]
preset_mode_template: > # Voor huidige preset status
{% set current_state = states('sensor.ducobox_node1_state') %}
{% if current_state == "MAN1" or current_state == "CNT1" %} Manual 1
{% elif current_state == "MAN2" or current_state == "CNT2" %} Manual 2
{% elif current_state == "MAN3" or current_state == "CNT3" %} Manual 3
{% elif current_state == "EMPT" %} Away
{% elif current_state.startswith("AUT") %} Auto
{% else %} Auto
{% endif %}
set_preset_mode: # Actie voor instellen preset
- service: rest_command.set_ducobox_mode
data:
state: >
{% if preset_mode == "Manual 1" %} MAN1
{% elif preset_mode == "Manual 2" %} MAN2
{% elif preset_mode == "Manual 3" %} MAN3
{% elif preset_mode == "Away" %} EMPT
{% else %} AUTO
{% endif %}
percentage_template: "{{ states('sensor.ducobox_node1_target_demand') | int(0) }}" # Voor huidige percentage status
set_percentage: # Actie voor instellen percentage
- service: rest_command.set_ducobox_overrule
data:
value: "{{ percentage }}"
speed_count: 100 # Om percentage controle mogelijk te maken |
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
| # scripts.yaml
set_ducobox_automin:
alias: "Set DucoBox AutoMin (Node 1)"
fields:
value:
description: "De AutoMin waarde (%)"
example: "25" # Gecorrigeerd naar string
sequence:
- service: rest_command.set_ducobox_node_config # Correcte syntax met '-'
data:
node: 1
parameter: "AutoMin"
value: "{{ value }}"
set_ducobox_automax:
alias: "Set DucoBox AutoMax (Node 1)"
fields:
value:
description: "De AutoMax waarde (%)"
example: "80" # Gecorrigeerd naar string
sequence:
- service: rest_command.set_ducobox_node_config # Correcte syntax met '-'
data:
node: 1
parameter: "AutoMax"
value: "{{ value }}"
set_ducobox_capacity:
alias: "Set DucoBox Capacity (Node 1)"
fields:
value:
description: "De capaciteit (m³/h)"
example: "400" # Gecorrigeerd naar string
sequence:
- service: rest_command.set_ducobox_node_config # Correcte syntax met '-'
data:
node: 1
parameter: "Capacity"
value: "{{ value }}"
set_ducobox_manualtimeout:
alias: "Set DucoBox ManualTimeout (Node 1)"
fields:
value:
description: "De timeout voor manuele modus (min)"
example: "120" # Gecorrigeerd naar string
sequence:
- service: rest_command.set_ducobox_node_config # Correcte syntax met '-'
data:
node: 1
parameter: "ManualTimeout"
value: "{{ value }}"
set_ducobox_co2setpoint:
alias: "Set DucoBox CO2 Setpoint (Node 137)"
fields:
value:
description: "Het CO2 setpoint (ppm)"
example: "800" # Gecorrigeerd naar string
sequence:
- service: rest_command.set_ducobox_node_config # Correcte syntax met '-'
data:
node: 137
parameter: "CO2Setpoint"
value: "{{ value }}"
set_ducobox_tempdependent:
alias: "Set DucoBox TempDependent (Node 137)"
fields:
value:
description: "Zet TempDependent AAN of UIT ('ON'/'OFF')"
example: "ON" # Gecorrigeerd naar string
sequence:
- service: rest_command.set_ducobox_node_config # Correcte syntax met '-'
data:
node: 137
parameter: "TempDependent"
value: "{{ 1 if value | upper == 'ON' else 0 }}"
set_ducobox_rhsetpoint:
alias: "Set DucoBox RH Setpoint (Node 138)"
fields:
value:
description: "Het RH setpoint (%)"
example: "70" # Gecorrigeerd naar string
sequence:
- service: rest_command.set_ducobox_node_config # Correcte syntax met '-'
data:
node: 138
parameter: "RHSetpoint"
value: "{{ value }}"
set_ducobox_rhdelta:
alias: "Set DucoBox RH Delta (Node 138)"
fields:
value:
description: "Zet RH Delta AAN of UIT ('ON'/'OFF')"
example: "OFF" # Gecorrigeerd naar string
sequence:
- service: rest_command.set_ducobox_node_config # Correcte syntax met '-'
data:
node: 138
parameter: "RHDelta"
value: "{{ 1 if value | upper == 'ON' else 0 }}"
set_ducobox_nightboost_active:
alias: "Set DucoBox NightBoost Active"
fields:
value:
description: "Zet NightBoost AAN of UIT ('ON'/'OFF')"
example: "OFF" # Gecorrigeerd naar string
sequence:
- service: rest_command.set_ducobox_box_config # Correcte syntax met '-'
data:
list: "box"
module: "NightBoost"
parameter: "Active"
value: "{{ 1 if value | upper == 'ON' else 0 }}"
set_ducobox_groundbound:
alias: "Set DucoBox GroundBound"
fields:
value:
description: "Zet GroundBound AAN of UIT ('ON'/'OFF')"
example: "ON" # Gecorrigeerd naar string
sequence:
- service: rest_command.set_ducobox_box_config # Correcte syntax met '-'
data:
list: "box" # 'list' was niet gespecificeerd in origineel, 'box' aangenomen
module: "Fan"
parameter: "GroundBound"
value: "{{ 1 if value | upper == 'ON' else 0 }}" |
Te Koop:24 Core Intel Upgradeset
Mooi hoor, welk boardje gebruik je precies? De 2.0 of de originele?|sWORDs| schreef op maandag 7 april 2025 @ 10:54:
Ik ben dit weekend ook even bezig geweest met mijn Duco Silent Connect met Communication Print (met de javascript code van de webserver en Google Gemini 2.5 Pro):
Duco [Afbeelding] [Afbeelding] [Afbeelding] [Afbeelding] [Afbeelding] [Afbeelding] [Afbeelding]
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# configuration.yaml - Versie met Legacy Template Fan default_config: frontend: themes: !include_dir_merge_named themes automation: !include automations.yaml script: !include scripts.yaml # Zorg dat de shortcut-scripts hierin staan! scene: !include scenes.yaml # --- DucoBox Basis REST Commando's --- rest_command: set_ducobox_mode: url: "http://192.168.1.97/nodesetoperstate?node=1&value={{ state }}&t={{ now().timestamp() | int }}" method: GET verify_ssl: false timeout: 10 set_ducobox_overrule: url: "http://192.168.1.97/nodesetoverrule?node=1&value={{ value }}&t={{ now().timestamp() | int }}" method: GET verify_ssl: false timeout: 10 set_ducobox_node_config: url: "http://192.168.1.97/nodeconfigset?node={{ node }}¶={{ parameter }}&value={{ value }}&t={{ now().timestamp() | int }}" method: GET verify_ssl: false timeout: 10 set_ducobox_box_config: url: "http://192.168.1.97/{{ list | default('box') }}configset?mod={{ module }}¶={{ parameter }}&value={{ value }}&t={{ now().timestamp() | int }}" method: GET verify_ssl: false timeout: 10 # --- RESTful Sensor Definities --- rest: # ... (Alle REST sensor definities blijven hier ongewijzigd) ... # --- Node Info (Status, Vraag, Sensoren) --- - resource: "http://192.168.1.97/nodeinfoget?node=1" scan_interval: 15 verify_ssl: false sensor: - name: "DucoBox State" unique_id: ducobox_node1_state value_template: "{{ value_json.state }}" icon: mdi:state-machine json_attributes: [ node, devtype, location, state, cntdwn, endtime, mode, trgt, actl, ovrl, snsr, cerr, swversion, serialnb, error, show, link, temp, co2, rh, ] - name: "DucoBox Mode" unique_id: ducobox_node1_mode value_template: "{{ value_json.mode }}" icon: mdi:cog-outline - name: "DucoBox Target Demand" unique_id: ducobox_node1_target_demand value_template: "{{ value_json.trgt }}" unit_of_measurement: "%" icon: mdi:target state_class: measurement - name: "DucoBox Actual Level" unique_id: ducobox_node1_actual_level value_template: "{{ value_json.actl }}" unit_of_measurement: "%" icon: mdi:speedometer state_class: measurement - name: "DucoBox Temperature" unique_id: ducobox_node1_temp value_template: "{{ value_json.temp }}" device_class: temperature state_class: measurement unit_of_measurement: "°C" - name: "DucoBox Humidity" unique_id: ducobox_node1_rh value_template: "{{ value_json.rh }}" device_class: humidity state_class: measurement unit_of_measurement: "%" - name: "DucoBox CO2" unique_id: ducobox_node1_co2 value_template: "{{ value_json.co2 }}" device_class: carbon_dioxide state_class: measurement unit_of_measurement: "ppm" - resource: "http://192.168.1.97/nodeinfoget?node=137" scan_interval: 60 verify_ssl: false sensor: - name: "DucoBox Kanaal CO2 Vraag" unique_id: ducobox_kanaal_co2_vraag_137 value_template: "{{ value_json.snsr }}" unit_of_measurement: "%" icon: mdi:gauge-low state_class: measurement - resource: "http://192.168.1.97/nodeinfoget?node=138" scan_interval: 60 verify_ssl: false sensor: - name: "DucoBox Kanaal RH Vraag" unique_id: ducobox_kanaal_rh_vraag_138 value_template: "{{ value_json.snsr }}" unit_of_measurement: "%" icon: mdi:water-percent-alert state_class: measurement - resource: "http://192.168.1.97/boxinfoget" scan_interval: 120 verify_ssl: false sensor: - name: "DucoBox Power Now" unique_id: ducobox_boxinfo_power_now value_template: "{{ value_json.Performance.PowerNow }}" device_class: power state_class: measurement unit_of_measurement: "W" - name: "DucoBox Power Average" unique_id: ducobox_boxinfo_power_avg value_template: "{{ value_json.Performance.PowerAvg }}" device_class: power state_class: measurement unit_of_measurement: "W" - name: "DucoBox Total Pressure" unique_id: ducobox_boxinfo_total_pressure value_template: "{{ value_json.Performance.PressureTotal }}" unit_of_measurement: "Pa" state_class: measurement icon: mdi:gauge - name: "DucoBox Calibration State" unique_id: ducobox_boxinfo_calib_state value_template: "{{ value_json.Calibration.CalibState }}" icon: mdi:tune-variant - name: "DucoBox Installer State" unique_id: ducobox_boxinfo_installer_state value_template: "{{ value_json.General.InstallerState }}" icon: mdi:account-wrench - resource: "http://192.168.1.97/board_info" scan_interval: 3600 verify_ssl: false sensor: - name: "DucoBox Board Uptime Seconds" unique_id: ducobox_board_uptime_seconds value_template: "{{ value_json.uptime }}" unit_of_measurement: "s" icon: mdi:timer-outline state_class: total_increasing - name: "DucoBox Board SW Version" unique_id: ducobox_board_sw_version value_template: "{{ value_json.swversion }}" icon: mdi:chip - name: "DucoBox Board API Version" unique_id: ducobox_board_api_version value_template: "{{ value_json.apiversion }}" icon: mdi:api - name: "DucoBox Board MAC Address" unique_id: ducobox_board_mac_address value_template: "{{ value_json.mac }}" icon: mdi:network-outline - resource: "http://192.168.1.97/nodeconfigget?node=1" scan_interval: 3600 verify_ssl: false timeout: 10 sensor: - name: "DucoBox Config Node 1 AutoMin" unique_id: ducobox_config_node1_automin value_template: "{{ value_json.AutoMin.Val }}" unit_of_measurement: "%" icon: mdi:fan-minus - name: "DucoBox Config Node 1 AutoMax" unique_id: ducobox_config_node1_automax value_template: "{{ value_json.AutoMax.Val }}" unit_of_measurement: "%" icon: mdi:fan-plus - name: "DucoBox Config Node 1 Capacity" unique_id: ducobox_config_node1_capacity value_template: "{{ value_json.Capacity.Val }}" unit_of_measurement: "m³/h" icon: mdi:wind-power-outline - name: "DucoBox Config Node 1 Manual1 Level" unique_id: ducobox_config_node1_manual1 value_template: "{{ value_json.Manual1.Val }}" unit_of_measurement: "%" icon: mdi:numeric-1-box-outline - name: "DucoBox Config Node 1 Manual2 Level" unique_id: ducobox_config_node1_manual2 value_template: "{{ value_json.Manual2.Val }}" unit_of_measurement: "%" icon: mdi:numeric-2-box-outline - name: "DucoBox Config Node 1 Manual3 Level" unique_id: ducobox_config_node1_manual3 value_template: "{{ value_json.Manual3.Val }}" unit_of_measurement: "%" icon: mdi:numeric-3-box-outline - name: "DucoBox Config Node 1 ManualTimeout" unique_id: ducobox_config_node1_manualtimeout value_template: "{{ value_json.ManualTimeout.Val }}" unit_of_measurement: "min" icon: mdi:timer-sand - name: "DucoBox Config Node 1 Location" unique_id: ducobox_config_node1_location value_template: "{{ value_json.Location }}" icon: mdi:map-marker - resource: "http://192.168.1.97/nodeconfigget?node=137" scan_interval: 3600 verify_ssl: false timeout: 10 sensor: - name: "DucoBox Config Node 137 CO2Setpoint" unique_id: ducobox_config_node137_co2setpoint value_template: "{{ value_json.CO2Setpoint.Val }}" unit_of_measurement: "ppm" device_class: carbon_dioxide - name: "DucoBox Config Node 137 TempDependent" unique_id: ducobox_config_node137_tempdependent value_template: "{{ 'ON' if value_json.TempDependent.Val == 1 else 'OFF' }}" icon: mdi:thermometer-auto - name: "DucoBox Config Node 137 SensorVisuLevel" unique_id: ducobox_config_node137_sensorvisulevel value_template: "{{ value_json.SensorVisuLevel.Val }}" unit_of_measurement: "%" icon: mdi:lightbulb-on-outline - resource: "http://192.168.1.97/nodeconfigget?node=138" scan_interval: 3600 verify_ssl: false timeout: 10 sensor: - name: "DucoBox Config Node 138 RHSetpoint" unique_id: ducobox_config_node138_rhsetpoint value_template: "{{ value_json.RHSetpoint.Val }}" unit_of_measurement: "%" device_class: humidity - name: "DucoBox Config Node 138 RHDelta" unique_id: ducobox_config_node138_rhdelta value_template: "{{ 'ON' if value_json.RHDelta.Val == 1 else 'OFF' }}" icon: mdi:delta - name: "DucoBox Config Node 138 SensorVisuLevel" unique_id: ducobox_config_node138_sensorvisulevel value_template: "{{ value_json.SensorVisuLevel.Val }}" unit_of_measurement: "%" icon: mdi:lightbulb-on-outline - resource: "http://192.168.1.97/boxconfigget" scan_interval: 3600 verify_ssl: false timeout: 10 sensor: # ... (Alle Box Config sensoren blijven hier ongewijzigd) ... - name: "DucoBox Config TimeZone" unique_id: ducobox_config_box_timezone value_template: "{{ value_json.Time.TimeZone.Val }}" icon: mdi:map-clock - name: "DucoBox Config Auto DST" unique_id: ducobox_config_box_autodst value_template: "{{ 'ON' if value_json.Time.AutoDaylightSavingTime.Val == 1 else 'OFF' }}" icon: mdi:clock-check-outline - name: "DucoBox Config Max High Level" unique_id: ducobox_config_box_maxhighlevel value_template: "{{ value_json.Fan.MaxHighLevel.Val }}" unit_of_measurement: "%" icon: mdi:fan-speed-3 - name: "DucoBox Config Calib On Man2" unique_id: ducobox_config_box_calibonman2 value_template: "{{ 'ON' if value_json.Fan.CalibOnMan2.Val == 1 else 'OFF' }}" icon: mdi:tune-variant - name: "DucoBox Config GroundBound" unique_id: ducobox_config_box_groundbound value_template: "{{ 'ON' if value_json.Fan.GroundBound.Val == 1 else 'OFF' }}" icon: mdi:earth-box - name: "DucoBox Config HeadCount" unique_id: ducobox_config_box_headcount value_template: "{{ value_json.Fan.HeadCount.Val }}" unit_of_measurement: "personen" icon: mdi:account-group - name: "DucoBox Config PwmInverted" unique_id: ducobox_config_box_pwminverted value_template: "{{ 'ON' if value_json.Fan.PwmInverted.Val == 1 else 'OFF' }}" icon: mdi:swap-horizontal-variant - name: "DucoBox Config VentCool Active Mon" unique_id: ducobox_config_box_ventcool_mon value_template: "{{ 'ON' if value_json.VentCool.ActiveMonday.Val == 1 else 'OFF' }}" icon: mdi:calendar-week - name: "DucoBox Config VentCool Active Tue" unique_id: ducobox_config_box_ventcool_tue value_template: "{{ 'ON' if value_json.VentCool.ActiveTuesday.Val == 1 else 'OFF' }}" icon: mdi:calendar-week - name: "DucoBox Config VentCool Active Wed" unique_id: ducobox_config_box_ventcool_wed value_template: "{{ 'ON' if value_json.VentCool.ActiveWednesday.Val == 1 else 'OFF' }}" icon: mdi:calendar-week - name: "DucoBox Config VentCool Active Thu" unique_id: ducobox_config_box_ventcool_thu value_template: "{{ 'ON' if value_json.VentCool.ActiveThursday.Val == 1 else 'OFF' }}" icon: mdi:calendar-week - name: "DucoBox Config VentCool Active Fri" unique_id: ducobox_config_box_ventcool_fri value_template: "{{ 'ON' if value_json.VentCool.ActiveFriday.Val == 1 else 'OFF' }}" icon: mdi:calendar-week - name: "DucoBox Config VentCool Active Sat" unique_id: ducobox_config_box_ventcool_sat value_template: "{{ 'ON' if value_json.VentCool.ActiveSaturday.Val == 1 else 'OFF' }}" icon: mdi:calendar-week - name: "DucoBox Config VentCool Active Sun" unique_id: ducobox_config_box_ventcool_sun value_template: "{{ 'ON' if value_json.VentCool.ActiveSunday.Val == 1 else 'OFF' }}" icon: mdi:calendar-week - name: "DucoBox Config VentCool StartTime" unique_id: ducobox_config_box_ventcool_starttime value_template: "{{ '%02d:%02d' | format(value_json.VentCool.StartTime.Val // 60, value_json.VentCool.StartTime.Val % 60) }}" icon: mdi:clock-start - name: "DucoBox Config VentCool StopTime" unique_id: ducobox_config_box_ventcool_stoptime value_template: "{{ '%02d:%02d' | format(value_json.VentCool.StopTime.Val // 60, value_json.VentCool.StopTime.Val % 60) }}" icon: mdi:clock-end - name: "DucoBox Config NightBoost Active" unique_id: ducobox_config_box_nightboost_active value_template: "{{ 'ON' if value_json.NightBoost.Active.Val == 1 else 'OFF' }}" icon: mdi:weather-night - name: "DucoBox Config NightBoost StartTemp" unique_id: ducobox_config_box_nightboost_starttemp value_template: "{{ value_json.NightBoost.StartTemp.Val }}" unit_of_measurement: "°C" device_class: temperature - name: "DucoBox Config NightBoost StartMonth" unique_id: ducobox_config_box_nightboost_startmonth value_template: "{{ value_json.NightBoost.StartMonth.Val }}" icon: mdi:calendar-month - name: "DucoBox Config NightBoost StopMonth" unique_id: ducobox_config_box_nightboost_stopmonth value_template: "{{ value_json.NightBoost.StopMonth.Val }}" icon: mdi:calendar-month - name: "DucoBox Config NightBoost StartTime" unique_id: ducobox_config_box_nightboost_starttime value_template: "{{ '%02d:%02d' | format(value_json.NightBoost.StartTime.Val // 60, value_json.NightBoost.StartTime.Val % 60) }}" icon: mdi:clock-start - name: "DucoBox Config NightBoost StopTime" unique_id: ducobox_config_box_nightboost_stoptime value_template: "{{ '%02d:%02d' | format(value_json.NightBoost.StopTime.Val // 60, value_json.NightBoost.StopTime.Val % 60) }}" icon: mdi:clock-end # --- Template Entities (Moderne Structuur - Alleen Sensor) --- template: # --- Template Sensor --- - sensor: - name: "DucoBox Board Uptime" unique_id: ducobox_board_uptime_friendly icon: mdi:timer-sand state: > {% set uptime_sec = states('sensor.ducobox_board_uptime_seconds') | int(0) %} {% set days = (uptime_sec // 86400) %} {% set hours = (uptime_sec % 86400 // 3600) %} {% set minutes = (uptime_sec % 3600 // 60) %} {% if days > 0 %} {{ days }}d {{ hours }}u {{ minutes }}m {% elif hours > 0 %} {{ hours }}u {{ minutes }}m {% else %} {{ minutes }}m {% endif %} # --- De moderne fan is hier verwijderd --- # --- Legacy Template Fan --- fan: - platform: template fans: ducobox_ventilation: # Dit is de 'slug' of naam van de fan entiteit friendly_name: "DucoBox Ventilatie" # Weergavenaam unique_id: "ducobox_ventilation_control" # Voor consistentie en UI beheer value_template: > # Voor aan/uit status {{ states('sensor.ducobox_node1_state') not in ['EMPT', 'unknown'] }} # Acties gebruiken de '- service:' syntax die eerder werkte turn_on: - service: rest_command.set_ducobox_mode data: { state: "AUTO" } turn_off: - service: rest_command.set_ducobox_mode data: { state: "EMPT" } preset_modes: ["Auto", "Away", "Manual 1", "Manual 2", "Manual 3"] preset_mode_template: > # Voor huidige preset status {% set current_state = states('sensor.ducobox_node1_state') %} {% if current_state == "MAN1" or current_state == "CNT1" %} Manual 1 {% elif current_state == "MAN2" or current_state == "CNT2" %} Manual 2 {% elif current_state == "MAN3" or current_state == "CNT3" %} Manual 3 {% elif current_state == "EMPT" %} Away {% elif current_state.startswith("AUT") %} Auto {% else %} Auto {% endif %} set_preset_mode: # Actie voor instellen preset - service: rest_command.set_ducobox_mode data: state: > {% if preset_mode == "Manual 1" %} MAN1 {% elif preset_mode == "Manual 2" %} MAN2 {% elif preset_mode == "Manual 3" %} MAN3 {% elif preset_mode == "Away" %} EMPT {% else %} AUTO {% endif %} percentage_template: "{{ states('sensor.ducobox_node1_target_demand') | int(0) }}" # Voor huidige percentage status set_percentage: # Actie voor instellen percentage - service: rest_command.set_ducobox_overrule data: value: "{{ percentage }}" speed_count: 100 # Om percentage controle mogelijk te maken
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# scripts.yaml set_ducobox_automin: alias: "Set DucoBox AutoMin (Node 1)" fields: value: description: "De AutoMin waarde (%)" example: "25" # Gecorrigeerd naar string sequence: - service: rest_command.set_ducobox_node_config # Correcte syntax met '-' data: node: 1 parameter: "AutoMin" value: "{{ value }}" set_ducobox_automax: alias: "Set DucoBox AutoMax (Node 1)" fields: value: description: "De AutoMax waarde (%)" example: "80" # Gecorrigeerd naar string sequence: - service: rest_command.set_ducobox_node_config # Correcte syntax met '-' data: node: 1 parameter: "AutoMax" value: "{{ value }}" set_ducobox_capacity: alias: "Set DucoBox Capacity (Node 1)" fields: value: description: "De capaciteit (m³/h)" example: "400" # Gecorrigeerd naar string sequence: - service: rest_command.set_ducobox_node_config # Correcte syntax met '-' data: node: 1 parameter: "Capacity" value: "{{ value }}" set_ducobox_manualtimeout: alias: "Set DucoBox ManualTimeout (Node 1)" fields: value: description: "De timeout voor manuele modus (min)" example: "120" # Gecorrigeerd naar string sequence: - service: rest_command.set_ducobox_node_config # Correcte syntax met '-' data: node: 1 parameter: "ManualTimeout" value: "{{ value }}" set_ducobox_co2setpoint: alias: "Set DucoBox CO2 Setpoint (Node 137)" fields: value: description: "Het CO2 setpoint (ppm)" example: "800" # Gecorrigeerd naar string sequence: - service: rest_command.set_ducobox_node_config # Correcte syntax met '-' data: node: 137 parameter: "CO2Setpoint" value: "{{ value }}" set_ducobox_tempdependent: alias: "Set DucoBox TempDependent (Node 137)" fields: value: description: "Zet TempDependent AAN of UIT ('ON'/'OFF')" example: "ON" # Gecorrigeerd naar string sequence: - service: rest_command.set_ducobox_node_config # Correcte syntax met '-' data: node: 137 parameter: "TempDependent" value: "{{ 1 if value | upper == 'ON' else 0 }}" set_ducobox_rhsetpoint: alias: "Set DucoBox RH Setpoint (Node 138)" fields: value: description: "Het RH setpoint (%)" example: "70" # Gecorrigeerd naar string sequence: - service: rest_command.set_ducobox_node_config # Correcte syntax met '-' data: node: 138 parameter: "RHSetpoint" value: "{{ value }}" set_ducobox_rhdelta: alias: "Set DucoBox RH Delta (Node 138)" fields: value: description: "Zet RH Delta AAN of UIT ('ON'/'OFF')" example: "OFF" # Gecorrigeerd naar string sequence: - service: rest_command.set_ducobox_node_config # Correcte syntax met '-' data: node: 138 parameter: "RHDelta" value: "{{ 1 if value | upper == 'ON' else 0 }}" set_ducobox_nightboost_active: alias: "Set DucoBox NightBoost Active" fields: value: description: "Zet NightBoost AAN of UIT ('ON'/'OFF')" example: "OFF" # Gecorrigeerd naar string sequence: - service: rest_command.set_ducobox_box_config # Correcte syntax met '-' data: list: "box" module: "NightBoost" parameter: "Active" value: "{{ 1 if value | upper == 'ON' else 0 }}" set_ducobox_groundbound: alias: "Set DucoBox GroundBound" fields: value: description: "Zet GroundBound AAN of UIT ('ON'/'OFF')" example: "ON" # Gecorrigeerd naar string sequence: - service: rest_command.set_ducobox_box_config # Correcte syntax met '-' data: list: "box" # 'list' was niet gespecificeerd in origineel, 'box' aangenomen module: "Fan" parameter: "GroundBound" value: "{{ 1 if value | upper == 'ON' else 0 }}"
De Communication Print (1.0), maar ik ben in de weekenden met een custom component bezig die ook met het Connectivity Board (2.0) kan werken, inclusief automatische detectie van de Ducobox, voor beide.Zillan schreef op donderdag 10 april 2025 @ 20:51:
[...]
Mooi hoor, welk boardje gebruik je precies? De 2.0 of de originele?
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
| {
"domain": "duco",
"name": "Duco Ventilation",
"version": "1.1.0",
"documentation": "https://github.com/USER/ha-duco/blob/main/README.md",
"issue_tracker": "https://github.com/USER/ha-duco/issues",
"codeowners": ["@USER"],
"config_flow": true,
"requirements": ["aiohttp>=3.8.0", "zeroconf-asyncio>=0.10.0"],
"iot_class": "local_polling",
"zeroconf": [
{
"type": "_http._tcp.local.",
"name": "duco*"
},
{
"type": "_https._tcp.local.",
"name": "duco*"
}
],
"loggers": ["custom_components.duco"],
"dependencies": [],
"after_dependencies": [],
"integration_type": "device",
"platforms": [
"sensor",
"binary_sensor",
"switch",
"button",
"number",
"select",
"text",
"fan"
]
} |
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
| # API Versions
API_V1: Final = "v1"
API_V2: Final = "v2"
# Default values
DEFAULT_SCAN_INTERVAL: timedelta = timedelta(seconds=60)
# Delays for V1 API sequential fetching
DELAY_V1_NODE_FETCH_INFO_CONFIG: Final = 0.2
DELAY_V1_NODE_FETCH_INTER_NODE: Final = 0.1
DELAY_V1_COMMAND_FINISH: Final = 1.0
# --- API V1 Specific Constants ---
V1_ENDPOINT_BOARD_INFO = "/board_info"
V1_ENDPOINT_BOXINFO_GET = "/boxinfoget"
V1_ENDPOINT_ECOINFO_GET = "/ecoinfoget"
V1_ENDPOINT_NODELIST = "/nodelist"
V1_ENDPOINT_NODEINFO_GET = "/nodeinfoget" # ?node={id}
V1_ENDPOINT_NODECONFIG_GET = "/nodeconfigget" # ?node={id}
V1_ENDPOINT_NODECONFIG_SET = "/nodeconfigset" # ?node={id}¶={name}&value={val}
V1_ENDPOINT_BOXCONFIG_GET = "/boxconfigget"
V1_ENDPOINT_BOXCONFIG_SET = "/boxconfigset" # ?mod={mod}¶={name}&value={val}
V1_ENDPOINT_ECOCONFIG_GET = "/ecoconfigget"
V1_ENDPOINT_ECOCONFIG_SET = "/ecoconfigset" # ?mod={mod}¶={name}&value={val}
V1_ENDPOINT_IPCONFIG_GET = "/ipconfigget"
V1_ENDPOINT_IPCONFIG_SET = "/ipconfigset" # ?mod={mod}¶={name}&value_A={a}...
V1_ENDPOINT_NODE_SET_OPERSTATE = "/nodesetoperstate" # ?node={id}&value={state}
V1_ENDPOINT_NODE_SET_OVERRULE = "/nodesetoverrule" # ?node={id}&value={percentage}
V1_ENDPOINT_NODE_RESET = "/nodereset" # ?node={id}
V1_ENDPOINT_NODE_LOAD_DEFAULTS = "/nodeloaddefaults" # ?node={id}
V1_ENDPOINT_NODE_SET_SHOW = "/nodeshow" # ?node={id}&value={0/1}
V1_ENDPOINT_NODE_SET_LINKMODE = "/nodesetlinkmode" # ?node={id}&value={0/1}
V1_ENDPOINT_NODE_SET_PARENT = "/nodesetparent" # ?node={id}&parent={parent_id}
V1_ENDPOINT_NODE_SET_ASSO = "/nodesetasso" # ?node={id}&asso={asso_id}
V1_ENDPOINT_BOX_SET_TIME = "/boxsettime" # ?time={unix_ts}
V1_ENDPOINT_BOX_SET_INSTALL = "/boxsetinstall" # ?set={0/1}
V1_ENDPOINT_BOX_CLEAR_NETWORK = "/boxclearnetwork"
V1_ENDPOINT_BOX_SET_CALIBRATION = "/boxsetcalib" # ?set={StartCalib/StopCalib/etc}
V1_ENDPOINT_BOARD_RESET = "/boardreset"
V1_CANCEL_OVERRULE_VALUE: Final = 255
KEY_ACTION_SUCCESS_V1 = "SUCCESS" # Case-insensitive check needed
KEY_ACTION_FAILED_V1 = "FAILED" # Case-insensitive check needed
# --- API V2 Specific Constants ---
V2_PATH_INFO = "/info"
V2_PATH_INFO_NODES = "/info/nodes"
V2_PATH_INFO_NODE_DETAIL = "/info/nodes/{node_id}"
V2_PATH_CONFIG = "/config" # GET ?module=... or PATCH body
V2_PATH_CONFIG_NODE_DETAIL = "/config/nodes/{node_id}" # GET or PATCH body
V2_PATH_ACTION = "/action" # POST body
V2_PATH_ACTION_NODE = "/action/nodes/{node_id}" # POST body
KEY_ACTION_RESULT_V2 = "ActionResult"
# V2 Action Names (Check against OpenAPI spec for precision)
V2_ACTION_SET_VENTILATION_STATE = "SetVentilationState"
V2_ACTION_SET_OVERRULE = "SetOverrule" # Confirm this is the action name
V2_ACTION_RESET_NODE = "ResetNode" # Confirm this is the action name
V2_ACTION_LOAD_DEFAULTS_NODE = "LoadDefaultsNode" # Confirm this is the action name
V2_ACTION_SET_SHOW = "SetShow" # Confirm this is the action name
V2_ACTION_SET_LINK_MODE = "SetLinkMode" # Confirm this is the action name
V2_ACTION_SET_PARENT = "SetParent" # Confirm this is the action name
V2_ACTION_SET_ASSOCIATION = "SetAssociation" # Confirm this is the action name
V2_ACTION_SET_TIME = "SetTime" # Confirm this is the action name
V2_ACTION_SET_INSTALLER_MODE = "SetInstallerMode" # Confirm this is the action name
V2_ACTION_CLEAR_NETWORK = "ClearNetwork" # Confirm this is the action name
V2_ACTION_SET_CALIBRATION = "SetCalibrationMode" # Confirm this is the action name
V2_ACTION_REBOOT = "Reboot" # Confirm this is the action name
# V2 Module Names (for PATCH /config) - Add more as needed based on spec/testing
V2_MODULE_TIMING = "Timing"
V2_MODULE_NETWORK = "Network"
V2_MODULE_MQTT = "MQTT"
V2_MODULE_IDENTIFICATION = "Identification"
V2_MODULE_FAN = "Fan"
V2_MODULE_NIGHTBOOST = "NightBoost"
V2_MODULE_VENTCOOL = "VentilationCooling" # Check exact casing/name in spec
V2_MODULE_NODECONFIG_VENT_AUTO = "VentilationAUTO"
V2_MODULE_NODECONFIG_VENT_MANUAL = "VentilationMANUAL"
V2_MODULE_NODECONFIG_SENSOR_CO2 = "SensorCO2"
V2_MODULE_NODECONFIG_SENSOR_RH = "SensorRH"
V2_MODULE_NODECONFIG_TEMP = "SensorTEMP"
V2_MODULE_NODECONFIG_NODE = "Node" # Check spec for parameters like Capacity
V2_MODULE_NODECONFIG_LOCATION = V2_MODULE_IDENTIFICATION # Location is often under Identification
# --- Common Internal Action Names ---
ACTION_SET_OPER_STATE = "SetOperState"
ACTION_SET_OVERRULE = "SetOverrule"
ACTION_RESET_NODE = "ResetNode"
ACTION_LOAD_DEFAULTS_NODE = "LoadDefaultsNode"
ACTION_SET_SHOW = "SetShow"
ACTION_SET_LINK_MODE = "SetLinkMode"
ACTION_SET_PARENT = "SetParent"
ACTION_SET_ASSOCIATION = "SetAssociation"
ACTION_SET_TIME = "SetTime"
ACTION_SET_INSTALLER_MODE = "SetInstallerMode"
ACTION_CLEAR_NETWORK = "ClearNetwork"
ACTION_SET_CALIBRATION = "SetCalibration"
ACTION_REBOOT_DEVICE = "RebootDevice" |
etc.
[ Voor 117% gewijzigd door |sWORDs| op 11-04-2025 00:03 ]
Te Koop:24 Core Intel Upgradeset
Geweldig initiatief!|sWORDs| schreef op donderdag 10 april 2025 @ 23:58:
[...]
De Communication Print (1.0), maar ik ben in de weekenden met een custom component bezig die ook met het Connectivity Board (2.0) kan werken, inclusief automatische detectie van de Ducobox, voor beide.
Ik heb beide bordjes hier, maar gebruik nog de oude Communication Print met HA. Reden:ik stuur met Rest Command de RHsetup (Relatieve vochtigheid) aan (zodat de wtw niet onnodig optoert als het buiten regent). Zou ik met jouw code de RHSetpoint kunnen wijzigen met de Connectivity Board?
VB rest_command.yaml:
YAML:
1
2
| duco_box_rhsetpoint_60: url: "http://192.168.x.x/nodeconfigset?node=58¶=RHSetpoint&value=60" |
Ik heb even in de scripten op https://github.com/c***t/ha-duco/tree/main gezocht maar kon geen RHSetpoint vinden.
2/1-kap 1988 | Extra vloer en muurisolatie | HR++ glas | WTW: Duco Energie Comfort 325 2-zones | WP: Adlar II 6kW | CV wonen: Jaga Strada Hybrid DBH, slapen: traditionele radiatoren | Solar: Enphase oost/west/zuid 4.2kVA | Homeassistant
Ik verwacht dat dit bij mij een PATCH naar https://IP/v2/config/nodes/138 zou zijn (UCRH als node 138), maar zo ver ben ik nog lang niet. Ik heb Gemini de code laten genereren en ik ga die eerst helemaal werkend maken met de Communication Print. Daarna ga ik een Connectivity Board lenen of bestellen en dat aan de praat maken.
Maar als je een GET op jouw node doet zou je het moeten kunnen zien en dan met PATCH aanpassen.
Probeer dit anders eens:
Hoe te gebruiken:
* Zorg dat je Node.js geïnstalleerd hebt.
* Sla de code op in een bestand, bijvoorbeeld duco_mdns_reader.js.
* Open je terminal of command prompt in de map waar je het bestand hebt opgeslagen.
* Installeer de benodigde libraries: npm install axios bonjour
* Voer het script uit: node duco_mdns_reader.js
Het script zal nu eerst proberen het Duco-apparaat op je netwerk te vinden via mDNS. Als dat lukt, gebruikt het de gevonden hostname om vervolgens (zonder authenticatie) de lijst met nodes op te halen en daarna per node de info- en configuratiedetails.
Ik heb trouwens alleen maar mechanische ventilatie met twee boxsensoren (CO2/RH), als ik wat verder ben kan ik wel wat hulp gebruiken van mensen met WTW, ventielen, kleppen, bestuurbare ventilatiestrips en RF bediening/ruimtesensoren.
Maar als je een GET op jouw node doet zou je het moeten kunnen zien en dan met PATCH aanpassen.
Probeer dit anders eens:
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
| // Importeer benodigde libraries
const axios = require('axios');
const https = require('https');
const bonjour = require('bonjour')(); // Initialize bonjour
// --- Configuratie ---
const FETCH_DELAY_MS = 250; // Wachttijd in ms tussen het opvragen van details per node
const MDNS_TIMEOUT_MS = 5000; // Max wachttijd (in ms) voor het vinden van apparaat via mDNS
// --- Hulpfunctie voor vertraging ---
function delay(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
// --- Functie om Duco apparaat te vinden via mDNS ---
function findDucoDevice(timeout) {
console.log(`Zoeken naar Duco apparaat via mDNS (type: _https._tcp.local, max ${timeout / 1000}s)...`);
return new Promise((resolve, reject) => {
let timer;
const browser = bonjour.find({ type: 'https' }, (service) => {
// Controleer of de servicenaam begint met 'duco_' (zoals in duco_ABCDEF)
if (service.name && service.name.toLowerCase().startsWith('duco_')) {
console.log(`Duco apparaat gevonden: ${service.name} op host ${service.host}:${service.port}`);
clearTimeout(timer); // Stop de timeout
browser.stop(); // Stop met browsen
resolve(service.host); // Geef de gevonden hostname terug (bv. duco_ABCDEF.local)
}
});
// Start een timer voor de timeout
timer = setTimeout(() => {
console.error(`Timeout: Geen Duco apparaat gevonden binnen ${timeout / 1000} seconden.`);
browser.stop();
reject(new Error('mDNS discovery timeout'));
}, timeout);
// Optioneel: Handel fouten tijdens het browsen af
browser.on('error', (err) => {
clearTimeout(timer);
console.error("Fout tijdens mDNS Browse:", err);
browser.stop();
reject(err);
});
});
}
// --- Functie om node details op te halen en te loggen ---
// (Neemt nu apiClient en baseURL als argumenten)
async function fetchAndLogNodeDetails(apiClient, baseURL) {
console.log(`\n--- Starten met ophalen van node-details van ${baseURL} ---`);
// Stap 1: Haal de lijst met alle nodes op
let nodes = [];
const nodesListEndpoint = '/info/nodes';
console.log(`\n==================================================`);
console.log(`Stap 1: Ophalen node lijst via GET ${nodesListEndpoint}`);
console.log(`--------------------------------------------------`);
try {
const response = await apiClient.get(nodesListEndpoint);
if (response.data && Array.isArray(response.data.Nodes)) {
nodes = response.data.Nodes;
console.log(`Status Code: ${response.status}`);
console.log(`${nodes.length} node(s) gevonden.`);
} else {
console.error("Fout: Response bevat geen geldige 'Nodes' array.");
console.error("Ontvangen data:", JSON.stringify(response.data, null, 2));
return;
}
} catch (error) {
console.error(`!!! Fout bij ophalen node lijst (${nodesListEndpoint}):`);
// ... (error logging zoals in vorige script) ...
if (error.response) { console.error("Status Code:", error.response.status); console.error("Response Data:", JSON.stringify(error.response.data, null, 2)); }
else if (error.request) { console.error("Geen response ontvangen:", error.request); }
else { console.error("Error message:", error.message); }
return;
}
console.log(`==================================================\n`);
if (nodes.length === 0) {
console.log("Geen nodes gevonden om details voor op te halen.");
return;
}
// Stap 2: Loop door elke gevonden node en haal details op
console.log(`Stap 2: Ophalen details per node...`);
for (const nodeInfo of nodes) {
const nodeId = nodeInfo.Node;
if (typeof nodeId !== 'number') {
console.warn(`\n!!! Ongeldige node ID gevonden, overslaan:`, nodeInfo);
continue;
}
console.log(`\n##################################################`);
console.log(`# Verwerken Node ID: ${nodeId}`);
console.log(`##################################################`);
const infoEndpoint = `/info/nodes/${nodeId}`;
const configEndpoint = `/config/nodes/${nodeId}`;
// Haal Info op
console.log(`\n--- Ophalen Info voor Node ${nodeId} (GET ${infoEndpoint}) ---`);
try {
const infoResponse = await apiClient.get(infoEndpoint);
console.log("Status Code:", infoResponse.status);
console.log("Info Response Data:");
console.log(JSON.stringify(infoResponse.data, null, 2));
} catch (error) {
console.error(`!!! Fout bij ophalen info voor Node ${nodeId} (${infoEndpoint}):`);
// ... (error logging) ...
if (error.response) { console.error("Status Code:", error.response.status); console.error("Response Data:", JSON.stringify(error.response.data, null, 2)); }
else if (error.request) { console.error("Geen response ontvangen."); }
else { console.error("Error message:", error.message); }
}
await delay(FETCH_DELAY_MS);
// Haal Config op
console.log(`\n--- Ophalen Config voor Node ${nodeId} (GET ${configEndpoint}) ---`);
try {
const configResponse = await apiClient.get(configEndpoint);
console.log("Status Code:", configResponse.status);
console.log("Config Response Data:");
console.log(JSON.stringify(configResponse.data, null, 2));
} catch (error) {
console.error(`!!! Fout bij ophalen config voor Node ${nodeId} (${configEndpoint}):`);
// ... (error logging) ...
if (error.response) { console.error("Status Code:", error.response.status); console.error("Response Data:", JSON.stringify(error.response.data, null, 2)); }
else if (error.request) { console.error("Geen response ontvangen."); }
else { console.error("Error message:", error.message); }
}
await delay(FETCH_DELAY_MS);
}
console.log(`\n--- Ophalen van alle node-details voltooid ---`);
}
// --- Hoofd uitvoer functie ---
async function runScript() {
let discoveredHost;
try {
discoveredHost = await findDucoDevice(MDNS_TIMEOUT_MS);
} catch (error) {
console.error("Kon Duco apparaat niet vinden via mDNS. Script stopt.", error.message);
bonjour.destroy(); // Sluit bonjour netjes af
return; // Stop het script
}
// Construct Base URL en API Client nu we de host weten
const baseURL = `https://${discoveredHost}/v2/`;
const httpsAgent = new https.Agent({
rejectUnauthorized: false // Blijft nodig voor .local hostnames
});
const apiClient = axios.create({
baseURL: baseURL,
timeout: 10000,
httpsAgent: httpsAgent,
headers: {
'Content-Type': 'application/json'
// GEEN Authenticatie header hier
}
});
// Roep de functie aan die de node details ophaalt
await fetchAndLogNodeDetails(apiClient, baseURL);
// Sluit bonjour netjes af aan het einde
bonjour.destroy();
console.log("Bonjour service afgesloten.");
}
// --- Script uitvoeren ---
runScript(); |
Hoe te gebruiken:
* Zorg dat je Node.js geïnstalleerd hebt.
* Sla de code op in een bestand, bijvoorbeeld duco_mdns_reader.js.
* Open je terminal of command prompt in de map waar je het bestand hebt opgeslagen.
* Installeer de benodigde libraries: npm install axios bonjour
* Voer het script uit: node duco_mdns_reader.js
Het script zal nu eerst proberen het Duco-apparaat op je netwerk te vinden via mDNS. Als dat lukt, gebruikt het de gevonden hostname om vervolgens (zonder authenticatie) de lijst met nodes op te halen en daarna per node de info- en configuratiedetails.
Ik heb trouwens alleen maar mechanische ventilatie met twee boxsensoren (CO2/RH), als ik wat verder ben kan ik wel wat hulp gebruiken van mensen met WTW, ventielen, kleppen, bestuurbare ventilatiestrips en RF bediening/ruimtesensoren.
[ Voor 150% gewijzigd door |sWORDs| op 11-04-2025 16:40 ]
Te Koop:24 Core Intel Upgradeset
Ik heb nog wat bugs te fixen en een paar functies om toe te voegen, maar dit is hoever ik met v1 gekomen ben:
| v1 | ||
![]() | ![]() | ![]() |
![]() | ![]() | ![]() |
![]() | ![]() | ![]() |
![]() | ![]() | ![]() |
![]() | ||
Te Koop:24 Core Intel Upgradeset
Mocht iemand hier nog iets in zoeken, voor ESPhome heb ik een component geschreven om met alleen een ESP32 een Duco box te besturen.
Documentatie is hier te vinden.
Gezien het niet gemerged is in ESPhome, moet je het component nog wel toevoegen:
Documentatie is hier te vinden.
Gezien het niet gemerged is in ESPhome, moet je het component nog wel toevoegen:
code:
1
2
3
4
| external_components:
- source: github://pr#7993
components:
- duco |
[ Voor 9% gewijzigd door kokx op 05-05-2025 20:26 ]
Dit klinkt heel interessant, lijkt wel een nieuwe wereld.
Even wat gezocht hiernaar maar nog niet direct duidelijk wat je er allemaal mee kan en voor moet doen.
Hoe begin en stap je in deze wereld (begrijpelijk als je niet hier een hele howto neer wilt leggen)?
Even wat gezocht hiernaar maar nog niet direct duidelijk wat je er allemaal mee kan en voor moet doen.
Hoe begin en stap je in deze wereld (begrijpelijk als je niet hier een hele howto neer wilt leggen)?
Met ESPhome kun je declaratief de configuratie voor ESP-devices maken, zoals de ESP8266 en ESP32. Voor het aansturen van een Duco box zou ik een ESP32-gebaseerd devboard aanraden, bijvoorbeeld de NodeMCU-32S.
Doordat het gebaseerd is op componenten die je dus zelf kan configureren, heeft ESPhome support voor heel veel dingen. Bijvoorbeeld voor een MH-Z19 CO2-sensor, een P1-poort, of een Duco box (via het component dat ik geschreven heb).
ESPhome heeft een Home Assistant add-on, waarmee je in Home Assistant je ESPhome devices kan beheren. Ze hebben OTA (over-the-air) updates goed ingeregeld, waardoor je maar 1x een device met kabel hoeft te flashen, waarna je je device kan updaten. Hoe je er mee kan werken, kun je op de website van ESPhome vinden.
Daarmee configureer je onder andere welk bordje je hebt, je wifi-configuratie en hoe die beschikbaar gesteld wordt aan Home Assistant en eventueel of hij een webinterface moet tonen. Daarna configureer je de componenten die beschikbaar zijn voor het bordje. Voor mijn eigen Duco box gebruik ik daar de volgende configuratie voor:
Zoals je ziet moet je dan voor de Duco ook een UART-component gebruiken, die regelt de communicatie tussen de Duco en de ESP32. Uiteindelijk heb je hiermee een device in Home Assistant waarmee je de mode kan wijzigen en informatie kan uitlezen:
Doordat het gebaseerd is op componenten die je dus zelf kan configureren, heeft ESPhome support voor heel veel dingen. Bijvoorbeeld voor een MH-Z19 CO2-sensor, een P1-poort, of een Duco box (via het component dat ik geschreven heb).
ESPhome heeft een Home Assistant add-on, waarmee je in Home Assistant je ESPhome devices kan beheren. Ze hebben OTA (over-the-air) updates goed ingeregeld, waardoor je maar 1x een device met kabel hoeft te flashen, waarna je je device kan updaten. Hoe je er mee kan werken, kun je op de website van ESPhome vinden.
Daarmee configureer je onder andere welk bordje je hebt, je wifi-configuratie en hoe die beschikbaar gesteld wordt aan Home Assistant en eventueel of hij een webinterface moet tonen. Daarna configureer je de componenten die beschikbaar zijn voor het bordje. Voor mijn eigen Duco box gebruik ik daar de volgende configuratie voor:
YAML:
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
| uart: id: modbus_uart tx_pin: GPIO17 rx_pin: GPIO16 baud_rate: 57600 duco: uart_id: modbus_uart time: time_id: sntp_time text_sensor: - platform: duco name: "DUCO Serial Number" update_interval: "60s" select: - platform: duco name: "DUCO Mode" sensor: - platform: duco co2: - address: 3 name: "DUCO CO2 Bedroom" - address: 4 name: "DUCO CO2 Livingroom" filter_remaining: name: "DUCO Filter Time Remaining" flow_level: name: "DUCO Flow Level" update_interval: "5s" time_remaining: name: "DUCO Mode Time Remaining" update_interval: "5s" number: - platform: duco name: "DUCO Comfort Temperature" update_interval: "10s" time: - platform: sntp id: sntp_time timezone: Europe/Amsterdam servers: - [...] |
Zoals je ziet moet je dan voor de Duco ook een UART-component gebruiken, die regelt de communicatie tussen de Duco en de ESP32. Uiteindelijk heb je hiermee een device in Home Assistant waarmee je de mode kan wijzigen en informatie kan uitlezen:
Waauw, dit zier er erg mooi uit, was al op zoek naar een bordje en jumperkabels om de spullen aan elkaar te knopen. Tot ik zag dat ik de verkeerde versie van Home Assistant hebt, zo irritant dat de docker versie geen addons ondersteund, dus daar moet ik eerst naar kijken (en dan pas kan ik zien of ik zo'n ding kan insetllen met HA). Maar wat je hier neer zet is wel exact wat ik zoek en verder uit wil zoeken!
Je kan de verschillende Add-ons ook gewoon als losse Docker Containers draaien hoor, moet je alleen even zoeken welke je precies nodig hebt.roelofz schreef op donderdag 8 mei 2025 @ 11:40:
Waauw, dit zier er erg mooi uit, was al op zoek naar een bordje en jumperkabels om de spullen aan elkaar te knopen. Tot ik zag dat ik de verkeerde versie van Home Assistant hebt, zo irritant dat de docker versie geen addons ondersteund, dus daar moet ik eerst naar kijken (en dan pas kan ik zien of ik zo'n ding kan insetllen met HA). Maar wat je hier neer zet is wel exact wat ik zoek en verder uit wil zoeken!
Draai zonder problemen Home Assistant en Music Assistant, beiden in Docker.
En daarnaast ook een MQTT Broker en Zigbee2MQTT, ook allemaal in Docker.
Kan je via deze weg ook alle sensoren uitlezen die aan de Duco zelf gekoppeld zijn?kokx schreef op woensdag 7 mei 2025 @ 08:18:
Met ESPhome kun je declaratief de configuratie voor ESP-devices maken, zoals de ESP8266 en ESP32. Voor het aansturen van een Duco box zou ik een ESP32-gebaseerd devboard aanraden, bijvoorbeeld de NodeMCU-32S.
Doordat het gebaseerd is op componenten die je dus zelf kan configureren, heeft ESPhome support voor heel veel dingen. Bijvoorbeeld voor een MH-Z19 CO2-sensor, een P1-poort, of een Duco box (via het component dat ik geschreven heb).
ESPhome heeft een Home Assistant add-on, waarmee je in Home Assistant je ESPhome devices kan beheren. Ze hebben OTA (over-the-air) updates goed ingeregeld, waardoor je maar 1x een device met kabel hoeft te flashen, waarna je je device kan updaten. Hoe je er mee kan werken, kun je op de website van ESPhome vinden.
Daarmee configureer je onder andere welk bordje je hebt, je wifi-configuratie en hoe die beschikbaar gesteld wordt aan Home Assistant en eventueel of hij een webinterface moet tonen. Daarna configureer je de componenten die beschikbaar zijn voor het bordje. Voor mijn eigen Duco box gebruik ik daar de volgende configuratie voor:
YAML:
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 uart: id: modbus_uart tx_pin: GPIO17 rx_pin: GPIO16 baud_rate: 57600 duco: uart_id: modbus_uart time: time_id: sntp_time text_sensor: - platform: duco name: "DUCO Serial Number" update_interval: "60s" select: - platform: duco name: "DUCO Mode" sensor: - platform: duco co2: - address: 3 name: "DUCO CO2 Bedroom" - address: 4 name: "DUCO CO2 Livingroom" filter_remaining: name: "DUCO Filter Time Remaining" flow_level: name: "DUCO Flow Level" update_interval: "5s" time_remaining: name: "DUCO Mode Time Remaining" update_interval: "5s" number: - platform: duco name: "DUCO Comfort Temperature" update_interval: "10s" time: - platform: sntp id: sntp_time timezone: Europe/Amsterdam servers: - [...]
Zoals je ziet moet je dan voor de Duco ook een UART-component gebruiken, die regelt de communicatie tussen de Duco en de ESP32. Uiteindelijk heb je hiermee een device in Home Assistant waarmee je de mode kan wijzigen en informatie kan uitlezen:
[Afbeelding]
Heb 6 Duco sensoren door het huis verspreid en gebruik nu de originele Duco Communication Print die ik via REST Sensoren en Commands kan uitlezen en aansturen in HA.
Een andere optie zou zijn om ESPhome te gebruiken via de commandline met docker. Dan heb je de Home Assistant addon niet nodig.roelofz schreef op donderdag 8 mei 2025 @ 11:40:
Waauw, dit zier er erg mooi uit, was al op zoek naar een bordje en jumperkabels om de spullen aan elkaar te knopen. Tot ik zag dat ik de verkeerde versie van Home Assistant hebt, zo irritant dat de docker versie geen addons ondersteund, dus daar moet ik eerst naar kijken (en dan pas kan ik zien of ik zo'n ding kan insetllen met HA). Maar wat je hier neer zet is wel exact wat ik zoek en verder uit wil zoeken!
De ESPhome-module die ik heb geschreven is gebaseerd op de nieuwere Connectivity Board, waar ik het onderliggende protocol van heb achterhaald. Naar wat ik vernomen heb, heeft de oudere Communication Print meer opties dan de nieuwere Connectivity Board, met name om sensoren uit te lezen. Waarschijnlijk zul je dus functionaliteit missen met de ESPhome variant. Welke sensoren gaat het precies om, die je door het huis heen hebt hangen?BiG-GuY schreef op donderdag 8 mei 2025 @ 19:44:
[...]
Kan je via deze weg ook alle sensoren uitlezen die aan de Duco zelf gekoppeld zijn?
Heb 6 Duco sensoren door het huis verspreid en gebruik nu de originele Duco Communication Print die ik via REST Sensoren en Commands kan uitlezen en aansturen in HA.
Helaas heb ik zelf geen Communication Print kunnen bemachtigen, dus is het erg lastig om diezelfde functionaliteit voor elkaar te krijgen. Mocht iemand me een Communication Print willen lenen, zou ik graag eens kijken of ik die functionaliteit wel kan implementeren in de ESPhome module.
Heel gaaf, Ik denk dat ik hier wel uit ga komen.
Dus docker container aanmaken op de laptop, bordje van een YAML voorzien (heb wifi ook als optie gevonden) en dan bordje aansluiten op de duco en laten vinden door HA en ik zou er al moeten zijn.
Ik heb opencircuit al gevonden (er zijn vast meer leveranciers), zal daar bordje en bandkabel (female - female) bestellen. Mogelijk nog een doosje zoeken om eromheen te doen in de duco.
Heel erg blij met jullie hulp en tips, dank!
Dus docker container aanmaken op de laptop, bordje van een YAML voorzien (heb wifi ook als optie gevonden) en dan bordje aansluiten op de duco en laten vinden door HA en ik zou er al moeten zijn.
Ik heb opencircuit al gevonden (er zijn vast meer leveranciers), zal daar bordje en bandkabel (female - female) bestellen. Mogelijk nog een doosje zoeken om eromheen te doen in de duco.
Heel erg blij met jullie hulp en tips, dank!
@kokx Alleen klein tipje, niet al je entities met 'DUCO' prefixen maar gewoon je device zo noemen. Want HA zal zelf de device name er al voor plakken.
@Septillion Helemaal gelijk in! Thanks voor de tip!
Nog een paar vraagjes, heb je het bordje in de duco of erbuiten bevestigd, ik twijfel of ik niet een langere kabel neem, om erbuiten dit bordje te bevestigen, mogelijk ook betere wifi ontvangst.
Daarnaast kom ik onderstaand citaat tegen bij Opencircuit: "Het programmeren van de NodeMcu is iets anders als normaal, met de API die lijkt op NodeJS, ontvangt deze module de commando's door middel van de LUA scripts die worden geüpload."
Zijn er verschillende versies en hoe kies ik dan de juiste?
Daarnaast kom ik onderstaand citaat tegen bij Opencircuit: "Het programmeren van de NodeMcu is iets anders als normaal, met de API die lijkt op NodeJS, ontvangt deze module de commando's door middel van de LUA scripts die worden geüpload."
Zijn er verschillende versies en hoe kies ik dan de juiste?
Ikzelf heb het bordje in mijn Duco bevestigd, hij ligt achterin mijn box op een plaats waar die niet de logic board van de Duco zelf kan raken. Daar heeft hij voldoende WiFi-ontvangst voor mijn doeleinden.roelofz schreef op zaterdag 10 mei 2025 @ 12:29:
Nog een paar vraagjes, heb je het bordje in de duco of erbuiten bevestigd, ik twijfel of ik niet een langere kabel neem, om erbuiten dit bordje te bevestigen, mogelijk ook betere wifi ontvangst.
Daarnaast kom ik onderstaand citaat tegen bij Opencircuit: "Het programmeren van de NodeMcu is iets anders als normaal, met de API die lijkt op NodeJS, ontvangt deze module de commando's door middel van de LUA scripts die worden geüpload."
Zijn er verschillende versies en hoe kies ik dan de juiste?
Voor het programmeren zou ik hem de eerste keer aan je computer bevestigen met de USB-kabel (daarbij zou ik hem *niet* tegelijk aan de Duco hangen, maar echt alleen aan de computer). Dan kun je hem gewoon met de docker van esphome programmeren, als je --device=<pad-naar-usb-device> toevoegt. Daarna is opnieuw programmeren over WiFi mogelijk.
Wat Opencircuit precies zegt volg ik niet helemaal. NodeMCU en ESPhome hebben eigenlijk niets te maken met NodeJS of LUA. Wat is de bron er precies voor?
Nog een kleine tip: voor UART verbind je de TX van de box met de geconfigureerde RX van de NodeMCU en andersom.
Ik heb ook een d325, dus dan hoef ik daar niets meer aan te doen, 40cm draad moet dan voldoende zijn, kom ik daar wel uit.
TX en RX tegengesteld monteren had ik al eerder gezien (maar is inderdaad verwarrend als je het voor het eerst tegenkomt, terecht opmerking).
Gelijktijdig koppelen aan zowel de Duco als een laptop (oh, nu snap ik hoe je het las) lijkt mij heel erg risicovol. Ik doelde met laptop op niet in de ha server (die ik in de meterkast heb en die is ook nog headless).
Dat verhaal van Opencircuit vond ik ook vreemd, ik negeer het maar en bestel het ding (12,- risico is ook wel te nemen).
Nogmaals dank voor al je tips, zeer bruikbaar om hiermee op gang te komen als nieuweling.
TX en RX tegengesteld monteren had ik al eerder gezien (maar is inderdaad verwarrend als je het voor het eerst tegenkomt, terecht opmerking).
Gelijktijdig koppelen aan zowel de Duco als een laptop (oh, nu snap ik hoe je het las) lijkt mij heel erg risicovol. Ik doelde met laptop op niet in de ha server (die ik in de meterkast heb en die is ook nog headless).
Dat verhaal van Opencircuit vond ik ook vreemd, ik negeer het maar en bestel het ding (12,- risico is ook wel te nemen).
Nogmaals dank voor al je tips, zeer bruikbaar om hiermee op gang te komen als nieuweling.
Bedankt! verbinding maken ging vrij makkelijk.kokx schreef op maandag 5 mei 2025 @ 17:44:
Mocht iemand hier nog iets in zoeken, voor ESPhome heb ik een component geschreven om met alleen een ESP32 een Duco box te besturen.
Documentatie is hier te vinden.
Gezien het niet gemerged is in ESPhome, moet je het component nog wel toevoegen:
code:
1 2 3 4external_components: - source: github://pr#7993 components: - duco
Is het mogelijke om nog andere type sensoren toe te voegen? Een aantal worden niet herkend momenteel.
Ik heb deze terug kunnen vinden in de documentatie van de Modbus TCP lijst.
[21:30:38][I][duco:202]: Node 1: type 17 (BOX)
[21:30:38][I][duco:202]: Node 2: type 8 (UCBAT) User controller RF/BAT
[21:30:38][I][duco:202]: Node 3: type 12 (UCCO2) CO2 Room sensor
[21:30:38][I][duco:202]: Node 4: type 12 (UCCO2) CO2 Room sensor
[21:30:38][I][duco:202]: Node 5: type 10 (UNKNOWN) Humidity Room sensor
[21:30:38][I][duco:202]: Node 6: type 10 (UNKNOWN) Humidity Room sensor
[21:30:38][I][duco:202]: Node 67: type 13 (UNKNOWN) Sensorless control valve
[21:30:38][I][duco:202]: Node 68: type 13 (UNKNOWN) Sensorless control valve
Fijn om te horen dat het makkelijk ging!sebaszz1 schreef op zondag 11 mei 2025 @ 23:00:
[...]
Bedankt! verbinding maken ging vrij makkelijk.
Is het mogelijke om nog andere type sensoren toe te voegen? Een aantal worden niet herkend momenteel.
Ik heb deze terug kunnen vinden in de documentatie van de Modbus TCP lijst.
[21:30:38][I][duco:202]: Node 1: type 17 (BOX)
[21:30:38][I][duco:202]: Node 2: type 8 (UCBAT) User controller RF/BAT
[21:30:38][I][duco:202]: Node 3: type 12 (UCCO2) CO2 Room sensor
[21:30:38][I][duco:202]: Node 4: type 12 (UCCO2) CO2 Room sensor
[21:30:38][I][duco:202]: Node 5: type 10 (UNKNOWN) Humidity Room sensor
[21:30:38][I][duco:202]: Node 6: type 10 (UNKNOWN) Humidity Room sensor
[21:30:38][I][duco:202]: Node 67: type 13 (UNKNOWN) Sensorless control valve
[21:30:38][I][duco:202]: Node 68: type 13 (UNKNOWN) Sensorless control valve
Andere sensoren toevoegen zou misschien wel lukken. Ik verwacht bijvoorbeeld dat de humidity sensor op vergelijkbare wijze werkt als de CO2-sensor. Ik heb in mijn Duco echter geen humidity sensor, dus zelf kan ik dat niet testen. Als je ervoor open staat, wil ik best proberen om dit samen te implementeren? Je kan me daarvoor een PM sturen. Ik moet vooral een aantal aanpassingen maken waarna ik debug-output nodig heb om de sensor uit te lezen. Het handigste zou zijn als je zelf een losse humidity-sensor hebt, om de waarde die er uit komt te valideren.
Bedankt! Zal ik doen zodra mijn losse vochtigheid sensor binnen is.kokx schreef op maandag 12 mei 2025 @ 00:01:
[...]
Fijn om te horen dat het makkelijk ging!
Andere sensoren toevoegen zou misschien wel lukken. Ik verwacht bijvoorbeeld dat de humidity sensor op vergelijkbare wijze werkt als de CO2-sensor. Ik heb in mijn Duco echter geen humidity sensor, dus zelf kan ik dat niet testen. Als je ervoor open staat, wil ik best proberen om dit samen te implementeren? Je kan me daarvoor een PM sturen. Ik moet vooral een aantal aanpassingen maken waarna ik debug-output nodig heb om de sensor uit te lezen. Het handigste zou zijn als je zelf een losse humidity-sensor hebt, om de waarde die er uit komt te valideren.
Ik heb bordje net besteld en ik heb al een Duco vocht sensor. Mogelijk kan ik die al uitlezen, komend weekend mogelijk al aan de knutsel, dan kan ik mogelijk deze ook al uitlezen (dacht dat er een bredere query mogelijk was om sensoren uit te lezen), maar zal dat dan vast ontdekken.
Ik moest trouwens serial number verwijderen uit de configuratie anders verbreekt Home assistant iedere keer de verbinding na een request. Geen idee waaromkokx schreef op woensdag 7 mei 2025 @ 08:18:
Met ESPhome kun je declaratief de configuratie voor ESP-devices maken, zoals de ESP8266 en ESP32. Voor het aansturen van een Duco box zou ik een ESP32-gebaseerd devboard aanraden, bijvoorbeeld de NodeMCU-32S.
Doordat het gebaseerd is op componenten die je dus zelf kan configureren, heeft ESPhome support voor heel veel dingen. Bijvoorbeeld voor een MH-Z19 CO2-sensor, een P1-poort, of een Duco box (via het component dat ik geschreven heb).
ESPhome heeft een Home Assistant add-on, waarmee je in Home Assistant je ESPhome devices kan beheren. Ze hebben OTA (over-the-air) updates goed ingeregeld, waardoor je maar 1x een device met kabel hoeft te flashen, waarna je je device kan updaten. Hoe je er mee kan werken, kun je op de website van ESPhome vinden.
Daarmee configureer je onder andere welk bordje je hebt, je wifi-configuratie en hoe die beschikbaar gesteld wordt aan Home Assistant en eventueel of hij een webinterface moet tonen. Daarna configureer je de componenten die beschikbaar zijn voor het bordje. Voor mijn eigen Duco box gebruik ik daar de volgende configuratie voor:
YAML:
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 uart: id: modbus_uart tx_pin: GPIO17 rx_pin: GPIO16 baud_rate: 57600 duco: uart_id: modbus_uart time: time_id: sntp_time text_sensor: - platform: duco name: "DUCO Serial Number" update_interval: "60s" select: - platform: duco name: "DUCO Mode" sensor: - platform: duco co2: - address: 3 name: "DUCO CO2 Bedroom" - address: 4 name: "DUCO CO2 Livingroom" filter_remaining: name: "DUCO Filter Time Remaining" flow_level: name: "DUCO Flow Level" update_interval: "5s" time_remaining: name: "DUCO Mode Time Remaining" update_interval: "5s" number: - platform: duco name: "DUCO Comfort Temperature" update_interval: "10s" time: - platform: sntp id: sntp_time timezone: Europe/Amsterdam servers: - [...]
Zoals je ziet moet je dan voor de Duco ook een UART-component gebruiken, die regelt de communicatie tussen de Duco en de ESP32. Uiteindelijk heb je hiermee een device in Home Assistant waarmee je de mode kan wijzigen en informatie kan uitlezen:
[Afbeelding]
code:
1
2
3
4
| text_sensor:
- platform: duco
name: "DUCO Serial Number"
update_interval: "60s" |
code:
1
2
3
4
| File "aioesphomeapi/connection.py", line 892, in aioesphomeapi.connection.APIConnection.process_packet google.protobuf.message.DecodeError: Error parsing message with type 'TextSensorStateResponse' 2025-05-12 00:31:44.022 ERROR (MainThread) [aioesphomeapi.connection] duco-controller @ "IP ADRES": Invalid protobuf message: type=TextSensorStateResponse data=b'\r+_\xa7\x86\x12 \xee\x00d\x02\x00\x00\xf9\xb4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' Traceback (most recent call last): |
Dankjewel voor de feedback hiervan! Zou naar mijn inzien niet zomaar moeten gebeuren, maar ga eens kijken of ik hier een fout in kan vinden.sebaszz1 schreef op dinsdag 13 mei 2025 @ 23:51:
[...]
Ik moest trouwens serial number verwijderen uit de configuratie anders verbreekt Home assistant iedere keer de verbinding na een request. Geen idee waarom![]()
code:
1 2 3 4text_sensor: - platform: duco name: "DUCO Serial Number" update_interval: "60s"
code:
1 2 3 4 File "aioesphomeapi/connection.py", line 892, in aioesphomeapi.connection.APIConnection.process_packet google.protobuf.message.DecodeError: Error parsing message with type 'TextSensorStateResponse' 2025-05-12 00:31:44.022 ERROR (MainThread) [aioesphomeapi.connection] duco-controller @ "IP ADRES": Invalid protobuf message: type=TextSensorStateResponse data=b'\r+_\xa7\x86\x12 \xee\x00d\x02\x00\x00\xf9\xb4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' Traceback (most recent call last):
Ik neem aan dat jij de Home Assistant API gebruikt via ESPhome? Want zelf gebruik ik eigenlijk alleen de MQTT-communicatie met HA.
EDIT: Volgensmij heb ik de fout gevonden. Als shortcut initialiseer ik direct de serial number string uit de bytes die van de message komen. Dit is niet helemaal netjes, aangezien je hierdoor trailing null-bytes krijgt en misschien ook een aantal extra characters er achteraan krijgt. Waarschijnlijk was dat geen probleem voor MQTT, als die de string als een C-string leest met null-byte termination. Maar mogelijk gaat protobuf daar anders mee om, en probeert die de volledige (ongeldige) "string" mee te sturen die niet goed decoded kan worden. Ik zal binnenkort proberen dit te fixen.
[ Voor 19% gewijzigd door kokx op 14-05-2025 00:39 . Reden: Fout gevonden ]
Ik heb het bordje en met wat moeite de docker VM aan de praat, full access op de USB port gegeven en de eerste wifi config ging erin en ik zag hem op de router ook een ip adres halen
Ik heb het id voor de co2 aangepast, is een gok, maar kan ik later nog wel aanpassen en hij hangt er nog niet aan.
Maar de code wil er niet in vanuit de web pagina.
Nou loopt ie bij het uploaden vast bij het onderdeel duco: (UART en time).
Nou doe ik een "domme" copy-paste, maar dit stukje kan ik niet volgen (ben al gewend aan YAML, dus daar zie ik ook geen fout), dus ik snap het even niet.
Kun je even meekijken, mogelijk de hint bedenken waar ik fout zit?
Ik heb het id voor de co2 aangepast, is een gok, maar kan ik later nog wel aanpassen en hij hangt er nog niet aan.
Maar de code wil er niet in vanuit de web pagina.
YAML:
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
| esphome: name: ducobord friendly_name: Ducobord esp32: board: esp32dev framework: type: arduino # Duco config uart: id: modbus_uart tx_pin: GPIO17 rx_pin: GPIO16 baud_rate: 57600 duco: uart_id: modbus_uart time: time_id: sntp_time text_sensor: - platform: duco name: "DUCO D325" update_interval: "60s" select: - platform: duco name: "DUCO Mode" sensor: - platform: duco co2: - address: 2 name: "DUCO CO2 Bedroom" # Humidity # - address: 3 # name: "Badkamer" filter_remaining: name: "DUCO Filter Time Remaining" flow_level: name: "DUCO Flow Level" update_interval: "5s" time_remaining: name: "DUCO Mode Time Remaining" update_interval: "5s" number: - platform: duco name: "DUCO Comfort Temperature" update_interval: "10s" time: - platform: sntp id: sntp_time timezone: Europe/Amsterdam servers: - 192.168.3.1 # router IP # Duco config |
Nou loopt ie bij het uploaden vast bij het onderdeel duco: (UART en time).
code:
1
2
3
4
5
6
| INFO Unable to import component duco: No module named 'esphome.components.duco' Failed config duco: [source /config/ducobord.yaml:17] Component not found: duco. |
Nou doe ik een "domme" copy-paste, maar dit stukje kan ik niet volgen (ben al gewend aan YAML, dus daar zie ik ook geen fout), dus ik snap het even niet.
Kun je even meekijken, mogelijk de hint bedenken waar ik fout zit?
[ Voor 0% gewijzigd door Septillion op 21-05-2025 13:33 . Reden: Denk aan de 'yaml' bij de code tags aub! Zie topic warning en hoe deze post is aangepast. ]
Het component zelf is niet beschikbaar. Dat komt omdat die niet gemerged is in ESPhome. Je kan die makkelijk toevoegen met het volgende stukje code:
code:
1
2
3
4
| external_components:
- source: github://pr#7993
components:
- duco |
Ah, dus dit moet erboven en dan snapt ie het wel, cool!
Daar ga ik morgen dan mee verder, thanks!
Daar ga ik morgen dan mee verder, thanks!
Klopt via ESPhome. ik geloof je meteenkokx schreef op woensdag 14 mei 2025 @ 00:18:
[...]
Dankjewel voor de feedback hiervan! Zou naar mijn inzien niet zomaar moeten gebeuren, maar ga eens kijken of ik hier een fout in kan vinden.
Ik neem aan dat jij de Home Assistant API gebruikt via ESPhome? Want zelf gebruik ik eigenlijk alleen de MQTT-communicatie met HA.
EDIT: Volgensmij heb ik de fout gevonden. Als shortcut initialiseer ik direct de serial number string uit de bytes die van de message komen. Dit is niet helemaal netjes, aangezien je hierdoor trailing null-bytes krijgt en misschien ook een aantal extra characters er achteraan krijgt. Waarschijnlijk was dat geen probleem voor MQTT, als die de string als een C-string leest met null-byte termination. Maar mogelijk gaat protobuf daar anders mee om, en probeert die de volledige (ongeldige) "string" mee te sturen die niet goed decoded kan worden. Ik zal binnenkort proberen dit te fixen.
En hij werkt!
Jeah!
De laatste toevoeging deed het hem, nu kon ik de config afmaken en het ding installeren in de wtw. Iedere stap is er wel 1 als je voor het eerst met die dingen werkt. De pinnen in de Duco zijn net iets dikker dan normaal (of mijn setje met jumperkabels is gewoon slecht in kwaliteit. Ook eng dat je niet verkeerd mag gokken met de pins.
Nog een toevoeging, op 5 volt werkt ie wel, op 3,3 bleef de hele wtw stil (als je een week eigenaar bent van de unit, is dat niet goed voor je nagels, pfff). Na loskoppelen deed de wtw het weer, er zit dus ergens een check waardoor ie weigert, klam zweet was dat.
Dan staat er op de esp een poort met RX en TX en die moet je dus echt niet hebben, GIO1 en GIO3 uit het hoofd, maar dat helpt niet om dat te corrigeren in de YAML, je moet echt poort 16 en 17 hebben.
Nevertheless, hij werkt en kan nu eindelijk waarden zien, wat ie doet, dus happy.
Wat mij wel opviel, eerste logische test, was dat als ik de verversingssnelheid verhoog, de temp niet meer doorgegeven wordt, dat verandert ook niet terug wanneer je terug gaat naar auto.at zal om dit stukje code gaan, die doet het dus nog niet goed, sterker nog, die kan ik ook niet instellen (bij booten krijgt ie de juiste info, maar als je iets aanpast, gaat ie mis en komt ie niet meer terug, geeft nu 16,5 aan, terwijl hij boven ingesteld staat op 22):
Maar het begin is er en ik mag nu eerst in de leer over wat de CO2 uitkraamt, die geeft nu 480 ppm met alleen mij in de woonkamer. Leuk om daar nu iets mee te kunnen.
Ook nog op de wishlist, de vochtsensor, geen idee of die humidity heet om uit te lezen, of zijn die namen in wat jij hebt ingesteld in de code van github?
Benieuwd of ik die ook los kan laten, of dat daar eerst code voor moet komen (vandaar dat ie nog in comments staat, wil ook eerst de bestaande sensoren en hun gedrag leren kennen).
Adressen is ook gokken, weet per ongeluk dat de vocht 3 is, omdat ik die zelf heb toegevoegd, gok op co2 op 2 bleek te kloppen...
Allemaal erg leuk, smaakt naar meer...
Jeah!
De laatste toevoeging deed het hem, nu kon ik de config afmaken en het ding installeren in de wtw. Iedere stap is er wel 1 als je voor het eerst met die dingen werkt. De pinnen in de Duco zijn net iets dikker dan normaal (of mijn setje met jumperkabels is gewoon slecht in kwaliteit. Ook eng dat je niet verkeerd mag gokken met de pins.
Nog een toevoeging, op 5 volt werkt ie wel, op 3,3 bleef de hele wtw stil (als je een week eigenaar bent van de unit, is dat niet goed voor je nagels, pfff). Na loskoppelen deed de wtw het weer, er zit dus ergens een check waardoor ie weigert, klam zweet was dat.
Dan staat er op de esp een poort met RX en TX en die moet je dus echt niet hebben, GIO1 en GIO3 uit het hoofd, maar dat helpt niet om dat te corrigeren in de YAML, je moet echt poort 16 en 17 hebben.
Nevertheless, hij werkt en kan nu eindelijk waarden zien, wat ie doet, dus happy.
Wat mij wel opviel, eerste logische test, was dat als ik de verversingssnelheid verhoog, de temp niet meer doorgegeven wordt, dat verandert ook niet terug wanneer je terug gaat naar auto.at zal om dit stukje code gaan, die doet het dus nog niet goed, sterker nog, die kan ik ook niet instellen (bij booten krijgt ie de juiste info, maar als je iets aanpast, gaat ie mis en komt ie niet meer terug, geeft nu 16,5 aan, terwijl hij boven ingesteld staat op 22):
code:
1
2
3
4
| number:
- platform: duco
name: "DUCO Comfort Temperature"
update_interval: "10s" |
Maar het begin is er en ik mag nu eerst in de leer over wat de CO2 uitkraamt, die geeft nu 480 ppm met alleen mij in de woonkamer. Leuk om daar nu iets mee te kunnen.
Ook nog op de wishlist, de vochtsensor, geen idee of die humidity heet om uit te lezen, of zijn die namen in wat jij hebt ingesteld in de code van github?
code:
1
2
3
4
5
6
7
8
| sensor:
- platform: duco
co2:
- address: 2
name: "DUCO CO2 Woonkamer"
# Humidity
# - address: 3
# name: "Badkamer" |
Benieuwd of ik die ook los kan laten, of dat daar eerst code voor moet komen (vandaar dat ie nog in comments staat, wil ook eerst de bestaande sensoren en hun gedrag leren kennen).
Adressen is ook gokken, weet per ongeluk dat de vocht 3 is, omdat ik die zelf heb toegevoegd, gok op co2 op 2 bleek te kloppen...
Allemaal erg leuk, smaakt naar meer...
Dit herken ik, exact dezelfde ervaring.roelofz schreef op vrijdag 16 mei 2025 @ 18:25:
…op 3,3 bleef de hele wtw stil... Na loskoppelen deed de wtw het weer, er zit dus ergens een check waardoor ie weigert, klam zweet was dat.
Ik had nog een ESP8622 ESP-01 liggen waar ik een poging mee wilde wagen. Het is mij niet gelukt, vermoedelijk door het gebrek aan hardware serial waar ik een melding van zag in ESPHome. Ik krijg hem nu ook niet eens meer zichtbaar in het ESPHome dashboard.
Binnenkort maar een ESP32 bestellen. Bij de NodeMCU-32S blijven? Of is een andere een betere optie? Het lijkt mij nogal een “groot” board voor wat het gaat doen.
In principe kun je de RX- en TX-poorten gebruiken, dan moet je alleen wel andere GPIO's opgeven voor de UART, en zul je dat goed moeten configureren in ESPhome. Standaard maakt ESPhome namelijk gebruik van de RX- en TX-poorten voor debug-uitvoer. Dat is ook waarom een ESP32 beter werkt dan een ESP8266, want die heeft maar een enkele hardware unit voor UART, die dus al in gebruik is (de ESPhome docs hebben daar meer info over). Het makkelijkste blijft dus om een ESP32 gebaseerd bordje met GPIO16 en 17 te gebruiken.
Het lijkt er inderdaad op dat die 3.3V-lijn niet voldoet om power te geven. Daarom zul je dus wel een bordje nodig hebben dat 5V converteert naar 3.3V voor de ESP. Een NodeMCU-32S is zo'n bordje, maar eigenlijk voldoet eigenlijk elk bordje dat dat kan. Of als je handig met electronica, kun je ook een voltage regulator gebruiken zoals een AMS1117.
Het lijkt er inderdaad op dat die 3.3V-lijn niet voldoet om power te geven. Daarom zul je dus wel een bordje nodig hebben dat 5V converteert naar 3.3V voor de ESP. Een NodeMCU-32S is zo'n bordje, maar eigenlijk voldoet eigenlijk elk bordje dat dat kan. Of als je handig met electronica, kun je ook een voltage regulator gebruiken zoals een AMS1117.
Als het goed is, is dit nu opgelost en termineert hij de string inderdaad bij de null-byte. Zou je dit willen testen en laten weten of dit werkt of niet?sebaszz1 schreef op vrijdag 16 mei 2025 @ 11:47:
[...]
Klopt via ESPhome. ik geloof je meteenMocht ik iets moeten testen dan hoor ik het graag.
Ik denk dat de RX en TX niet te gebruiken zijn, had die in ieder geval wel opgegeven in de YAML, maar dat had geen effect. Geeft wat mij betreft ook niet, de 16 en 17 doen het, even opletten bij het installeren (en ik had iets beter moeten lezen).
Serial heb ik direct maar weggelaten, of moet die er juist wel in, zou dat de wisselende temp waarden verklaren?
Kan ik nog iets doen met de vochtsensor, worden daar al waarden voor geïnterpreteerd in de code? Ik heb zelf nog niets mee gedaan, las hierboven ook dat je er nog data voor nodig had? Kan ik daar iets voor doen, instellen en loggen?
Serial heb ik direct maar weggelaten, of moet die er juist wel in, zou dat de wisselende temp waarden verklaren?
Kan ik nog iets doen met de vochtsensor, worden daar al waarden voor geïnterpreteerd in de code? Ik heb zelf nog niets mee gedaan, las hierboven ook dat je er nog data voor nodig had? Kan ik daar iets voor doen, instellen en loggen?
Volgensmij is de serial nergens voor nodig. Die implementatie is er vooral voor compleetheid.
De refresh-snelheid van verschillende waarden te hoog zetten zal overigens niet perse goed gaan. Op sommige commando's doet de box er behoorlijk lang over voordat je antwoord krijgt. Dus de update frequentie omhoog zetten kan wat vreemdere dingen opleveren. Laat het even weten als je er toch nog problemen mee hebt.
De humidity-sensor heb ik deze ochtend ingebouwd. Net als de temperatuursensor. Het blijkt dat zowel de CO2-sensor als de humidity-sensor ook een temperatuursensor hebben die uitgelezen kan worden. Een voorbeeldconfiguratie kan als volgt zijn:
De documentatie heb ik ook een update gegeven.
Het kan overigens zijn dat bij het opnieuw flashen het duco component niet geupdate wordt. Dan kun je tijdelijk even de refresh-parameter met een lage waarde toevoegen aan de yaml voor het externe component:
De refresh-snelheid van verschillende waarden te hoog zetten zal overigens niet perse goed gaan. Op sommige commando's doet de box er behoorlijk lang over voordat je antwoord krijgt. Dus de update frequentie omhoog zetten kan wat vreemdere dingen opleveren. Laat het even weten als je er toch nog problemen mee hebt.
De humidity-sensor heb ik deze ochtend ingebouwd. Net als de temperatuursensor. Het blijkt dat zowel de CO2-sensor als de humidity-sensor ook een temperatuursensor hebben die uitgelezen kan worden. Een voorbeeldconfiguratie kan als volgt zijn:
YAML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| sensor: - platform: duco co2: - address: 3 name: "CO2 Bedroom" - address: 4 name: "CO2 Livingroom" temperature: - address: 3 name: "Temperature Bedroom" - address: 4 name: "Temperature Livingroom" - address: 1 name: "Temperature Bathroom" - address: 58 name: "Temperature Office" humidity: - address: 1 name: "Humidity Bathroom" - address: 58 name: "Humidity Office" |
De documentatie heb ik ook een update gegeven.
Het kan overigens zijn dat bij het opnieuw flashen het duco component niet geupdate wordt. Dan kun je tijdelijk even de refresh-parameter met een lage waarde toevoegen aan de yaml voor het externe component:
YAML:
1
2
3
4
5
| external_components: - source: github://pr#7993 refresh: 0s components: - duco |
Ook de temperatuur van sensoren uit de box zelf en de status van de bypass is nu achterhaald. Je kan die op de volgende manier toevoegen:
De documentatie is ook weer geupdate.
(deze waarden zullen alleen beschikbaar zijn voor een Box met WTW-functie)
YAML:
1
2
3
4
5
6
7
8
9
10
11
12
| sensor: - platform: duco bypass: name: "Bypass" temperature_oda: name: "Temperature Outdoor Air" temperature_eha: name: "Temperature Outdoor Exhaust" temperature_sup: name: "Temperature Supply To Room" temperature_eta: name: "Temperature Indoor Exhaust" |
De documentatie is ook weer geupdate.
(deze waarden zullen alleen beschikbaar zijn voor een Box met WTW-functie)
wauw. Bedankt!
Is er ook een mogelijkheid om de zone klep direct aan te sturen? Ik kwam deze niet tegen in de modbus lijst.
Alternatief zou zijn om de "DUCO Mode" op een specifiek adres aan te sturen.
Is er ook een mogelijkheid om de zone klep direct aan te sturen? Ik kwam deze niet tegen in de modbus lijst.
Alternatief zou zijn om de "DUCO Mode" op een specifiek adres aan te sturen.
Heel gave aanvullingen!
Ik heb even ruzie met mdns over de router heen (apart vlan waar esp in zit), maar heb de config al uitgebreid, ben heel erg benieuwd.
Ik heb even ruzie met mdns over de router heen (apart vlan waar esp in zit), maar heb de config al uitgebreid, ben heel erg benieuwd.
Ik heb zelf geen zoneklep, dus dat wordt lastig voor mijzelf om uit te zoeken hoe dit precies werkt. En op het moment ontbreekt het helaas aan tijd om hier veel aan verder te gaan. Maar misschien dat ik nog eens kijk of ik dit toch kan achterhalen en implementeren.sebaszz1 schreef op maandag 19 mei 2025 @ 01:39:
wauw. Bedankt!
Is er ook een mogelijkheid om de zone klep direct aan te sturen? Ik kwam deze niet tegen in de modbus lijst.
Alternatief zou zijn om de "DUCO Mode" op een specifiek adres aan te sturen.
MDNS via hosts (fail!) maar opgelost, dus update kunnen versturen.
Onwaarschijnlijk hoeveel info je nu al kan ophalen.
Alle sensoren lijken ook goede output te geven, heel erg gaaf.
De comfort temperatuur gaat alleen nog alle kanten op, van 0,0 naar 16 naar 24 (22 is ingesteld, dit lijkt echt random).
Maar verder een schat aan info, nu maar eens aankijken hoe de getallen zich ontwikkelen, comfort temp nog wel benieuwd of die nog getweaked kan dat ie wel goede getallen teruggeeft.
Onwaarschijnlijk hoeveel info je nu al kan ophalen.
Alle sensoren lijken ook goede output te geven, heel erg gaaf.
De comfort temperatuur gaat alleen nog alle kanten op, van 0,0 naar 16 naar 24 (22 is ingesteld, dit lijkt echt random).
Maar verder een schat aan info, nu maar eens aankijken hoe de getallen zich ontwikkelen, comfort temp nog wel benieuwd of die nog getweaked kan dat ie wel goede getallen teruggeeft.
De comfort temperatuur vind ik ook vreemd dat die geen stabiele waarde geeft. Welke box heb je precies? Heb je de Energy Comfort 325, of een andere?roelofz schreef op maandag 19 mei 2025 @ 22:32:
MDNS via hosts (fail!) maar opgelost, dus update kunnen versturen.
Onwaarschijnlijk hoeveel info je nu al kan ophalen.
Alle sensoren lijken ook goede output te geven, heel erg gaaf.
De comfort temperatuur gaat alleen nog alle kanten op, van 0,0 naar 16 naar 24 (22 is ingesteld, dit lijkt echt random).
Maar verder een schat aan info, nu maar eens aankijken hoe de getallen zich ontwikkelen, comfort temp nog wel benieuwd of die nog getweaked kan dat ie wel goede getallen teruggeeft.
Ik heb de DucoBox Energy Comfort D325, lijkt mij dezelfde als die van jou.
Welke nodes heb je verder in de box zitten? Zit daar nog wat speciaals tussen? (alsin: wat komt er uit de discovery?)roelofz schreef op dinsdag 20 mei 2025 @ 09:03:
Ik heb de DucoBox Energy Comfort D325, lijkt mij dezelfde als die van jou.
Ik dacht discovery ergens gezien te hebben maar ben het toch kwijt, hoe genereer ik die?
Discovery kun je aanzetten in de YAML van esphome:
Daarna kun je de logs bekijken (bijvoorbeeld via MQTT) en dan zie je elke minuut de node discover voorbij komen. Bij mij ziet er dat bijvoorbeeld zo uit:
YAML:
1
2
| duco: discovery: {} |
Daarna kun je de logs bekijken (bijvoorbeeld via MQTT) en dan zie je elke minuut de node discover voorbij komen. Bij mij ziet er dat bijvoorbeeld zo uit:
code:
1
2
3
4
5
6
7
| [00:00:00][I][duco:200]: Discovered nodes: [00:00:00][I][duco:203]: Node 1: type 17 (BOX) [00:00:00][I][duco:203]: Node 2: type 8 (UCBAT) [00:00:00][I][duco:203]: Node 3: type 12 (UCCO2) [00:00:00][I][duco:203]: Node 4: type 12 (UCCO2) [00:00:00][I][duco:203]: Node 52: type 18 (SWITCH) [00:00:00][I][duco:203]: Node 67: type 9 (UC) |
Dat was weer eenvoudig toe te voegen, thanks!
Hier de logging:
en dit is de logging van de comfort temperature:
(filter in excel heeft wat brackets weg gehaald..)
Heen en weer dus qua statussen terwijl er niets verandert, verder lijkt ie wel de juiste dingen door te geven.. Temperaturen in badkamer en woonkamer zitten wel heel dicht bij elkaar (al zou dat in deze dagen ook wel kunnen kloppen), co2 zie ik mooi bewegen met aanwezigheid van ons in de woonkamer. Dus er gaat al heeeeeel veel goed...
Hier de logging:
code:
1
2
3
4
5
| [10:18:58][I][duco:206]: Discovered nodes: [10:18:58][I][duco:209]: Node 1: type 17 (BOX) [10:18:58][I][duco:209]: Node 2: type 12 (UCCO2) [10:18:58][I][duco:209]: Node 3: type 8 (UCBAT) [10:18:58][I][duco:209]: Node 4: type 10 (UCRH) |
en dit is de logging van de comfort temperature:
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
| [10 18 55 [D [number 12 'DUCO Comfort Temperature' Sending state 16.500000 [10 19 15 [D [number 12 'DUCO Comfort Temperature' Sending state 0.000000 [10 19 25 [D [number 12 'DUCO Comfort Temperature' Sending state 0.000000 [10 19 35 [D [number 12 'DUCO Comfort Temperature' Sending state 0.000000 [10 19 45 [D [number 12 'DUCO Comfort Temperature' Sending state 24.799999 [10 19 55 [D [number 12 'DUCO Comfort Temperature' Sending state 16.500000 [10 20 5 [D [number 12 'DUCO Comfort Temperature' Sending state 0.000000 [10 20 15 [D [number 12 'DUCO Comfort Temperature' Sending state 0.000000 [10 20 25 [D [number 12 'DUCO Comfort Temperature' Sending state 0.000000 [10 20 35 [D [number 12 'DUCO Comfort Temperature' Sending state 0.000000 [10 20 45 [D [number 12 'DUCO Comfort Temperature' Sending state 16.500000 [10 20 55 [D [number 12 'DUCO Comfort Temperature' Sending state 0.000000 [10 21 5 [D [number 12 'DUCO Comfort Temperature' Sending state 16.500000 [10 21 15 [D [number 12 'DUCO Comfort Temperature' Sending state 0.000000 [10 21 25 [D [number 12 'DUCO Comfort Temperature' Sending state 0.100000 [10 21 35 [D [number 12 'DUCO Comfort Temperature' Sending state 0.000000 [10 21 45 [D [number 12 'DUCO Comfort Temperature' Sending state 0.000000 [10 21 55 [D [number 12 'DUCO Comfort Temperature' Sending state 0.000000 [10 22 5 [D [number 12 'DUCO Comfort Temperature' Sending state 16.500000 [10 22 15 [D [number 12 'DUCO Comfort Temperature' Sending state 0.000000 [10 22 25 [D [number 12 'DUCO Comfort Temperature' Sending state 16.500000 [10 22 35 [D [number 12 'DUCO Comfort Temperature' Sending state 0.000000 [10 22 45 [D [number 12 'DUCO Comfort Temperature' Sending state 0.000000 [10 22 55 [D [number 12 'DUCO Comfort Temperature' Sending state 0.000000 [10 23 5 [D [number 12 'DUCO Comfort Temperature' Sending state 0.000000 [10 23 15 [D [number 12 'DUCO Comfort Temperature' Sending state 16.500000 |
(filter in excel heeft wat brackets weg gehaald..)
Heen en weer dus qua statussen terwijl er niets verandert, verder lijkt ie wel de juiste dingen door te geven.. Temperaturen in badkamer en woonkamer zitten wel heel dicht bij elkaar (al zou dat in deze dagen ook wel kunnen kloppen), co2 zie ik mooi bewegen met aanwezigheid van ons in de woonkamer. Dus er gaat al heeeeeel veel goed...
Begrijpelijk. Zou mooi zijn als het luktkokx schreef op maandag 19 mei 2025 @ 18:35:
[...]
Ik heb zelf geen zoneklep, dus dat wordt lastig voor mijzelf om uit te zoeken hoe dit precies werkt. En op het moment ontbreekt het helaas aan tijd om hier veel aan verder te gaan. Maar misschien dat ik nog eens kijk of ik dit toch kan achterhalen en implementeren.
ik zie een vergelijkbaar gedrag met mijn CO2 metingroelofz schreef op maandag 19 mei 2025 @ 22:32:
MDNS via hosts (fail!) maar opgelost, dus update kunnen versturen.
Onwaarschijnlijk hoeveel info je nu al kan ophalen.
Alle sensoren lijken ook goede output te geven, heel erg gaaf.
De comfort temperatuur gaat alleen nog alle kanten op, van 0,0 naar 16 naar 24 (22 is ingesteld, dit lijkt echt random).
Maar verder een schat aan info, nu maar eens aankijken hoe de getallen zich ontwikkelen, comfort temp nog wel benieuwd of die nog getweaked kan dat ie wel goede getallen teruggeeft.
:strip_exif()/f/image/T3neQ2dI0DIGtwQR4vRKzNi1.jpg?f=fotoalbum_large)
Geen idee of er relatie is maar kwam ook onderstaand tegen in de log.
Nee, dat is puur een warning dat een sensor niet de juist eenheid heeft. Denk dat de maker hier de eenheid aan moet passen naar 'd' ipv 'days'.sebaszz1 schreef op woensdag 21 mei 2025 @ 13:12:
Geen idee of er relatie is maar kwam ook onderstaand tegen in de log.
[Afbeelding]
Het gewapper lijkt wel of hij af en toe 0 stuurt, mogelijk doordat er even geen communicatie is ofzo.
Thanks voor die hint! Heb dit meteen aangepast.Septillion schreef op woensdag 21 mei 2025 @ 13:41:
[...]
Nee, dat is puur een warning dat een sensor niet de juist eenheid heeft. Denk dat de maker hier de eenheid aan moet passen naar 'd' ipv 'days'.
Het gewapper lijkt wel of hij af en toe 0 stuurt, mogelijk doordat er even geen communicatie is ofzo.
Hier lijkt het er inderdaad op dat er soms geen geldige meting uit de sensor komt. Ik ga hier even een stapje validatie toevoegen, waarbij ik aanneem dat waardes onder de 300 zeker niet kloppen en dus ook niet doorgestuurd worden.sebaszz1 schreef op woensdag 21 mei 2025 @ 13:12:
[...]
ik zie een vergelijkbaar gedrag met mijn CO2 meting
[Afbeelding]
Hier zie ik heel vaak de waarde 0 langskomen, die kan ik makkelijk filteren (de comfort temperature kan alleen tussen de 10 en de 25.5 zijn, dus dit ga ik zo even implementeren). Maar ik zie ook die waarde van 24.8 die ik niet helemaal kan plaatsen. Kan het zijn dat je verbinding tussen de duco box en de ESP32 niet helemaal stabiel is? Dat zou dit misschien kunnen verklaren. Eventueel kun je ook kijken of je de frequentie van deze updates iets omlaag schroeft, dan krijg je misschien stabielere waarden.roelofz schreef op woensdag 21 mei 2025 @ 12:32:
en dit is de logging van de comfort temperature:
code:
1 2 3 4 5 6 7 8 [10 18 55 [D [number 12 'DUCO Comfort Temperature' Sending state 16.500000 [10 19 15 [D [number 12 'DUCO Comfort Temperature' Sending state 0.000000 [10 19 25 [D [number 12 'DUCO Comfort Temperature' Sending state 0.000000 [10 19 35 [D [number 12 'DUCO Comfort Temperature' Sending state 0.000000 [10 19 45 [D [number 12 'DUCO Comfort Temperature' Sending state 24.799999 [10 19 55 [D [number 12 'DUCO Comfort Temperature' Sending state 16.500000 [10 20 5 [D [number 12 'DUCO Comfort Temperature' Sending state 0.000000 [...]
(filter in excel heeft wat brackets weg gehaald..)
Heen en weer dus qua statussen terwijl er niets verandert, verder lijkt ie wel de juiste dingen door te geven.. Temperaturen in badkamer en woonkamer zitten wel heel dicht bij elkaar (al zou dat in deze dagen ook wel kunnen kloppen), co2 zie ik mooi bewegen met aanwezigheid van ons in de woonkamer. Dus er gaat al heeeeeel veel goed...
Edit: Heb deze validaties meteen geimplementeerd.
De 0,0 is inderdaad weg, ik heb ook de frequentie aangepast.
Ik vind het iets te toevallig dat alleen de comfort temperatuur zou lijden onder loszittende contacten en heb daar ook wel goed op gelet, al waren ze bij de esp wel tricky, schoten eerder makkelijk los, dus juist extra op gelet. Maar de output blijft vreemd. Als ik de temp instel, gaat ie direct weer naar een lagere waarde (16,5), terwijl als ik de ventilatie handmatig aanpas, hoor en zie ik direct resultaat.
Puzzling, kan het ook niet snappen, zit er trouwens error checking in het transport protocol?
Ik vind het iets te toevallig dat alleen de comfort temperatuur zou lijden onder loszittende contacten en heb daar ook wel goed op gelet, al waren ze bij de esp wel tricky, schoten eerder makkelijk los, dus juist extra op gelet. Maar de output blijft vreemd. Als ik de temp instel, gaat ie direct weer naar een lagere waarde (16,5), terwijl als ik de ventilatie handmatig aanpas, hoor en zie ik direct resultaat.
Puzzling, kan het ook niet snappen, zit er trouwens error checking in het transport protocol?
Ja, het protocol heeft een CRC bij elk bericht. Dus ik vind het ook vreemd. Mijn theorie is eigenlijk dat de logic van de Duco Box te veel belast wordt met de hoeveelheid aanvragen.
Bij sensoren als de CO2-sensor zie ik dit ook makkelijk gebeuren. De meeste CO2-sensoren hebben tijd nodig om op een (stabiele) waarde te komen.
De comfort temperatuur vind ik echter wat vreemder. Dat blijft uiteindelijk een waarde die virtueel in de box bestaat, waarmee de aansturing van de bypass geregeld wordt. Dus vaker opvragen zou in theorie niet zo'n probleem moeten zijn. Maar ik weet ook niet precies hoe Duco dit geprogrammeerd heeft.
Bij sensoren als de CO2-sensor zie ik dit ook makkelijk gebeuren. De meeste CO2-sensoren hebben tijd nodig om op een (stabiele) waarde te komen.
De comfort temperatuur vind ik echter wat vreemder. Dat blijft uiteindelijk een waarde die virtueel in de box bestaat, waarmee de aansturing van de bypass geregeld wordt. Dus vaker opvragen zou in theorie niet zo'n probleem moeten zijn. Maar ik weet ook niet precies hoe Duco dit geprogrammeerd heeft.
Als er dus wel een CRC check in zit, kan ik mij een crappy kabel niet voorstellen (al haal ik zo'n ding niet weer via Amazon). Frequentie zit nu op 30 seconden, dat maakt dus ook niet uit, al vind ik 30 ook prima, zou per minuut ook kunnen, want een ingestelde waarde).
Toch even op 60 gezet en dit vind ik raar:
Keurig op 49 seconden van de minuut, maar niet iedere minuut?
Dit is een raar patroon, kan de logica niet vinden hierin.
Nog een keer omgekeerd, iedere (nou ja) 10 seconden ingesteld:
Ik heb de bovenliggende logregel ook bijgevoegd, al weet ik niet of dat de vraag (geef comfort door) of de antwoorddata is. In ieder geval is er een vreemd besef van een minuut, dan wel 10 seconden.
Toch even op 60 gezet en dit vind ik raar:
code:
1
2
3
| [20:03:49][D][number:012]: 'DUCO Comfort Temperature': Sending state 24.799999 [20:04:49][D][number:012]: 'DUCO Comfort Temperature': Sending state 16.500000 [20:08:49][D][number:012]: 'DUCO Comfort Temperature': Sending state 16.500000 |
Keurig op 49 seconden van de minuut, maar niet iedere minuut?
Dit is een raar patroon, kan de logica niet vinden hierin.
Nog een keer omgekeerd, iedere (nou ja) 10 seconden ingesteld:
code:
1
2
3
4
5
6
7
8
9
10
| [20:19:45][D][duco:152]: Duco message sent: 05 24 68 00 12 0A [20:19:45][D][number:012]: 'DUCO Comfort Temperature': Sending state 16.500000 [20:20:25][D][duco:152]: Duco message sent: 05 24 8A 00 12 0A [20:20:25][D][number:012]: 'DUCO Comfort Temperature': Sending state 24.799999 [20:21:05][D][duco:152]: Duco message sent: 05 24 B2 00 12 0A [20:21:05][D][number:012]: 'DUCO Comfort Temperature': Sending state 16.500000 [20:21:25][D][duco:152]: Duco message sent: 05 24 C2 00 12 0A [20:21:25][D][number:012]: 'DUCO Comfort Temperature': Sending state 16.500000 [20:21:35][D][duco:152]: Duco message sent: 05 24 CC 00 12 0A [20:21:35][D][number:012]: 'DUCO Comfort Temperature': Sending state 16.500000 |
Ik heb de bovenliggende logregel ook bijgevoegd, al weet ik niet of dat de vraag (geef comfort door) of de antwoorddata is. In ieder geval is er een vreemd besef van een minuut, dan wel 10 seconden.
Hij filtert op dit moment op de response van de Duco Box. Als die waarde niet tussen de 10.0 en 25.5 graden valt, wordt die niet doorgegeven. Die minuten die je mist zijn dus waar de waarde anders 0 zou zijn. Mogelijk zit het echte probleem in jouw Duco box, dat er telkens rare waarden geset worden.
Eventueel kun je ook op de Duco box zelf een andere waarde instellen, en kijken wat er dan gebeurt? Neemt hij die dan over, of gaat hij dan ook terug naar de 16.5?
Eventueel kun je ook op de Duco box zelf een andere waarde instellen, en kijken wat er dan gebeurt? Neemt hij die dan over, of gaat hij dan ook terug naar de 16.5?
Ah, had niet gedacht aan het weglaten door de nulfiltering, dan is dat raadsel opgelost.
Ik zal vanavond even testen met waarde wijzigen, schroef hem dan ook nog wel een keer open, om zeker te weten dat de contacten goed vast zitten (al lijkt dat laatste echt onwaarschijnlijk).
Ik zal vanavond even testen met waarde wijzigen, schroef hem dan ook nog wel een keer open, om zeker te weten dat de contacten goed vast zitten (al lijkt dat laatste echt onwaarschijnlijk).
Ik heb nog even getest en gechecked.
Contacten zitten goed vast, lijken mij geen oorzaak.
Ik heb handmatig de temperatuur aangepast, maar dit heeft in de app geen effect gehad, waarden zijn nog steeds wisselend.
Contacten zitten goed vast, lijken mij geen oorzaak.
Ik heb handmatig de temperatuur aangepast, maar dit heeft in de app geen effect gehad, waarden zijn nog steeds wisselend.
Ik heb vandaag de ESP32 aangesloten, echter zonder succes 
Met discovery aan zie ik alleen het volgende in de logs:
Met discovery aan zie ik alleen het volgende in de logs:
code:
1
2
3
4
5
6
7
8
9
10
11
| [15:28:06][I][duco:206]: Discovered nodes: [15:28:08][D][duco:152]: Duco message sent: 04 0C AE 02 01 [15:28:11][D][duco:152]: Duco message sent: 04 0C AF 02 01 [15:28:14][D][duco:152]: Duco message sent: 04 0C B0 02 01 [15:28:17][D][duco:152]: Duco message sent: 04 0C B1 02 01 [15:28:20][D][duco:152]: Duco message sent: 04 0C B2 02 01 [15:28:23][D][duco:152]: Duco message sent: 04 0C B3 02 01 [15:28:26][D][duco:152]: Duco message sent: 04 0C B4 02 01 [15:28:29][D][duco:152]: Duco message sent: 04 0C B5 02 01 [15:28:32][D][duco:152]: Duco message sent: 04 0C B6 02 01 [15:28:35][D][duco:152]: Duco message sent: 04 0C B7 02 01 |
Dat is jammerThe_FrankO schreef op donderdag 29 mei 2025 @ 17:31:
Ik heb vandaag de ESP32 aangesloten, echter zonder succes
Met discovery aan zie ik alleen het volgende in de logs:
code:
1 2 3 4 5 6 7 8 9 10 11 [15:28:06][I][duco:206]: Discovered nodes: [15:28:08][D][duco:152]: Duco message sent: 04 0C AE 02 01 [15:28:11][D][duco:152]: Duco message sent: 04 0C AF 02 01 [15:28:14][D][duco:152]: Duco message sent: 04 0C B0 02 01 [15:28:17][D][duco:152]: Duco message sent: 04 0C B1 02 01 [15:28:20][D][duco:152]: Duco message sent: 04 0C B2 02 01 [15:28:23][D][duco:152]: Duco message sent: 04 0C B3 02 01 [15:28:26][D][duco:152]: Duco message sent: 04 0C B4 02 01 [15:28:29][D][duco:152]: Duco message sent: 04 0C B5 02 01 [15:28:32][D][duco:152]: Duco message sent: 04 0C B6 02 01 [15:28:35][D][duco:152]: Duco message sent: 04 0C B7 02 01
Het is gelukt! Ik heb de TX en RX draadjes omgedraaid en nu werkt hetkokx schreef op maandag 2 juni 2025 @ 18:36:
[...]
Dat is jammer. Welke Duco box heb je? Tot nu toe is (naar mijn weten) de esphome module alleen getest op de DucoBox Energy Comfort 325 en DucoBox Energy Premium.
Het werkt prachtig! Bedankt voor het werk.
Krijg jij je comfort temp wel goed door?
Ik blijf het gek vinden dat dit het enige is wat niet werkt (mijn oplossing mag mij kennelijk niet :-) )
Ik blijf het gek vinden dat dit het enige is wat niet werkt (mijn oplossing mag mij kennelijk niet :-) )
Ja, deze komt overeen met de waarde die ingesteld staat op de unit. Maar dit is dus wel statistisch data, ik pas dit nooit aan.roelofz schreef op donderdag 5 juni 2025 @ 20:41:
Krijg jij je comfort temp wel goed door?
Ik blijf het gek vinden dat dit het enige is wat niet werkt (mijn oplossing mag mij kennelijk niet :-) )
Wat ik wel opmerkelijk vind is dat de eerste keer met discovery mijn vochtsensor niet voor kwam in de lijst. Dat terwijl die er wel aan zit en ook waardes worden weergegeven op de unit zelf. Ik heb de ESP toen opnieuw geflashed en het humidity stuk bij sensors toegevoegd en voor address 1 opgegeven.
Sindsdien komt de vochtsensor wel terug in de discovery, echter wel op address 58. Maar toch werkt de vochtsensor, ik krijg de juiste waarde te zien.
Lijkt wel of dat address niet nodig is?
Adres 1 is vrijwel altijd de box, die meestal een kopie doorgeeft van de gegevens van sensoren. Dit is echter slechts een enkele sensor, maar als je maar een enkele humidity sensor hebt zal dat geen probleem opleveren. Maar als je meerdere sensoren hebt, kun je natuurlijk niet de box twee keer toevoegen want dan zou je 2x dezelfde waarde krijgen.
Wel vreemd dat de discovery de humiditysensor niet zag overigens. Bij mij is dat heel stabiel. Na een herstart van de esp doet hij overigens de discovery opnieuw. Vandaar dat na een nieuwe flash die sensor wel naar voren kwam.
Wel vreemd dat de discovery de humiditysensor niet zag overigens. Bij mij is dat heel stabiel. Na een herstart van de esp doet hij overigens de discovery opnieuw. Vandaar dat na een nieuwe flash die sensor wel naar voren kwam.
@kokx
Ik heb een Duco Silent Connect, waarbij ik geprobeerd heb rechtstreeks via een ESP32 op de 12pins connector een uitlezing te doen, echter brengt het me nog niet tot een succes.
Snapshot van de uitkomst via logging is:
Hij stuurt wel signalen, maar lijkt niets te ontvangen.
Kan het zijn dat het mainboard dusdanig anders werkt?
Any advise of stuurrichting om hetgeen verder uit te zoeken ?
De NodeMCU krijgt externe voeding ipv via het mainboard, hij vond die voeding minder fijn en werkte er niet goed op.
Ik heb een Duco Silent Connect, waarbij ik geprobeerd heb rechtstreeks via een ESP32 op de 12pins connector een uitlezing te doen, echter brengt het me nog niet tot een succes.
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
| esphome:
name: ducobox
friendly_name: DucoBox
min_version: 2025.5.0
name_add_mac_suffix: false
external_components:
- source: github://pr#7993
components:
- duco
esp32:
board: esp32dev
framework:
type: esp-idf
ota:
- platform: esphome
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
api:
encryption:
key: !secret api
logger:
uart:
id: uart_bus
tx_pin: GPIO17
rx_pin: GPIO16
baud_rate: 57600
data_bits: 8
parity: NONE
stop_bits: 1
duco:
discovery: {}
text_sensor:
- platform: duco
name: "DUCO Serial Number"
update_interval: "60s"
select:
- platform: duco
name: "DUCO Mode"
sensor:
- platform: duco
co2:
- address: 3
name: "DUCO CO2 Bedroom"
- address: 4
name: "DUCO CO2 Livingroom"
filter_remaining:
name: "DUCO Filter Time Remaining"
flow_level:
name: "DUCO Flow Level"
update_interval: "5s"
time_remaining:
name: "DUCO Mode Time Remaining"
update_interval: "5s"
number:
- platform: duco
name: "DUCO Comfort Temperature"
update_interval: "10s"
time:
- platform: sntp
id: sntp_time
timezone: Europe/Amsterdam
servers:
- 8.8.8.8 |
Snapshot van de uitkomst via logging 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
| [10:50:14][D][duco:152]: Duco message sent: 04 0C 3C 02 01 [10:50:15][D][duco:152]: Duco message sent: 04 0C 3D 02 01 [10:50:16][D][duco:152]: Duco message sent: 04 0C 3E 02 01 [10:50:17][D][duco:152]: Duco message sent: 04 0C 3F 02 01 [10:50:20][D][duco:152]: Duco message sent: 04 0C 40 02 01 [10:50:20][D][duco:152]: Duco message sent: 04 0C 41 02 01 [10:50:21][D][duco:152]: Duco message sent: 05 24 42 00 12 0A [10:50:21][D][duco:152]: Duco message sent: 04 0C 43 02 01 [10:50:23][D][duco:152]: Duco message sent: 04 0C 44 02 01 [10:50:25][I][duco:206]: Discovered nodes: [10:50:25][D][duco:152]: Duco message sent: 07 10 45 01 03 00 49 04 [10:50:25][D][duco:152]: Duco message sent: 04 0C 46 02 01 [10:50:26][D][duco:152]: Duco message sent: 04 0C 47 02 01 [10:50:26][D][duco:152]: Duco message sent: 04 0C 48 02 01 [10:50:28][D][duco:152]: Duco message sent: 07 10 49 01 01 00 1A 10 [10:50:29][D][duco:152]: Duco message sent: 04 0C 4A 02 01 [10:50:30][D][duco:152]: Duco message sent: 04 0C 4B 02 01 [10:50:31][D][duco:152]: Duco message sent: 05 24 4C 00 12 0A [10:50:31][D][duco:152]: Duco message sent: 04 0C 4D 02 01 [10:50:32][D][duco:152]: Duco message sent: 04 0C 4E 02 01 [10:50:35][D][duco:152]: Duco message sent: 04 0C 4F 02 01 [10:50:35][D][duco:152]: Duco message sent: 04 0C 50 02 01 [10:50:36][D][duco:152]: Duco message sent: 04 0C 51 02 01 |
Hij stuurt wel signalen, maar lijkt niets te ontvangen.
Kan het zijn dat het mainboard dusdanig anders werkt?
Any advise of stuurrichting om hetgeen verder uit te zoeken ?
De NodeMCU krijgt externe voeding ipv via het mainboard, hij vond die voeding minder fijn en werkte er niet goed op.
@MisterMeJ Zie ik het correct dat je geen GND verbonden hebt? Ook al gebruik je een externe voeding, zullen de apparaten alsnog een gedeelde ground nodig hebben, anders kunnen ze niet zomaar met elkaar communiceren (ze hebben dan namelijk geen shared reference voor de communicatielijnen).
Voor het gebruiken van de Duco box voor voeding, heb je daarvoor de 5V lijn of de 3.3V gebruikt? Heb namelijk gehoord dat die 3.3V niet geschikt is als voeding.
Een ander probleem zou kunnen zijn dat je de TX en de RX omgedraaid hebt.
Voor het gebruiken van de Duco box voor voeding, heb je daarvoor de 5V lijn of de 3.3V gebruikt? Heb namelijk gehoord dat die 3.3V niet geschikt is als voeding.
Een ander probleem zou kunnen zijn dat je de TX en de RX omgedraaid hebt.
@kokx
Op de foto was de GND inderdaad los, maar is nu wel aangesloten.
Uiteindelijk maakte een van de stekker slecht contact, deze vervangen en voila!
Het werkt!
Box is standaard, geen sensoren (nog) of kleppen dus zal redelijk straight forward worden.
Op de foto was de GND inderdaad los, maar is nu wel aangesloten.
Uiteindelijk maakte een van de stekker slecht contact, deze vervangen en voila!
Het werkt!
Box is standaard, geen sensoren (nog) of kleppen dus zal redelijk straight forward worden.
[ Voor 24% gewijzigd door MisterMeJ op 28-06-2025 16:35 ]
Hey,MisterMeJ schreef op vrijdag 27 juni 2025 @ 15:39:
@kokx
Op de foto was de GND inderdaad los, maar is nu wel aangesloten.
Uiteindelijk maakte een van de stekker slecht contact, deze vervangen en voila!
Het werkt!
Box is standaard, geen sensoren (nog) of kleppen dus zal redelijk straight forward worden.
ben je verder geraakt met deze?
Een vriend van mij heeft namelijk dezelfde en we willen deze ook in home assistant proberen te krijgen.
Vandaag een ESP bordje binnen gekregen en aangesloten op onze D325. Installatie een fluitje van een cent en nu mooi in HA de WTW inzichtelijk. Top scriptje. Thnx @kokx
Itho Daalderop Amber 95 WP (all-electric)
@kokx
Denk je dat er naast de comforttemperatuur en de mode nog andere instelmogelijkheden gevonden gaan worden? Het handmatig instellen van de bypass zou ook wel handig kunnen zijn namelijk.
Denk je dat er naast de comforttemperatuur en de mode nog andere instelmogelijkheden gevonden gaan worden? Het handmatig instellen van de bypass zou ook wel handig kunnen zijn namelijk.
Itho Daalderop Amber 95 WP (all-electric)
Ik verwacht niet dat zaken als het instellen van de bypass nog instelbaar zullen worden. Ik heb deze niet gevonden bij het reverse-engineeren.
Overigens kun je de bypass goed sturen met behulp van de comforttemperatuur.
Overigens kun je de bypass goed sturen met behulp van de comforttemperatuur.
Heb jij inzichtelijk hoe dit dan zou moeten werken, want als ik naar de data van de afgelopen 12 uur kijk dan zou ik verwachten dat de bypass zeker in nacht open zou moeten gaan, maar die heeft nooit anders gestaan dan 0%.kokx schreef op woensdag 10 september 2025 @ 09:33:
Overigens kun je de bypass goed sturen met behulp van de comforttemperatuur.
Itho Daalderop Amber 95 WP (all-electric)
Ik weet het niet exact, maar volgensmij doet hij ongeveer het volgende:
Is de comfort temp < supply-to-room en is de outdoor air > comfort temp en is de outdoor air < supply-to-room? Zet dan de bypass open.
Het is nog wel iets ingewikkelders wat hij precies doet (hoe dat precies werkt weet ik ook niet), maar wat ik zelf bijvoorbeeld doe is de comforttemperatuur in de zomer op 10 graden zetten. Dan staat de bypass open als dat mogelijk is, maar die gaat nooit open als de temperatuur van de binnenkomende lucht hoger is dan de temperatuur van de uitgaande lucht.
Is de comfort temp < supply-to-room en is de outdoor air > comfort temp en is de outdoor air < supply-to-room? Zet dan de bypass open.
Het is nog wel iets ingewikkelders wat hij precies doet (hoe dat precies werkt weet ik ook niet), maar wat ik zelf bijvoorbeeld doe is de comforttemperatuur in de zomer op 10 graden zetten. Dan staat de bypass open als dat mogelijk is, maar die gaat nooit open als de temperatuur van de binnenkomende lucht hoger is dan de temperatuur van de uitgaande lucht.
Na een nachtje monitoren met de comforttemperatuur op 14 graden doet de bypass nog niks.kokx schreef op woensdag 10 september 2025 @ 16:00:
Ik weet het niet exact, maar volgensmij doet hij ongeveer het volgende:
Is de comfort temp < supply-to-room en is de outdoor air > comfort temp en is de outdoor air < supply-to-room? Zet dan de bypass open.
Het is nog wel iets ingewikkelders wat hij precies doet (hoe dat precies werkt weet ik ook niet), maar wat ik zelf bijvoorbeeld doe is de comforttemperatuur in de zomer op 10 graden zetten. Dan staat de bypass open als dat mogelijk is, maar die gaat nooit open als de temperatuur van de binnenkomende lucht hoger is dan de temperatuur van de uitgaande lucht.
Ik ga eens even bij Duco informeren.
Itho Daalderop Amber 95 WP (all-electric)
@Plexxodus Staat de bypass op de box zelf geconfigureerd op "Auto"? Dat kun je zien onder Instellingen > Bypass > Mode.
Yep.kokx schreef op vrijdag 12 september 2025 @ 16:15:
@Plexxodus Staat de bypass op de box zelf geconfigureerd op "Auto"? Dat kun je zien onder Instellingen > Bypass > Mode.
Ik heb inmiddels hier en daar een kleine automatisch bypass opening gezien.
In nightboost zie ik het ook gebeuren, dus het werkt wel maar de voorwaarden blijven onduidelijk.
Inmiddels contact gehad met Duco en de technische afdeling gaat eens kijken of ze de info hebben mbt de voorwaarden.
Itho Daalderop Amber 95 WP (all-electric)
@kokx Dank voor dit top project. Kijk er erg naar uit om hiermee aan de slag te gaan, maar helaas krijg ik de esp32 niet aan de praat.
Alles lijkt te werken, het bordje krijgt ook stroom, maar er geen nodes gevonden. Ik heb al geprobeerd andere pinnen te gebruiken, en de rx/tx pinnen om te draaien, maar de log blijft leeg. Ook heb ik geprobeerd om andere ground pinnen te gebruiken (wellicht gebruikt de duco de rx/tx pinnen pas als er een bepaalde ground gebruikt wordt ofzo
)
Ik gebruik een ESP32 Wroom 30 pins.
Heeft iemand nog een idee wat ik mis doe, of heb ik gewoon een defect bordje?
Alles lijkt te werken, het bordje krijgt ook stroom, maar er geen nodes gevonden. Ik heb al geprobeerd andere pinnen te gebruiken, en de rx/tx pinnen om te draaien, maar de log blijft leeg. Ook heb ik geprobeerd om andere ground pinnen te gebruiken (wellicht gebruikt de duco de rx/tx pinnen pas als er een bepaalde ground gebruikt wordt ofzo
Ik gebruik een ESP32 Wroom 30 pins.
Heeft iemand nog een idee wat ik mis doe, of heb ik gewoon een defect bordje?
edit:
denk toch defecte kabeltjes of slechte aansluiting, na nog wat rommelen, zonder echt wat te veranderen. doet hij het nu wel
denk toch defecte kabeltjes of slechte aansluiting, na nog wat rommelen, zonder echt wat te veranderen. doet hij het nu wel
[ Voor 84% gewijzigd door AkroBatik op 30-09-2025 00:00 ]
.
Kan iemand een foto maken van hoe je die jumpers moet plaatsen?
Ik heb vandaag een esp en jumper besteld! Ben benieuwd!
Ik heb vandaag een esp en jumper besteld! Ben benieuwd!
Een foto van de pin layout in de duco staat op de github: https://github.com/esphom...81955/components/duco.rstlaurens362 schreef op woensdag 1 oktober 2025 @ 16:07:
Kan iemand een foto maken van hoe je die jumpers moet plaatsen?
Ik heb vandaag een esp en jumper besteld! Ben benieuwd!
Daar staat ook de te gebruiken pins op je esp bordje.
Itho Daalderop Amber 95 WP (all-electric)
In HA zie ik nu de duco maar als ik hem op mijn ducobox aansluit staat alles onbekend en laat hij geen waardes zien. Ik heb tx & rx volgens de foto geplaats en gnd heb ik nummer 11 volgens de foto gekozen en 5v heb ik op mijn esp naar nummer 1 gedaan..
Dit is mijn config
iemand enig idee?
:strip_exif()/f/image/oJb0AJ0RgK1AByBgPubBDNMK.png?f=user_large)
De logs laten tevens zien dat hij wel sent...
Dit is mijn config
iemand enig idee?
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
| esphome:
name: ducobord
friendly_name: Ducobord
esp32:
board: esp32dev
framework:
type: arduino
uart:
id: modbus_uart
tx_pin: GPIO17
rx_pin: GPIO16
baud_rate: 57600
duco:
uart_id: modbus_uart
time:
time_id: sntp_time
text_sensor:
- platform: duco
name: "DUCO Serial Number"
update_interval: "60s"
select:
- platform: duco
name: "DUCO Mode"
sensor:
- platform: duco
filter_remaining:
name: "DUCO Filter Time Remaining"
flow_level:
name: "DUCO Flow Level"
update_interval: "5s"
time_remaining:
name: "DUCO Mode Time Remaining"
update_interval: "5s"
number:
- platform: duco
name: "DUCO Comfort Temperature"
update_interval: "10s"
time:
- platform: sntp
id: sntp_time
timezone: Europe/Amsterdam
wifi:
ssid: "LaAd-Netwerk"
password: "=-1234.asdf.e"
# Duco component (als de PR gemerged is)
external_components:
- source: github://pr#7993
components:
- duco
api:
ota:
platform: esphome
password: "ietssterkshier" |
:strip_exif()/f/image/oJb0AJ0RgK1AByBgPubBDNMK.png?f=user_large)
De logs laten tevens zien dat hij wel sent...
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| 20:55:07.897][C][sntp:062]: Server 0: '0.pool.ntp.org' [20:55:07.926][C][sntp:062]: Server 1: '1.pool.ntp.org' [20:55:07.954][C][sntp:062]: Server 2: '2.pool.ntp.org' [20:55:07.955][C][esphome.ota:075]: Over-The-Air updates: [20:55:07.955][C][esphome.ota:075]: Address: ducobord.local:3232 [20:55:07.955][C][esphome.ota:075]: Version: 2 [20:55:07.955][C][esphome.ota:082]: Password configured [20:55:07.967][C][safe_mode:018]: Safe Mode: [20:55:07.967][C][safe_mode:018]: Successful after: 60s [20:55:07.967][C][safe_mode:018]: Invoke after: 10 attempts [20:55:07.967][C][safe_mode:018]: Duration: 300s [20:55:07.971][C][api:207]: Server: [20:55:07.971][C][api:207]: Address: ducobord.local:6053 [20:55:07.972][C][api:217]: Noise encryption: NO [20:55:07.973][C][mdns:213]: mDNS: [20:55:07.973][C][mdns:213]: Hostname: ducobord [20:55:09.008][D][duco:152]: Duco message sent: 04 0C 45 02 01 [20:55:09.121][D][duco:152]: Duco message sent: 04 0C 46 02 01 [20:55:09.577][D][duco:152]: Duco message sent: 04 0C 47 02 01 [20:55:12.111][D][duco:152]: Duco message sent: 04 0C 48 02 01 [20:55:13.975][D][duco:152]: Duco message sent: 04 0C 49 02 01 |
[ Voor 36% gewijzigd door laurens362 op 04-10-2025 20:56 ]
Hij werkt!
Blijkbaar waren de rx en tx pinnen omgedraaid....
Ik heb ze wel volgens de foto en de config geinstalleerd @kokx Dus wellicht zijn niet alle rx tx pins hetzelfde van de 325 ?
Heel erg bedankt! Echt top om met 20 euro de duco te kunnen automatiseren!
@kokx
Blijkbaar waren de rx en tx pinnen omgedraaid....
Ik heb ze wel volgens de foto en de config geinstalleerd @kokx Dus wellicht zijn niet alle rx tx pins hetzelfde van de 325 ?
Heel erg bedankt! Echt top om met 20 euro de duco te kunnen automatiseren!
@kokx
[ Voor 51% gewijzigd door laurens362 op 05-10-2025 16:58 ]
@laurens362 Had je toevallig de RX van de ESP aan de RX van de Duco gehangen, en dus ook de TX aan de TX?
Bij een UART(-like) protocol moet je altijd de TX van het ene apparaat aan de RX van het andere apparaat hangen en andersom. De TX-lijn verstuurd namelijk data, en de RX-lijn ontvangt data.
Bij een UART(-like) protocol moet je altijd de TX van het ene apparaat aan de RX van het andere apparaat hangen en andersom. De TX-lijn verstuurd namelijk data, en de RX-lijn ontvangt data.
dat had ik inderdaad gedaan. Geen idee dat dat zo moest 😅kokx schreef op maandag 6 oktober 2025 @ 09:21:
@laurens362 Had je toevallig de RX van de ESP aan de RX van de Duco gehangen, en dus ook de TX aan de TX?
Bij een UART(-like) protocol moet je altijd de TX van het ene apparaat aan de RX van het andere apparaat hangen en andersom. De TX-lijn verstuurd namelijk data, en de RX-lijn ontvangt data.
Ook ik heb gisteravond onze (nieuwe) D350 voorzien van een esphome interface. @kokx Fijn dat je dit component hebt geschreven! Vond het ook leuk om je detective verhaal te lezen. Dit soort dingen vind ik zelf ook altijd mooi om uit te dokteren.
Omdat ik zelf de voorkeur heb voor ethernet heb ik een WT32-ETH01 gebruikt. Het was eerst even puzzelen waar ik deze het mooiste kon wegwerken/bevestigingen. Uiteindelijk bleek één van de ribben in de unit geschikt om iets te fabrieken. Ik heb een beugeltje geprint dat de WT32-ETH01 op zijn plaats houdt, met een kapje zodat het geheel "om" de rib heen zit, dit kan zo geen kant meer op. Dat was weer een leuk avondje hobbyen!
De step bestanden heb ik op github gezet, samen met een werkende yaml voor de WT32-ETH01.
Dank aan iedereen die heeft bijgedragen aan dit component!
Omdat ik zelf de voorkeur heb voor ethernet heb ik een WT32-ETH01 gebruikt. Het was eerst even puzzelen waar ik deze het mooiste kon wegwerken/bevestigingen. Uiteindelijk bleek één van de ribben in de unit geschikt om iets te fabrieken. Ik heb een beugeltje geprint dat de WT32-ETH01 op zijn plaats houdt, met een kapje zodat het geheel "om" de rib heen zit, dit kan zo geen kant meer op. Dat was weer een leuk avondje hobbyen!
![]() | ![]() | ![]() |
Dank aan iedereen die heeft bijgedragen aan dit component!
Ziet er heel gelikt uit @leime! Wat voor kabel gebruik je precies tussen de WT32-ETH01 en de Duco? Ziet er iniedergeval veel beter uit dan wat dupont jumpers.
Bedankt! Dat is een stukje 4x0,34 pur kabel* die ik aan een 2x6 female header heb gesoldeerd met daaromheen een 3d geprint kapje. Beetje overkill, maar ik vind het leuk zo wat te knutselen.
:strip_exif()/f/image/iN1KbIrALax6pcuZgF9qBq9v.jpg?f=fotoalbum_large)
*) Ik werk in de industriële automatisering, daar is dat redelijk gangbaar spul. We kopen die in standaard lengtes, dus er zijn wel eens stukjes over. Bijvoorbeeld zoiets. Kan ik je blij maken met een stukje?
:strip_exif()/f/image/iN1KbIrALax6pcuZgF9qBq9v.jpg?f=fotoalbum_large)
*) Ik werk in de industriële automatisering, daar is dat redelijk gangbaar spul. We kopen die in standaard lengtes, dus er zijn wel eens stukjes over. Bijvoorbeeld zoiets. Kan ik je blij maken met een stukje?
Helaas laat Duco het afweten, geen info beschikbaar.Plexxodus schreef op zaterdag 13 september 2025 @ 19:57:
[...]
Inmiddels contact gehad met Duco en de technische afdeling gaat eens kijken of ze de info hebben mbt de voorwaarden.
Itho Daalderop Amber 95 WP (all-electric)
Ik had alleen nog esp-01's liggen dus moest even een nieuwe ESP bestellen (is een esp-32D geworden) maar het werkt nu. Erg makkelijk proces, helemaal als je ESPhome al een beetje kent.
Initeel miste ik alleen nog de filter time of het %. Die kan ik op mijn schermpje wel zien. Blijkbaar had het even tijd nodig, of dat ik door het menu scrolde op de unit.
Het werkt dus ook met een Duco WTW DucoBox Energy 460 2ZS.
Initeel miste ik alleen nog de filter time of het %. Die kan ik op mijn schermpje wel zien. Blijkbaar had het even tijd nodig, of dat ik door het menu scrolde op de unit.
Het werkt dus ook met een Duco WTW DucoBox Energy 460 2ZS.
[ Voor 5% gewijzigd door Duck01 op 02-11-2025 16:25 ]
Ik wil hierbij kokx ook hartelijk danken voor het delen van zijn oplossing! Ik zou zweren dat ik TX op RX en RX op TX had aangesloten, maar pas na het omdraaien ging het werken. Ook gebruik ik de 5V aansluiting. Op 3.3V ging de ESP32 niet aan.
Hier is de duco config die ik gebruik. Misschien nuttig voor anderen.
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
| external_components:
- source: github://pr#7993
components:
- duco
uart:
id: duco_uart
tx_pin: GPIO17
rx_pin: GPIO16
baud_rate: 57600
duco:
uart_id: duco_uart
discovery: {}
time:
time_id: sntp_time
select:
- platform: duco
name: "Mode"
sensor:
- platform: duco
co2:
- address: 3
name: "CO2 bedroom"
- address: 4
name: "CO2 livingroom"
filter_remaining:
name: "Filter time remaining"
flow_level:
name: "Flow level"
time_remaining:
name: "Mode time remaining"
bypass:
name: "Bypass"
temperature_oda:
name: "Fresh air from outside temperature"
temperature_eha:
name: "Stale air to outside temperature"
temperature_sup:
name: "Fresh air to inside temperature"
temperature_eta:
name: "Stale air from inside temperature"
number:
- platform: duco
name: "Comfort temperature" |
Ik heb hetzelfde, echter heb ik alle mogelijke opties qua pins die gebruikt worden (die waar Rx TX bij staat en die waar gio16/17 bij staat) maar ik krijg in geen enkele situatie data te zien in de logging.The_FrankO schreef op donderdag 29 mei 2025 @ 17:31:
Ik heb vandaag de ESP32 aangesloten, echter zonder succes
Met discovery aan zie ik alleen het volgende in de logs:
code:
1 2 3 4 5 6 7 8 9 10 11 [15:28:06][I][duco:206]: Discovered nodes: [15:28:08][D][duco:152]: Duco message sent: 04 0C AE 02 01 [15:28:11][D][duco:152]: Duco message sent: 04 0C AF 02 01 [15:28:14][D][duco:152]: Duco message sent: 04 0C B0 02 01 [15:28:17][D][duco:152]: Duco message sent: 04 0C B1 02 01 [15:28:20][D][duco:152]: Duco message sent: 04 0C B2 02 01 [15:28:23][D][duco:152]: Duco message sent: 04 0C B3 02 01 [15:28:26][D][duco:152]: Duco message sent: 04 0C B4 02 01 [15:28:29][D][duco:152]: Duco message sent: 04 0C B5 02 01 [15:28:32][D][duco:152]: Duco message sent: 04 0C B6 02 01 [15:28:35][D][duco:152]: Duco message sent: 04 0C B7 02 01
EDIT: misschien moet je dit ook niet savonds laat doen, maar vandaag lukte het direct met voor mijn gevoel niks anders dan dat ik gisteren gedaan had
EDIT2: Wat me nog wel opvalt is volgens mij hetzelfde als Roelofz, elke keer als ik via HA de comfort temp aanpas dan zie ik binnen 5 sec de value weer terug springen naar 16.5 graden.
[ Voor 12% gewijzigd door blubgup op 09-11-2025 15:10 ]
/f/image/mrZjhMzwrwIORgTYbAl6OQfh.png?f=fotoalbum_small)
:strip_exif()/f/image/r2ScPW1MbARf5ehB1KuVj7GX.jpg?f=fotoalbum_small)
:strip_exif()/f/image/W20AMeWdJFZhaQKs6vzDMh5Z.jpg?f=fotoalbum_small)
:strip_exif()/f/image/6YcCD8ga7HO6fIxYFsSAsmfA.jpg?f=fotoalbum_small)
:strip_exif()/f/image/Joc8j3SX0mpChKaBjKw1JauR.jpg?f=fotoalbum_small)
:strip_exif()/f/image/Le0wmjzZbnoGqzE9VTC1yyU6.jpg?f=fotoalbum_small)
:strip_exif()/f/image/W14dDB2sWwrkrcAWbPS6Ggr2.jpg?f=fotoalbum_small)
/f/image/Pic1OFKM1Lnx9WM4yJXMPfI0.png?f=fotoalbum_small)
/f/image/b6JV182Ky0URFMSYFNNDBaZf.png?f=fotoalbum_small)
/f/image/5IVWdEzT6OIqJG25gXsk3L91.png?f=fotoalbum_small)
/f/image/E4k7HP1K8pGwYxd82Y4wEigV.png?f=fotoalbum_small)
/f/image/9WlN9ZAsnFzFuQN0i7hfwQdo.png?f=fotoalbum_small)
/f/image/5j31dLrsuJby1rrzCDVqGJMn.png?f=fotoalbum_small)
/f/image/cWhApzg9fqHJ7pFGUNxmdVgr.png?f=fotoalbum_small)
/f/image/k4KHHRH12UzVS3mpJ1qumc0L.png?f=fotoalbum_small)
/f/image/FvHKFbj2iXfgjWSlayUHAT8j.png?f=fotoalbum_small)
/f/image/OFRXFVFZxCy9GHE5QobrTkgk.png?f=fotoalbum_small)
/f/image/uCVXmldkYtjqkWp9Yl15Gs8W.png?f=fotoalbum_small)
/f/image/AJa2RkbKERff5XfSRnIQrGJj.png?f=fotoalbum_small)
/f/image/irnjtTXHrBb5mqo9v202WLvB.png?f=fotoalbum_small)
:strip_exif()/f/image/40TKIyHKVeqLWv4jM26c7o78.jpg?f=fotoalbum_large)
:strip_exif()/f/image/jCmpdWpatBVTosSpKxQEUyxl.jpg?f=fotoalbum_tile)
:strip_exif()/f/image/Wk07e4Mi6aId0WCuFg9ceQb1.jpg?f=fotoalbum_tile)
/f/image/I6gBY7ZRSARCgvmgHyPkdkBb.png?f=fotoalbum_tile)