Raspberry Pi4 Ventilateur PWM régulé suivant température CPU

Pour ceux qui veulent profiter de ce que j’ai fais.
Contexte
RPI 4 plus Fan PWM
GeeekPi Ultra Thin Ice Tower Cooler for Raspberry Pi 4 Model B 1GB 2GB 4GB 8GB
https://www.amazon.fr/gp/product/B0B9R7WWCG/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1
image

Connexion du ventilateur sur GPIO 12

Installation intégration Raspberry Pi GPIO PWM pour déclarer les device sur GPIO

Besoins
Échelonner la vitesse du ventilateur suivant la température du CPU suivant 5 niveaux

Explications :

Déclencheurs :

  • Ajout de déclencheurs supplémentaires pour les seuils de température 30, 40, 50, et 60 degrés.
  • Déclencheurs pour les seuils inférieurs correspondants (below 30, 40, 50, et 60).

Actions :

  • L’action principale vérifie la température actuelle et ajuste la vitesse du ventilateur en conséquence.
  • Utilisation de structures conditionnelles (if, else) pour ajuster la vitesse du ventilateur en fonction de la plage de température actuelle.

Pourcentage de Vitesse :

  • < 30 degrés : 20%
  • 30-40 degrés : 40%
  • 40-50 degrés : 60%
  • 50-60 degrés : 80%
  • 60 degrés : 100%

Cette configuration permet une régulation plus fine de la vitesse du ventilateur en fonction des variations de la température du processeur, garantissant une meilleure gestion de la chaleur.
la vitesse de ventilation au démarrage du système est réglée à 50%.

Automation

alias: Raspberry CPU Fan PWM 5 States
description: >-
  Règle la vitesse du ventilateur du Raspberry en fonction de la température du
  CPU
trigger:
  - platform: homeassistant
    event: start
    id: HomeAssistant_Start
  - platform: numeric_state
    entity_id: sensor.processor_temperature
    above: 30
    id: above_30
  - platform: numeric_state
    entity_id: sensor.processor_temperature
    above: 40
    id: above_40
  - platform: numeric_state
    entity_id: sensor.processor_temperature
    above: 50
    id: above_50
  - platform: numeric_state
    entity_id: sensor.processor_temperature
    above: 60
    id: above_60
  - platform: numeric_state
    entity_id: sensor.processor_temperature
    below: 30
    id: below_30
  - platform: numeric_state
    entity_id: sensor.processor_temperature
    below: 40
    id: below_40
  - platform: numeric_state
    entity_id: sensor.processor_temperature
    below: 50
    id: below_50
  - platform: numeric_state
    entity_id: sensor.processor_temperature
    below: 60
    id: below_60
condition: []
action:
  - alias: Régler la vitesse du ventilateur de l'unité centrale au démarrage
    if:
      - condition: trigger
        id: HomeAssistant_Start
    then:
      - service: fan.turn_on
        data:
          percentage: 50
        target:
          entity_id: fan.fan_rpi_cooling
  - alias: Régler la vitesse du ventilateur en fonction de la température
    if:
      - condition: numeric_state
        entity_id: sensor.processor_temperature
        below: 30
    then:
      - service: fan.set_percentage
        data:
          percentage: 20
        target:
          entity_id: fan.fan_rpi_cooling
    else:
      - if:
          - condition: numeric_state
            entity_id: sensor.processor_temperature
            below: 40
        then:
          - service: fan.set_percentage
            data:
              percentage: 40
            target:
              entity_id: fan.fan_rpi_cooling
        else:
          - if:
              - condition: numeric_state
                entity_id: sensor.processor_temperature
                below: 50
            then:
              - service: fan.set_percentage
                data:
                  percentage: 60
                target:
                  entity_id: fan.fan_rpi_cooling
            else:
              - if:
                  - condition: numeric_state
                    entity_id: sensor.processor_temperature
                    below: 60
                then:
                  - service: fan.set_percentage
                    data:
                      percentage: 80
                    target:
                      entity_id: fan.fan_rpi_cooling
                else:
                  - service: fan.set_percentage
                    data:
                      percentage: 100
                    target:
                      entity_id: fan.fan_rpi_cooling
mode: single

Et pour le Fun, j’ai ajouté une Gauge avec des couleurs suivant température CPU

Explication :

  • type: gauge : Spécifie que nous utilisons un type de carte « jauge ».
  • entity: sensor.processor_temperature : Entité de capteur de température du processeur.
  • min: 0 et max: 100 : Définissent les valeurs minimale et maximale de la jauge.
  • severity : Définition des couleurs pour différentes plages de température :
    • green: 30 : Vert pour les températures inférieures à 30°C.
    • yellow: 40 : Jaune pour les températures entre 30°C et 40°C.
    • orange: 50 : Orange pour les températures entre 40°C et 50°C.
    • red: 60 : Rouge pour les températures entre 50°C et 60°C.
    • crimson: 100 : Rouge foncé (ou autre couleur de votre choix) pour les températures supérieures à 60°C.

Cette configuration permet de visualiser les niveaux de température avec des couleurs qui correspondent aux plages définies dans l’automatisation du ventilateur. Vous pouvez ajuster les couleurs et les plages de température selon vos préférences.

type: gauge
entity: sensor.processor_temperature
min: 0
max: 100
severity:
  green: 30  # Température inférieure à 30°C
  yellow: 40  # Température entre 30°C et 40°C
  orange: 50  # Température entre 40°C et 50°C
  red: 60  # Température entre 50°C et 60°C
  crimson: 100  # Température supérieure à 60°C

Explication des couleurs :

  • Vert (< 30°C)** : Température basse, le ventilateur fonctionne à 20%.
  • Jaune (30°C - 40°C)** : Température modérée, le ventilateur fonctionne à 40%.
  • Orange (40°C - 50°C)** : Température moyenne, le ventilateur fonctionne à 60%.
  • Rouge (50°C - 60°C)** : Température élevée, le ventilateur fonctionne à 80%.
  • Rouge foncé (> 60°C)** : Température très élevée, le ventilateur fonctionne à 100%.

Si cela permet d’aider aux débutants pour comprendre le mécanisme.

Résultat:

Ah tiens, voilà un sujet qui m’intéresse, car je me suis monté un support pour mon RPI (boitier argon one)… mais dont le petit ventilo de 40 mm m’agace est nécessairement « bruyant ».
Il y a une extension pour gérer ce ventilo sur la carte annexe de Argon40, mais à vrai dire, je n’ai fait que mettre des température de « sécurité » avec un déclenchement à 55°C, vu que j’ai un 120 mm monté sur USB en H24, soit l’équivalent de 41% de sa vitesse nominale. C’est silencieux, mais parfois, je me demande si je ne devrait pas l’accélérer un peu.

D’où ce partage qui tombe très bien ! Je vais certainement m’en inspirer, mais avec une variante :

  • définir un T_min et T_max
  • définir un PWM_min et PWM_max
  • un switch pour gérer les cas T<T_min
  • un input numérique pour ajuster le temps dT (30s par défaut ?)
    → rampe de vitesse entre les points (T_min, PWM_min) et (T_max, PWM_max)
    → si T>T_max, PWM imposé à PWM_max
    → si T<T_min, PWM imposé à PWM_min ou 0
    → Trigger basé sur le temps, qui ajuste tous les dT.


Bonjour,
il y avait déjà un sujet sur ce modèle de ventilateur.

Hello WarC0zes
Oui mais le mien :rofl: :joy: :joy: :joy: :joy: :joy:
Non en vrai oui ton Post est très intéressant pour comprendre approfondir le sujet.
Je voulais simplement donner mon expérience, de façon simple avec le processus et code de bout en bout pour permettre de mettre en place rapidement cette solution.
Sans plus de prétendances et surtout pas annihiler ce que tout les autres contributeurs peuvent avoir déjà fait.