Anyone using Duco Ventilation Communication Print Ethernet module?

Hey Miguel,

Ducobox Energy is for now unsupported, I don’t have one where I can test on :frowning: Maybe in the future support will be added!

Hi!
Soon I will receive the DucoBox in my new house.
Do you meanwhile have a solution for connecting your Energy Comfort with Home Assistant?

I could buy the communication print, but if it’s not needed, the better.

@Flamingo-tech : If you want to test on my Ducobox Energy Comfort device, you’re invited!

Hey @koelkast,

Lets continue this converstation via E-mail ^^ would be cool if we can do a collab!

Kind regards

The Flamingo

Hi, I dont have the energy comfort installed yet, but here next to me in the box with the communication print. Maybe I could also help with testing en joining you guys?

Hey, Please send me an email @ [email protected] Thanks (y)

Hi, did you receive the photos per email? Just checking :slightly_smiling_face:

1 Like

Yes I did! I send you a response today ^^

Thanks you so much for your effort! This will deff get us started :wink:

1 Like

Hello,
@Flamingo-tech @koelkast I would like to buy also the Ducobox Energy Comfort. Did you had any success to connect this model too?

That would be great :slightly_smiling_face:

Hi @albertjSmit Nice solution you have configured in HA! Unfortunately, this link doesn’t work anymore… :frowning: Could you perhaps post the full yaml code of the duco integration in this topic? Thanks in advance! :slight_smile:

It’s not completely the same but I started out with his information and modernised it to the new templates. I have the DucoBox Energy Comfort 325 with the CO2 and RH sensors in multiple rooms and a RH sensor in the box itself.

Make sure to change the IP’s to your IP’s and check which nodes are in your system for which rooms. You can see and set them through the website available on the root of the IP-address of your PCB.

inside configuration.yaml (you can choose to split it into separate .yaml files and include it per type):

input_select:
  ducobox_mode:
    name: DucoBox stand
    icon: mdi:target
    options:
      - "AUTO"
      - "CNT1"
      - "CNT2"
      - "CNT3"
      - "MAN1"
      - "MAN2"
      - "MAN3"

rest:
  - resource: http://192.168.16.8/nodeinfoget?node=1
    scan_interval: 15
    sensor:
      - name: DucoBox
        unique_id: ducobox
        value_template: "{{ value_json.state }}"
        icon: mdi:fan
        json_attributes:
          - devtype
          - location
          - state
          - mode
          - ovrl
          - swversion
          - serialnb
      - name: DucoBox temperature
        unique_id: ducobox_temperature
        value_template: "{{ value_json.temp }}"
        device_class: temperature
        state_class: measurement
        unit_of_measurement: "°C"
      - name: DucoBox humidity
        unique_id: ducobox_humidity
        value_template: "{{ value_json.rh }}"
        device_class: humidity
        state_class: measurement
        unit_of_measurement: "%"
      - name: DucoBox target
        unique_id: ducobox_target
        value_template: "{{ value_json.trgt }}"
        state_class: measurement
        unit_of_measurement: "%"
  - resource: http://192.168.16.8/nodeinfoget?node=2
    scan_interval: 15
    sensor:
      - name: Woonkamer temperature
        unique_id: woonkamer_temperature
        value_template: "{{ value_json.temp }}"
        device_class: temperature
        state_class: measurement
        unit_of_measurement: "°C"
      - name: Woonkamer carbon_dioxide
        unique_id: woonkamer_carbon_dioxide
        value_template: "{{ value_json.co2 }}"
        device_class: carbon_dioxide
        state_class: measurement
        unit_of_measurement: "ppm"
  - resource: http://192.168.16.8/nodeinfoget?node=3
    scan_interval: 15
    sensor:
      - name: Slaapkamer temperature
        unique_id: slaapkamer_temperature
        value_template: "{{ value_json.temp }}"
        device_class: temperature
        state_class: measurement
        unit_of_measurement: "°C"
      - name: Slaapkamer carbon_dioxide
        unique_id: slaapkamer_carbon_dioxide
        value_template: "{{ value_json.co2 }}"
        device_class: carbon_dioxide
        state_class: measurement
        unit_of_measurement: "ppm"
  - resource: http://192.168.16.8/nodeinfoget?node=4
    scan_interval: 15
    sensor:
      - name: Sauna temperature
        unique_id: sauna_temperature
        value_template: "{{ value_json.temp }}"
        device_class: temperature
        state_class: measurement
        unit_of_measurement: "°C"
      - name: Sauna carbon_dioxide
        unique_id: sauna_carbon_dioxide
        value_template: "{{ value_json.co2 }}"
        device_class: carbon_dioxide
        state_class: measurement
        unit_of_measurement: "ppm"
  - resource: http://192.168.16.8/nodeinfoget?node=5
    scan_interval: 15
    sensor:
      - name: Kantoor Deni temperature
        unique_id: kantoor_deni_temperature
        value_template: "{{ value_json.temp }}"
        device_class: temperature
        state_class: measurement
        unit_of_measurement: "°C"
      - name: Kantoor Deni carbon_dioxide
        unique_id: kantoor_deni_carbon_dioxide
        value_template: "{{ value_json.co2 }}"
        device_class: carbon_dioxide
        state_class: measurement
        unit_of_measurement: "ppm"
  - resource: http://192.168.16.8/nodeinfoget?node=6
    scan_interval: 15
    sensor:
      - name: Kantoor Alex temperature
        unique_id: kantoor_alex_temperature
        value_template: "{{ value_json.temp }}"
        device_class: temperature
        state_class: measurement
        unit_of_measurement: "°C"
      - name: Kantoor Alex carbon_dioxide
        unique_id: kantoor_alex_carbon_dioxide
        value_template: "{{ value_json.co2 }}"
        device_class: carbon_dioxide
        state_class: measurement
        unit_of_measurement: "ppm"
  - resource: http://192.168.16.8/nodeinfoget?node=7
    scan_interval: 15
    sensor:
      - name: Badkamer temperature
        unique_id: badkamer_temperature
        value_template: "{{ value_json.temp }}"
        device_class: temperature
        state_class: measurement
        unit_of_measurement: "°C"
      - name: Badkamer humidity
        unique_id: badkamer_humidity
        value_template: "{{ value_json.rh }}"
        device_class: humidity
        state_class: measurement
        unit_of_measurement: "%"

rest_command:
  ducobox_mode_auto:
    url: "http://192.168.16.8/nodesetoperstate?node=1&value=AUTO"
  ducobox_mode_cnt1:
    url: "http://192.168.16.8/nodesetoperstate?node=1&value=CNT1"
  ducobox_mode_cnt2:
    url: "http://192.168.16.8/nodesetoperstate?node=1&value=CNT2"
  ducobox_mode_cnt3:
    url: "http://192.168.16.8/nodesetoperstate?node=1&value=CNT3"
  ducobox_mode_man1:
    url: "http://192.168.16.8/nodesetoperstate?node=1&value=MAN1"
  ducobox_mode_man2:
    url: "http://192.168.16.8/nodesetoperstate?node=1&value=MAN2"
  ducobox_mode_man3:
    url: "http://192.168.16.8/nodesetoperstate?node=1&value=MAN3"

And you need to create an Automation to use the ‘input_select’:


alias: DucoBox standen
description: ""
trigger:
  - platform: state
    entity_id:
      - input_select.ducobox_mode
condition: []
action:
  - choose:
      - conditions:
          - condition: state
            entity_id: input_select.ducobox_mode
            state: AUTO
        sequence:
          - service: rest_command.ducobox_mode_auto
            data: {}
      - conditions:
          - condition: state
            entity_id: input_select.ducobox_mode
            state: MAN1
        sequence:
          - service: rest_command.ducobox_mode_man1
            data: {}
      - conditions:
          - condition: state
            entity_id: input_select.ducobox_mode
            state: MAN2
        sequence:
          - service: rest_command.ducobox_mode_man2
            data: {}
      - conditions:
          - condition: state
            entity_id: input_select.ducobox_mode
            state: MAN3
        sequence:
          - service: rest_command.ducobox_mode_man3
            data: {}
      - conditions:
          - condition: state
            entity_id: input_select.ducobox_mode
            state: CNT1
        sequence:
          - service: rest_command.ducobox_mode_cnt1
            data: {}
      - conditions:
          - condition: state
            entity_id: input_select.ducobox_mode
            state: CNT2
        sequence:
          - service: rest_command.ducobox_mode_cnt2
            data: {}
      - conditions:
          - condition: state
            entity_id: input_select.ducobox_mode
            state: CNT3
        sequence:
          - service: rest_command.ducobox_mode_cnt3
            data: {}
mode: single
1 Like

I tried following your instructions but somehow I can only see the entity Ducobox and not the sensors. Is this correct or is something going wrong here?

If you go to the interface of the unit, which is directly on the IP of the PCB, which nodes do you see?

My active nodes have the numbers 1-7, 1 is the DucoBox itself, 2-6 are CO2 sensors, 7 is a RH button/sensor in the Bathroom. 58 is the RH sensor in the box, which is shown as state in 1 so you don’t include this node. Not sure what 67 is, but it has no values, so I didn’t include it. The location I filled in myself in the Node Config menu.


Check the URL’s that the node number is correct with the nodes of your setup.

Yeah I saw them and here is my box:

Then in your code it’s:

#DucoBox integrations
input_select:
  ducobox_mode:
    name: DucoBox stand
    icon: mdi:target
    options:
      - "AUTO"
      - "CNT1"
      - "CNT2"
      - "CNT3"
      - "MAN1"
      - "MAN2"
      - "MAN3"

rest:
  - resource: http://192.168.20.217/nodeinfoget?node=1
    scan_interval: 15
    sensor:
      - name: DucoBox
        unique_id: ducobox
        value_template: "{{ value_json.state }}"
        icon: mdi:fan
        json_attributes:
          - devtype
          - location
          - state
          - mode
          - ovrl
          - swversion
          - serialnb
      - name: DucoBox temperature
        unique_id: ducobox_temperature
        value_template: "{{ value_json.temp }}"
        device_class: temperature
        state_class: measurement
        unit_of_measurement: "°C"
      - name: DucoBox humidity
        unique_id: ducobox_humidity
        value_template: "{{ value_json.rh }}"
        device_class: humidity
        state_class: measurement
        unit_of_measurement: "%"
      - name: DucoBox target
        unique_id: ducobox_target
        value_template: "{{ value_json.trgt }}"
        state_class: measurement
        unit_of_measurement: "%"
  - resource: http://192.168.20.217/nodeinfoget?node=4
    scan_interval: 15
    sensor:
      - name: Woonkamer temperature
        unique_id: woonkamer_temperature
        value_template: "{{ value_json.temp }}"
        device_class: temperature
        state_class: measurement
        unit_of_measurement: "°C"
      - name: Woonkamer carbon_dioxide
        unique_id: woonkamer_carbon_dioxide
        value_template: "{{ value_json.co2 }}"
        device_class: carbon_dioxide
        state_class: measurement
        unit_of_measurement: "ppm"
  - resource: http://192.168.20.217/nodeinfoget?node=3
    scan_interval: 15
    sensor:
      - name: Slaapkamer temperature
        unique_id: slaapkamer_temperature
        value_template: "{{ value_json.temp }}"
        device_class: temperature
        state_class: measurement
        unit_of_measurement: "°C"
      - name: Slaapkamer carbon_dioxide
        unique_id: slaapkamer_carbon_dioxide
        value_template: "{{ value_json.co2 }}"
        device_class: carbon_dioxide
        state_class: measurement
        unit_of_measurement: "ppm"
      
rest_command:
  ducobox_mode_auto:
    url: "http://192.168.20.217/nodesetoperstate?node=1&value=AUTO"
  ducobox_mode_cnt1:
    url: "http://192.168.20.217/nodesetoperstate?node=1&value=CNT1"
  ducobox_mode_cnt2:
    url: "http://192.168.20.217/nodesetoperstate?node=1&value=CNT2"
  ducobox_mode_cnt3:
    url: "http://192.168.20.217/nodesetoperstate?node=1&value=CNT3"
  ducobox_mode_man1:
    url: "http://192.168.20.217/nodesetoperstate?node=1&value=MAN1"
  ducobox_mode_man2:
    url: "http://192.168.20.217/nodesetoperstate?node=1&value=MAN2"
  ducobox_mode_man3:
    url: "http://192.168.20.217/nodesetoperstate?node=1&value=MAN3"

But I only see 1 entity now which is the input_select.

Edit:

Found that it works now! Issue was that the entity wasn’t prepopulating on my HA list. So I had to manually add my entities in a card in my dashboard. Found by adding logging on the restful integration that communication was working properly. Now making the dashboard and then moving on to allow setting states on my box and my valves.

I was checking if there were any typos, but yeah the REST implementation doesn’t make the cards automatically. But you can use them to create your own cards with the sensor data.

I don’t have extra valves in my setup, but I guess you might need extra ‘ducobox_mode’ per valve so you can set the valves individually.

1 Like

Hello everyone

So happy to have found this as I have Duco Energy as well as the Communication Print. Got my Home Assistant running and tried the above.

What I did

added in configuration.yaml

## Duco Ventilation Box
input_select:
  ducobox_mode:
    name: DucoBox stand
    icon: mdi:target
    options:
      - "AUTO"
      - "CNT1"
      - "CNT2"
      - "CNT3"
      - "MAN1"
      - "MAN2"
      - "MAN3"

rest_command:
  ducobox_mode_auto:
    url: "http://10.77.99.145/nodesetoperstate?node=1&value=AUTO"
  ducobox_mode_cnt1:
    url: "http://10.77.99.145/nodesetoperstate?node=1&value=CNT1"
  ducobox_mode_cnt2:
    url: "http://10.77.99.145/nodesetoperstate?node=1&value=CNT2"
  ducobox_mode_cnt3:
    url: "http://10.77.99.145/nodesetoperstate?node=1&value=CNT3"
  ducobox_mode_man1:
    url: "http://10.77.99.145/nodesetoperstate?node=1&value=MAN1"
  ducobox_mode_man2:
    url: "http://10.77.99.145/nodesetoperstate?node=1&value=MAN2"
  ducobox_mode_man3:
    url: "http://10.77.99.145/nodesetoperstate?node=1&value=MAN3"

rest:
  - resource: http://10.77.99.145/nodeinfoget?node=1
    scan_interval: 15
    sensor:
      - name: DucoBox
        unique_id: ducobox
        value_template: "{{ value_json.state }}"
        icon: mdi:fan
        json_attributes:
          - devtype
          - location
          - state
          - mode
          - ovrl
          - swversion
          - serialnb
      - name: DucoBox Temperatuur
        unique_id: ducobox_temperature
        value_template: "{{ value_json.temp }}"
        device_class: temperature
        state_class: measurement
        unit_of_measurement: "°C"
      - name: DucoBox Relatieve Vochtigheid
        unique_id: ducobox_humidity
        value_template: "{{ value_json.rh }}"
        device_class: humidity
        state_class: measurement
        unit_of_measurement: "%"
      - name: DucoBox Ventilatie
        unique_id: ducobox_target
        value_template: "{{ value_json.trgt }}"
        state_class: measurement
        unit_of_measurement: "%"
  - resource: http://10.77.99.145/nodeinfoget?node=2
    scan_interval: 15
    sensor:
      - name: Leefruimte Temperatuur 
        unique_id: leefruimte_temperature
        value_template: "{{ value_json.temp }}"
        device_class: temperature
        state_class: measurement
        unit_of_measurement: "°C"
      - name: Leefruimte CO2
        unique_id: leefruimte_co2
        value_template: "{{ value_json.co2 }}"
        device_class: carbon_dioxide
        state_class: measurement
        unit_of_measurement: "ppm"
  - resource: http://10.77.99.145/nodeinfoget?node=3
    scan_interval: 15
    sensor:
      - name: Slaapkamer Temperatuur 
        unique_id: slaapkamer_temperature
        value_template: "{{ value_json.temp }}"
        device_class: temperature
        state_class: measurement
        unit_of_measurement: "°C"
      - name: Slaapkamer CO2
        unique_id: slaapkamer_co2
        value_template: "{{ value_json.co2 }}"
        device_class: carbon_dioxide
        state_class: measurement
        unit_of_measurement: "ppm"

added in automation.yaml

  - alias: DucoBox stand
  description: ''
  trigger:
  - platform: state
    entity_id:
    - input_select.ducobox_mode
  condition: []
  action:
  - choose:
    - conditions:
      - condition: state
        entity_id: input_select.ducobox_mode
        state: AUTO
      sequence:
      - service: rest_command.ducobox_mode_auto
        data: {}
    - conditions:
      - condition: state
        entity_id: input_select.ducobox_mode
        state: MAN1
      sequence:
      - service: rest_command.ducobox_mode_man1
        data: {}
    - conditions:
      - condition: state
        entity_id: input_select.ducobox_mode
        state: MAN2
      sequence:
      - service: rest_command.ducobox_mode_man2
        data: {}
    - conditions:
      - condition: state
        entity_id: input_select.ducobox_mode
        state: MAN3
      sequence:
      - service: rest_command.ducobox_mode_man3
        data: {}
    - conditions:
      - condition: state
        entity_id: input_select.ducobox_mode
        state: CNT1
      sequence:
      - service: rest_command.ducobox_mode_cnt1
        data: {}
    - conditions:
      - condition: state
        entity_id: input_select.ducobox_mode
        state: CNT2
      sequence:
      - service: rest_command.ducobox_mode_cnt2
        data: {}
    - conditions:
      - condition: state
        entity_id: input_select.ducobox_mode
        state: CNT3
      sequence:
      - service: rest_command.ducobox_mode_cnt3
        data: {}
  mode: single

made a UI-lovelace.yaml and added this

type: entities
entities: 
- entity: input_select.ducobox_mode
- entity: sensor.ducobox_target
  name: Ventilatie %   
- entity: sensor.ducobox_humidity
  name: Vochtigheid   
- entity: sensor.leefruimte_co2
  name: CO2 Leefruimte
- entity: sensor.slaapkamer_co2
  name: CO2 Slaapkamer

Then I created a card myself as it does not auto load the sensors etc. But sensors don’t show and drop down menu to select mode does not do anything. I can select any mode, but no change in Ducobox.

What did I miss?

thanks!

Have you rebooted HA after adding these in .conf files?

It is my first week with Home Assistant and I was told to reload the yaml files…
Now I rebooted and all work but 1 - thanks! :slight_smile:

not sure what is missing there to get the fan %

also how do you people get the power consumption?

thanks again, I am learning fast haha

If you browse to this address do you see a value with the trgt value?

Yes

{“node”:1,“devtype”:“BOX”,“subtype”:26,“netw”:“VIRT”,“addr”:1,“sub”:1,“prnt”:0,“asso”:0,“location”:“”,“state”:“AUTO”,“cntdwn”:0,“endtime”:0,“mode”:“AUTO”,“trgt”:52,“actl”:0,“ovrl”:255,“snsr”:0,“cerr”:0,“swversion”:“19156.3.3.0”,“serialnb”:“PS2150002227”,“temp”:22.1,“co2”:0,“rh”:54.61,“error”:“W.00.00.00”,“show”:0,“link”:0}

same with http://10.77.99.145/boxinfoget?
but can’t pull filter remaining time or bypass status from there either