Zehnder ComfoAir 350 / WHR 930 middels Raspberry Pi uitlezen in Home Assistant

Whirlwind volgt de ontwikkelingen op domoticagebied en schrijft uit eigen ervaring zo nu en dan een artikel over dit onderwerp. In dit artikel koppelen we de WTW-unit Zehnder WHR 930 aan Home Assistant. Een WTW-unit is een ventilatiesysteem met warmteterugwinning.

Werking van een WTW-unit

In de winter wordt de warmte van de afgevoerde binnenlucht door de warmtewisselaar overgedragen aan de aangevoerde buitenlucht, zodat deze op temperatuur is bij het binnenstromen van de woning. Hierdoor gaat ’s winters verse lucht naar binnen en gaat weinig warmte verloren.

In de zomer daalt ’s nachts de buitentemperatuur. De bypass in de WTW-unit zorgt dan voor een verlaging van de binnentemperatuur doordat de koele buitenlucht na filtering naar binnen komt. De WTW-unit schakelt de bypass automatisch in- en uit.

Stap 1: WTW verbinden met Raspberry Pi

Bovenop de Zehnder WHR 930, welke technisch gezien vergelijkbaar is met de Zehnder ComfoAir 350 en ondersteund wordt door de software die in dit artikel wordt benoemd, bevindt zich een afdekplaat. Schroef deze afdekplaat los om toegang te krijgen tot de seriële poort (RS-232). Op deze poort kan een seriële kabel met 9 pinnen aangesloten worden.

Belangrijk: de WTW-unit levert 12 volt via deze seriële poort. Dit voltage is te hoog voor de Raspberry Pi. Vandaar dat we alleen de 3 pinnen gebruiken die voor de dataoverdracht nodig zijn. Plug bijvoorbeeld de volgende Delock-adapter in op de seriële poort van de WTW-unit. Aan de andere zijde van deze adapter kan gekozen worden welke pinnen van de seriële aansluiting worden gebruikt.

Gebruik een 9-polige seriële kabel en knip één van connectors af. Sluit de bruine, rode en zwarte ader als volgt aan op de bovenstaande Delock-adapter:

  • RX (receive) = bruine ader van seriële kabel op pin 2 van Delock-adapter
  • TX (transmit) = rode ader van seriële kabel op pin 3 van Delock-adapter
  • GND (ground) = zwarte ader van seriële kabel op pin 5 van Delock-adapter

Sluit de andere connector van de 9-polige seriële kabel aan op de onderstaande Digitus-adapter. Plug de Digitus-adapter in op een USB-poort van de Raspberry Pi.

In dit artikel gebruiken we overigens een Raspberry Pi Zero met een lege installatie van het Raspberry Pi OS. Uiteraard is het ook mogelijk om een ander model Raspberry Pi te gebruiken. Home Assistant draait in onze situatie op een andere Raspberry Pi.

Stap 2: software installeren op Raspberry Pi

Installeer de benodigde packages:

sudo apt-get update
sudo apt-get install python3-serial python3-pip python3-yaml
sudo pip3 install paho-mqtt

Maak een map en open deze:

md /home/pi/ca350
cd /home/pi/ca350

Download het Python-script en het configuratiebestand:

wget https://raw.githubusercontent.com/adorobis/hacomfoairmqtt/master/src/ca350
wget https://raw.githubusercontent.com/adorobis/hacomfoairmqtt/master/src/config.ini.dist

Hernoem het configuratiebestand naar config.ini:

mv config.ini.dist config.ini

Open het configuratiebestand en wijzig het pad van de seriële poort in bijvoorbeeld /dev/ttyUSB0 en geef de MQTT-gegevens (IP, user en password) van uw MQTT-server op. Een MQTT-server is noodzakelijk om de WTW-data door te geven aan Home Assistant.

nano config.ini

Sla het configuratiebestand op en verlaat nano.

Stap 3: service aanmaken op Raspberry Pi

Maak als volgt een service aan. De service zorgt ervoor dat het Python-script automatisch opstart met de Raspberry Pi en dat het script blijft draaien. Alleen als het script draait, komt de WTW-data via MQTT bij Home Assistant terecht.

sudo nano /etc/systemd/system/ca350.service

Plaats het volgende in het service-bestand:

[Unit]
Description=ca350
After=multi-user.target

[Service]
Type=idle
ExecStart=/usr/bin/python3 /home/pi/ca350/ca350
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target

Sla het service-bestand op en verlaat nano.

Herlaad systemd, schakel de service in en start de service:

sudo systemctl daemon-reload
sudo systemctl enable ca350.service
sudo service ca350 start

Bekijk de status van de service met:

sudo service ca350 status

Stap 4: kaart toevoegen aan Home Assistant

Voeg een picture elements card toe aan de weergave en geef de volgende instellingen op:

type: picture-elements
image: local/ca350/ca350.png
elements:
  - type: state-label
    entity: sensor.ca350_supply_fan_speed
    style:
      top: 59%
      left: 73%
      color: gray
  - type: state-label
    entity: sensor.ca350_exhaust_fan_speed
    style:
      top: 59%
      left: 27%
      color: gray
  - type: state-label
    entity: sensor.ca350_return_temperature
    style:
      top: 20%
      left: 90%
      color: darkred
  - type: state-label
    entity: sensor.ca350_supply_temperature
    style:
      top: 76%
      left: 90%
      color: darkred
  - type: state-label
    entity: sensor.ca350_outside_temperature
    style:
      top: 20%
      left: 12.5%
      color: '#4171b1'
  - type: state-label
    entity: sensor.ca350_exhaust_temperature
    style:
      top: 76%
      left: 13%
      color: '#4171b1'
  - type: state-label
    entity: sensor.ca350_bypass_valve
    prefix: 'Bypass: '
    style:
      top: 26%
      left: 50%
      color: gray
  - type: state-label
    entity: number.ca350_filter_weeks
    prefix: 'Change filter in '
    style:
      top: 92%
      left: 50%
      color: gray
  - type: state-label
    entity: sensor.ca350_summer_mode
    style:
      top: 10%
      left: 13%
      color: grey

Maak de map www/ca350 in de config-map van Home Assistant aan en plaats daarin ca350.png. Dit is de achtergrond van de kaart.

Het bovenstaande levert de volgende kaart op. Herstart Home Assistant indien de achtergrond niet verschijnt.

Zie ook lovelace-hacomfoairmqtt voor een kaart waarmee de ventilatiestand ingesteld kan worden op: uit, stand 1, stand 2 of stand 3. Die kaart ziet er als volgt uit:

De configuratie van deze kaart is als volgt:

type: custom:hacomfoairmqtt-card
climateEntity: climate.ca350_climate
outsideTempSensor: sensor.ca350_outside_temperature
exhaustTempSensor: sensor.ca350_exhaust_temperature
returnTempSensor: sensor.ca350_return_temperature
supplyTempSensor: sensor.ca350_supply_temperature
filterStatusSensor: binary_sensor.ca350_filter_status
bypassValveSensor: binary_sensor.ca350_bypass_valve
summerModeSensor: binary_sensor.ca350_summer_mode
returnAirLevelSensor: sensor.ca350_return_air_level
supplyAirLevelSensor: sensor.ca350_supply_air_level
preheatingStatusSensor: binary_sensor.ca350_preheating_status