Skip to content

Commit

Permalink
feat: add interval option
Browse files Browse the repository at this point in the history
  • Loading branch information
narugit committed Aug 14, 2024
1 parent b0aba09 commit 10bd8e1
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 3 deletions.
13 changes: 12 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,24 @@ Usage:
-c : list CPU temperatures (Celsius)
-g : list GPU temperatures (Celsius)
-h : help
-i : set interval in milliseconds (e.g. -i25, valid range is 20-1000, default: 1000)
-l : list all keys and values
-v : version
-n : tries to query the temperature sensors for n times (e.g. -n3) (1 second interval) until a valid value is returned
-n : tries to query the temperature sensors for n times (e.g. -n3) until a valid value is returned

$ smctemp -c
64.2

$ smctemp -g
36.2
```

## Note for M2 Mac Users
On M2 Macs, sensor values may be unstable as described in the following issue:
- https://github.com/narugit/smctemp/pull/14
- https://github.com/narugit/smctemp/issues/32

For M2 Macs, using the `-n` and `-i` options can help obtain more stable sensor values.
Try tuning these options to get better results.

The recommended settings are `-i25 -n1000` (See also https://github.com/narugit/smctemp/issues/32#issuecomment-2287304793).
22 changes: 20 additions & 2 deletions main.cc
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ void usage(char* prog) {
std::cout << " -c : list CPU temperatures (Celsius)" << std::endl;
std::cout << " -g : list GPU temperatures (Celsius)" << std::endl;
std::cout << " -h : help" << std::endl;
std::cout << " -i : set interval in milliseconds (e.g. -i25, valid range is 20-1000, default: 1000)"
<< std::endl;
std::cout << " -l : list all keys and values" << std::endl;
std::cout << " -v : version" << std::endl;
std::cout << " -n : tries to query the temperature sensors for n times (e.g. -n3)";
Expand All @@ -20,18 +22,30 @@ void usage(char* prog) {
int main(int argc, char *argv[]) {
int c;
unsigned int attempts = 1;
unsigned int interval_ms = 1'000;

kern_return_t result;
int op = smctemp::kOpNone;

while ((c = getopt(argc, argv, "clvhn:g")) != -1) {
while ((c = getopt(argc, argv, "clvhn:gi:")) != -1) {
switch(c) {
case 'c':
op = smctemp::kOpReadCpuTemp;
break;
case 'g':
op = smctemp::kOpReadGpuTemp;
break;
case 'i':
if (optarg) {
unsigned int temp_interval;
auto [ptr, ec] = std::from_chars(optarg, optarg + strlen(optarg), temp_interval);
if (ec != std::errc() || temp_interval < 20 || temp_interval > 1000) {
std::cerr << "Invalid argument provided for -i (integer between 20 and 1000 is required)" << std::endl;
return 1;
}
interval_ms = temp_interval;
}
break;
case 'n':
if (optarg) {
auto [ptr, ec] = std::from_chars(optarg, optarg + strlen(optarg), attempts);
Expand Down Expand Up @@ -85,11 +99,15 @@ int main(int argc, char *argv[]) {
if (temp > 0.0) {
break;
} else {
usleep(1'000'000);
usleep(interval_ms * 1'000);
attempts--;
}
}
std::cout << std::fixed << std::setprecision(1) << temp << std::endl;
if (temp == 0.0) {
std::cerr << "Could not get valid sensor value. Please use `-n` option and `-i` option." << std::endl;
std::cerr << "In M2 Mac, it would be work fine with `-i25 -n1000` options.`" << std::endl;
}
break;
}

Expand Down

0 comments on commit 10bd8e1

Please sign in to comment.