gopsutil icon indicating copy to clipboard operation
gopsutil copied to clipboard

SensorsTemperatures returns 0 values for all sensors on darwin arm64 (M1)

Open splmatto opened this issue 3 years ago • 5 comments

Describe the bug the temperature value of each TemperatureStat object in the array returned by host.SensorsTemperatures() is 0 on an M1.

To Reproduce

package main

import (
	"encoding/json"
	"fmt"
	"github.com/shirou/gopsutil/v3/host"
)

func main() {
	tstat, _ := host.SensorsTemperatures()
	serialized, _ := json.Marshal(tstat)
	fmt.Printf("%s", string(serialized))
}

Here's the output:

[
  {
    "sensorKey": "TA0P",
    "temperature": 0,
    "sensorHigh": 0,
    "sensorCritical": 0
  },
  {
    "sensorKey": "TA1P",
    "temperature": 0,
    "sensorHigh": 0,
    "sensorCritical": 0
  },
  {
    "sensorKey": "TC0D",
    "temperature": 0,
    "sensorHigh": 0,
    "sensorCritical": 0
  },
  {
    "sensorKey": "TC0H",
    "temperature": 0,
    "sensorHigh": 0,
    "sensorCritical": 0
  },
  {
    "sensorKey": "TC0P",
    "temperature": 0,
    "sensorHigh": 0,
    "sensorCritical": 0
  },
  {
    "sensorKey": "TB0T",
    "temperature": 0,
    "sensorHigh": 0,
    "sensorCritical": 0
  },
  {
    "sensorKey": "TB1T",
    "temperature": 0,
    "sensorHigh": 0,
    "sensorCritical": 0
  },
  {
    "sensorKey": "TB2T",
    "temperature": 0,
    "sensorHigh": 0,
    "sensorCritical": 0
  },
  {
    "sensorKey": "TB3T",
    "temperature": 0,
    "sensorHigh": 0,
    "sensorCritical": 0
  },
  {
    "sensorKey": "TG0D",
    "temperature": 0,
    "sensorHigh": 0,
    "sensorCritical": 0
  },
  {
    "sensorKey": "TG0H",
    "temperature": 0,
    "sensorHigh": 0,
    "sensorCritical": 0
  },
  {
    "sensorKey": "TG0P",
    "temperature": 0,
    "sensorHigh": 0,
    "sensorCritical": 0
  },
  {
    "sensorKey": "TH0P",
    "temperature": 0,
    "sensorHigh": 0,
    "sensorCritical": 0
  },
  {
    "sensorKey": "TM0S",
    "temperature": 0,
    "sensorHigh": 0,
    "sensorCritical": 0
  },
  {
    "sensorKey": "TM0P",
    "temperature": 0,
    "sensorHigh": 0,
    "sensorCritical": 0
  },
  {
    "sensorKey": "TN0H",
    "temperature": 0,
    "sensorHigh": 0,
    "sensorCritical": 0
  },
  {
    "sensorKey": "TN0D",
    "temperature": 0,
    "sensorHigh": 0,
    "sensorCritical": 0
  },
  {
    "sensorKey": "TN0P",
    "temperature": 0,
    "sensorHigh": 0,
    "sensorCritical": 0
  },
  {
    "sensorKey": "TI0P",
    "temperature": 0,
    "sensorHigh": 0,
    "sensorCritical": 0
  },
  {
    "sensorKey": "TI1P",
    "temperature": 0,
    "sensorHigh": 0,
    "sensorCritical": 0
  },
  {
    "sensorKey": "TW0P",
    "temperature": 0,
    "sensorHigh": 0,
    "sensorCritical": 0
  }
]

Expected behavior Return valid temperature sensor data for one or more of the sensors.

Environment (please complete the following information):

$ sw_vers ProductName: macOS ProductVersion: 12.4 BuildVersion: 21F79

$ uname -a Darwin xxxx 21.5.0 Darwin Kernel Version 21.5.0: Tue Apr 26 21:08:37 PDT 2022; root:xnu-8020.121.3~4/RELEASE_ARM64_T6000 arm64

Additional context

go version go1.18 darwin/arm64

In contrast, here's the output from the same program built and executed on a darwin x86_64 host:

[
    {
        "sensorKey": "TA0P",
        "temperature": 0,
        "sensorHigh": 0,
        "sensorCritical": 0
    },
    {
        "sensorKey": "TA1P",
        "temperature": 0,
        "sensorHigh": 0,
        "sensorCritical": 0
    },
    {
        "sensorKey": "TC0D",
        "temperature": 0,
        "sensorHigh": 0,
        "sensorCritical": 0
    },
    {
        "sensorKey": "TC0H",
        "temperature": 0,
        "sensorHigh": 0,
        "sensorCritical": 0
    },
    {
        "sensorKey": "TC0P",
        "temperature": 31,
        "sensorHigh": 0,
        "sensorCritical": 0
    },
    {
        "sensorKey": "TB0T",
        "temperature": 0,
        "sensorHigh": 0,
        "sensorCritical": 0
    },
    {
        "sensorKey": "TB1T",
        "temperature": 0,
        "sensorHigh": 0,
        "sensorCritical": 0
    },
    {
        "sensorKey": "TB2T",
        "temperature": 0,
        "sensorHigh": 0,
        "sensorCritical": 0
    },
    {
        "sensorKey": "TB3T",
        "temperature": 0,
        "sensorHigh": 0,
        "sensorCritical": 0
    },
    {
        "sensorKey": "TG0D",
        "temperature": 0,
        "sensorHigh": 0,
        "sensorCritical": 0
    },
    {
        "sensorKey": "TG0H",
        "temperature": 0,
        "sensorHigh": 0,
        "sensorCritical": 0
    },
    {
        "sensorKey": "TG0P",
        "temperature": 0,
        "sensorHigh": 0,
        "sensorCritical": 0
    },
    {
        "sensorKey": "TH0P",
        "temperature": 0,
        "sensorHigh": 0,
        "sensorCritical": 0
    },
    {
        "sensorKey": "TM0S",
        "temperature": 0,
        "sensorHigh": 0,
        "sensorCritical": 0
    },
    {
        "sensorKey": "TM0P",
        "temperature": 30,
        "sensorHigh": 0,
        "sensorCritical": 0
    },
    {
        "sensorKey": "TN0H",
        "temperature": 0,
        "sensorHigh": 0,
        "sensorCritical": 0
    },
    {
        "sensorKey": "TN0D",
        "temperature": 0,
        "sensorHigh": 0,
        "sensorCritical": 0
    },
    {
        "sensorKey": "TN0P",
        "temperature": 0,
        "sensorHigh": 0,
        "sensorCritical": 0
    },
    {
        "sensorKey": "TI0P",
        "temperature": 0,
        "sensorHigh": 0,
        "sensorCritical": 0
    },
    {
        "sensorKey": "TI1P",
        "temperature": 0,
        "sensorHigh": 0,
        "sensorCritical": 0
    },
    {
        "sensorKey": "TW0P",
        "temperature": 31,
        "sensorHigh": 0,
        "sensorCritical": 0
    }
]

splmatto avatar Jul 23 '22 04:07 splmatto

Can confirm also happens on M2 Pro,

[ { "sensorKey": "TA0P", "sensorTemperature": 0 }, { "sensorKey": "TA1P", "sensorTemperature": 0 }, { "sensorKey": "TC0D", "sensorTemperature": 0 }, { "sensorKey": "TC0H", "sensorTemperature": 0 }, { "sensorKey": "TC0P", "sensorTemperature": 0 }, { "sensorKey": "TB0T", "sensorTemperature": 0 }, { "sensorKey": "TB1T", "sensorTemperature": 0 }, { "sensorKey": "TB2T", "sensorTemperature": 0 }, { "sensorKey": "TB3T", "sensorTemperature": 0 }, { "sensorKey": "TG0D", "sensorTemperature": 0 }, { "sensorKey": "TG0H", "sensorTemperature": 0 }, { "sensorKey": "TG0P", "sensorTemperature": 0 } { "sensorKey": "TH0P", "sensorTemperature": 0 }, { "sensorKey": "TM0S", "sensorTemperature": 0 } { "sensorKey": "TM0P", "sensorTemperature": 0 }, { "sensorKey": "TN0H", "sensorTemperature": 0 }, { "sensorKey": "TN0D", "sensorTemperature": 0 }, { "sensorKey": "TN0P", "sensorTemperature": 0 }, { "sensorKey": "TI0P", "sensorTemperature": 0 }, { "sensorKey": "TI1P", "sensorTemperature": 0 }, { "sensorKey": "TW0P", "sensorTemperature": 0 } ]

SiegfredRodriguez avatar Jun 13 '23 13:06 SiegfredRodriguez

Is there progress in solving the problem?

e154 avatar Nov 10 '23 07:11 e154

Same problem with v4. Macs have no temperatures. Test code:

package main

import (
	"encoding/json"
	"fmt"
	"github.com/shirou/gopsutil/v4/sensors"
)

func main() {
	tstat, _ := sensors.SensorsTemperatures()
	serialized, _ := json.MarshalIndent(tstat, "", " ")
	fmt.Printf("%s", string(serialized))
}

Partial output (the rest looks like the original post):

[
 {
  "sensorKey": "TA0P",
  "temperature": 0,
  "sensorHigh": 0,
  "sensorCritical": 0
 },
 {
  "sensorKey": "TA1P",
  "temperature": 0,
  "sensorHigh": 0,
  "sensorCritical": 0
 },

davidnewhall avatar Jun 30 '24 18:06 davidnewhall

@Girbons - any chance you know how to fix this? <3

davidnewhall avatar Jun 30 '24 19:06 davidnewhall

@Girbons - any chance you know how to fix this? <3

I'll take a look why it isn't working on arm

Girbons avatar Jul 04 '24 15:07 Girbons