Temperatura do Computador

Alguém sabe como obter a temperatura do computador?
se souber, eu agradeço =)

valeu!


http://www.cpuid-pro.com/hwmonitor.php

Eu queria fazer isso em código… criar um programa que lê a temperatura do processador

Veja o link para o tal SDK (que você tem de comprar, sorry) que você ainda terá de adaptar para seu programa Java, já que esse SDK acredito que só seja em C.

http://www.cpuid-pro.com/hwmonitor.php

Uau - eu vi o preço - começa em 1099 euros, o que dá a fabulosa quantia de R$ 2570,73 ao câmbio de hoje. Acho melhor você dar mais uma procurada - de fato, tal coisa é BEM difícil de programar porque o sistema operacional não retorna essa temperatura diretamente para você, e esse tipo de medição requer um device driver diferente para cada tipo de dispositivo que faz a medida da temperatura do processador.

E é por isso que é bem caro.

Entretanto, se em vez do Windows você estiver usando o Linux, talvez isso não saia tão caro assim. É que não sei exatamente como é que se faz esse tipo de medição de temperatura no Linux, por exemplo.

entendi, beleza
axei que havia algo mais fácil pra pegar a temperatura do PC com Java, será que não existe em algum lugar do windows (ou do linux) algum arquivo que grave os logs das temperaturas do computador?

A temperatura do computador não é uma coisa que o sistema operacional fique monitorando. Portanto, não há logs dessa temperatura para que você possa lê-los.

humm, eh mesmo…
e acessar a bios por código java, acho que também não é possível, é? porque lá é exibido a temperatura.

[quote=Will_HRock]humm, eh mesmo…
e acessar a bios por código java, acho que também não é possível, é? porque lá é exibido a temperatura.[/quote]

em java acho muito dificil vc conseguir tal acesso de baixo nível, talvez se vc procurar em C ou C++ vc deva achar alguma biblioteca, e então é vc serializar usando um JNI por exemplo para o java,é só uma sugestão… acredito que fazer isso em linux seja mais fácil…

Em uma busca rápida encontrei o que vc queria:

Como eu pensava era o que eu tinha falado antes, mas por sorte existe bibliotecas em java que faz esses acessos em C prontos, a JMX que usa MBEAN/MXBEAN segue os códigos:

criação da interface simples…

package net.luminis.jmx.mbean; public interface TemperatureStatsMBean { public double getTemperature(); }

Classe para monitorar a temperatura do computador…

[code]package net.luminis.jmx.mbean;
public class TemperatureStats implements TemperatureStatsMBean {
private Machine monitoredMachine;
public TemperatureStats() {
monitoredMachine = new Machine();
}
/**

  • le a temperatura do computador e notifica se alcançou a temperatura maxima

*/
public double getTemperature() {
return monitoredMachine.getTemperature();
}
}[/code]

Classe de sua maquina que desejas verificar a temperatura

package net.luminis.jmx.mbean; public class Machine { private double temp = 20.0; public double getTemperature() { //basicamente faz os calculos para ver as oscilações da temperatura.. esta mais explicado na doc que segue os comentarios colados =] // For now, just generate a random rising temperature. In a real application the actual // temperature will be read through the machine's device driver. double r = Math.random(); double delta = 0; // Temp will oscillate around the same value in 80% of the cases, and rise with 0 to 5 in // 20% of the cases. if (r > 0.80) { delta = ((r * 100) % 5); // 0 <= delta <= 5 } else { delta = (((r * 100) % 5) - 2.5); // -2.5 <= delta <= 2.5 } temp += delta; return temp; } }

e por fim o Main

package net.luminis.jmx.service; import java.lang.management.ManagementFactory; import javax.management.MBeanServer; import javax.management.ObjectName; import javax.management.monitor.GaugeMonitor; import net.luminis.jmx.mbean.TemperatureStats; public class Main { private static final double TMAX = 30.0; private String sysName; public Main(String sysName) { this.sysName = sysName; } public void run() { try { MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); // Register TemperatureStats bean with MBeanServer ObjectName tempStats = new ObjectName( "net.luminis.jmx.mbean:type=TemperatureStats"); TemperatureStats tempStatsBean = new TemperatureStats(); mbs.registerMBean(tempStatsBean, tempStats); // Initialize max temperature monitor ObjectName monitor = new ObjectName("net.luminis.jmx.mbean:type=TemperatureMonitor"); GaugeMonitor gm = new GaugeMonitor(); // Observe TemperatureStats.getTemperature gm.addObservedObject(tempStats); gm.setObservedAttribute("Temperature"); // Check every 1000 ms gm.setGranularityPeriod(1000); // Send notification when temperature exceeds TMAX gm.setNotifyHigh(true); gm.setThresholds(Double.valueOf(TMAX), Double.valueOf(0)); // Register GaugeMonitor with MBeanServer and start monitoring mbs.registerMBean(gm, monitor); gm.start(); System.out.println("Subsystem " + sysName + " MBean registered - waiting"); Thread.sleep(Long.MAX_VALUE); } catch(Exception e) { // Just print stacktrace for simplicity's sake e.printStackTrace(); } } public static void main(String[] args) throws Exception { if (args.length != 1) { System.err.println("Please provide system name as first argument"); return; } else { Main main = new Main(args[0]); main.run(); } } }

espero ter ajudado!

Só uma coisinha, Anderson. O que você encontrou (nem sei como, já que só achei um documento no Google que referenciasse essa classe exemplo TemperatureStatsMBean ) é uma forma de você expor um valor (como uma temperatura) como um MXBean, para efeitos de uso com as classes de monitoração de sistemas do Java. Então o exemplo deixa um “buraco” justamente para você pôr sua implementação de leitura de temperatura. Ou seja, o problema do Will não foi resolvido ainda.

o doc que vc comentou seria este?

http://lsd.luminis.net/wp-content/uploads/roller/pieter/jmx-whitepaper.pdf

Esse documento contém só um exemplo, leia o documento com bastante atenção para ver que ele só é um exemplo do que você pode fazer com JMX, não exatamente a implementação de um leitor de temperatura de verdade.

valeu a ajuda mesmo pessoal!
estou vendo que o jeito é recorrer à C e C++ mesmo, nem que seja só pra fazer um programinha pra ele devolver a temperatura pro programa java principal.

a tah, eh verdade… desculpa, foi a pressa e correria do dia-a-dia :lol:

Acabei de achar um arquivo no Ubuntu que aparentemente monitora e atualiza constantemente conforme haja mudança de temperatura do computador, o arquivo é: /proc/acpi/thermal_zone/THRM/temperature.
Resolvido no Linux, falta o Windows =)