Jak zrobić automatyczne chłodzenie Raspberry Pi

Jak zrobić automatyczne chłodzenie Raspberry Pi w Home Assistant

Sterowanie wentylatorem w Raspberry Pi to temat, który często wydaje się prosty – do momentu, gdy chcemy uzyskać płynną regulację jego prędkości. Wiele osób ogranicza się do podłączenia wentylatora do zasilania 5V, przez co działa on cały czas na pełnych obrotach. To rozwiązanie jest skuteczne, ale nieefektywne: głośne, energochłonne i skracające żywotność wentylatora.
W tym artykule pokażę, jak stworzyć automatyczne chłodzenie Raspberry Pi, które będzie samoczynnie dostosowywać prędkość obrotów wentylatora do aktualnej temperatury procesora – wszystko z poziomu Home Assistanta.


Dlaczego warto sterować wentylatorem przez Home Assistant?

Home Assistant pozwala nie tylko monitorować temperaturę Raspberry Pi, ale również w pełni zautomatyzować proces chłodzenia. Dzięki temu:

  • wentylator uruchamia się tylko wtedy, gdy to potrzebne,

  • można regulować jego obroty płynnie (PWM),

  • system działa cicho i wydajnie,

  • można kontrolować i wizualizować wszystko w zakładce Climate w Home Assistant.

Wcześniej wbudowana integracja z GPIO była dostępna domyślnie, ale obecnie obsługa PWM wymaga instalacji z poziomu HACS. Na szczęście cały proces da się przeprowadzić w kilku krokach.


Krok po kroku – konfiguracja automatycznego chłodzenia

  1. Zainstaluj integrację Raspberry Pi GPIO PWM
    W HACS przejdź do trzech kropek w prawym górnym rogu, wybierz Niestandardowe repozytoria i wklej link do integracji. Następnie wybierz typ Integracja i zainstaluj moduł

    Wejdź w HACS → Integrations → … (trzy kropki) → Custom repositories i dodaj repo:

    https://github.com/RedMeKool/HA-Raspberry-pi-GPIO-PWM

     

     (kategoria: Integration), potem Install i Restart HA.

  2. Dodaj integrację w Home Assistant
    Po restarcie systemu przejdź do Ustawienia → Urządzenia i usługi → Dodaj integrację i wybierz Raspberry Pi GPIO PWM. Wprowadź nazwę, pin (np. GPIO13) i określ, czy sterujesz wentylatorem, czy światłem.

  3. Zainstaluj dodatek PIQ-PIO
    To kluczowy element umożliwiający komunikację z pinami PWM. Dodaj repozytorium w Sklepie z dodatkami i zainstaluj PIQ-PIO. Po instalacji uruchom dodatek.

    Ustawienia → DodatkiSklep dodatków → menu (⋮) → Repozytoria → dodaj:

    https://github.com/Poeschl-HomeAssistant-Addons/repository

     

  4. Dodaj wpisy w YAML
    W pliku configuration.yaml należy utworzyć trzy sekcje:

    • fan: – definiująca sterowanie GPIO PWM,

      fan:
        - platform: rpi_gpio_pwm
          fans:
            - name: "Wentylator RPI PWM"     # friendly name (pierwszy raz tworzy też entity_id)
              pin: 13
              unique_id: wentylator_rpi_pwm   # pozwala potem zmienić entity_id w UI

       

    • climate: – określająca temperaturę docelową i zakres pracy,

      climate:
        - platform: generic_thermostat
          name: RPI Wentylator
          heater: switch.rpi_ventilator          # jeśli nie chcesz klikania, rozważ input_boolean
          target_sensor: sensor.system_monitor_processor_temperature
          min_temp: 10
          max_temp: 100
          ac_mode: true
          target_temp: 60
          min_cycle_duration:
            seconds: 500
          keep_alive:
            minutes: 5
          initial_hvac_mode: "cool"

       

    • automation: – odpowiadająca za logiczne sterowanie prędkością wentylatora w zależności od temperatury procesora.

      - id: rpi_fan_pwm_controller
        alias: RPI – PWM wg temperatury (hvac_action aware)
        mode: restart
        trigger:
        - platform: state
          entity_id: sensor.system_monitor_processor_temperature
          for: 00:00:05
        - platform: state
          entity_id: climate.rpi_wentylator
          attribute: temperature
        - platform: state
          entity_id: climate.rpi_wentylator
          attribute: hvac_action
        - platform: state
          entity_id: climate.rpi_wentylator
        - platform: homeassistant
          event: start
        - platform: time_pattern
          seconds: /15
        variables:
          fan_entity: fan.wentylator_rpi_pwm
          temp: '{% set v = states(''sensor.system_monitor_processor_temperature'') %} {{
            v|float(0) if v not in [''unknown'',''unavailable'',''none'',''''] else 0 }}'
          target: '{% set v = state_attr(''climate.rpi_wentylator'',''temperature'') %}
            {{ v|float(50) if v is not none else 50 }}'
          hvac_mode: '{{ (states(''climate.rpi_wentylator'') or ''off'') | lower }}'
          hvac_action: '{{ (state_attr(''climate.rpi_wentylator'',''hvac_action'') or '''')
            }}'
          delta: '{{ (temp - target) | round(2) }}'
          deadband: 1
          min_pct: 25
          max_pct: 100
          k: 16
          pct_raw: '{{ (min_pct + (k * delta)) | round(0) }}'
          pct_clamped: '{% set p = pct_raw|int %} {% if p < 0 %} 0 {% elif p > max_pct %}
            {{ max_pct|int }} {% else %} {{ p }} {% endif %}'
          pct_effective: "{% if hvac_action == 'cooling' %}\n  {{ [pct_clamped|int, min_pct|int]
            | max }}\n{% else %}\n  {{ pct_clamped|int }}\n{% endif %}"
        action:
        - choose:
          - conditions:
            - condition: template
              value_template: '{{ hvac_mode != ''off'' and (hvac_action == ''cooling'' or
                delta >= deadband) }}
      
                '
            sequence:
            - service: fan.turn_on
              target:
                entity_id: '{{ fan_entity }}'
            - choose:
              - conditions:
                - condition: template
                  value_template: '{{ pct_effective|int > 0 }}'
                sequence:
                - service: fan.set_percentage
                  target:
                    entity_id: '{{ fan_entity }}'
                  data:
                    percentage: '{{ pct_effective }}'
                - service: logbook.log
                  data:
                    name: RPI FAN
                    message: ON set {{ pct_effective }}% (temp={{ temp }}°C, target={{ target
                      }}°C, delta={{ delta }}, mode={{ hvac_mode }}, action={{ hvac_action
                      }})
              default:
              - service: fan.turn_off
                target:
                  entity_id: '{{ fan_entity }}'
              - service: logbook.log
                data:
                  name: RPI FAN
                  message: OFF (pct_effective=0)
          default:
          - service: fan.turn_off
            target:
              entity_id: '{{ fan_entity }}'
          - service: logbook.log
            data:
              name: RPI FAN
              message: OFF (temp={{ temp }}°C, target={{ target }}°C, delta={{ delta }},
                mode={{ hvac_mode }}, action={{ hvac_action }})

       

  5. Przeładuj konfigurację Home Assistanta
    Po zapisaniu zmian zrestartuj system. Automatyzacja pojawi się w zakładce Automatyzacje i sceny, gdzie możesz obserwować działanie całego systemu w formie wizualnej.


Jak to działa w praktyce?

Całość opiera się na zasadzie PWM (Pulse Width Modulation), czyli modulacji szerokości impulsu. Dzięki niej wentylator może pracować z różnymi prędkościami — od kilku do stu procent mocy — w zależności od różnicy między temperaturą aktualną a docelową.

Gdy temperatura procesora przekroczy wartość zadaną o kilka stopni, wentylator uruchamia się delikatnie, np. na 20%. Gdy różnica rośnie, obroty zwiększają się automatycznie, aż do 100%. To rozwiązanie nie tylko efektywne, ale też znacząco wydłuża żywotność sprzętu.


Zalety takiego rozwiązania

  • Cicha praca: wentylator działa tylko wtedy, gdy to konieczne.

  • Niższe zużycie energii: mniejsze obroty oznaczają mniejszy pobór prądu.

  • Lepsza kontrola: pełna wizualizacja temperatury i prędkości w Home Assistant.

  • Automatyzacja: brak potrzeby ręcznego uruchamiania chłodzenia.


Podsumowanie

Dzięki tej konfiguracji Raspberry Pi zyskuje w pełni inteligentny system chłodzenia sterowany przez Home Assistanta. To rozwiązanie, które łączy prostotę i funkcjonalność – idealne zarówno do serwerów Home Assistant, jak i innych zastosowań opartych o Raspberry Pi.
Po jednorazowej konfiguracji system działa całkowicie autonomicznie i zapewnia optymalne chłodzenie bez nadmiernego hałasu.