cpuTemperatur() rewrite parsing hwmon (linux)

This commit is contained in:
Sebastian Hildebrandt 2020-11-29 09:33:19 +01:00
parent 430051caaf
commit 9a32761531

View File

@ -17,6 +17,7 @@ const os = require('os');
const exec = require('child_process').exec; const exec = require('child_process').exec;
const fs = require('fs'); const fs = require('fs');
const util = require('./util'); const util = require('./util');
const { execSync } = require('child_process');
let _platform = process.platform; let _platform = process.platform;
@ -772,49 +773,35 @@ function cpuTemperature(callback) {
max: -1.0 max: -1.0
}; };
if (_linux) { if (_linux) {
const cmd = 'cat /sys/class/hwmon/hwmon0/temp*_la* 2>/dev/null;echo "---";cat /sys/class/hwmon/hwmon0/temp*_i* 2>/dev/null;echo "######";cat /sys/class/hwmon/hwmon1/temp*_la* 2>/dev/null;echo "---";cat /sys/class/hwmon/hwmon1/temp*_i* 2>/dev/null;echo "######";cat /sys/class/hwmon/hwmon2/temp*_la* 2>/dev/null;echo "---";cat /sys/class/hwmon/hwmon2/temp*_i* 2>/dev/null;echo "######";cat /sys/class/hwmon/hwmon3/temp*_la* 2>/dev/null;echo "---";cat /sys/class/hwmon/hwmon3/temp*_i* 2>/dev/null;'; const cmd = 'for mon in /sys/class/hwmon/hwmon*; do for label in "$mon"/temp*_label; do if [ -f $label ]; then value=$(echo $label | rev | cut -c 7- | rev)_input; if [ -f "$value" ]; then echo $(cat "$label")___$(cat "$value"); fi; fi; done; done;';
try { try {
exec(cmd, function (error, stdout) { exec(cmd, function (error, stdout) {
// if (!error) { let lines = stdout.toString().split('\n');
let sections = stdout.toString().split('######\n'); lines.forEach(line => {
let bestSection = -1 const parts = line.split('___');
let lineCount = 0 const label = parts[0];
for (let i = 0; i < sections.length; i++) { const value = parts.length > 1 && parts[1] ? parts[1] : '0';
const lines = sections[i].split('\n'); if (value && (label === undefined || (label && label.toLowerCase().startsWith('core')))) {
if (lineCount < lines.length) { result.cores.push(Math.round(parseInt(value, 10) / 100) / 10);
lineCount = lines.length; } else if (value && label && result.main === -1) {
bestSection = i; result.main = Math.round(parseInt(value, 10) / 100) / 10;
} }
}; })
if (bestSection >= 0 && lineCount > 2) { if (result.cores.length > 0) {
let parts = sections[bestSection].split('---'); if (result.main === -1) {
// let parts = stdout.toString().split('---'); result.main = Math.round(result.cores.reduce((a, b) => a + b, 0) / result.cores.length);
let labels = parts[0].split('\n');
let temps = parts[1].split('\n');
temps.shift();
for (let i = 0; i < temps.length; i++) {
if (temps[i] && (labels[i] === undefined || (labels[i] && labels[i].toLowerCase().startsWith('core')))) {
result.cores.push(Math.round(parseInt(temps[i], 10) / 100) / 10);
} else if (temps[i] && labels[i] && result.main === -1) {
result.main = Math.round(parseInt(temps[i], 10) / 100) / 10;
}
} }
if (result.cores.length > 0) { let maxtmp = Math.max.apply(Math, result.cores);
if (result.main === -1) { result.max = (maxtmp > result.main) ? maxtmp : result.main;
result.main = Math.round(result.cores.reduce((a, b) => a + b, 0) / result.cores.length); }
} if (result.main !== -1) {
let maxtmp = Math.max.apply(Math, result.cores); if (result.max === -1) {
result.max = (maxtmp > result.main) ? maxtmp : result.main; result.max = result.main;
}
if (result.main !== -1) {
if (result.max === -1) {
result.max = result.main;
}
if (callback) { callback(result); }
resolve(result);
return;
} }
if (callback) { callback(result); }
resolve(result);
return;
} }
// } // }
exec('sensors', function (error, stdout) { exec('sensors', function (error, stdout) {