Récupérer température de l'ordinateur en Java

[Résolu/Fermé]
Signaler
Messages postés
14
Date d'inscription
lundi 21 mai 2012
Statut
Membre
Dernière intervention
25 octobre 2012
-
Messages postés
1420
Date d'inscription
dimanche 21 décembre 2008
Statut
Membre
Dernière intervention
14 mai 2013
-
Bonjour,

Après avoir fait plusieurs recherche sur Google, je n'ai pas réussi à trouver la réponse à ma question : récupérer la température de l'ordinateur par les sensors. Les réponses que Google ma apportés était surtout centré sur le C / C++ (je connais juste les base de C).
Merci de bien vouloir m'aider.

PS : Je ne sait pas si je vais pouvoir vous répondre tout de suite à vos réponse (si elle propose une solution en Java) car je ne sait pas si mon ordi à tous c'est sensors activé car quand je tape dans un terminal :
sensors
Il m'affiche toujours la même température : 21.8° Celsius.
Si mes sensors ne marche plus, je vais pourvoir vous donner une réponse dans quelque temps lorsque j'aurais un nouveau PC.

Merci d'avance.

3 réponses

Messages postés
1420
Date d'inscription
dimanche 21 décembre 2008
Statut
Membre
Dernière intervention
14 mai 2013
417
Tu peux appeler des DLL (soit les api win32, soit tes propres DLL créées en C++) avec JNI.

Sinon il y a d'autres librairies pour faire ça comme JNA dont ils parlent ici :
https://www.developpez.net/forums/d600497/java/general-java/api-standards-tierces/java-api-windows/

Mais je ne pense pas que Java permette d'y accéder via sa librairie standard.
"The most successful method of programming is to begin a program as simply as possible, test it, and then add to the program until it performs the required job." -- PDP8 handbook, Pg 9-64
4
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
16372
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
23 juillet 2021
2 860
Dans la mesure où il travaille sur Ubuntu, je ne vois pas trop ce qu'il ferait de Win32 et des DLL...
Messages postés
1420
Date d'inscription
dimanche 21 décembre 2008
Statut
Membre
Dernière intervention
14 mai 2013
417
Je n'avais pas vu qu'il était sur Ubuntu.

Dans ce cas là il peut facilement appelé la commande sensors à partir de son programme Java et extraire le résultat qui l'intéresse (avec un split ou une expression régulière).

// La commande pour récupérer les températures
String cmd = "sensors";

try {
	// On lance la commande sensors
	Process child = Runtime.getRuntime().exec(cmd);

	// On récupère la sortie du process
	InputStream lsOut = child.getInputStream();
	InputStreamReader r = new InputStreamReader(lsOut);
	BufferedReader in = new BufferedReader(r);

	// On affiche la sortie du processus
	String line;
	while ((line = in.readLine()) != null) {
		System.out.println(line);
	}
} 
catch (Exception e) 
{ 
	// En cas d'erreur
	System.out.println("Echec de la commande : " + cmd);
}
Messages postés
16372
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
23 juillet 2021
2 860
Remarque : on peut simplifier la partie récupération des données en utilisant la classe Scanner.
J'en profite, pour également afficher la lecture du flux d'erreur, ça peut servir.

// La commande pour récupérer les températures
String cmd = "sensors";

try
{
    // On lance la commande sensors
    Process child = Runtime.getRuntime().exec(cmd);

    // On récupère la sortie standard du process
    Scanner out = new Scanner(child.getInputStream());

    // On récupère la sortie d'erreur du process
    Scanner err = new Scanner(child.getErrorStream());

    // On affiche les sorties du processus
    while (out.hasNextLine())
        System.out.println(out);
    while (err.hasNextLine())
        System.err.println(err);

    // On libère le processus
    out.close();
    err.close();
    child.destroy();
}
catch (Exception e)
{
    // En cas d'erreur
    System.err.println("Echec de la commande : " + cmd);
    e.printStackTrace();
}
Messages postés
14
Date d'inscription
lundi 21 mai 2012
Statut
Membre
Dernière intervention
25 octobre 2012

Merci pour vos réponses mais elles ne marche pas !
Le code de scriptiz me renvoie ceci :
Echec de la commande : sensors

(là encore sa va)

Et le code de KX me renvoie ça :
java.util.Scanner[delimiters=\p{javaWhitespace}+][position=0][match valid=true][need input=false][source closed=false][skipped=false][group separator=\ ][decimal separator=\,][positive prefix=][negative prefix=\Q-\E][positive suffix=][negative suffix=][NaN string=\Q?\E][infinity string=\Q?\E]

(le tout indéfiniment !)
Messages postés
16372
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
23 juillet 2021
2 860
oups... il fallait lire :

    while (out.hasNextLine())
        System.out.println(out.nextLine());
    while (err.hasNextLine())
        System.err.println(err.nextLine());
Messages postés
14
Date d'inscription
lundi 21 mai 2012
Statut
Membre
Dernière intervention
25 octobre 2012

Merci ! Le code marche enfin (même si mes sensors renvoient toujours la même valeur : 21,8° C ) !
Messages postés
1420
Date d'inscription
dimanche 21 décembre 2008
Statut
Membre
Dernière intervention
14 mai 2013
417
Est-ce que dans le BIOS les valeurs affichées pour tes températures sont différentes et varient?

Si oui je pencherai plutôt pour un problème logiciel plutôt que matériel.

Sinon essaye aussi la commande "sensors-detect" :)