Alguém sabe como obter a temperatura do computador?
se souber, eu agradeço =)
valeu!
Alguém sabe como obter a temperatura do computador?
se souber, eu agradeço =)
valeu!
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();
}
/**
*/
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 =)