W moim domu posiadam mechaniczną wentylację z odzyskiem ciepła napędzaną przez urządzenie Stiebel Eltron V-400. W uproszczeniu jest to duży wentylator z kanałami nawiewnymi i wywiewnymi. Pomijając wbudowaną automatykę, jest to raczej proste urządzenie. Bez dedykowanej bramki (która dodatkowo kosztuje) mogę jedynie sterować urządzeniem lub zobaczyć bieżące parametry na sterowniku, umieszczonym albo bezpośrednio na jednostce, albo w przedpokoju.

Pomyślałem, że warto byłoby zbierać dane z tego urządzenia, zarówno do analizy, jak i z czystej ciekawości. Korzystam z Home Assistant, który umożliwia prezentację dedykowanych wykresów i dashboardów do takich celów. Ponieważ niedawno eksperymentowałem z modułami ESP, w mojej głowie pojawił się pomysł na projekt.

Potrzebne części

W projekcie wykorzystałem czujniki temperatury Dallas DS18B20 oraz moduł Wemos D1 z wbudowanym ESP8266. Wybrałem Wemos D1 ze względu na kompaktowy rozmiar, wyjście 5V i fakt, że akurat miałem jeden wolny pod ręką.

Czujniki Dallas DS18B20 są dobrze znane z interfejsu 1-wire, pozwalającego podłączyć wiele czujników do jednej linii danych. Jeśli zastanawiałeś się kiedyś, czy istnieją projekty, w których jest sens użyć więcej niż jednego czujnika DS18B20 na jednej płytce – czytaj dalej.

Miałem również 6-żyłowy przewód LED, który rozdzieliłem i wykorzystałem do podłączenia czujników do modułu. Do zasilania użyłem starej ładowarki do telefonu i kabla USB-C.

Moduł ESP8266 Wemos D1, czujniki DS18B20 i piny
Najważniejsze elementy: moduł Wemos D1 z ESP8266 i 5 czujników DS18B20

Plan

Urządzenie rekuperacyjne ma cztery kanały powietrzne – dwie pary kanałów nawiewnych i wywiewnych. Jedna para obsługuje wymianę powietrza z zewnątrz, druga cyrkuluje powietrze wewnątrz domu. Układ przepływu powietrza wygląda następująco:

Schemat przepływu powietrza Stiebel Eltron V-400
Schemat kanałów przepływu powietrza w urządzeniu Stiebel Eltron V-400

Spodziewałem się, że powietrze w tych kanałach będzie miało różne temperatury. Wewnątrz każdego z nich umieściłem po jednym czujniku DS18B20. Dodałem także dodatkowy czujnik, mierzący temperaturę na strychu, gdzie zainstalowane jest urządzenie.

Schemat rozmieszczenia czujników DS18B20 w kanałach urządzenia Stiebel Eltron V-400
Schemat rozmieszczenia czujników DS18B20 w kanałach urządzenia Stiebel Eltron V-400

Jak wspominałem wcześniej, DS18B20 używają interfejsu 1-wire, więc wszystkie czujniki mogą współdzielić jedną linię danych. Zamiast podłączać czujniki szeregowo, zastosowałem topologię gwiazdy, gdzie każdy czujnik ma swój własny przewód, ale współdzieli wspólny pin danych.

Przygotowanie

Najpierw – czujniki. Lutowanie pierwszego było przyjemnością, ale każdy kolejny stawał się coraz bardziej monotonny. Każdy czujnik przylutowałem do przewodu o długości około pół metra.

Przewody przygotowane do lutowania z czujnikami DS18B20
Przewody przygotowane do lutowania z czujnikami DS18B20
Czujnik DS18B20 z przylutowanymi przewodami
Czujnik DS18B20 z przylutowanymi przewodami
Czujnik DS18B20 z przylutowanymi przewodami i zabezpieczonymi połączeniami
Czujnik DS18B20 z przylutowanymi przewodami i zabezpieczonymi połączeniami

Chciałem wszystko podłączyć do płytki prototypowej, jednak brakowało mi zaciskarki Dupont do przygotowania odpowiednich pinów. Ostatecznie użyłem złączek Wago.

Linia danych została podłączona do pinu D13 (GPIO13) na Wemos D1.

ESP8266 Wemos D1 z czujnikami DS18B20 połączonymi przez złączki Wago na płytce prototypowej
ESP8266 Wemos D1 z czujnikami DS18B20 połączonymi przez złączki Wago na płytce prototypowej

Oprogramowanie

Nie pisałem firmware’u ESP samodzielnie. Zamiast tego skorzystałem z ESPHome, który świetnie integruje się z Home Assistant.

Konfiguracja ESP przez ESPHome była jedną z najbardziej magicznych rzeczy, jakie robiłem. Chociaż lubię pisać oprogramowanie samemu od podstaw, możliwość generowania firmware’u z pliku YAML jest fantastyczna.

Identyfikacja czujników

Rozpocząłem od podstawowego projektu ESPHome, konfigurując WiFi i protokół one_wire.

one_wire:
  - platform: gpio
    pin: GPIO13

Po wgraniu firmware’u ESP wypisał adresy podłączonych czujników.

[13:47:40][C][gpio.one_wire:021]:   Pin: GPIO13
[13:47:40][C][gpio.one_wire:080]:   Found devices:
[13:47:40][C][gpio.one_wire:082]:     0x48e2a7bc12fa3651 (DS18B20)
[13:47:40][C][gpio.one_wire:082]:     0xc903deab6719b425 (DS18B20)
[13:47:40][C][gpio.one_wire:082]:     0x1f64b28d4ca713ff (DS18B20)
[13:47:40][C][gpio.one_wire:082]:     0xa82fbac2e19d54e7 (DS18B20)
[13:47:40][C][gpio.one_wire:082]:     0x702c19f8ab65e038 (DS18B20)

Wszystkie moje czujniki były widoczne, ale pojawił się jeden problem. Chciałem poprawnie nazwać każdy z czujników, lecz nie wiedziałem, który adres przypisany jest do którego z nich. Na szczęście czujniki są bardzo czułe, więc zarejestrowałem je wszystkie, przypisując im nazwy. Następnie przez dotyk, podgrzewałem konkretny czujnik i obserwowałem, który odczyt temperatury wzrósł.

To by wystarczyło, ale z racji tego, że postanowiłem użyć przewodów w różnych kolorach dla temperatur nawiewu i wywiewu, musiałem odpowiednio zaktualizować nazwy. Ostatecznie lista wyglądała następująco:

sensor:
  - platform: dallas_temp
    id: temp_inner_inflow
    address: 0x48e2a7bc12fa3651
    name: temp_inner_inflow
    update_interval: 60s 
  - platform: dallas_temp
    id: temp_inner_outflow
    address: 0xc903deab6719b425
    name: temp_inner_outflow
    update_interval: 60s
  - platform: dallas_temp
    id: temp_outer_inflow
    address: 0x1f64b28d4ca713ff
    name: temp_outer_inflow
    update_interval: 60s
  - platform: dallas_temp
    address: 0xa82fbac2e19d54e7
    name: temp_attic
    update_interval: 60s
  - platform: dallas_temp
    address: 0x702c19f8ab65e038
    name: temp_outer_outflow
    update_interval: 60s

Sprawność temperaturowa

Mając wszystkie temperatury, skonfigurowałem czujnik wyliczający sprawność temperaturową wymiennika ciepła:

η=T2T1T3T1×100

  • T1 – temperatura powietrza zewnętrznego przed wymiennikiem ciepła
  • T2 – temperatura powietrza nawiewanego za wymiennikiem ciepła
  • T3 – temperatura powietrza wywiewanego z pomieszczeń

W ESPHome wygląda to następująco:

sensor:
  - platform: template
    name: efficiency
    filters:
      - round: 2
    unit_of_measurement: '%'
    state_class: "measurement"
    accuracy_decimals: 1
    lambda: |-
      float t1 = id(temp_outer_inflow).state;
      float t2 = id(temp_inner_inflow).state;
      float t3 = id(temp_inner_outflow).state;
      float eff = (t2 - t1) / (t3 - t1);
      return eff * 100;
    update_interval: 60s

Mogłem zrobić to samo, korzystając z sensora szablonowego w Home Assistant. Jednak wykonanie tego bezpośrednio na ESP pozwoliło mi odciążyć główną instancję i przenieść obliczenia bliżej źródła danych. Dane są już dostępne w module, więc może ono udostępniać wstępnie przeliczoną wartość jako część swojego API.

Wdrożenie

Początkowe wdrożenie było nieco inne niż tradycyjny proces rozwoju oprogramowania. Musiałem wejść na strych, ostrożnie umieścić wszystkie czujniki w przewodach powietrznych zgodnie z planem i uruchomić płytkę Wemos D1.

Gdy wszystko znalazło się na swoim miejscu, przeszedłem do konfiguracji w Home Assistant.

Dashboard Home Assistant

Ponieważ integrację ESPHome z Home Assistant miałem już gotową, nowe urządzenie zostało automatycznie wykryte, a wszystkie udostępniane encje zostały zarejestrowane. Dopasowałem ich nazwy i przygotowałem dashboard, aby mieć szybki przegląd pracy mojej jednostki wentylacyjnej.

Dedykowany dashboard Home Assistant pokazujący temperaturę z każdego czujnika
Obraz pokazuje niską wydajność oraz temperatury, które nie wyglądają dobrze pod kątem wymiany ciepła, ale bez obaw – jednostka pracowała w tym czasie w trybie bypass. Udostępnię lepszy obrazek, gdy zrobi się chłodniej.

Nie będę tutaj pokazywał konfiguracji krok po kroku, ale jeśli uważasz, że byłoby to dla Ciebie przydatne, po prostu napisz do mnie. Chętnie podzielę się szczegółami.

Końcowe przemyślenia

Ten zestaw działa bez zarzutu już od pół roku. W następnej iteracji zamierzam umieścić ESP w dedykowanej obudowie i zastąpić złączki Wago. Ale kiedy już wszystko działa, potrzeba dalszych ulepszeń okazuje się mniejsza, niż się spodziewałem. Mam nadzieję, że artykł był dla Ciebie przydatny. Dzięki za przeczytanie!