Controle de la vitesse du ventilateur avec GPIO sur RPi4

Bonjour,
j’ai installer sur mon RPi4 B un radiateur + ventilateur GeeekPi Ultra Thin Ice Tower Cooler
Sur le ventilateur, il y a 3 fils. Le rouge, noir et bleu.
Dans la documentation Il parle de « PWM control » pour le ventilateur.
Je sais pas si c’est juste un on/off ou la modification de la vitesse du ventilateur ?

De la j’ai trouver un tutorial pour installer un addon pour gérer le GPIO vu que ca été supprimer depuis 2022.4. Controlling a CPU/case fan with GPIO PWM based on CPU temperature - Community Guides - Home Assistant Community

Es que quelqu’un a déjà configurer un ventilateur sur le GPIO pour varier la vitesse ?

Ma configuration


System Information

version core-2022.12.7
installation_type Home Assistant OS
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.10.7
os_name Linux
os_version 5.15.76-v8
arch aarch64
timezone Europe/Paris
config_dir /config
Home Assistant Community Store
GitHub API ok
GitHub Content ok
GitHub Web ok
GitHub API Calls Remaining 5000
Installed Version 1.29.0
Stage running
Available Repositories 1198
Downloaded Repositories 59
Home Assistant Cloud
logged_in false
can_reach_cert_server ok
can_reach_cloud_auth ok
can_reach_cloud ok
Home Assistant Supervisor
host_os Home Assistant OS 9.4
update_channel stable
supervisor_version supervisor-2022.11.2
agent_version 1.4.1
docker_version 20.10.19
disk_total 109.3 GB
disk_used 3.7 GB
healthy true
supported true
board rpi4-64
supervisor_api ok
version_api ok
installed_addons Duck DNS (1.15.0), Samba share (10.0.0), Terminal & SSH (9.6.1), File editor (5.4.2)
Dashboards
dashboards 1
resources 39
views 10
mode storage
Recorder
oldest_recorder_run 18 décembre 2022 à 07:45
current_recorder_run 19 décembre 2022 à 14:44
estimated_db_size 74.33 MiB
database_engine sqlite
database_version 3.38.5
Spotify
api_endpoint_reachable ok
Xiaomi Gateway 3
version 2.1.2 (4894b05)

Hello

tu dois installer un script de mémoire

https://forums.raspberrypi.com/viewtopic.php?t=245509

Bonjour,
j’ai continuer sur la voie du tutorial mentionné et j’y suis arriver :slight_smile:
J’ai laisser le fil bleu du ventilateur sur le GPIO14 ( pin physique 8), ca gère bien le on/off et la vitesse du ventilateur.

Explication de l’installation:

1/ J’ai ajouter le dépot https://github.com/Poeschl/Hassio-Addons dans les modules complémentaire et installer l’addon pigpio.
Configurez démarrage auto et lancer l’addon.

2/ J’ai ajouter c’est intégration custom de HACS, ajouter dans dépôt personnaliser.
- https://github.com/RedMeKool/HA-Raspberry-pi-GPIO-PWM

3/ On reboot HA.

4/ J’ai ajouter ce code dans configuration.yaml:

fan:
  - platform: rpi_gpio_pwm
    fans:
      - name: RPI Cooling Fan
        unique_id: rpi_cooling_fan
        pin: 14

5/ Vérification de la config et reboot de HA.

Une nouvelle entité fan.rpi_cooling_fan est créer, ou vous pourrez allumer/éteindre le ventilateur et régler la vitesse du ventilateur.


9/ Plus cas créer des automatisations pour le lancer au démarrage et modifier la vitesse suivant les besoins.

Pour le démarrage:

alias: Set CPU fan speed on startup
description: ''
trigger:
  - platform: homeassistant
    event: start
condition: []
action:
  - service: fan.set_percentage
    target:
      entity_id: fan.rpi_cooling_fan
    data:
      percentage: 75
mode: single

Régler la vitesse a 100%

alias: CPU fan high speed
description: Turn up fan speed when CPU is over 55 degrees
trigger:
  - platform: numeric_state
    entity_id: sensor.processor_temperature
    above: '55'
condition: []
action:
  - service: fan.set_percentage
    target:
      entity_id: fan.rpi_cooling_fan
    data:
      percentage: 100
mode: single

Régler la vitesse a 50%:

alias: CPU fan normal speed
description: Set CPU fan to normal speed when temp is below 40
trigger:
  - platform: numeric_state
    entity_id: sensor.processor_temperature
    below: '38'
condition: []
action:
  - service: fan.set_percentage
    target:
      entity_id: fan.rpi_cooling_fan
    data:
      percentage: 50
mode: single

Ajout sur ma carte système du RPI:

      - type: entities
        entities:
          - entity: fan.rpi_cooling_fan
            type: custom:multiple-entity-row
            show_state: true
            state_color: false
            toggle: true
            entities:
              - entity: fan.rpi_cooling_fan
                name: vitesse
                attribute: percentage
                hide_unavailable: true
                unit: '%'
            icon: mdi:fan

Plus ca faire mumuse avec le ventilateur :stuck_out_tongue:

Edit:

Rotation de l’icone suivant l’état:

            card_mod:
              style:
                hui-generic-entity-row $: |
                  state-badge {
                    {% if is_state('fan.rpi_cooling_fan','on') %} 
                      animation: rotation_1 2s linear infinite;
                    {% endif %}  
                  }
                  @keyframes rotation_1 {
                    0% {
                      transform: rotate(359deg);
                    }
                    100% {
                      transform: rotate(0deg);
                    }
                  }

EDIT 2 ( 04/04/24 ):
MAJ du Tutoriel.
Nouvelle version de HA-Raspberry-pi-GPIO-PWM qui ajoute le support FAN.
Plus besoin de script python, on peut utiliser le service FAN.
Merci @Frosh pour c’est ajout du FAN.

3 « J'aime »

Merci pur ce tuto qui m’a bien aidé.
Juste une petite coquille à corriger.
Etape 6, la fin du texte est coupé, il faut lire

fan_speed = data.get("fan_speed")
service_data = {"entity_id": "light.rpi_cooling_fan", "brightness": fan_speed}
hass.services.call("light", "turn_on", service_data)

Merci encore pour ton partage

1 « J'aime »

Salut,
merci pour la remarque, j’y avait même pas fait attention.
C’est corrigé :wink:

Bonsoir @WarC0zes ,
Ton tuto fonctionne bien mais j’ai cette erreur 3 fois car 3 automations suivant les vitesses.
Tu as pareil?
exemple automation

alias: CPU fan high speed
description: Turn up fan speed when CPU is over 60 degrees
trigger:
  - platform: numeric_state
    entity_id: sensor.cpu_temperature
    above: "60"
condition: []
action:
  - service: python_script.rpi_fan_pwm
    data:
      fan_speed: 240
mode: single

cela me donne cette erreur bien que tout fonctionne


J’essaye d’épurer tous ces messages d’avertissement :grin:

Bonjour,
pas de soucis pour moi, mais j’ai juste un automatisation qui lance le ventilateur au démarrage a 75%.
je pense que le soucis pour toi est les guillemets a above: "60", supprime les.

Dans mon exemple c’est pas des guillemets " mais un apostrophe '

Bonjour,
Si je change avec des ’ ou sans rien, cela me remet automatiquement des ".
C’est comme si ha attendait une valeur initiale pour le trigger ou autre, je ne sais pas .
Par contre l’automation au démarrage aucun problème comme toi

Moi, je n’utilise que c’est automatisation et j’ai pas d’erreur.

alias: Set CPU fan speed on startup
description: ""
trigger:
  - platform: homeassistant
    event: start
condition: []
action:
  - service: python_script.rpi_fan_pwm
    data:
      fan_speed: 191
mode: single

chez moi ca met pas de ’ ou " ( j’ai fais un test )

alias: CPU fan high speed
description: ""
trigger:
  - platform: numeric_state
    entity_id: sensor.processor_temperature
    above: 60
condition: []
action:
  - service: python_script.rpi_fan_pwm
    data:
      fan_speed: 255
mode: single

supprime le trigger et refait le.

oulala une belle erreur de débutant…
En refaisant l’automation, je me suis rendu compte que l’entity était pour moi sensor.cpu_temp et non
sensor.processor_temperature
Ah les copier/coller sans réflchir… Merci tu m’as aiguillé du coup.

1 « J'aime »

4/ J’ai ajouter ce code dans configuration.yaml:

light:
  - platform: rpi_gpio_pwm
    leds:
      - name: RPI Cooling Fan
        pin: 14

c’est un sensor?
dans la configuaration yaml?

C’est pas un sensor.
Tu le met dans configuration.yaml, a moins que tu est un light.yaml ( avec light: !include light.yaml de rajouter dans les includes )

Merci, j’avais trouvé entre temps, par contre j’utilise les système packagés pour les fichiers.

1 « J'aime »

Bonjour, Comme vous j’ai acheter ce modèle de ventilateur de GeekPi
J’ai voulu installer ce custom_components pour contrôler la vitesse de mon ventilateur mais le fait qu’il soit reconnu comme une lumière et non un ventilateur me tracassait.
J’ai donc pris la peine de le modifier afin que le ventilateur soit reconnu comme ventilateur.

Je voulais vous le partager ici pour celleux que ca intéresse mais je je peux inclure de liens dans ce message :confused:

Bonjour,
Pourquoi vous partager pas le code directement sur le forum, au lieu d’envoyer un lien externe ?

Parceque j’ai fais un fork du projet d’origine sur mon github et je voulais partager le lien afin que le gens puissent le telecharger directement et/ou l’inclure dans leurs config HACS :slight_smile:

celui la GitHub - erdnaxela02/HA-RaspberryPi-FAN-GPIO-PWM: Home Assistant component rpi_fan_gpio_pwm as a custom component ?

1 « J'aime »

xactement ! Merci pour le lien ^^

Ce qui change pour l’utilisateur par rapport aux explication que vous aviez posté au début du post c’est principalement la configuration.yaml qui devient

fan:
  - platform: rpi_fan_gpio_pwm
    fans:
      - name: RPI Cooling Fan
        pin: 17

et le python_scripts dans /config/ devient

fan_speed = data.get("fan_speed")
service_data = {"entity_id": "fan.rpi_cooling_fan", "percentage": fan_speed}
hass.services.call("fan", "set_percentage", service_data)

Je ne suis absolument pas développeur, j’essaye et je découvre ce que je peux par moi même. Donc si quelqu’un qui s’y connait aperçoit des erreurs n’hésitait pas à me le faire savoir

2 « J'aime »

Merci @WarC0zes pour ce tuto.
Merci @Frosh pour cette modification.
J’ai acheté le boitier [Geekworm NASPi V2] et j’avais perdu espoir de piloter le ventilateur du RPI4 car je débute sur HA.
Après avoir lu les différents tutos j’avoue que le ventilateur soit configuré comme une lumière me tracassait un peu aussi :sweat_smile:
J’ai juste une difference c’est que le ventilateur sur le mien est sur le pin18:
image

Pour le pilotage manuel, c’est ok :+1:
Pour l’automatiser au démarrage c’est ok aussi.

Par contre comment je peux automatiser la vitesse du ventilateur en fonction de la température ?
Si temp > 75 alors vitesse 100
Si temp > 70 alors vitesse 80
Si temp > 60 alors vitesse 70
Si temp > 50 alors vitesse 50
Si temp > 30 alors vitesse 40
Si temp < 30 alors on met le ventilateur en veille

Il y a un script en python, mais je ne sais pas comment l’intégrer a HA:

#!/usr/bin/python
import pigpio
import time

servo = 18

pwm = pigpio.pi()
pwm.set_mode(servo, pigpio.OUTPUT)
pwm.set_PWM_frequency( servo, 25000 )
pwm.set_PWM_range(servo, 100)
while(1):
     #get CPU temp
     file = open("/sys/class/thermal/thermal_zone0/temp")
     temp = float(file.read()) / 1000.00
     temp = float('%.2f' % temp)
     file.close()

     if(temp > 30):
          pwm.set_PWM_dutycycle(servo, 40)

     if(temp > 50):
          pwm.set_PWM_dutycycle(servo, 50)

     if(temp > 60):
          pwm.set_PWM_dutycycle(servo, 70)

     if(temp > 70):
          pwm.set_PWM_dutycycle(servo, 80)

     if(temp > 75):
          pwm.set_PWM_dutycycle(servo, 100)

     if(temp < 30):
          pwm.set_PWM_dutycycle(servo, 0)
     time.sleep(1)

Pour la carte RPI Fan, j’arrive a afficher le ventilateur avec la commande, meme si je ne comprends par encore toutes ces alertes…

Mais au moins je peux controler manuellement le ventilateur :

Salut! Pour automatiser la vitesse j’ai fais une automation dans HA qui rassemble les trois automation postées dans les premiers postes
J’utilise que deux valeurs: au dessus de 50 et en dessous de 38 c’est simple et efficace.
Ce que tu souhaites est plus complexe car plusieurs valeurs veux dire plusieurs trigger. A toi d’en ajouter autant que tu le souhaite :wink:

alias: Raspberry CPU Fan PWM
description: >-
  Règle la vitesse du ventilateur du Raspberry en fonction de la temperature du
  CPU
trigger:
  - platform: homeassistant
    event: start
    id: HomeAssistant_Start
  - platform: numeric_state
    entity_id: sensor.processor_temperature
    above: 50
    id: above_50
  - platform: numeric_state
    entity_id: sensor.processor_temperature
    below: 38
    id: below_38
condition: []
action:
  - alias: Set CPU fan speed on startup
    if:
      - condition: trigger
        id:
          - HomeAssistant_Start
    then:
      - service: fan.turn_on
        data:
          percentage: 50
        target:
          entity_id: fan.rpi_cooling_fan
  - alias: Turn up fan speed when CPU is over 50 degrees
    if:
      - condition: trigger
        id:
          - above_50
    then:
      - service: fan.set_percentage
        data:
          percentage: 100
        target:
          entity_id: fan.rpi_cooling_fan
  - alias: Set CPU fan to normal speed when temp is below 38
    if:
      - condition: trigger
        id:
          - below_38
    then:
      - service: fan.set_percentage
        data:
          percentage: 50
        target:
          entity_id: fan.rpi_cooling_fan
mode: single