Control de ventiladores en Linux

Ventilación, ventiladores y su control, rehobuses
Responder
Mensaje
Autor
quienesanonimo
Iniciad@ en SilentPC
Mensajes: 12
Registrado: 10 Abr 2013 02:14

Control de ventiladores en Linux

#1 Mensaje por quienesanonimo » 27 May 2013 20:02

Estoy poniendo a punto la velocidad de los ventiladores en mi ubuntu. Esta mañana me he hecho un pequeño programita para regularlos a mano y notar a qué valores dejan de oírse. Esto es útil para luego configurar el fancontrol con los valores correctos.

Es poca cosa pero a mi juicio útil.

Imagen

Os pego el código.

Código: Seleccionar todo

from Tkinter import *

#Enable PWM Control
with open('/sys/class/hwmon/hwmon0/device/pwm1_enable', 'w') as fe1:
	fe1.write("1")
with open('/sys/class/hwmon/hwmon0/device/pwm3_enable', 'w') as fe3:
	fe3.write("1")

#Funtions tu set the PWM value
def fan1(v):
   label1.config(text = "PWM1 = " + str(PWM1.get()))
   with open('/sys/class/hwmon/hwmon0/device/pwm1', 'w') as f1:
        f1.write("%s\n" % str(PWM1.get()))
def fan3(v):
   label3.config(text = "PWM3 = " + str(PWM3.get()))
   with open('/sys/class/hwmon/hwmon0/device/pwm3', 'w') as f3:
	   f3.write("%s\n" % str(PWM3.get()))

#GUI
root = Tk()
root.title('PWM Control')

#Fan 1
PWM1 = IntVar()
scale1 = Scale( root,
				length=300, 
				variable = PWM1,
				from_=254,
				to=0,
				label = "Fan 1",
				command=fan1)
with open('/sys/class/hwmon/hwmon0/device/pwm1', 'r') as f1: #Read the old value fan 1
	scale1.set(f1.read(3)) #Set the old value of fan 1 by default
scale1.grid(column=0, row=0)
label1 = Label(root)
label1.grid(column=0,row=1)

#Fan 3
PWM3 = IntVar()
scale3 = Scale( root,
				length=300, 
				variable = PWM3,
				from_=254,
				to=0,
				label = "Fan 3",
				command=fan3)
with open('/sys/class/hwmon/hwmon0/device/pwm3', 'r') as f3:
	scale3.set(f3.read(3))
scale3.grid(column=1, row=0)
label3 = Label(root)
label3.grid(column=1,row=1)

root.mainloop()


Avatar de Usuario
reset
Moderador Global de PCSiencioso
Mensajes: 3324
Registrado: 15 Jun 2009 18:20

Re: Control de ventiladores en Linux

#2 Mensaje por reset » 27 May 2013 20:30

Muchas gracias por el aporte :ok: . A ver si alguien que use Linux / Unix puede probarlo y contarnos más.
Imagen

Avatar de Usuario
Marciano
Administrador de PCSilencioso
Mensajes: 1825
Registrado: 28 May 2009 02:19
Contactar:

Re: Control de ventiladores en Linux

#3 Mensaje por Marciano » 27 May 2013 23:57

Chapó!!! :ok:

Solo te digo que nunca había tocado Python, pero esto lo tengo que probar... :diablo:

quienesanonimo
Iniciad@ en SilentPC
Mensajes: 12
Registrado: 10 Abr 2013 02:14

Re: Control de ventiladores en Linux

#4 Mensaje por quienesanonimo » 28 May 2013 02:35

Para quien quien controle en linux su ventilación usando fancontrol y quiera probarlo primero tiene que instalar el python.

Código: Seleccionar todo

sudo apt-get install python python-support
Copiar el código en un archivo de texto y modificar la ruta de los ventiladores que hay en él (no todos serán igual que los míos) por las que tenga puestas en su "/etc/fancontrol" y si hay que añadir más controles para más ventiladores veréis que no es difícil. Una vez hecho los cambios guardar el archivo con el nombre "control.py".

Luego parar el fancontrol.

Código: Seleccionar todo

sudo killall fancontrol
En ese momento los ventiladores se ponen al máximo automáticamente.
Entonces, al ejecutar este programita podréis controlar su velocidad manualmente. Para ello.

Código: Seleccionar todo

sudo python control.py
Así podréis ver qué nivel de PWM corresponde a qué ruido para luego poder editar el "/etc/fancontrol" y que quede bien ajustado.

Si alguien en linux no tiene puesto el fancontrol no sabe lo que se pierde, si ajustas bien los valores la mejora es espectacular. Si pongo mi procesador a tope de carga el ruido apenas sobrepasa el que hace el disco duro y eso sin pasar de los 45ºC. Si relajo la exigencia de temperatura permitiendo que llegue hasta los 50ºC los ventiladores dejan de ser audibles.

Cuando no está a tope de carga por supuesto no se los oye.

Solo te digo que nunca había tocado Python, pero esto lo tengo que probar...
:batallitas: Te prometo que yo tampoco tenía ni idea de python hasta esta mañana. Es sorprendentemente fácil. Hice el código en poco más de hora y media a partir de esto
http://www.python-course.eu/tkinter_sli ... ef);return false;
http://www.tutorialspoint.com/python/tk ... ef);return false;
http://effbot.org/tkinterbook/grid.htm" ... ef);return false;


PD: Si alguien no sabe como instalar y configurar fancontrol yo se lo explico.

quienesanonimo
Iniciad@ en SilentPC
Mensajes: 12
Registrado: 10 Abr 2013 02:14

Re: Control de ventiladores en Linux

#5 Mensaje por quienesanonimo » 29 May 2013 05:03

Madre mía esto del fancontrol es la leche. La mejora que ofrece es abismal tanto en ruido como en temperaturas.

:doctor: Para quien aún no lo sepa fancontrol es un programita para linux que te permite controlar el modo en el que tu sistema regula las velocidades de los ventiladores. Algo que puede parecer poca cosa pero que en el fondo da para mucho ya que cada disipador es un mundo. Cuando tenga tiempo haré un tutorial sobre él.

Como he quedado maravillado viendo como controla la temperatura de la CPU me he decidido a ir más allá y de paso solucionar el problema del ruido de los ventiladores de la Fractal R4 que a 7V comienzan a notarse y a 5V no disipan demasiado.

Como tenía los dos ventiladores Fractales en el forntal, lo que he hecho ha sido poner uno con el control de la caja a 5V (el de la parte superior del panel frontal) y el otro (que está en la parte inferior del panel frontal) controlado por PWM con el fancontrol pendiente de los discos duros que tiene justo en frente.

El resultado final es francamente bueno. Ahora el ventilador de abajo (el más silencioso de los dos) está a un valor fijo por defecto he puesto a unas 320RPM, pero cuando la temperatura del más caliente de los discos duros sobrepasa los 35ºC va subiendo paulatinamente y a partir de los 50ºC se pone en su máximo valor.

El problema está en que los sensores de temperatura de los discos duros no están donde el resto. He visto por Internet que la gente se monta unos tinglados de la hostia y unos scripts del carajo para intentar resolver este problema. Y lo consiguen obviamente, pero mira mira. :facepalm:

http://linuxconfig.org/fan-control-and- ... ef);return false;
http://ubuntuforums.org/showthread.php? ... ef);return false;
http://forum.dsmg600.info/viewtopic.php ... ef);return false;
http://www.silentpcreview.com/forums/vi ... ef);return false;
http://permalink.gmane.org/gmane.linux. ... ef);return false;
http://www.spinics.net/lists/lm-sensors ... ef);return false;

Pero yo creo que mi solución es bastante más sencilla. Se trata de crear un sensor como otro cualquiera que se vaya actualizando y quefancontrol pueda leer y que contenga la temperatura que queremos usar como referencia. Y hacerlo de forma simple.

Primero instalamos la aplicación para conocer la temperatura de los discos duros.

Código: Seleccionar todo

sudo apt-get install hddtemp
Luego editamos el propio programa fancontrol

Código: Seleccionar todo

sudo gedit /usr/sbin/fancontrol
Nos vamos al final del archivo y en la quinta fila empezando por abajo metemos esto, justo encima de la línea que pone "UpdateFanSpeeds".

Código: Seleccionar todo

/usr/sbin/hddtemp -n /dev/sdX > /tmp/temp_hdd
Esa línea irá guardando la temperatura del disco X en un archivo /tmp/temp_hdd en un formato que el fancontrol pueda ir leyendo como si se tratase de otro sensor más de la placa.

En mi caso, como tengo dos discos duros decidí seleccionar el más caliente de los dos para ponerlo como referencia del sensor. En mi caso lo que puse fue:

Código: Seleccionar todo

/usr/sbin/hddtemp -n /dev/sdb /dev/sdc | sort -n -r | head -n 1 > /tmp/temp_hdd

Esa línea muestra las temperaturas de los dos discos, las ordena de mayor a menor y va guardando la más alta en nuestro falso sensor que luego usará el fancontrol para manejar el ventilador.:ok:

Guardamos, y editamos ahora el archivo de configuración del fancontrol

Código: Seleccionar todo

sudo gedit /etc/fancontrol

Para así incorporar el nuevo sensor que hemos creado y asociarlo al ventilador deseado como si se tratase de uno más.

Código: Seleccionar todo

FCTEMPS=hwmon0/device/pwm2=/tmp/temp_hdd
De este modo el ventilador regulado por PWM2 lo hará en función de la temperatura que indique /tmp/temp_hdd.

Así tengo los discos bien fresquitos con el ventilador ajustándose como una sábana sin hacer nada de ruido a sus temperaturas, no como antes que parecía un zombi que iba a piñón fijo. De este modo se va adaptando, sin llegar a hacer el ruido que hacia a los 7V pero con mucho mejores temperaturas que las que tenía cuando siempre iba a 5V :birras:

Avatar de Usuario
Annubis
Entendid@ en SilentPC
Mensajes: 315
Registrado: 27 Ago 2011 16:46

Re: Control de ventiladores en Linux

#6 Mensaje por Annubis » 29 May 2013 13:28

Ésto es lo bueno de linux, que hay distintos métodos para hacer las cosas. Lo interesante es poder "empaparte" de todas las que la gente comparte.

A ver si puedo terminar de montarme pronto mi bichillo y pongo en práctica todo ésto :P

Avatar de Usuario
Annubis
Entendid@ en SilentPC
Mensajes: 315
Registrado: 27 Ago 2011 16:46

Re: Control de ventiladores en Linux

#7 Mensaje por Annubis » 19 Sep 2013 01:26

Estoy cacharreando con fancontrol y aporto un par de cosas:
quienesanonimo escribió:Para quien quien controle en linux su ventilación usando fancontrol y quiera probarlo primero tiene que instalar el python.
Código:

Código: Seleccionar todo

sudo apt-get install python python-support
También es necesario instalar el paquete tkinter
quienesanonimo escribió:En mi caso, como tengo dos discos duros decidí seleccionar el más caliente de los dos para ponerlo como referencia del sensor. En mi caso lo que puse fue:
Código:

Código: Seleccionar todo

/usr/sbin/hddtemp -n /dev/sdb /dev/sdc | sort -n -r | head -n 1 > /tmp/temp_hdd
Esa línea muestra las temperaturas de los dos discos, las ordena de mayor a menor y va guardando la más alta en nuestro falso sensor que luego usará el fancontrol para manejar el ventilador.:ok:
Para no tener que ir adaptando ese código si añades más discos duros, puedes usar caracteres comodín:

Código: Seleccionar todo

/usr/sbin/hddtemp -n /dev/sd?  | sort -n -r  | head -n 1

yoi
Novat@ en SilentPC
Mensajes: 4
Registrado: 10 Jul 2012 16:21

Re: Control de ventiladores en Linux

#8 Mensaje por yoi » 20 Sep 2013 00:44

Hola, gracias por la los códigos del control de ventiladores, ¿creo que estos solo para los ventiladores de caja y cpu no?,
¿sabéis como controlar el ventilador de una gpu amd?. Yo lo único que he encontrado es el ATI Fan Control http://kde-look.org/content/show.php/?content=91918, pero no he podido instalarlo.

Saludos.

Avatar de Usuario
Annubis
Entendid@ en SilentPC
Mensajes: 315
Registrado: 27 Ago 2011 16:46

Re: Control de ventiladores en Linux

#9 Mensaje por Annubis » 20 Sep 2013 00:55

yoi escribió:Hola, gracias por la los códigos del control de ventiladores, ¿creo que estos solo para los ventiladores de caja y cpu no?,
¿sabéis como controlar el ventilador de una gpu amd?. Yo lo único que he encontrado es el ATI Fan Control http://kde-look.org/content/show.php/?content=91918, pero no he podido instalarlo.

Saludos.
Esa aplicación no te servirá, es demasiado antigua, creo yo. ¿Has probado con http://sourceforge.net/projects/amdovdr ... ef);return false; ?

yoi
Novat@ en SilentPC
Mensajes: 4
Registrado: 10 Jul 2012 16:21

Re: Control de ventiladores en Linux

#10 Mensaje por yoi » 20 Sep 2013 14:53

Gracias por la aplicación, no la conocía, no he podido probarla porque desinstale ubuntu por algún problema que hacía que no fuera bien, y ahora estaba probando con un live-usb de mint 15 kde, pero al instalar el ccc no inicia..., no se si es que no se puede instalar en los live-usb. No tengo espacio en el disco duro así que ya verá que hago.

Muchas gracias, Saludos.

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado