Duco energy comfort 325 icm Home Assistant

Pagina: 1 2 Laatste
Acties:

Vraag


Acties:
  • +1 Henk 'm!

  • laurens362
  • Registratie: Juni 2013
  • Laatst online: 19:15
Hoi,

Ik vroeg me af wat de manier is om de duco te kunnen laten communiceren met HA.
Ik wil namelijk graag de duco via home assistant kunnen besturen.

Vooralsnog het "enige" wat ik bedacht had is een rf 868 mhz controller.
Suggesties zijn welkom!

Alle reacties


Acties:
  • 0 Henk 'm!

  • bassa91
  • Registratie: Januari 2024
  • Laatst online: 21-03 23:06
Ik volg dit graag. Ben hier ook naar opzoek.

Acties:
  • +1 Henk 'm!

  • Gizz
  • Registratie: Maart 2001
  • Laatst online: 22:37

Gizz

Dunder-Mifflin, Inc.

Open AIR (open source smart ventilatieaansturing) ?

Ken verder de Duco niet, maar als ik even Google zie ik dat je hem kunt gebruiken met een Connectivity board waarmee je lokaal kunt aansturen via modbus en een REST API. Dus mogelijkheden genoeg lijkt me :)

edit: kijkend naar de technische brochure is hij ook met een 0-10V signaal aan te sturen.

[ Voor 21% gewijzigd door Gizz op 12-03-2024 15:25 ]

Canon EOS 5Dm3 + 5D + 7D + 300D + 1000FN + EF 17-40 4L + EF 35 1.4L + EF 50 1.8 + EF 80-200 2.8L + 550EX


Acties:
  • +1 Henk 'm!

  • marnie
  • Registratie: November 2016
  • Nu online
Ik heb sinds een week een Ducobox Energy Comfort met zone kleppen en een Duco Connectivity Board.
De data die de Connectivity board geeft is, wat ik achterhaal, anders dan de oude communication Print.

Ik heb modbus getest maar gebruik zelf de restapi met homeassistant. Ik ken twee belangrijke urls met data:
https://internal-ip/info en https://internal-ip/info/nodes.

De IaqCo2 en IaqRh waardes zijn kwaliteitswaardes gebaseerd op CO2 of HR zie oa de modbus datablad https://www.duco.eu/Wes/C...l)_638487876175401607.pdf bladzijde 3. Het zijn niet de CO2 waardes in ppm en RH waardes in % maar kwaliteitslabels die Duco er aan heeft gehangen.

Ik mis in de JSON data de werkelijke RH en CO2 waardes evenals de temperatuur waardes van de aanwezige sensoren. Ik weet dat deze gegevens via de installation app bereikbaar zijn en ook de setpoints zijn aanpasbaar, echter deze app wordt door Duco alleen open gezet voor installateurs. De Duco api met de Connectivity Board is op dit moment voor particulieren zeer beperkt of is er nog een url met de missende data?

Mijn, nog in ontwikkeling zijnde, setup:
Toegevoegd in configuration.yaml
code:
1
rest: !include rest.yaml

In rest.yaml:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
- resource: https://192.168.1.14/info
  scan_interval: 3600
  verify_ssl: false
  sensor:
# general box
    - unique_id: ducobox_timefilterremain
      name: Ducobox Filter resttijd
      value_template: "{{ value_json['HeatRecovery']['General']['TimeFilterRemain']['Val'] }}"
      device_class: duration
      unit_of_measurement: "d"


- resource: https://192.168.1.14/info/nodes
  scan_interval: 15
  verify_ssl: false
  sensor:
#node 1 the ducobox
    - unique_id: ducobox_node1_state
      name: Ducobox - Status
      value_template: "{{ value_json['Nodes'][0]['Ventilation']['State']['Val'] }}"
    - unique_id: ducobox_node1_mode
      name: Ducobox - Mode
      value_template: "{{ value_json['Nodes'][0]['Ventilation']['Mode']['Val'] }}"
    - unique_id: ducobox_node1_FlowLvlTgt
      name: Ducobox - Flow Level Target
      value_template: "{{ value_json['Nodes'][0]['Ventilation']['FlowLvlTgt']['Val'] }}"
      unit_of_measurement: "%"
    - unique_id: ducobox_node1_TimeStateRemain
      name: Ducobox - tijd status resterend
      value_template: "{{ value_json['Nodes'][0]['Ventilation']['TimeStateRemain']['Val'] }}"
    - unique_id: ducobox_node1_TimeStateEnd
      name: Ducobox - tijd status eind
      value_template: "{{ value_json['Nodes'][0]['Ventilation']['TimeStateEnd']['Val'] }}"

#node 1 HR sensor
    - unique_id: ducobox_node1_iaqRh
      name: Ducobox - RH air quality
      value_template: "{{ value_json['Nodes'][6]['Sensor']['IaqRh']['Val'] }}"
      unit_of_measurement: "%"

#node3 CO2 sensor wonen zone 1
    - unique_id: ducobox_node3_iaqCO2
      name: Ducobox wonen Co2 air quality
      value_template: "{{ value_json['Nodes'][3]['Sensor']['IaqCo2']['Val'] }}"
      unit_of_measurement: "%"

#node4 CO2 sensor slapen zone 2
    - unique_id: ducobox_node4_iaqCO2
      name: Ducobox slapen Co2 air quality
      value_template: "{{ value_json['Nodes'][4]['Sensor']['IaqCo2']['Val'] }}"
      unit_of_measurement: "%"

Pas voor eigen gebruik het ip nummer, entiteiten en node id's aan.

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


Acties:
  • 0 Henk 'm!

  • dude_123
  • Registratie: December 2017
  • Laatst online: 29-01 10:44
Ik heb ooit een poging gedaan. Het werkt wel een beetje, maar ik ben geen coder.

Wellicht hebben jullie hier iets aan:

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
sensor:
  ## Duco Ventilation Box
  - platform: rest
    resource: http://[IP ADDRESS]/nodeinfoget?node=1
    name: DucoBox
    json_attributes:
      - trgt
      - actl
      - ovrl
      - mode
      - error
    value_template: "{{ value_json.state }}"
  - platform: rest
    resource: http://[IP ADDRESS]/boxinfoget
    name: DucoBox2
    json_attributes:
      - EnergyInfo
      - General
      - EnergyCalib
    value_template: "{{ value_json.performance.powernow }}"

  - platform: template
    sensors:
      duco_temp_outside:
        friendly_name: "Duco outside temperature"
        value_template: '{{ states.sensor.ducobox2.attributes["EnergyInfo"]["TempODA"] | int / 10 }}'
        unit_of_measurement: °C
      duco_temp_inside:
        friendly_name: "Duco inside temperature"
        value_template: '{{ states.sensor.ducobox2.attributes["EnergyInfo"]["TempSUP"] | int / 10 }}'
        unit_of_measurement: °C
      pressuretotal:
        friendly_name: "Duco Total Pressure"
        value_template: '{{ states.sensor.ducobox2.attributes["EnergyInfo"]["SupplyFanPressActual"] | int }}'
        unit_of_measurement: kPa
      duco_powernow:
        friendly_name: "Duco Fan speed"
        value_template: '{{ states.sensor.ducobox2.attributes["Performance"]["SupplyFanSpeed"] | int  }}'
        unit_of_measurement: rpm
      duco_poweravg:
        friendly_name: "Duco Power Average"
        value_template: '{{ states.sensor.ducobox2.attributes["Performance"]["PowerAvg"] }}'
      duco_powermax:
        friendly_name: "Duco Power Max"
        value_template: '{{ states.sensor.ducobox2.attributes["Performance"]["PowerMax"] }}'
      duco_error:
        friendly_name: "Duco Error "
        value_template: '{{ states.sensor.ducobox.attributes["error"] }}'

### Rest Commands
rest_command:
  duco_fan_set_1:
    url: http://[IP ADDRESS]/nodesetoperstate?node=1&value=MAN1&cntdwn=600
  duco_fan_set_2:
    url: http://[IP ADDRESS]/nodesetoperstate?node=1&value=MAN2&cntdwn=600
  duco_fan_set_3:
    url: http://[IP ADDRESS]/nodesetoperstate?node=1&value=MAN3&cntdwn=600


Ik heb dit snel in elkaar geprutst. De rest commands werken. Zo zet ik met automation de ducobox op stand 3 na i minuut de lamp aan op het toilet. De timeout staat dan meteen op 600 seconden.


Als ik ga kijken naar de co2 waarden dan lijken dat wel ppms te zijn:
http://[IP ADDRESS]/nodeinfoget?node=2 <-- node 1 is ducobox, node 2 is sensor in huiskamer:

"co2 443"

Ik heb daar verder nog niets mee gedaan.

edit: type vout

Acties:
  • +1 Henk 'm!

  • marnie
  • Registratie: November 2016
  • Nu online
@dude_123 Je code is voor de Duco Communication Print, deze is/wordt vervangen door de Connectivity Board. Met je code is niets mis maar kan niet gebruikt worden voor het nieuwe board.
Verschil tussen de borden:
ItemCommunication PrintConnectivity Board
LANJaJa
WifiNeeJa
CO2 uitlezen in ppmjanee (alleen kwaliteitspercentage)
RH uitlezenJanee (alleen kwaliteitspercentage)
Temperatuur sensors uitlezenJaNee
Gebruik Installation AppNee (wifi nodig)Nee (alleen voor geverifieerde installateurs)
Uitlezen filter resttijd JaJa
Uitlezen box debietJaJa
Modbus / restapiJaJa
Bekende Rest url'shttps://[IP ADDRESS]/nodeinfoget?node=1
https://[IP ADDRESS]/boxinfoget
https://[IP ADDRESS]/api (hier vind je de belangrijkste overige url's.)

Ter beoordeling/rectificatie....

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


Acties:
  • 0 Henk 'm!

  • dude_123
  • Registratie: December 2017
  • Laatst online: 29-01 10:44
@marnie top overzicht.

Ah, daar was ik me totaal niet bewust van. Lijkt het maar, of is het niet echt een upgrade, op de wifi na.

Acties:
  • 0 Henk 'm!

  • marnie
  • Registratie: November 2016
  • Nu online
Lijkt het maar, of is het niet echt een upgrade, op de wifi na.
Op wifi na is het inderdaad geen upgrade. De beschikbare sensordata in de openbare local api is minder (temperaturen missen) en verslechterd (CO2 en RH). Duco belooft koppeling met domotica en gebouwenbeheersing, de koppeling (restapi/modbus) is aanwezig nu de data nog. Op dit moment is de Connectivity Board zijn geld niet waard voor gebruik in Homeassistant.

Overigens vind ik de Energy Comfort 325 als WTW een prima product, goed instelbaar naar de eigen woning, nu de domotica koppeling nog.

[ Voor 7% gewijzigd door marnie op 01-05-2024 10:15 ]

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


Acties:
  • 0 Henk 'm!

  • Batilan
  • Registratie: December 2009
  • Laatst online: 19:56
marnie schreef op dinsdag 30 april 2024 @ 15:23:
[...]

Op wifi na is het inderdaad geen upgrade. De beschikbare sensordata in de openbare local api is minder (temperaturen missen) en verslechterd (CO2 en RH). Duco belooft koppeling met domotica en gebouwenbeheersing, de koppeling (restapi/modbus) is aanwezig nu de data nog. Op dit moment is de Connectivity Board zijn geld niet waard.
:
In 'het andere Ducobox topic' gaf je aan dat deze sensor data wel uitgelezen kan worden door de Installer app? Dat zou dus betekenen dat de informatie wel beschikbaar gesteld moet worden door de connectivity print? We weten alleen nog niet hoe?

Overigens kun je ook de Duco install kit kopen voor € 95,- welke in feite een connectivity board in een mooi doosje is (maar zonder header op het board waardoor je hem er naast moet leggen en verbinden met een lint kabeltje met een header).

Acties:
  • 0 Henk 'm!

  • marnie
  • Registratie: November 2016
  • Nu online
In 'het andere Ducobox topic' gaf je aan dat deze sensor data wel uitgelezen kan worden door de Installer app? Dat zou dus betekenen dat de informatie wel beschikbaar gesteld moet worden door de connectivity print? We weten alleen nog niet hoe?
Ja, ik heb de wtw zelf geïnstalleerd en de installer app daarna ook. Echter van Duco kreeg ik geen akkoord voor het gebruik van de app, men beschouwt particuliere installateurs niet als installateur die toegang verkrijgt.
Ik kan de app nog wel in maar kan de installatie niet via de app uitvoeren. Wel kan ik met de app de gemeten RH waarde en CO2 waardes uitlezen van de aangesloten sensoren, in ppm bij CO2 en % bij vochtigheid. De waardes zijn aanwezig maar niet toegankelijk voor de gebruiker bij gebruik van het connectivity board.

Het kunnen uitlezen van de RH waarde in de app heeft me geholpen bij het zoeken naar de reden dat de box opeens, gedurende een paar uur, onnodig een verhoogd debiet gaf: de gemeten RH waarde was hoger dan het RH setpoint. Door het setpoint te verhogen kwam de box weer in zijn normale bedrijfsstatus. Het kunnen uitlezen van deze waardes heeft voor een gebruiker echt wel nut.

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


Acties:
  • 0 Henk 'm!

  • Batilan
  • Registratie: December 2009
  • Laatst online: 19:56
marnie schreef op dinsdag 30 april 2024 @ 20:21:
[...]

Ja, ik heb de wtw zelf geïnstalleerd en de installer app daarna ook. Echter van Duco kreeg ik geen akkoord voor het gebruik van de app, men beschouwt particuliere installateurs niet als installateur die toegang verkrijgt.
Ik kan de app nog wel in maar kan de installatie niet via de app uitvoeren. Wel kan ik met de app de gemeten RH waarde en CO2 waardes uitlezen van de aangesloten sensoren, in ppm bij CO2 en % bij vochtigheid. De waardes zijn aanwezig maar niet toegankelijk voor de gebruiker bij gebruik van het connectivity board.

Het kunnen uitlezen van de RH waarde in de app heeft me geholpen bij het zoeken naar de reden dat de box opeens, gedurende een paar uur, onnodig een verhoogd debiet gaf: de gemeten RH waarde was hoger dan het RH setpoint. Door het setpoint te verhogen kwam de box weer in zijn normale bedrijfsstatus. Het kunnen uitlezen van deze waardes heeft voor een gebruiker echt wel nut.
OK, dus zal wellicht lastig worden aan deze data te geraken :'( (althans met eigen gebouwde software). Wel erg vervelend, ik vraag me af welk risico Duco nu precies probeert te tackelen. Dat terwijl een enthousiaste Tweaker natuurlijk vaak om advies gevraagd wordt door zijn netwerk van vrienden, familie, collega's etc. Dat moet Duco toch ook weten :)

Wellicht kunnen we er als developer wel verder mee komen, maar ik weet niet welke eisen Duco aan developers stelt. Ik vroeg me ook al af waarom ik de IaqCo2 continu op 96 bleef staan terwijl ik toch het toerental hoor varieren. Hij zal zelf wel vinden dat de kwaliteit gelijk blijft bij oplopende CO2 productie doordat ie dan ook harder gaat draaien en het CO2 niveau dus weer 'tijdig' naar beneden krijgt.

Wellicht dan toch maar een oude communication board aanschaffen (of een ESP op de seriële verbinding).

[ Voor 5% gewijzigd door Batilan op 30-04-2024 22:01 ]


Acties:
  • 0 Henk 'm!

  • Dirk Diggler
  • Registratie: Januari 2006
  • Laatst online: 10-05 09:27
Heeft iemand hier ondertussen al een manier gevonden om de gemeten waardes uit te lezen/in home assistent te krijgen?

Ik heb mijn ducobox focus gisteren geïnstalleerd, en ging er nogal naïef vanuit dat dit met de communication print out of de box zou werken, wat dus nog altijd niet het geval is. Ik ga zelf deze week eens proberen of ik via modbus extra waardes kan uitlezen.

Acties:
  • +1 Henk 'm!

  • fudgee
  • Registratie: Augustus 2024
  • Laatst online: 01-05 08:45
@Dirk Diggler met de hulp van de post van @marnie heb ik de waarde die beschikbaar zijn via de Connectivity Board Api in Home Assistant weten te krijgen (zie afbeelding hieronder). Het enige wat ik nog niet kan in HA is het aanpassen van de ventilatiestand van AUTO naar bijv. MAN1. Ik vermoed dat ik hiervoor een bepaalde API endpoint nodig heb. Ik heb alleen geen idee hoe ik erachter kom welke. De API documentatie (https://connectivity.duco.eu/) zit achter een inlogscherm waar je alleen in kan als officiele installateur.

@marnie: Weet je toevallig of en hoe ik de ventilatiestand kan aanpassen via de Rest API van de Connectivity Board?

Edit: Ik denk dat ik de API endpoint heb gevonden om de ventilatiestand (VentilationState) aan te passen:
code:
1
https://<my_ip>/action/nodes/1


Ik heb alleen nog te weinig kennis van Rest API's om te weten hoe ik de functie `SetVentilationState` kan aanpassen

Afbeeldingslocatie: https://tweakers.net/i/AS0vMkx4Ds7Spxk06xth46CM9hc=/full-fit-in/4000x4000/filters:no_upscale():fill(white):strip_exif()/f/image/IJe2h6kxSrzeu6G8CGvCSRAo.png?f=user_large

[ Voor 13% gewijzigd door fudgee op 06-08-2024 13:56 ]


Acties:
  • +2 Henk 'm!

  • marnie
  • Registratie: November 2016
  • Nu online
@marnie: Weet je toevallig of en hoe ik de ventilatiestand kan aanpassen via de Rest API van de Connectivity Board?
@fudgee
Naast de code in marnie in "Duco energy comfort 325 icm Home Assistant" heb ik
in configuration bij files toegevoegd:
YAML:
1
2
rest_command: !include rest_command.yaml
fan: !include fan.yaml

en in de nieuwe rest_command.yaml file
YAML:
1
2
3
4
5
6
7
8
9
10
11
#
# Duco WTW api change commands
#
ducobox_state_change:
  url: https://192.168.1.14/action/nodes/{{ nodeId }}
  method: POST
  headers:
    accept: "application/json"
    content_type: "application/json"
  payload: '{"Action":"SetVentilationState","Val":"{{ state }}"}'
  verify_ssl: false

Dit creëert de service RESTful Command: ducobox_state_change

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


Acties:
  • 0 Henk 'm!

  • marnie
  • Registratie: November 2016
  • Nu online
En in fan.yaml:
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
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
#
# WTW Ducobox
#
- platform: template
  fans:
    ducobox:
      unique_id: ducobox_ventilatie_control
      friendly_name: "Ducobox"
      value_template: >
        {% if states('sensor.ducobox_status') != 'EMPT' %}
          on
        {% else %}
          off
        {% endif %}
      turn_on:
        - service: rest_command.ducobox_state_change
          data:
            nodeId: "1"
            state: AUTO
      turn_off:
        - service: rest_command.ducobox_state_change
          data:
            nodeId: "1"
            state: EMPT
      preset_modes:
        - "Auto"
        - "Permanent manual 1"
        - "Permanent manual 2"
        - "Permanent manual 3"
        - "Manual 1"
        - "Manual 2"
        - "Manual 3"
        - "Afwezig"
      preset_mode_template: >
        {% if states('sensor.ducobox_status') == "CNT1" %}
          Permanent manual 1
        {% elif states('sensor.ducobox_status') == "CNT2" %}
          Permanent manual 2
        {% elif states('sensor.ducobox_status') == "CNT3" %}
          Permanent manual 3
        {% elif states('sensor.ducobox_status') == "MAN1" %}
          Manual 1
        {% elif states('sensor.ducobox_status') == "MAN2" %}
          Manual 2
        {% elif states('sensor.ducobox_status') == "MAN3" %}
          Manual 3
        {% elif states('sensor.ducobox_status') == "EMPT" %}
          Afwezig
        {% else %}
          Auto
        {% endif %}
      set_preset_mode:
        - service: rest_command.ducobox_state_change
          data:
            nodeId: "1"
            state: >
              {% if preset_mode == "Permanent manual 1" %}
                CNT1
              {% elif preset_mode == "Permanent manual 2" %}
                CNT2
              {% elif preset_mode == "Permanent manual 3" %}
                CNT3
              {% elif preset_mode == "Manual 1" %}
                MAN1
              {% elif preset_mode == "Manual 2" %}
                MAN2
              {% elif preset_mode == "Manual 3" %}
                MAN3
              {% elif preset_mode == "Afwezig" %}
                EMPT
              {% else %}
                AUTO
              {% endif %}
# Ducobox wonen
    wonen:
      unique_id: ducobox_ventilatie_wonen
      friendly_name: "Wonen"
      value_template: >
        {% if states('sensor.ducobox_status') != 'EMPT' %}
          on
        {% else %}
          off
        {% endif %}
      turn_on:
        - service: rest_command.ducobox_state_change
          data:
            nodeId: "2"
            state: AUTO
      turn_off:
        - service: rest_command.ducobox_state_change
          data:
            nodeId: "2"
            state: EMPT
      preset_modes:
        - "Auto"
        - "Permanent manual 1"
        - "Permanent manual 2"
        - "Permanent manual 3"
        - "Manual 1"
        - "Manual 2"
        - "Manual 3"
      preset_mode_template: >
        {% if states('sensor.ducobox_status') == "CNT1" %}
          Permanent manual 1
        {% elif states('sensor.ducobox_status') == "CNT2" %}
          Permanent manual 2
        {% elif states('sensor.ducobox_status') == "CNT3" %}
          Permanent manual 3
        {% elif states('sensor.ducobox_status') == "MAN1" %}
          Manual 1
        {% elif states('sensor.ducobox_status') == "MAN2" %}
          Manual 2
        {% elif states('sensor.ducobox_status') == "MAN3" %}
          Manual 3
        {% else %}
          Auto
        {% endif %}
      set_preset_mode:
        - service: rest_command.ducobox_state_change
          data:
            nodeId: "2"
            state: >
              {% if preset_mode == "Permanent manual 1" %}
                CNT1
              {% elif preset_mode == "Permanent manual 2" %}
                CNT2
              {% elif preset_mode == "Permanent manual 3" %}
                CNT3
              {% elif preset_mode == "Manual 1" %}
                MAN1
              {% elif preset_mode == "Manual 2" %}
                MAN2
              {% elif preset_mode == "Manual 3" %}
                MAN3
              {% else %}
                AUTO
              {% endif %}
# Ducobox slapen
    slapen:
      unique_id: ducobox_ventilatie_slapen
      friendly_name: "Slapen"
      value_template: >
        {% if states('sensor.ducobox_status') != 'EMPT' %}
          on
        {% else %}
          off
        {% endif %}
      turn_on:
        - service: rest_command.ducobox_state_change
          data:
            nodeId: "3"
            state: AUTO
      turn_off:
        - service: rest_command.ducobox_state_change
          data:
            nodeId: "3"
            state: EMPT
      preset_modes:
        - "Auto"
        - "Permanent manual 1"
        - "Permanent manual 2"
        - "Permanent manual 3"
        - "Manual 1"
        - "Manual 2"
        - "Manual 3"
      preset_mode_template: >
        {% if states('sensor.ducobox_status') == "CNT1" %}
          Permanent manual 1
        {% elif states('sensor.ducobox_status') == "CNT2" %}
          Permanent manual 2
        {% elif states('sensor.ducobox_status') == "CNT3" %}
          Permanent manual 3
        {% elif states('sensor.ducobox_status') == "MAN1" %}
          Manual 1
        {% elif states('sensor.ducobox_status') == "MAN2" %}
          Manual 2
        {% elif states('sensor.ducobox_status') == "MAN3" %}
          Manual 3
        {% else %}
          Auto
        {% endif %}
      set_preset_mode:
        - service: rest_command.ducobox_state_change
          data:
            nodeId: "3"
            state: >
              {% if preset_mode == "Permanent manual 1" %}
                CNT1
              {% elif preset_mode == "Permanent manual 2" %}
                CNT2
              {% elif preset_mode == "Permanent manual 3" %}
                CNT3
              {% elif preset_mode == "Manual 1" %}
                MAN1
              {% elif preset_mode == "Manual 2" %}
                MAN2
              {% elif preset_mode == "Manual 3" %}
                MAN3
              {% else %}
                AUTO
              {% endif %}
# copy paste the above block for every node in your system


Hiermee kan ik de WTW box en de twee zones aanpassen in automation via een service_call of in een custom button cart:

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


Acties:
  • +1 Henk 'm!

  • marnie
  • Registratie: November 2016
  • Nu online
De front end cart met de Hacks: Button Card by @RomRider.
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
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
type: vertical-stack
cards:
  - type: custom:button-card
    color_type: label-card
    color: rgb(88, 126, 163)
    name: WTW Ducobox
    show_state: true
    styles:
      card:
        - height: 100px
    size: 100%
    icon: mdi:fan
    entity: sensor.ducobox_status
    state:
      - value: EMPT
        color: rgb(247, 15, 15)
        name: WTW staat uit
    tap_action:
      action: call-service
      service: script.ducobox_auto_mode_all
    layout: icon_name
  - type: horizontal-stack
    cards:
      - type: custom:button-card
        entity: sensor.ducobox_status
        tap_action:
          action: call-service
          service: rest_command.ducobox_state_change
          service_data:
            nodeId: '1'
            state: AUTO
        color_type: card
        color: rgb(40, 150, 214)
        icon: mdi:fan-auto
        name: WTW
        layout: icon_name
        styles:
          card:
            - height: 50px
        state:
          - value: AUTO
            color: rgb(225, 317, 55)
      - type: custom:button-card
        entity: sensor.ducobox_status
        tap_action:
          action: call-service
          service: rest_command.ducobox_state_change
          service_data:
            nodeId: '1'
            state: MAN1
        color_type: card
        color: rgb(40, 150, 214)
        icon: mdi:fan-speed-1
        name: ' '
        styles:
          card:
            - height: 50px
        state:
          - value: MAN1
            color: rgb(225, 317, 55)
      - type: custom:button-card
        entity: sensor.ducobox_status
        tap_action:
          action: call-service
          service: rest_command.ducobox_state_change
          service_data:
            nodeId: '1'
            state: MAN2
        color_type: card
        color: rgb(40, 150, 214)
        icon: mdi:fan-speed-2
        name: 900s
        layout: icon_name
        styles:
          card:
            - height: 50px
        state:
          - value: MAN2
            color: rgb(225, 317, 55)
            name: >-
              [[[ return "" +
              states["sensor.ducobox_tijd_status_resterend"].state + "s";]]]
      - type: custom:button-card
        entity: sensor.ducobox_status
        tap_action:
          action: call-service
          service: rest_command.ducobox_state_change
          service_data:
            nodeId: '1'
            state: CNT2
        color_type: card
        color: rgb(40, 150, 214)
        icon: mdi:fan-speed-2
        name: ' '
        styles:
          card:
            - height: 50px
        state:
          - value: CNT2
            color: rgb(225, 317, 55)
      - type: custom:button-card
        entity: sensor.ducobox_status
        tap_action:
          action: call-service
          service: rest_command.ducobox_state_change
          service_data:
            nodeId: '1'
            state: MAN3
        color_type: card
        color: rgb(40, 150, 214)
        icon: mdi:fan-speed-3
        name: ' '
        styles:
          card:
            - height: 50px
        state:
          - value: MAN3
            color: rgb(225, 317, 55)
  - type: horizontal-stack
    cards:
      - type: custom:button-card
        entity: sensor.ducobox_wonen_status
        tap_action:
          action: call-service
          service: rest_command.ducobox_state_change
          service_data:
            nodeId: '2'
            state: AUTO
        color_type: card
        color: rgb(40, 150, 214)
        icon: mdi:fan-auto
        name: Wonen
        styles:
          card:
            - height: 50px
        state:
          - value: AUTO
            color: rgb(225, 317, 55)
        layout: icon_name
      - type: custom:button-card
        entity: sensor.ducobox_wonen_status
        tap_action:
          action: call-service
          service: rest_command.ducobox_state_change
          service_data:
            nodeId: '2'
            state: MAN1
        color_type: card
        color: rgb(40, 150, 214)
        icon: mdi:fan-speed-1
        name: ' '
        styles:
          card:
            - height: 50px
        state:
          - value: MAN1
            color: rgb(225, 317, 55)
      - type: custom:button-card
        entity: sensor.ducobox_wonen_status
        tap_action:
          action: call-service
          service: rest_command.ducobox_state_change
          service_data:
            nodeId: '2'
            state: MAN2
        color_type: card
        color: rgb(40, 150, 214)
        icon: mdi:fan-speed-2
        name: 900s
        layout: icon_name
        styles:
          card:
            - height: 50px
        state:
          - value: MAN2
            color: rgb(225, 317, 55)
            name: >-
              [[[ return "" +
              states["sensor.ducobox_wonen_tijd_status_resterend"].state +
              "s";]]]
      - type: custom:button-card
        entity: sensor.ducobox_wonen_status
        tap_action:
          action: call-service
          service: rest_command.ducobox_state_change
          service_data:
            nodeId: '2'
            state: CNT2
        color_type: card
        color: rgb(40, 150, 214)
        icon: mdi:fan-speed-2
        name: ' '
        styles:
          card:
            - height: 50px
        state:
          - value: CNT2
            color: rgb(225, 317, 55)
      - type: custom:button-card
        entity: sensor.ducobox_wonen_status
        tap_action:
          action: call-service
          service: rest_command.ducobox_state_change
          service_data:
            nodeId: '2'
            state: MAN3
        color_type: card
        color: rgb(40, 150, 214)
        icon: mdi:fan-speed-3
        name: ' '
        styles:
          card:
            - height: 50px
        state:
          - value: MAN3
            color: rgb(225, 317, 55)
  - type: horizontal-stack
    cards:
      - type: custom:button-card
        entity: sensor.ducobox_slapen_status
        tap_action:
          action: call-service
          service: rest_command.ducobox_state_change
          service_data:
            nodeId: '3'
            state: AUTO
        color_type: card
        color: rgb(40, 150, 214)
        icon: mdi:fan-auto
        name: Slapen
        styles:
          card:
            - height: 50px
        state:
          - value: AUTO
            color: rgb(225, 317, 55)
        layout: icon_name
      - type: custom:button-card
        entity: sensor.ducobox_slapen_status
        tap_action:
          action: call-service
          service: rest_command.ducobox_state_change
          service_data:
            nodeId: '3'
            state: MAN1
        color_type: card
        color: rgb(40, 150, 214)
        icon: mdi:fan-speed-1
        name: ' '
        styles:
          card:
            - height: 50px
        state:
          - value: MAN1
            color: rgb(225, 317, 55)
      - type: custom:button-card
        entity: sensor.ducobox_slapen_status
        tap_action:
          action: call-service
          service: rest_command.ducobox_state_change
          service_data:
            nodeId: '3'
            state: MAN2
        color_type: card
        color: rgb(40, 150, 214)
        icon: mdi:fan-speed-2
        name: 900s
        layout: icon_name
        styles:
          card:
            - height: 50px
        state:
          - value: MAN2
            color: rgb(225, 317, 55)
            name: >-
              [[[ return "" +
              states["sensor.ducobox_slapen_tijd_status_resterend"].state +
              "s";]]]
      - type: custom:button-card
        entity: sensor.ducobox_slapen_status
        tap_action:
          action: call-service
          service: rest_command.ducobox_state_change
          service_data:
            nodeId: '3'
            state: CNT2
        color_type: card
        color: rgb(40, 150, 214)
        icon: mdi:fan-speed-2
        name: ' '
        styles:
          card:
            - height: 50px
        state:
          - value: CNT2
            color: rgb(225, 317, 55)
      - type: custom:button-card
        entity: sensor.ducobox_slapen_status
        tap_action:
          action: call-service
          service: rest_command.ducobox_state_change
          service_data:
            nodeId: '3'
            state: MAN3
        color_type: card
        color: rgb(40, 150, 214)
        icon: mdi:fan-speed-3
        name: ' '
        styles:
          card:
            - height: 50px
        state:
          - value: MAN3
            color: rgb(225, 317, 55)
  - type: custom:button-card
    color_type: label-card
    color: rgb(40, 150, 214)
    name: Iedereen afwezig
    show_state: false
    styles:
      card:
        - height: 100px
    size: 100%
    icon: mdi:home-export-outline
    entity: sensor.ducobox_status
    state:
      - value: EMPT
        color: rgb(225, 317, 55)
        name: WTW staat uit
    tap_action:
      action: call-service
      service: rest_command.ducobox_state_change
      data:
        nodeId: '1'
        state: EMPT
    layout: icon_name

Niet alle code is door mijzelf bedacht.
Pas de code aan voor de eigen HA omgeving, oa de ip nummers.

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


Acties:
  • +1 Henk 'm!

  • marnie
  • Registratie: November 2016
  • Nu online
De button cart, die bovenstaande code genereerd.
Afbeeldingslocatie: https://tweakers.net/i/c9oNKG9_68ueDxObLivZaLZlP88=/800x/filters:strip_exif()/f/image/1wGKSp2mI0Fm7QmeqBxw8RiN.png?f=fotoalbum_large
Dit is nog ruw uitgewerkt, maar werkt.

[ Voor 4% gewijzigd door marnie op 06-08-2024 21:29 ]

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


Acties:
  • +1 Henk 'm!

  • marnie
  • Registratie: November 2016
  • Nu online
Voorbeeld van een service_call
YAML:
1
2
3
4
service: rest_command.ducobox_state_change
data:
  nodeId: "1"
  state: MAN2

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


Acties:
  • +1 Henk 'm!

  • fudgee
  • Registratie: Augustus 2024
  • Laatst online: 01-05 08:45
Wauw bedankt @marnie, dit is goud!

Acties:
  • +6 Henk 'm!

  • fudgee
  • Registratie: Augustus 2024
  • Laatst online: 01-05 08:45
Ik heb de code van @marnie aangepast voor mijn setup. Het grootste verschil met @marnie is dat ik één zone heb ipv twee. Deze aanpassing ging vrij snel totdat ik iets vrij specifieks wilde in de front-end. Ik wilde graag dat de kleur van een button direct oplicht bij het indrukken en de countdown timer meteen gaat lopen. Hier ben ik vervolgens een week mee bezig geweest 8)7 maar het is gelukt 8)

Afbeeldingslocatie: https://tweakers.net/i/1a0Ey6z7C3u-2sLNXVd0fQO2is8=/full-fit-in/4000x4000/filters:no_upscale():fill(white):strip_exif()/f/image/N7JHKZmLHOi0i6xQ0jS8BU0f.png?f=user_large

Ik heb een script gemaakt zodat na het aanpassen van de ventilatiestand ook de nieuwe status wordt geupdate. Daarnaast maak ik in het script een countdown timer zodat ik in geval van de stand MAN1/2/3 kan zien hoe lang het duurt voordat die terug naar AUTO gaat. Ik heb eerst heel lang gekloot zonder countdown timer en de data uitgelezen via de entity "ducobox_node1_TimeStateRemain". Deze wordt alleen periodiek geupdate (1x per minuut, zie duco_rest.yaml) en uiteindelijk leek het mij wat overdreven om iedere seconde een API call te doen om deze uit te lezen. Toen heb ik geprobeerd een countdown timer te maken door gebruik te maken van deze data. Dat werkte wel maar na het aanpassen van de ventilatiestand duurt het 10 seconden voordat deze timer gaat lopen. Dus bij deze oplossing zag ik de eerste 10 seconden geen timer lopen. Uiteindelijk gewoon hard opgegeven dat de timer altijd 15 min en 10 seconden loopt.

Het mooi zichtbaar krijgen van een countdown timer in de UI was het volgende drama. Met name doordat ik geen ervaring heb in front-end programmeren, nog nooit javascript had gebruikt. De Button Card by @RomRider is fantastisch maar heeft zoveel mogelijkheden dat het lastig is de juiste te kiezen. Het is uiteindelijk gelukt door een embedded button te maken met de timer.

Op zich ben ik erg tevreden over hoe de Duco API werkt. Toch blijft het erg jammer dat ik veel informatie niet kan uitlezen (co2 ppm, luchtvochtigheid %, temperaturen van inkomende en uitgaande lucht, bypass open of dicht).

Dit is mijn eerste wat grotere projectje in home assistant waar ik mij goed op heb kunnen uitleven. Omdat andermans code mij veel geholpen heeft post ik hieronder ook mijn code, hopelijk heeft iemand er iets aan. Ook als er iemand tips heeft om mijn code te verbeteren zijn deze altijd welkom.

Mijn code bestaat uit de volgende onderdelen:
  • configuration.yaml: enkel verwijzing naar de rest.yaml, rest_command.yaml en het aanmaken van een timer
  • duco_rest.yaml: hier worden de sensoren gemaakt die uitgelezen worden via de duco api
  • rest_command.yaml: hier is de actie gemaakt om de ventilatiestand aan te passen
  • script.yaml: script waarin het aanpassen van de ventilatiestand wordt gekoppeld aan het updaten van de status van de ducobox en een timer wordt gemaakt als de stand op MAN1, MAN2 of MAN3 wordt gezet
  • <front_end>.yaml: hierin zijn de buttons gedefinieerd.
configuration.yaml
code:
1
2
3
4
5
6
rest: !include duco_rest.yaml
rest_command: !include rest_command.yaml

timer:
  duco_rest_man:
    duration: "01:00:00"



duco_rest.yaml
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
- resource: <duco_ip>/info
  scan_interval: 86400 #daily
  verify_ssl: false
  sensor:
    # general box
    - unique_id: ducobox_timefilterremain
      name: Ducobox Filter resttijd
      value_template: "{{ value_json['HeatRecovery']['General']['TimeFilterRemain']['Val'] }}"
      device_class: duration
      unit_of_measurement: "d"
      state_class: measurement

- resource: <duco_ip>/info/nodes
  scan_interval: 60
  verify_ssl: false
  sensor:
    #node 1 the ducobox
    - unique_id: ducobox_node1_state
      name: Ducobox - Status
      value_template: "{{ value_json['Nodes'][0]['Ventilation']['State']['Val'] }}"
    - unique_id: ducobox_node1_mode
      name: Ducobox - Mode
      value_template: "{{ value_json['Nodes'][0]['Ventilation']['Mode']['Val'] }}"
    - unique_id: ducobox_node1_FlowLvlTgt
      name: Ducobox - Flow Level Target
      value_template: "{{ value_json['Nodes'][0]['Ventilation']['FlowLvlTgt']['Val'] }}"
      unit_of_measurement: "%"
      state_class: measurement
    - unique_id: ducobox_node1_TimeStateRemain
      name: Ducobox - tijd status resterend
      value_template: "{{ value_json['Nodes'][0]['Ventilation']['TimeStateRemain']['Val'] }}"
    - unique_id: ducobox_node1_TimeStateEnd
      name: Ducobox - tijd status eind
      value_template: "{{ value_json['Nodes'][0]['Ventilation']['TimeStateEnd']['Val'] }}"

    #node 2 CO2 sensor wonen
    - unique_id: ducobox_node2_iaqCO2
      name: Ducobox wonen Co2 air quality
      value_template: "{{ value_json['Nodes'][1]['Sensor']['IaqCo2']['Val'] }}"
      unit_of_measurement: "%"
      state_class: measurement

    #node 58 HR sensor
    - unique_id: ducobox_node58_iaqRh
      name: Ducobox - RH air quality
      value_template: "{{ value_json['Nodes'][2]['Sensor']['IaqRh']['Val'] }}"
      unit_of_measurement: "%"
      state_class: measurement

#      https://github.com/miezie/ducoboxopenapi-spec/blob/86616b5130ffa469bfa4519c2eafda86f25f9345/Public%20DUCO%20API%202.0%20-%20api-definition.yaml
#      https://gathering.tweakers.net/forum/list_messages/2236296
#      https://community.home-assistant.io/t/anyone-using-duco-ventilation-communication-print-ethernet-module/226528/75?page=3


rest_command.yaml
code:
1
2
3
4
5
6
7
8
ducobox_state_change:
  url: <duco_ip>/action/nodes/1
  method: POST
  headers:
    accept: "application/json"
    content_type: "application/json"
  payload: '{"Action":"SetVentilationState","Val":"{{ state }}"}'
  verify_ssl: false


scripts.yaml
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
duco_state_change:
  alias: duco_state_change
  fields:
    duco_mode:
      description: the mode of the Duco ventilation
      default: AUTO
      example: MAN1
  sequence:
  - action: rest_command.ducobox_state_change
    data:
      state: '{{ duco_mode }}'
  - action: homeassistant.update_entity
    target:
      entity_id:
      - sensor.ducobox_status
    data: {}
  - if:
    - condition: template
      value_template: '{{ ''MAN'' in states(''sensor.ducobox_status'') }}'
    then:
    - action: timer.start
      target:
        entity_id: timer.duco_rest_man
      data:
        duration:
          seconds: 910
    else:
    - action: timer.finish
      target:
        entity_id: timer.duco_rest_man
  description: Change the state of Duco, options are AUTO, MAN1, MAN2, MAN3, CNT1,
    CNT2, CNT3, EMPT


De front end cart met de Hacks: Button Card by @RomRider

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
- type: vertical-stack
        cards:
          - type: custom:button-card
            entity: sensor.ducobox_status
            color_type: card
            color: rgb(40, 150, 214)
            name: >-
              [[[ return "Auto " +
              states["sensor.ducobox_flow_level_target"].state + "%";]]]
            show_icon: false
            styles:
              card:
                - height: 50px
            state:
              - value: AUTO
                color: rgb(225, 317, 55)
            tap_action:
              action: call-service
              service: script.duco_state_change
              service_data:
                duco_mode: AUTO
          - type: horizontal-stack
            cards:
              - type: custom:button-card
                entity: sensor.ducobox_status
                color_type: card
                color: rgb(40, 150, 214)
                name: Manual
                show_icon: false
                styles:
                  card:
                    - height: 50px
                state:
                  - value: MAN1
                    color: rgb(225, 317, 55)
                    styles:
                      grid:
                        - grid-template-areas: '"n n" "timer timer"'
                        - grid-template-columns: 1fr
                        - grid-template-rows: min-content min-content
                      custom-fields:
                        timer:
                          - padding-bottom: 2px
                          - align-self: middle
                          - justify-self: start
                    custom_fields:
                      timer:
                        card:
                          type: custom:button-card
                          styles:
                            card:
                              - box-shadow: none
                              - font-size: 13px
                              - background-color: rgb(225, 317, 55)
                              - border-width: 0px
                          entity: timer.duco_rest_man
                          show_state: true
                          show_name: false
                          show_icon: false
                  - value: MAN2
                    color: rgb(225, 317, 55)
                    styles:
                      grid:
                        - grid-template-areas: '"n n" "timer timer"'
                        - grid-template-columns: 1fr
                        - grid-template-rows: min-content min-content
                      custom-fields:
                        timer:
                          - padding-bottom: 2px
                          - align-self: middle
                          - justify-self: start
                    custom_fields:
                      timer:
                        card:
                          type: custom:button-card
                          styles:
                            card:
                              - box-shadow: none
                              - font-size: 13px
                              - background-color: rgb(225, 317, 55)
                              - border-width: 0px
                          entity: timer.duco_rest_man
                          show_state: true
                          show_name: false
                          show_icon: false
                  - value: MAN3
                    color: rgb(225, 317, 55)
                    styles:
                      grid:
                        - grid-template-areas: '"n n" "timer timer"'
                        - grid-template-columns: 1fr
                        - grid-template-rows: min-content min-content
                      custom-fields:
                        timer:
                          - padding-bottom: 2px
                          - align-self: middle
                          - justify-self: start
                    custom_fields:
                      timer:
                        card:
                          type: custom:button-card
                          styles:
                            card:
                              - box-shadow: none
                              - font-size: 13px
                              - background-color: rgb(225, 317, 55)
                              - border-width: 0px
                          entity: timer.duco_rest_man
                          show_state: true
                          show_name: false
                          show_icon: false
              - type: custom:button-card
                entity: sensor.ducobox_status
                tap_action:
                  action: call-service
                  service: script.duco_state_change
                  service_data:
                    duco_mode: MAN1
                color_type: card
                color: rgb(40, 150, 214)
                icon: mdi:fan-speed-1
                name: ' '
                styles:
                  card:
                    - height: 50px
                state:
                  - value: MAN1
                    color: rgb(225, 317, 55)
              - type: custom:button-card
                entity: sensor.ducobox_status
                tap_action:
                  action: call-service
                  service: script.duco_state_change
                  service_data:
                    duco_mode: MAN2
                color_type: card
                color: rgb(40, 150, 214)
                icon: mdi:fan-speed-2
                name: ' '
                styles:
                  card:
                    - height: 50px
                state:
                  - value: MAN2
                    color: rgb(225, 317, 55)
              - type: custom:button-card
                entity: sensor.ducobox_status
                tap_action:
                  action: call-service
                  service: script.duco_state_change
                  service_data:
                    duco_mode: MAN3
                color_type: card
                color: rgb(40, 150, 214)
                icon: mdi:fan-speed-3
                name: ' '
                styles:
                  card:
                    - height: 50px
                state:
                  - value: MAN3
                    color: rgb(225, 317, 55)
          - type: horizontal-stack
            cards:
              - type: custom:button-card
                entity: sensor.ducobox_status
                color_type: card
                color: rgb(40, 150, 214)
                name: Continu
                show_icon: false
                styles:
                  card:
                    - height: 50px
                state:
                  - value: CNT1
                    color: rgb(225, 317, 55)
                  - value: CNT2
                    color: rgb(225, 317, 55)
                  - value: CNT3
                    color: rgb(225, 317, 55)
              - type: custom:button-card
                entity: sensor.ducobox_status
                tap_action:
                  action: call-service
                  service: script.duco_state_change
                  service_data:
                    duco_mode: CNT1
                color_type: card
                color: rgb(40, 150, 214)
                icon: mdi:fan-speed-1
                name: ' '
                styles:
                  card:
                    - height: 50px
                state:
                  - value: CNT1
                    color: rgb(225, 317, 55)
              - type: custom:button-card
                entity: sensor.ducobox_status
                tap_action:
                  action: call-service
                  service: script.duco_state_change
                  service_data:
                    duco_mode: CNT2
                color_type: card
                color: rgb(40, 150, 214)
                icon: mdi:fan-speed-2
                name: ' '
                styles:
                  card:
                    - height: 50px
                state:
                  - value: CNT2
                    color: rgb(225, 317, 55)
              - type: custom:button-card
                entity: sensor.ducobox_status
                tap_action:
                  action: call-service
                  service: script.duco_state_change
                  service_data:
                    duco_mode: CNT3
                color_type: card
                color: rgb(40, 150, 214)
                icon: mdi:fan-speed-3
                name: ' '
                styles:
                  card:
                    - height: 50px
                state:
                  - value: CNT3
                    color: rgb(225, 317, 55)

Acties:
  • 0 Henk 'm!

  • Daan1990
  • Registratie: Oktober 2024
  • Laatst online: 13-12-2024
Hi all, even mijn eerste post op Tweakers als niet-coder. Ik wil graag meer controle over mijn Duco ventilatie systeem en zou het graag beter zichtbaar hebben in Home Assistant. Omdat ik zelf geen coder ben, kijk ik met veel interesse naar jullie uitwerkingen hier. Naast de displays die al zijn gemaakt, zou het mij erg handig lijken om ook de Co2% / RH% te zien en dan indealiter zelfs met een kleur die aangeeft of het goed (groen), medium (oranje) of slecht (rood) is - dat maakt het wat intuitiever. Daarnaast dan de ventilatie capaciteit in % op geheel / zone en daarnaast de mogelijkheid om het aan te passen: Auto stand, Manueel met timer of Manueel permanent. Heeft iemand zin om hiermee aan de slag te gaan? Het gaat mijn pet wat te boven.

Ik zou vervolgens ook graag meer automatiseren om mijn systeem iets rustiger te krijgen, bijvoorbeeld, bij waardes > 60% dan mag de box nooit meer dan 50% ventilatiecapaciteit leveren. Op dit moment word ik nog wel eens weggeblazen als de Iaq percentages eigenlijk prima zijn, bijvoorbeeld >80%.Afbeeldingslocatie: https://tweakers.net/i/-W3k5PXXGvihYNKAAsXok-Vq3CA=/800x/filters:strip_exif()/f/image/R6UBiZrqrmsltaK8kODxfsnr.png?f=fotoalbum_large

Acties:
  • 0 Henk 'm!

  • Gizz
  • Registratie: Maart 2001
  • Laatst online: 22:37

Gizz

Dunder-Mifflin, Inc.

@Daan1990 je vraag past waarschijnlijk beter hier: Optimale vraaggestuurde mechanische ventilatie

Of als het duidelijke HA-vragen zijn natuurlijk meteen in dat topic Home Assistant: Open source Python3 home automation - deel 5

Canon EOS 5Dm3 + 5D + 7D + 300D + 1000FN + EF 17-40 4L + EF 35 1.4L + EF 50 1.8 + EF 80-200 2.8L + 550EX


Acties:
  • 0 Henk 'm!

  • Daan1990
  • Registratie: Oktober 2024
  • Laatst online: 13-12-2024
Dank @Gizz voor je suggestie. Maar mijn vraag ligt toch het meest in het verlengde van hetgeen @marnie en @fudgee hier eerder hebben gedeeld. Daarom dacht ik in dit onderwerp de meeste kans te hebben om iemand zo gek te krijgen te helpen met een aangepaste versie, naar het voorbeeld van mijn schets.

Acties:
  • 0 Henk 'm!

  • marnie
  • Registratie: November 2016
  • Nu online
@Daan1990
De Duco 325 via HA aansturen met de connectivity board is heel beperkt mogelijk. In dit forum en op de HA site staan hierover meerdere berichten.
Ik heb zelf een communication print op de kop getikt (2e hands), met deze print zijn de echte sensoren uitleesbaar en de settings ook te beïnvloeden. Ik wijzig bv het RH setpoint met HA afhankelijk van de vochtigheid buiten. Duco adviseert en verkoopt deze print niet meer.
Alternatief is mogelijk de ventilation gateway https://ventilationgateway.com/winkel/ maar even nog niet leverbaar.

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


Acties:
  • 0 Henk 'm!

  • Daan1990
  • Registratie: Oktober 2024
  • Laatst online: 13-12-2024
Thanks @marnie, ik heb inderdaad gelezen over het verschil connectivity board en communication print. Inderdaad jammer om niet de echte Co2 in ppm en RH % te kunnen uitlezen. Echter het lezen van Duco's IaQ percentages vind ik niet persee storend. Het liefst zou ik de automatiseringsregels van de Duco box zelf begrijpen en daarop kunnen sturen. Zoals ik nu opmerk gaat de Duxobox bij IaqCo2 percentages van boven de 90% op 100% ventilatie volume draaien. Dat vind ik erg overdreven / onrustig en storend. Het liefst zou ik dus die maximale ventilatie volumes stapsgewijs instellen. Bijvoorbeeld:
- wanneer IaQ% > 90%, dan ventilatie volume maximaal 50%
- wanneer IaQ% <90% en > 80%, dan ventilatie volume maximaal 60%
- wanneer IaQ% <80% en > 70%, dan ventilatie volume maximaal 70%
- etc.

In normaal gebruik komen de IaQ percentages niet onder de 80% en heb ik zelfs met 50% ventilatie capaciteit voldoende om mijn lucht onder controle te houden.

Ik heb bovenstaande geprobeerd te benaderen door op de Energy Premium box zelf wat instellingen te wijzigen:
- Setpoint Co2 per zone heb ik op 1000ppm gezet
- Maximale Auto capaciteit heb ik teruggeschroefd tot 70%, dat is bij mij de grens om het systeem te horen.

Als ik met meer mensen in huis ben moet ik er nu zelf aan denken om de capaciteit omhoog te zetten naar 100%. Maar dan heb ik het grootste deel van de tijd (zonder bezoek) tenminste geen last van een onrustig op/af toerend systeem.

met mijn ontwerp dashboard hierboven hoop ik op een simpel overzicht om snel in HA op te kunnen sturen.

Nog meer mensen met deze uitdaging / wens?

Acties:
  • 0 Henk 'm!

  • Batilan
  • Registratie: December 2009
  • Laatst online: 19:56
Daan1990 schreef op woensdag 23 oktober 2024 @ 13:21:

Nog meer mensen met deze uitdaging / wens?
Lijkt me handig inderdaad, hoewel ik mezelf nog voorgenomen heb om zelf zo'n ventilation gateway op basis van een ESP en een passend kabeltje in elkaar te sleutelen, om zo toch direct bij de gegevens te komen, en nog gerichter te kunnen sturen. Ik heb ook nog geen luchtvochtigheids sensor in mijn Ducobox Energy, kan ik dan wellicht ook met eigen sensoren gaan sturen.

Erg vervelend dat Duco dit zo dicht heeft getimmerd, zo krijg je inderdaad gebruikers die zich afvragen waarom in hemelsnaam het ding zo gaat optoeren. We hebben er gelukkig maar af en toe last van. Enige moment dat ie naar 100% gaat is als we standje 3 in de badkamer kiezen (de installateur heeft het zo ingeregeld dat dan direct de 2 zones (begane grond en verdieping waar de badkamer is) naar 100% gaan :/

Acties:
  • 0 Henk 'm!

  • Daan1990
  • Registratie: Oktober 2024
  • Laatst online: 13-12-2024
Hi @Batilan Als je die 100% wil verlagen kan je dat zelf ook 'eenvoudig' doen in installatie menu op je DucoBox zelf. Zie pagina 10 van dit document met instructies: https://www.duco.eu/Wes/C...l)_638627050459252512.pdf

Je kan dan de 'manual' % van die specifieke RH schakelaar aanpassen van bijvoorbeeld 100% naar 80%. Dus als je dan standje 3 kiest gaat het systeem naar 80% en niet 100%. Let op dat elke schakelaar die is aangesloten op een zone, ook de ventilatie op die zone regelt. Dus een badkamer is aangemeld op algemene systeem en zal dus het hele systeem (beide zones) naar dat percentage optoeren. Dit is ook logisch, want afzuigkanalen zijn niet gesplitst in zones.

Acties:
  • 0 Henk 'm!

  • Batilan
  • Registratie: December 2009
  • Laatst online: 19:56
Daan1990 schreef op woensdag 23 oktober 2024 @ 14:58:
Hi @Batilan Als je die 100% wil verlagen kan je dat zelf ook 'eenvoudig' doen in installatie menu op je DucoBox zelf. Zie pagina 10 van dit document met instructies: https://www.duco.eu/Wes/C...l)_638627050459252512.pdf

Je kan dan de 'manual' % van die specifieke RH schakelaar aanpassen van bijvoorbeeld 100% naar 80%. Dus als je dan standje 3 kiest gaat het systeem naar 80% en niet 100%. Let op dat elke schakelaar die is aangesloten op een zone, ook de ventilatie op die zone regelt. Dus een badkamer is aangemeld op algemene systeem en zal dus het hele systeem (beide zones) naar dat percentage optoeren. Dit is ook logisch, want afzuigkanalen zijn niet gesplitst in zones.
OK, Thx. Op zich heb ik niet zoveel problemen met die 100%, ik dacht dat de sensor alleen op de betreffende zone actief zou zijn, maar is eigenlijk wel logisch aangezien afzuiging niet gesplitst is. Het is meer dat ik nog twijfel of de afstandsbediening van de begane grond niet omgewisseld is qua zone (eerder waren de AB's verdeeld over de zones en had ik het idee dat als ik de AB van de badkamer boven op 3 zette, dat beneden meer geluid gaf en omgekeerd. Wellicht even een sigaret bij de uitlaten houden om te bezien hoe de flow varieert :)

Acties:
  • 0 Henk 'm!

  • Sunz
  • Registratie: Februari 2012
  • Laatst online: 18:41
Hoi,

Heb sinds gisteren een 2dehands communication print op de kop getikt die ik nu aan HA wil toevoegen.
Beschik over een Duco Silent Connect met maar (voorlopig) twee afzuigkanalen.
Een op zolder en één in de badkamer waarop een vochtsensor staat geschakeld in de ducobox.

Sinds gisteren gestart met HA dus nog complete noob maar toch al veel opzoekwerk gedaan en kwam uit in de richting van deze pagina https://www.linkedin.com/...homeassistant-albert-smit

Echter de code waar hij naar linkt is niet meer beschikbaar :(

https://www.novaventum.nl...ration-yaml-homeassistant

Op andere forums moet je echt al goed uitkijken voor waar de code bestemd voor is want "communicatieprint" en "connectivity board" niet hetzelfde zijn.

Iemand die hiervoor over de code beschikt?

Zou graag de optie toevoegen voor een continu manuele stand bijv. (hoge luchtvochtigheid zomer, kinderen die badkamer niet sluiten, ...)

[ Voor 7% gewijzigd door Sunz op 25-10-2024 11:39 ]


Acties:
  • +1 Henk 'm!

  • marnie
  • Registratie: November 2016
  • Nu online
Sunz schreef op vrijdag 25 oktober 2024 @ 11:37:
Hoi,

Heb sinds gisteren een 2dehands communication print op de kop getikt die ik nu aan HA wil toevoegen.
Beschik over een Duco Silent Connect met maar (voorlopig) twee afzuigkanalen.
Een op zolder en één in de badkamer waarop een vochtsensor staat geschakeld in de ducobox.

Sinds gisteren gestart met HA dus nog complete noob maar toch al veel opzoekwerk gedaan en kwam uit in de richting van deze pagina https://www.linkedin.com/...homeassistant-albert-smit

Echter de code waar hij naar linkt is niet meer beschikbaar :(

https://www.novaventum.nl...ration-yaml-homeassistant

Op andere forums moet je echt al goed uitkijken voor waar de code bestemd voor is want "communicatieprint" en "connectivity board" niet hetzelfde zijn.

Iemand die hiervoor over de code beschikt?

Zou graag de optie toevoegen voor een continu manuele stand bijv. (hoge luchtvochtigheid zomer, kinderen die badkamer niet sluiten, ...)
toon volledige bericht
Om je op weg te helpen, mijn ducobox communication print rest en rest_command codes.
Ik heb een twee zone systeem met kleppen en per zone een CO2 bedieningsensor. De RH meting zit in de ducobox.

Vergeet niet in configuration.yal toe te voegen:
YAML:
1
2
rest: !include rest.yaml
rest_command: !include rest_command.yaml



rest_command.yaml
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
59
duco_box_mode_auto:
  url: "http://192.168.1.73/nodesetoperstate?node=1&value=AUTO"
duco_box_mode_cnt1:
  url: "http://192.168.1.73/nodesetoperstate?node=1&value=CNT1"
duco_box_mode_cnt2:
  url: "http://192.168.1.73/nodesetoperstate?node=1&value=CNT2"
duco_box_mode_cnt3:
  url: "http://192.168.1.73/nodesetoperstate?node=1&value=CNT3"
duco_box_mode_man1:
  url: "http://192.168.1.73/nodesetoperstate?node=1&value=MAN1"
duco_box_mode_man2:
  url: "http://192.168.1.73/nodesetoperstate?node=1&value=MAN2"
duco_box_mode_man3:
  url: "http://192.168.1.73/nodesetoperstate?node=1&value=MAN3"

duco_wonen_mode_auto:
  url: "http://192.168.1.73/nodesetoperstate?node=2&value=AUTO"
duco_wonen_mode_cnt1:
  url: "http://192.168.1.73/nodesetoperstate?node=2&value=CNT1"
duco_wonen_mode_cnt2:
  url: "http://192.168.1.73/nodesetoperstate?node=2&value=CNT2"
duco_wonen_mode_cnt3:
  url: "http://192.168.1.73/nodesetoperstate?node=2&value=CNT3"
duco_wonen_mode_man1:
  url: "http://192.168.1.73/nodesetoperstate?node=2&value=MAN1"
duco_wonen_mode_man2:
  url: "http://192.168.1.73/nodesetoperstate?node=2&value=MAN2"
duco_wonen_mode_man3:
  url: "http://192.168.1.73/nodesetoperstate?node=2&value=MAN3"

duco_slapen_mode_auto:
  url: "http://192.168.1.73/nodesetoperstate?node=3&value=AUTO"
duco_slapen_mode_cnt1:
  url: "http://192.168.1.73/nodesetoperstate?node=3&value=CNT1"
duco_slapen_mode_cnt2:
  url: "http://192.168.1.73/nodesetoperstate?node=3&value=CNT2"
duco_slapen_mode_cnt3:
  url: "http://192.168.1.73/nodesetoperstate?node=3&value=CNT3"
duco_slapen_mode_man1:
  url: "http://192.168.1.73/nodesetoperstate?node=3&value=MAN1"
duco_slapen_mode_man2:
  url: "http://192.168.1.73/nodesetoperstate?node=3&value=MAN2"
duco_slapen_mode_man3:
  url: "http://192.168.1.73/nodesetoperstate?node=3&value=MAN3"



duco_box_rhsetpoint_60:
  url: "http://192.168.1.73/nodeconfigset?node=58&para=RHSetpoint&value=60"
duco_box_rhsetpoint_65:
  url: "http://192.168.1.73/nodeconfigset?node=58&para=RHSetpoint&value=65"
duco_box_rhsetpoint_70:
  url: "http://192.168.1.73/nodeconfigset?node=58&para=RHSetpoint&value=70"
duco_box_rhsetpoint_80:
  url: "http://192.168.1.73/nodeconfigset?node=58&para=RHSetpoint&value=80"
duco_box_rhsetpoint_90:
  url: "http://192.168.1.73/nodeconfigset?node=58&para=RHSetpoint&value=90"

  

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


Acties:
  • 0 Henk 'm!

  • marnie
  • Registratie: November 2016
  • Nu online
rest.yaml
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
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
#
# Duco WTW scan per uur
#
- resource: http://192.168.1.73/boxinfoget
  scan_interval: 3600
  verify_ssl: false
  sensor:
  - name: "Ducobox Filter resttijd"
    unique_id: ducobox_filter_resttijd
    unit_of_measurement: "d"
    value_template: >
      {{ value_json['EnergyInfo']['FilterRemainingTime'] }}

#
# Duco WTW scan per 10 seconden
#
- resource: http://192.168.1.73/boxinfoget
  scan_interval: 10
  verify_ssl: false
  sensor:
  - name: "Ducobox temperatuur, toevoer van buiten"
    unique_id: ducobox_tempoda  
    unit_of_measurement: "°C"
    value_template: >
      {{ value_json['EnergyInfo']['TempODA'] / 10 }}

  - name: "Ducobox temperatuur, toevoer naar woning"
    unique_id: ducobox_tempsup
    unit_of_measurement: "°C"
    value_template: >
      {{ value_json['EnergyInfo']['TempSUP'] / 10 }}

  - name: "Ducobox temperatuur, afvoer van woning"
    unique_id: ducobox_tempeta
    unit_of_measurement: "°C"
    value_template: >
      {{ value_json['EnergyInfo']['TempETA'] / 10 }}

  - name: "Ducobox temperatuur, afvoer naar buiten"
    unique_id: ducobox_tempeha
    unit_of_measurement: "°C"
    value_template: >
      {{ value_json['EnergyInfo']['TempEHA'] / 10 }}

  - name: "Ducobox SupplyFanSpeed"
    unique_id: ducobox_supplyfanspeed
    unit_of_measurement: "rpm"
    value_template: >
      {{ value_json['EnergyFan']['SupplyFanSpeed'] }}

  - name: "Ducobox ExhaustFanSpeed"
    unique_id: ducobox_exhaustfanspeed
    unit_of_measurement: "rpm"
    value_template: >
      {{ value_json['EnergyFan']['ExhaustFanSpeed'] }}

  - name: "Ducobox SupplyFanPwmPercentage"
    unique_id: ducobox_supplyfanpwmpercentage
    unit_of_measurement: "%"
    value_template: >
      {{ value_json['EnergyFan']['SupplyFanPwmPercentage'] }}

  - name: "Ducobox ExhaustFanPwmPercentage"
    unique_id: ducobox_exhaustfanpwmpercentage
    unit_of_measurement: "%"
    value_template: >
      {{ value_json['EnergyFan']['ExhaustFanPwmPercentage'] }}

# Ducobox
- resource: http://192.168.1.73/nodeinfoget?node=1
  scan_interval: 10
  verify_ssl: false
  sensor:
  - name: "DucoBox"
    unique_id: ducobox
    value_template: "{{ value_json.state }}"
    icon: mdi:fan
    json_attributes:
      - node
      - devtype
      - subtype
      - netw
      - addr
      - sub
      - prnt
      - asso
      - location
      - state
      - cntdwn
      - endtime
      - mode
      - trgt
      - actl
      - ovrl
      - snsr
      - cerr
      - swversion
      - serialnb
      - temp
      - co2
      - rh
      - error
      - show
      - link

  - name: "Ducobox relatieve vochtigheid"
    unique_id: ducobox_rh
    unit_of_measurement: "%"
    value_template: >
      {{ value_json['rh'] }}

  - name: "Ducobox temperatuur"
    unique_id: ducobox_temp
    unit_of_measurement: "°C"
    value_template: >
      {{ value_json['temp'] }}

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


Acties:
  • 0 Henk 'm!

  • marnie
  • Registratie: November 2016
  • Nu online
rest.yaml
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
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
# Kleppen wonen
- resource: http://192.168.1.73/nodeinfoget?node=2
  scan_interval: 10
  verify_ssl: false
  sensor:
  - name: "Duco zoneklep wonen"
    unique_id: valve_zone_1
    value_template: "{{ value_json.state }}"
    icon: mdi:fan
    json_attributes:
      - node
      - devtype
      - subtype
      - netw
      - addr
      - sub
      - prnt
      - asso
      - location
      - state
      - cntdwn
      - endtime
      - mode
      - ovrl
      - snsr
      - cerr
      - swversion
      - serialnb
      - error
      - show
      - link

  - name: "Ducobox zoneklep woonkamer state"
    unique_id: ducobox_zoneklep_woonkamer_state
    value_template: >
      {{ value_json['state'] }}

  - name: "Ducobox zoneklep woonkamer mode"
    unique_id: ducobox_zoneklep_woonkamer_mode
    value_template: >
      {{ value_json['mode'] }}

  - name: "Ducobox zoneklep woonkamer ovrl"
    unique_id: ducobox_zoneklep_woonkamer_ovrl
    unit_of_measurement: ""
    value_template: >
      {{ value_json['ovrl'] }}

# Kleppen slapen
- resource: http://192.168.1.73/nodeinfoget?node=3
  scan_interval: 10
  verify_ssl: false
  sensor:
  - name: "Duco zoneklep slapen"
    unique_id: valve_zone_2
    value_template: "{{ value_json.state }}"
    icon: mdi:fan
    json_attributes:
      - node
      - devtype
      - subtype
      - netw
      - addr
      - sub
      - prnt
      - asso
      - location
      - state
      - cntdwn
      - endtime
      - mode
      - ovrl
      - snsr
      - cerr
      - swversion
      - serialnb
      - error
      - show
      - link

  - name: "Ducobox zoneklep slaapkamer state"
    unique_id: ducobox_zoneklep_slaapkamer_state
    value_template: >
      {{ value_json['state'] }}

  - name: "Ducobox zoneklep slaapkamer mode"
    unique_id: ducobox_zoneklep_slaapkamer_mode
    value_template: >
      {{ value_json['mode'] }}

  - name: "Ducobox zoneklep slaapkamer ovrl"
    unique_id: ducobox_zoneklep_slaapkamer_ovrl
    unit_of_measurement: ""
    value_template: >
      {{ value_json['ovrl'] }}

# Bedieningssensor woonkamer
- resource: http://192.168.1.73/nodeinfoget?node=4
  scan_interval: 10
  verify_ssl: false
  sensor:
  - name: "Duco bedieningssensor wooonkamer"
    unique_id: duco_bedieningssensor_woonkamer
    value_template: "{{ value_json.state }}"
    icon: mdi:fan
    json_attributes:
      - node
      - devtype
      - subtype
      - netw
      - addr
      - sub
      - prnt
      - asso
      - location
      - state
      - cntdwn
      - endtime
      - mode
      - ovrl
      - snsr
      - cerr
      - swversion
      - serialnb
      - temp
      - co2
      - rh
      - rssi_n2m
      - hop_via
      - rssi_n2h
      - error
      - show
      - link
  - name: "Ducobox temperatuur woonkamer"
    unique_id: ducobox_temp_woonkamer
    device_class: temperature
#    state_class: measurement
    unit_of_measurement: "°C"
    value_template: >
      {{ value_json['temp'] }}

  - name: "Ducobox CO2 woonkamer"
    unique_id: ducobox_co2_woonkamer
    unit_of_measurement: "ppm"
    value_template: >
      {{ value_json['co2'] }}


# Sensor slaapkamer
- resource: http://192.168.1.73/nodeinfoget?node=5
  scan_interval: 10
  verify_ssl: false
  sensor:
  - name: "Duco bedieningssensor slaapkamer"
    unique_id: duco_bedieningssensor_slaapkamer
    value_template: "{{ value_json.state }}"
    icon: mdi:fan
    json_attributes:
      - node
      - devtype
      - subtype
      - netw
      - addr
      - sub
      - prnt
      - asso
      - location
      - state
      - cntdwn
      - endtime
      - mode
      - ovrl
      - snsr
      - cerr
      - swversion
      - serialnb
      - temp
      - co2
      - rh
      - rssi_n2m
      - hop_via
      - rssi_n2h
      - error
      - show
      - link
  - name: "Ducobox temperatuur slaapkamer"
    unique_id: ducobox_temp_slaapkamer
    device_class: temperature
    unit_of_measurement: "°C"
    value_template: >
      {{ value_json['temp'] }}

  - name: "Ducobox CO2 slaapkamer"
    unique_id: ducobox_co2_slaapkamer
    unit_of_measurement: "ppm"
    value_template: >
      {{ value_json['co2'] }}

# Ducobox bediening op de box
- resource: http://192.168.1.73/nodeinfoget?node=52
  scan_interval: 10
  verify_ssl: false
  sensor:
  - name: "Duco box bediening"
    unique_id: duco_box_bediening
    value_template: "{{ value_json.state }}"
    icon: mdi:fan
    json_attributes:
      - node
      - devtype
      - subtype
      - netw
      - addr
      - sub
      - prnt
      - asso
      - location
      - state
      - cntdwn
      - endtime
      - mode
      - ovrl
      - snsr
      - cerr
      - swversion
      - serialnb
      - error
      - show
      - link

# Ducobox rh meter voor de box
- resource: http://192.168.1.73/nodeinfoget?node=58
  scan_interval: 10
  verify_ssl: false
  sensor:
  - name: "Duco box rh"
    unique_id: duco_box_rh
    value_template: "{{ value_json.state }}"
    icon: mdi:fan
    json_attributes:
      - node
      - devtype
      - subtype
      - netw
      - addr
      - sub
      - prnt
      - asso
      - location
      - state
      - cntdwn
      - endtime
      - mode
      - ovrl
      - snsr
      - cerr
      - swversion
      - serialnb
      - temp
      - co2
      - rh
      - error
      - show
      - link

  - name: "Duco RH sensor vochtigheid"
    unique_id: duco_rh_sensor_vochtigheid
    unit_of_measurement: "%"
    value_template: >
      {{ value_json['rh'] }}

  - name: "Duco RH sensor temperatuur"
    unique_id: duco_rh_sensor_temperatuur
    unit_of_measurement: "°C"
    value_template: >
      {{ value_json['temp'] }}

# Ducobox rhsetpoint meter
- resource: http://192.168.1.73/nodeconfigget?node=58
  scan_interval: 10
  verify_ssl: false
  sensor:
  - name: "Duco RHSetpoint"
    unique_id: duco_rhsetpoint
    unit_of_measurement: "%"
    value_template: >
      {{ value_json['RHSetpoint']['Val'] }}

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


Acties:
  • 0 Henk 'm!

  • Sunz
  • Registratie: Februari 2012
  • Laatst online: 18:41
marnie schreef op vrijdag 25 oktober 2024 @ 16:07:
[...]

Om je op weg te helpen, mijn ducobox communication print rest en rest_command codes.
Ik heb een twee zone systeem met kleppen en per zone een CO2 bedieningsensor. De RH meting zit in de ducobox.

Vergeet niet in configuration.yal toe te voegen:
YAML:
1
2
rest: !include rest.yaml
rest_command: !include rest_command.yaml



rest_command.yaml
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
59
duco_box_mode_auto:
  url: "http://192.168.1.73/nodesetoperstate?node=1&value=AUTO"
duco_box_mode_cnt1:
  url: "http://192.168.1.73/nodesetoperstate?node=1&value=CNT1"
duco_box_mode_cnt2:
  url: "http://192.168.1.73/nodesetoperstate?node=1&value=CNT2"
duco_box_mode_cnt3:
  url: "http://192.168.1.73/nodesetoperstate?node=1&value=CNT3"
duco_box_mode_man1:
  url: "http://192.168.1.73/nodesetoperstate?node=1&value=MAN1"
duco_box_mode_man2:
  url: "http://192.168.1.73/nodesetoperstate?node=1&value=MAN2"
duco_box_mode_man3:
  url: "http://192.168.1.73/nodesetoperstate?node=1&value=MAN3"

duco_wonen_mode_auto:
  url: "http://192.168.1.73/nodesetoperstate?node=2&value=AUTO"
duco_wonen_mode_cnt1:
  url: "http://192.168.1.73/nodesetoperstate?node=2&value=CNT1"
duco_wonen_mode_cnt2:
  url: "http://192.168.1.73/nodesetoperstate?node=2&value=CNT2"
duco_wonen_mode_cnt3:
  url: "http://192.168.1.73/nodesetoperstate?node=2&value=CNT3"
duco_wonen_mode_man1:
  url: "http://192.168.1.73/nodesetoperstate?node=2&value=MAN1"
duco_wonen_mode_man2:
  url: "http://192.168.1.73/nodesetoperstate?node=2&value=MAN2"
duco_wonen_mode_man3:
  url: "http://192.168.1.73/nodesetoperstate?node=2&value=MAN3"

duco_slapen_mode_auto:
  url: "http://192.168.1.73/nodesetoperstate?node=3&value=AUTO"
duco_slapen_mode_cnt1:
  url: "http://192.168.1.73/nodesetoperstate?node=3&value=CNT1"
duco_slapen_mode_cnt2:
  url: "http://192.168.1.73/nodesetoperstate?node=3&value=CNT2"
duco_slapen_mode_cnt3:
  url: "http://192.168.1.73/nodesetoperstate?node=3&value=CNT3"
duco_slapen_mode_man1:
  url: "http://192.168.1.73/nodesetoperstate?node=3&value=MAN1"
duco_slapen_mode_man2:
  url: "http://192.168.1.73/nodesetoperstate?node=3&value=MAN2"
duco_slapen_mode_man3:
  url: "http://192.168.1.73/nodesetoperstate?node=3&value=MAN3"



duco_box_rhsetpoint_60:
  url: "http://192.168.1.73/nodeconfigset?node=58&para=RHSetpoint&value=60"
duco_box_rhsetpoint_65:
  url: "http://192.168.1.73/nodeconfigset?node=58&para=RHSetpoint&value=65"
duco_box_rhsetpoint_70:
  url: "http://192.168.1.73/nodeconfigset?node=58&para=RHSetpoint&value=70"
duco_box_rhsetpoint_80:
  url: "http://192.168.1.73/nodeconfigset?node=58&para=RHSetpoint&value=80"
duco_box_rhsetpoint_90:
  url: "http://192.168.1.73/nodeconfigset?node=58&para=RHSetpoint&value=90"

  
toon volledige bericht
Bedankt! Binnekort ff wat dingetjes eruit pikken voor mijn setup :)
Momenteel enkel afzuiging van zolder en badkamer met maar 1 RH sensor in de box :D
Complete noob inzake HA maar zal wel lukken zeker :D
Zonet ff de Duco app geinstalleerd..wat voor troep is dat

Acties:
  • +1 Henk 'm!

  • fudgee
  • Registratie: Augustus 2024
  • Laatst online: 01-05 08:45
Ik zag toevallig gister deze github voorbij komen: https://github.com/Sikerdebaard/ducopy, het lijkt erop alsof iemand erachter is hoe je met de connectivity board alle gegevens uitleest. Ik heb het zelf nog niet geprobeerd maar het ziet er veelbelovend uit.

Acties:
  • +3 Henk 'm!

  • Sikerdebaard
  • Registratie: Juli 2008
  • Laatst online: 23-05 11:46
fudgee schreef op zondag 3 november 2024 @ 22:19:
Ik zag toevallig gister deze github voorbij komen: https://github.com/Sikerdebaard/ducopy, het lijkt erop alsof iemand erachter is hoe je met de connectivity board alle gegevens uitleest. Ik heb het zelf nog niet geprobeerd maar het ziet er veelbelovend uit.
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:
Ga in Home Assistant naar **HACS** via het zijmenu.
Klik op **Integraties**.
Klik rechtsboven op het menu (de drie puntjes) en kies **Custom repositories**.
Vul het volgende URL in bij **Repository URL**:

code:
1
https://github.com/Sikerdebaard/hacs-ducobox-connector


Selecteer **Integration** als categorie.
Klik op **Toevoegen**.
Installeer de integratie

- Zoek in de HACS **Integraties**-pagina naar "Ducobox Connector".
- Klik op de gevonden integratie en druk op **Installeren**.
- Wacht totdat de installatie voltooid is.
Herstart Home Assistant

- Na installatie moet je Home Assistant herstarten om de nieuwe integratie te activeren.
- Ga naar **Instellingen > Systeem > Herstarten**, en voer de herstart uit.
Automatische detectie van de Ducobox

Na het herstarten zal Home Assistant automatisch de Ducobox detecteren via mDNS/zeroconf.
Nieuwe functionaliteit en bugs worden toegevoegd wanneer ik tijd heb. Garantie tot aan de deur etc. etc.

Acties:
  • 0 Henk 'm!

  • Sunz
  • Registratie: Februari 2012
  • Laatst online: 18:41
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.
toon volledige bericht
Mooi werk! Als HA noob toch gelukt dit te installeren.
Ik gebruik wel een Duco Silent Connect. Hij vindt 1 device en 12 entities.
Jammer genoeg zijn het allemaal unknown sensors maar het geeft alvast hoop :)

Acties:
  • 0 Henk 'm!

  • Sikerdebaard
  • Registratie: Juli 2008
  • Laatst online: 23-05 11:46
Sunz schreef op zondag 17 november 2024 @ 12:27:
[...]


Mooi werk! Als HA noob toch gelukt dit te installeren.
Ik gebruik wel een Duco Silent Connect. Hij vindt 1 device en 12 entities.
Jammer genoeg zijn het allemaal unknown sensors maar het geeft alvast hoop :)
Als je weet hoe je een python package moet installeren kan ik wel ff kijken of ik je sensor data toe kan voegen.

code:
1
2
3
$ pip install ducopy
$ ducopy raw-get https://<ducobox ip>/info/nodes
$ ducopy raw-get https://<ducobox ip>/info


En stuur mij dan ff je output, het liefst via een PB. Er zit identificeerbare informatie in die dump, zoals serienummers. Dus dat wil je wellicht niet publiekelijk posten.

Acties:
  • 0 Henk 'm!

  • Baxke
  • Registratie: December 2019
  • Laatst online: 11-05 15:21
Hi,

Ik heb thuis de Duco energy comfort 325 geïnstalleerd en voorzien van een connectivity board, ervan uitgaande dat een koppeling met Home Assistant eenvoudig te realiseren was.

Na het lezen van dit topic heb ik ducopy en Python scripts via HACS geïstalleerd. Ik zie nu de Ducobox Connectivity Board bij integraties (4 apparaten, 26 entiteiten) maar nu loop ik vast.

Ik heb gelezen over het maken van een Python script, deze op te slaan in een mapje en vervolgens oproepen kunnen oproepen via een Card?

Graag wil ik de statussen uitlezen van de Duco wtw, de gemeten CO2 en luchtvochtigheidwaarden.

Kan iemand me een beetje op weg helpen?

  • Draakje5
  • Registratie: November 2011
  • Laatst online: 22:49
fudgee schreef op dinsdag 6 augustus 2024 @ 13:25:
@Dirk Diggler met de hulp van de post van @marnie heb ik de waarde die beschikbaar zijn via de Connectivity Board Api in Home Assistant weten te krijgen (zie afbeelding hieronder). Het enige wat ik nog niet kan in HA is het aanpassen van de ventilatiestand van AUTO naar bijv. MAN1. Ik vermoed dat ik hiervoor een bepaalde API endpoint nodig heb. Ik heb alleen geen idee hoe ik erachter kom welke. De API documentatie (https://connectivity.duco.eu/) zit achter een inlogscherm waar je alleen in kan als officiele installateur.

@marnie: Weet je toevallig of en hoe ik de ventilatiestand kan aanpassen via de Rest API van de Connectivity Board?

Edit: Ik denk dat ik de API endpoint heb gevonden om de ventilatiestand (VentilationState) aan te passen:
code:
1
https://<my_ip>/action/nodes/1


Ik heb alleen nog te weinig kennis van Rest API's om te weten hoe ik de functie `SetVentilationState` kan aanpassen

[Afbeelding]
toon volledige bericht
Ik heb er te weinig kaas van gegeten, maar ben ook op zoek naar dat grafiekje voor in HA.

Ik heb in command yaml de code "rest: !include rest.yaml" toegevoegd.
En ik heb Rest.yaml aangemaakt met de eerder geposte code, daar het IP adres gewijzigd naar mijn DUCO connectivity Board.

Hoe kom je achter de 'NODE' ID's? En de Entiteiten? ddoor @marnie aangegeven?

Ik heb ook de HACS add on van @Sikerdebaard toegevoegd en heb het volgende in mijn dashboard :-)
Air quality zou je idealiter in ppm willen zien ipv percentage?
Afbeeldingslocatie: https://tweakers.net/i/45jrNcLV4gnG3kOKX5Ymle_Jak8=/fit-in/4000x4000/filters:no_upscale():strip_exif()/f/image/pctI4laJJLnqwmJEY5E6MHyl.png?f=user_large

[ Voor 8% gewijzigd door Draakje5 op 26-12-2024 13:10 ]


Acties:
  • 0 Henk 'm!

  • Draakje5
  • Registratie: November 2011
  • Laatst online: 22:49
Na het updaten van HA naar Code, is mijn DUCO intergratie verdwenen. Ik krijg hem nu ook niet meer terug.
Meer die hier last van hebben?

[ Voor 85% gewijzigd door Draakje5 op 04-01-2025 14:04 ]


Acties:
  • 0 Henk 'm!

  • icecreamfarmer
  • Registratie: Januari 2003
  • Laatst online: 18-05 08:37

icecreamfarmer

en het is

marnie schreef op dinsdag 30 april 2024 @ 20:21:
[...]

Ja, ik heb de wtw zelf geïnstalleerd en de installer app daarna ook. Echter van Duco kreeg ik geen akkoord voor het gebruik van de app, men beschouwt particuliere installateurs niet als installateur die toegang verkrijgt.
Ik kan de app nog wel in maar kan de installatie niet via de app uitvoeren. Wel kan ik met de app de gemeten RH waarde en CO2 waardes uitlezen van de aangesloten sensoren, in ppm bij CO2 en % bij vochtigheid. De waardes zijn aanwezig maar niet toegankelijk voor de gebruiker bij gebruik van het connectivity board.

Het kunnen uitlezen van de RH waarde in de app heeft me geholpen bij het zoeken naar de reden dat de box opeens, gedurende een paar uur, onnodig een verhoogd debiet gaf: de gemeten RH waarde was hoger dan het RH setpoint. Door het setpoint te verhogen kwam de box weer in zijn normale bedrijfsstatus. Het kunnen uitlezen van deze waardes heeft voor een gebruiker echt wel nut.
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 ik zie wat jij niet ziet


Acties:
  • 0 Henk 'm!

  • Batilan
  • Registratie: December 2009
  • Laatst online: 19:56
icecreamfarmer 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.
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 wel :)

Acties:
  • +1 Henk 'm!

  • blubgup
  • Registratie: Augustus 2019
  • Laatst online: 06-02 19:21
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...

Acties:
  • 0 Henk 'm!

  • karma28
  • Registratie: Oktober 2015
  • Laatst online: 25-02 16:00
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.
toon volledige bericht
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.

Acties:
  • 0 Henk 'm!

  • FJA
  • Registratie: April 2009
  • Laatst online: 21-05 22:08

FJA

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?

[ Voor 54% gewijzigd door FJA op 08-03-2025 11:13 ]


Acties:
  • 0 Henk 'm!

  • marnie
  • Registratie: November 2016
  • Nu online
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.
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:

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


Acties:
  • 0 Henk 'm!

  • marnie
  • Registratie: November 2016
  • Nu online
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.

[ 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


Acties:
  • 0 Henk 'm!

  • FJA
  • Registratie: April 2009
  • Laatst online: 21-05 22:08

FJA

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 ...
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.
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 :P)! 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.

[ Voor 9% gewijzigd door FJA op 08-03-2025 18:27 ]


Acties:
  • 0 Henk 'm!

  • marnie
  • Registratie: November 2016
  • Nu online
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 :P)! 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.
toon volledige bericht
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.

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


Acties:
  • 0 Henk 'm!

  • |sWORDs|
  • Registratie: Maart 2000
  • Laatst online: 22-05 15:56

|sWORDs|

vSphere/ESXi

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
Afbeeldingslocatie: https://tweakers.net/i/xgOKQmA1N4SBGAJRNpn1jcMmNGw=/100x75/filters:strip_exif()/f/image/mrZjhMzwrwIORgTYbAl6OQfh.png?f=fotoalbum_smallAfbeeldingslocatie: https://tweakers.net/i/YxCag2ndFqBMyF3XhF6Kbsu6ZIo=/100x75/filters:strip_icc():strip_exif()/f/image/r2ScPW1MbARf5ehB1KuVj7GX.jpg?f=fotoalbum_smallAfbeeldingslocatie: https://tweakers.net/i/VPDaXt5Z7201pW7nGs92lLRbWfI=/100x75/filters:strip_icc():strip_exif()/f/image/W20AMeWdJFZhaQKs6vzDMh5Z.jpg?f=fotoalbum_small
Afbeeldingslocatie: https://tweakers.net/i/fci2XA1x_RUbn3_fcCPvf_B-Qso=/100x75/filters:strip_icc():strip_exif()/f/image/6YcCD8ga7HO6fIxYFsSAsmfA.jpg?f=fotoalbum_smallAfbeeldingslocatie: https://tweakers.net/i/GxbcY5SQYCfEYTBEpDFAGt99IOs=/100x75/filters:strip_icc():strip_exif()/f/image/Joc8j3SX0mpChKaBjKw1JauR.jpg?f=fotoalbum_smallAfbeeldingslocatie: https://tweakers.net/i/HEkF7S-7htDJqVUTgQA6rcpdGBk=/100x75/filters:strip_icc():strip_exif()/f/image/Le0wmjzZbnoGqzE9VTC1yyU6.jpg?f=fotoalbum_small
Afbeeldingslocatie: https://tweakers.net/i/FKRSDCB8AArJvBixcyCVW7_Ufog=/100x75/filters:strip_icc():strip_exif()/f/image/W14dDB2sWwrkrcAWbPS6Ggr2.jpg?f=fotoalbum_small


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 }}&para={{ 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 }}&para={{ 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


Acties:
  • 0 Henk 'm!

  • Zillan
  • Registratie: November 2011
  • Laatst online: 19-05 22:16
|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 }}&para={{ 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 }}&para={{ 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 }}"
toon volledige bericht
Mooi hoor, welk boardje gebruik je precies? De 2.0 of de originele?

Acties:
  • 0 Henk 'm!

  • |sWORDs|
  • Registratie: Maart 2000
  • Laatst online: 22-05 15:56

|sWORDs|

vSphere/ESXi

Zillan schreef op donderdag 10 april 2025 @ 20:51:
[...]


Mooi hoor, welk boardje gebruik je precies? De 2.0 of de originele?
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.

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}&para={name}&value={val}
V1_ENDPOINT_BOXCONFIG_GET = "/boxconfigget"
V1_ENDPOINT_BOXCONFIG_SET = "/boxconfigset" # ?mod={mod}&para={name}&value={val}
V1_ENDPOINT_ECOCONFIG_GET = "/ecoconfigget"
V1_ENDPOINT_ECOCONFIG_SET = "/ecoconfigset" # ?mod={mod}&para={name}&value={val}
V1_ENDPOINT_IPCONFIG_GET = "/ipconfigget"
V1_ENDPOINT_IPCONFIG_SET = "/ipconfigset" # ?mod={mod}&para={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


Acties:
  • 0 Henk 'm!

  • marnie
  • Registratie: November 2016
  • Nu online
|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.
Geweldig initiatief!
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&para=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


Acties:
  • 0 Henk 'm!

  • |sWORDs|
  • Registratie: Maart 2000
  • Laatst online: 22-05 15:56

|sWORDs|

vSphere/ESXi

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:

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


Acties:
  • +1 Henk 'm!

  • |sWORDs|
  • Registratie: Maart 2000
  • Laatst online: 22-05 15:56

|sWORDs|

vSphere/ESXi

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
Afbeeldingslocatie: https://tweakers.net/i/alFTglOZyGpmkdBr_8b_rHeqewE=/100x75/filters:strip_exif()/f/image/Pic1OFKM1Lnx9WM4yJXMPfI0.png?f=fotoalbum_smallAfbeeldingslocatie: https://tweakers.net/i/jrLL67iIIude9SQRtHlxc_sGMk4=/100x75/filters:strip_exif()/f/image/b6JV182Ky0URFMSYFNNDBaZf.png?f=fotoalbum_smallAfbeeldingslocatie: https://tweakers.net/i/CfvUw70jsQiEni0fU1q923Ii6eY=/100x75/filters:strip_exif()/f/image/5IVWdEzT6OIqJG25gXsk3L91.png?f=fotoalbum_small
Afbeeldingslocatie: https://tweakers.net/i/kwtVVHxs_r6HcrZ4rb_g7UpoJv8=/100x75/filters:strip_exif()/f/image/E4k7HP1K8pGwYxd82Y4wEigV.png?f=fotoalbum_smallAfbeeldingslocatie: https://tweakers.net/i/b2Gqi2jl1Xvyw7PGqHKrYWRBQUY=/100x75/filters:strip_exif()/f/image/9WlN9ZAsnFzFuQN0i7hfwQdo.png?f=fotoalbum_smallAfbeeldingslocatie: https://tweakers.net/i/DjKIbqmyxKfLuyCBFNSHy-GOyGs=/100x75/filters:strip_exif()/f/image/5j31dLrsuJby1rrzCDVqGJMn.png?f=fotoalbum_small
Afbeeldingslocatie: https://tweakers.net/i/_mMzgj5CoURC_IxeZ5V5vA8q1R8=/100x75/filters:strip_exif()/f/image/cWhApzg9fqHJ7pFGUNxmdVgr.png?f=fotoalbum_smallAfbeeldingslocatie: https://tweakers.net/i/PVEWYokQgo5u9Wf57aXL2zL29NU=/100x75/filters:strip_exif()/f/image/k4KHHRH12UzVS3mpJ1qumc0L.png?f=fotoalbum_smallAfbeeldingslocatie: https://tweakers.net/i/QYHaT_Gshna89h1jdT8WcvbYnbM=/100x75/filters:strip_exif()/f/image/FvHKFbj2iXfgjWSlayUHAT8j.png?f=fotoalbum_small
Afbeeldingslocatie: https://tweakers.net/i/-vfF7eriwZ0-Dez-7S4cj_Jfr7E=/100x75/filters:strip_exif()/f/image/OFRXFVFZxCy9GHE5QobrTkgk.png?f=fotoalbum_smallAfbeeldingslocatie: https://tweakers.net/i/Mtus8v1WIAENfq98ShzXgH9oHKA=/100x75/filters:strip_exif()/f/image/uCVXmldkYtjqkWp9Yl15Gs8W.png?f=fotoalbum_smallAfbeeldingslocatie: https://tweakers.net/i/ASFhXcmzYxGR3jh4SK_gXs0iCN0=/100x75/filters:strip_exif()/f/image/AJa2RkbKERff5XfSRnIQrGJj.png?f=fotoalbum_small
Afbeeldingslocatie: https://tweakers.net/i/gxQxZGPy0GoyECSk_Gr2grjJbqw=/100x75/filters:strip_exif()/f/image/irnjtTXHrBb5mqo9v202WLvB.png?f=fotoalbum_small

Te Koop:24 Core Intel Upgradeset


Acties:
  • +3 Henk 'm!

  • kokx
  • Registratie: Augustus 2006
  • Laatst online: 23-05 11:22

kokx

WIN

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
4
external_components:
  - source: github://pr#7993
    components:
      - duco

[ Voor 9% gewijzigd door kokx op 05-05-2025 20:26 ]


Acties:
  • 0 Henk 'm!

  • roelofz
  • Registratie: Oktober 2002
  • Laatst online: 21:30
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)?

Acties:
  • 0 Henk 'm!

  • kokx
  • Registratie: Augustus 2006
  • Laatst online: 23-05 11:22

kokx

WIN

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:

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

Acties:
  • 0 Henk 'm!

  • roelofz
  • Registratie: Oktober 2002
  • Laatst online: 21:30
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!

Acties:
  • 0 Henk 'm!

  • BiG-GuY
  • Registratie: Oktober 2002
  • Laatst online: 23:25

BiG-GuY

Moderator Wonen & Mobiliteit
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!
Je kan de verschillende Add-ons ook gewoon als losse Docker Containers draaien hoor, moet je alleen even zoeken welke je precies nodig hebt.

Draai zonder problemen Home Assistant en Music Assistant, beiden in Docker.
En daarnaast ook een MQTT Broker en Zigbee2MQTT, ook allemaal in Docker.

Gallery V&A


Acties:
  • 0 Henk 'm!

  • BiG-GuY
  • Registratie: Oktober 2002
  • Laatst online: 23:25

BiG-GuY

Moderator Wonen & Mobiliteit
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]
toon volledige bericht
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.

Gallery V&A


Acties:
  • 0 Henk 'm!

  • kokx
  • Registratie: Augustus 2006
  • Laatst online: 23-05 11:22

kokx

WIN

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!
Een andere optie zou zijn om ESPhome te gebruiken via de commandline met docker. Dan heb je de Home Assistant addon niet nodig.

Acties:
  • 0 Henk 'm!

  • kokx
  • Registratie: Augustus 2006
  • Laatst online: 23-05 11:22

kokx

WIN

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

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.

Acties:
  • 0 Henk 'm!

  • roelofz
  • Registratie: Oktober 2002
  • Laatst online: 21:30
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!

Acties:
  • 0 Henk 'm!

  • Septillion
  • Registratie: Januari 2009
  • Laatst online: 00:42

Septillion

Moderator Wonen & Mobiliteit
@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.

Acties:
  • 0 Henk 'm!

  • kokx
  • Registratie: Augustus 2006
  • Laatst online: 23-05 11:22

kokx

WIN

@Septillion Helemaal gelijk in! Thanks voor de tip!

Acties:
  • 0 Henk 'm!

  • roelofz
  • Registratie: Oktober 2002
  • Laatst online: 21:30
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?

Acties:
  • 0 Henk 'm!

  • kokx
  • Registratie: Augustus 2006
  • Laatst online: 23-05 11:22

kokx

WIN

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

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.

Acties:
  • 0 Henk 'm!

  • roelofz
  • Registratie: Oktober 2002
  • Laatst online: 21:30
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.

Acties:
  • 0 Henk 'm!

  • sebaszz1
  • Registratie: Oktober 2022
  • Laatst online: 23-05 11:24
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
4
external_components:
  - source: github://pr#7993
    components:
      - duco
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

Acties:
  • 0 Henk 'm!

  • kokx
  • Registratie: Augustus 2006
  • Laatst online: 23-05 11:22

kokx

WIN

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
toon volledige bericht
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.

Acties:
  • 0 Henk 'm!

  • sebaszz1
  • Registratie: Oktober 2022
  • Laatst online: 23-05 11:24
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.
Bedankt! Zal ik doen zodra mijn losse vochtigheid sensor binnen is.

Acties:
  • 0 Henk 'm!

  • roelofz
  • Registratie: Oktober 2002
  • Laatst online: 21:30
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.

Acties:
  • 0 Henk 'm!

  • sebaszz1
  • Registratie: Oktober 2022
  • Laatst online: 23-05 11:24
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]
toon volledige bericht
Ik moest trouwens serial number verwijderen uit de configuratie anders verbreekt Home assistant iedere keer de verbinding na een request. Geen idee waarom 8)7

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):

Acties:
  • 0 Henk 'm!

  • kokx
  • Registratie: Augustus 2006
  • Laatst online: 23-05 11:22

kokx

WIN

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 8)7

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):
toon volledige bericht
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.

[ Voor 19% gewijzigd door kokx op 14-05-2025 00:39 . Reden: Fout gevonden ]


Acties:
  • 0 Henk 'm!

  • roelofz
  • Registratie: Oktober 2002
  • Laatst online: 21:30
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.
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. ]


Acties:
  • 0 Henk 'm!

  • kokx
  • Registratie: Augustus 2006
  • Laatst online: 23-05 11:22

kokx

WIN

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

Acties:
  • 0 Henk 'm!

  • roelofz
  • Registratie: Oktober 2002
  • Laatst online: 21:30
Ah, dus dit moet erboven en dan snapt ie het wel, cool!

Daar ga ik morgen dan mee verder, thanks!

Acties:
  • 0 Henk 'm!

  • sebaszz1
  • Registratie: Oktober 2022
  • Laatst online: 23-05 11:24
kokx 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.
Klopt via ESPhome. ik geloof je meteen ;) Mocht ik iets moeten testen dan hoor ik het graag.

Acties:
  • 0 Henk 'm!

  • roelofz
  • Registratie: Oktober 2002
  • Laatst online: 21:30
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):

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

Acties:
  • 0 Henk 'm!

  • The_FrankO
  • Registratie: November 2001
  • Niet online
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.
Dit herken ik, exact dezelfde ervaring.
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.

iRacing Profiel | Mijn SimRig


Acties:
  • +1 Henk 'm!

  • kokx
  • Registratie: Augustus 2006
  • Laatst online: 23-05 11:22

kokx

WIN

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.

Acties:
  • 0 Henk 'm!

  • kokx
  • Registratie: Augustus 2006
  • Laatst online: 23-05 11:22

kokx

WIN

sebaszz1 schreef op vrijdag 16 mei 2025 @ 11:47:
[...]


Klopt via ESPhome. ik geloof je meteen ;) Mocht ik iets moeten testen dan hoor ik het graag.
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?

Acties:
  • 0 Henk 'm!

  • roelofz
  • Registratie: Oktober 2002
  • Laatst online: 21:30
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?

Acties:
  • 0 Henk 'm!

  • kokx
  • Registratie: Augustus 2006
  • Laatst online: 23-05 11:22

kokx

WIN

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:

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

Acties:
  • 0 Henk 'm!

  • kokx
  • Registratie: Augustus 2006
  • Laatst online: 23-05 11:22

kokx

WIN

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:

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)

Acties:
  • 0 Henk 'm!

  • sebaszz1
  • Registratie: Oktober 2022
  • Laatst online: 23-05 11:24
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.

Acties:
  • 0 Henk 'm!

  • roelofz
  • Registratie: Oktober 2002
  • Laatst online: 21:30
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.

Acties:
  • 0 Henk 'm!

  • kokx
  • Registratie: Augustus 2006
  • Laatst online: 23-05 11:22

kokx

WIN

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

Acties:
  • 0 Henk 'm!

  • roelofz
  • Registratie: Oktober 2002
  • Laatst online: 21:30
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.

Acties:
  • 0 Henk 'm!

  • kokx
  • Registratie: Augustus 2006
  • Laatst online: 23-05 11:22

kokx

WIN

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

Acties:
  • 0 Henk 'm!

  • roelofz
  • Registratie: Oktober 2002
  • Laatst online: 21:30
Ik heb de DucoBox Energy Comfort D325, lijkt mij dezelfde als die van jou.

Acties:
  • 0 Henk 'm!

  • kokx
  • Registratie: Augustus 2006
  • Laatst online: 23-05 11:22

kokx

WIN

roelofz schreef op dinsdag 20 mei 2025 @ 09:03:
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?)

Acties:
  • 0 Henk 'm!

  • roelofz
  • Registratie: Oktober 2002
  • Laatst online: 21:30
Ik dacht discovery ergens gezien te hebben maar ben het toch kwijt, hoe genereer ik die?

Acties:
  • 0 Henk 'm!

  • kokx
  • Registratie: Augustus 2006
  • Laatst online: 23-05 11:22

kokx

WIN

Discovery kun je aanzetten in de YAML van esphome:

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)

Acties:
  • 0 Henk 'm!

  • roelofz
  • Registratie: Oktober 2002
  • Laatst online: 21:30
Dat was weer eenvoudig toe te voegen, thanks!
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...

Acties:
  • 0 Henk 'm!

  • sebaszz1
  • Registratie: Oktober 2022
  • Laatst online: 23-05 11:24
kokx 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.
Begrijpelijk. Zou mooi zijn als het lukt ;)

Acties:
  • 0 Henk 'm!

  • sebaszz1
  • Registratie: Oktober 2022
  • Laatst online: 23-05 11:24
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 zie een vergelijkbaar gedrag met mijn CO2 meting

Afbeeldingslocatie: https://tweakers.net/i/ipSkIfEKZ__xSaVlVY3CkaCZLFk=/800x/filters:strip_icc():strip_exif()/f/image/T3neQ2dI0DIGtwQR4vRKzNi1.jpg?f=fotoalbum_large

Geen idee of er relatie is maar kwam ook onderstaand tegen in de log.

Afbeeldingslocatie: https://tweakers.net/i/V4PvrpHu1bfABTGkGyQJt4Vjh58=/800x/filters:strip_icc():strip_exif()/f/image/Yp5X3IOYEdImRI9BhXjr0mZM.jpg?f=fotoalbum_large

Acties:
  • 0 Henk 'm!

  • Septillion
  • Registratie: Januari 2009
  • Laatst online: 00:42

Septillion

Moderator Wonen & Mobiliteit
sebaszz1 schreef op woensdag 21 mei 2025 @ 13:12:
Geen idee of er relatie is maar kwam ook onderstaand tegen in de log.

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

Acties:
  • +1 Henk 'm!

  • kokx
  • Registratie: Augustus 2006
  • Laatst online: 23-05 11:22

kokx

WIN

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.
Thanks voor die hint! Heb dit meteen aangepast.
sebaszz1 schreef op woensdag 21 mei 2025 @ 13:12:
[...]


ik zie een vergelijkbaar gedrag met mijn CO2 meting

[Afbeelding]
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.
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...
toon volledige bericht
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.

Edit: Heb deze validaties meteen geimplementeerd.
Pagina: 1 2 Laatste