Ajuda com sensor de temperatura do CPU

Boa tarde,

Vou aproveitar este tópico, para pedir ajuda no sensor de temperatura do CPU do meu NUC.
Já tentei algumas configurações, mas sem sucesso (não aparecem valores).

Neste momento está assim:

  - platform: command_line
    name: CPU Temp
    command: "cat /sys/class/thermal/thermal_zone5/temp"
    unit_of_measurement: "°C"
    value_template: '{{ value | multiply(0.001) | round(1) }}'

Mas já testei com zone0, zone1, zone2, zone3, zone4. Não funcionou com nenhuma.

Tenho o hassio instalado numa VM, sobre proxmox.

Executei o comando abaixo no Shell do proxmox:

ls -1 /sys/class/thermal/thermal_zone*/type | xargs -I % sh -c "echo % ; cat %"

E apareceu-me o seguinte resultado:

/sys/class/thermal/thermal_zone0/type
acpitz
/sys/class/thermal/thermal_zone1/type
acpitz
/sys/class/thermal/thermal_zone2/type
acpitz
/sys/class/thermal/thermal_zone3/type
pch_skylake
/sys/class/thermal/thermal_zone4/type
iwlwifi
/sys/class/thermal/thermal_zone5/type
x86_pkg_temp

Alguma ajuda seria bem vinda!

Obrigado

Penso que não vais conseguir obter a temperatura dessa forma.
Se tens o HA em uma VM, ao correres o comando na no sensor command_line, não tens acesso ao hardware físico, logo não tens acesso à temperatura.

Tens de arranjar forma do proxmox passar a temperatura para HA.

Vê o post sobre OpenHardwareMonitor, deixei lá um script que te pode ajudar. Se precisares de ajuda em adaptar o script para a temperatura, posso tentar.

1 Like

Obrigado @denkyem,
Pensei que houvesse uma solução mais simples.

Se quiseres, posso dar uma ajuda, manda mensagem privada.

1 Like

Obrigado pela disponibilidade.
Eu não estou à vontade com programação a esse nível (não sou da área de informática).
Por enquanto acho que vou esquecer essa funcionalidade.

Boa tarde,
Estou de volta a este assunto.
Com a ajuda do Valdemar Silva (forum internacional), que partilhou o seguinte tutorial: https://kleypot.com/proxmox-home-assistant-host-system-hardware-monitoring/, foi possivel fazer alguns avanços. No entanto, ainda não se encontra a funcionar, ao que parece devido a um problema de certificados SSL.
Do tutorial acima foi necessário substituir alguns comandos:
Substituir o comando:

> apt install python-pip3

Pelo comando:

apt install python3-pip

Substituir o comando:

> chmod x+a my_script.py

Pelo comando:

chmod +x my_script.py

O que falta resolver no meu caso, é quando executo o ultimo comando, tenho esta resposta:

/usr/lib/python3/dist-packages/urllib3/connectionpool.py:849: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
  InsecureRequestWarning)

Se alguém conseguir ajudar, ficarei agradecido.
Cumprimentos.

Nisso não consigo ajudar, mas deixo-te aqui todos os passos para usares o script com mqtt.

Pré-requisitos:

  • MQTT Broker já instalado e configurado no HA

Na consola do Proxmox (UI Shell ou Putty) executar os seguintes comandos:

apt update
apt install mosquitto-clients
cd /root
nano mqtt_config.sh

Colar o seguinte código alterando o IP, a porta, o user e a pass, pelos do vosso MQTT Broker:

#!/bin/bash

HOST=192.168.1.123
PORT=1883 
USER=utilizador
PASS=palavrapasse
SENSOR='proxmox'
SERVER='Proxmox'

#TEMP
mosquitto_pub -h $HOST -p $PORT -t 'homeassistant/sensor/'$SENSOR'/Temp/config' -m "{\"name\":\"$SERVER Temperature\", \"icon\":\"mdi:thermometer\", \"unit_of_measurement\": \"ยบC\", \"state_topic\":\"home/servers/$SENSOR/state\", \"value_template\": \"{{ value_json.temp }}\"}" -u $USER -P $PASS -r

#LOAD
mosquitto_pub -h $HOST -p $PORT -t 'homeassistant/sensor/'$SENSOR'/Load/config' -m "{\"name\":\"$SERVER Load 1M\", \"icon\":\"mdi:cpu-64-bit\", \"state_topic\":\"home/servers/$SENSOR/state\", \"value_template\": \"{{ value_json.load }}\"}" -u $USER -P $PASS -r

#MEM
mosquitto_pub -h $HOST -p $PORT -t 'homeassistant/sensor/'$SENSOR'/Mem/config' -m "{\"name\":\"$SERVER Memory\", \"icon\":\"mdi:memory\", \"unit_of_measurement\": \"%\", \"state_topic\":\"home/servers/$SENSOR/state\", \"value_template\": \"{{ value_json.mem }}\" }" -u $USER -P $PASS -r

#LAST_BOOT
mosquitto_pub -h $HOST -p $PORT -t 'homeassistant/sensor/'$SENSOR'/LastBoot/config' -m "{\"name\":\"$SERVER Last Boot\", \"device_class\":\"timestamp\", \"icon\":\"mdi:clock\", \"state_topic\":\"home/servers/$SENSOR/state\", \"value_template\":\"{{ value_json.last_boot }}\" }" -u $USER -P $PASS -r

#UPDATES AVAILABLE
mosquitto_pub -h $HOST -p $PORT -t 'homeassistant/sensor/'$SENSOR'/AvailableUpdates/config' -m "{\"name\":\"$SERVER Available Updates\", \"icon\":\"mdi:package-variant\", \"state_topic\":\"home/servers/$SENSOR/state\", \"value_template\":\"{{ value_json.updates_available }}\" }" -u $USER -P $PASS -r

exit

Clicar em:

CTRL+X
Y
Enter

Já temos o nosso script que irá criar os sensores no HA, falta o script para enviar os valores para os sensores.

nano mqtt_status.sh

Colar o seguinte código, substituindo igualmente o IP, porta, user e pass:

#!/bin/bash

HOST=192.168.1.123
PORT=1883 
USER=utilizador
PASS=palavrapasse
SENSOR='proxmox'

LOAD=$(uptime | awk '{print $(NF-2)}' | head -c -2)

MEMTOTAL=$(free | grep Mem | awk {'print $2'}) 
MEMUSED=$(free | grep Mem | awk {'print $3'})
MEM=$(awk "BEGIN {printf \"%.1f\n\", $MEMUSED*100/$MEMTOTAL}") 


UPTIME=$(uptime -s) 
LAST_BOOT=$(date -d"$UPTIME" +%FT%T+00:00) 

NUMBER_UPDATES=$(apt-get -s upgrade | grep -Po "^[[:digit:]]+ (?=upgraded)")


#Temperatura
TEMPMIL=$(cat /sys/class/thermal/thermal_zone0/temp)
TEMP=$(awk "BEGIN {printf $TEMPMIL/1000}")


PAYLOAD="{\"load\":$LOAD, \"mem\":$MEM, \"updates_available\":$NUMBER_UPDATES, \"last_boot\":\"$LAST_BOOT\", \"temp\":\"$TEMP\"}"

echo $PAYLOAD

#STATE
mosquitto_pub -h $HOST -p $PORT -t 'home/servers/'$SENSOR'/state' -m "$PAYLOAD" -u $USER -P $PASS

exit

Clicar em:

CTRL+X
Y
Enter

Neste momento já temos os 2 scripts necessários, vamos dar permissões de execução e criar as tasks no Cron

chmod +x mqtt_config.sh
chmod +x mqtt_status.sh
crontab -e

Se aparecer para escolher um editor de texto, escolham o ‘nano’.

No final do ficheiro cron vamos colar as seguintes linhas:

0 * * * * /root/mqtt_config.sh #corre a todas as horas
* * * * * /root/mqtt_status.sh #corre de 15 em 15 segundos
* * * * * sleep 15 && /root/mqtt_status.sh
* * * * * sleep 30 && /root/mqtt_status.sh
* * * * * sleep 45 && /root/mqtt_status.sh

Clicar em:

CTRL+X
Y
Enter

E está pronto.
O script mqtt_config.sh só corre de hora em hora, então podemos ter de esperar um bocado até vermos os sensores no HA
Ou podemos correr o script manualmente

sh mqtt_config.sh && sh mqtt_status.sh

Se tudo correu bem, quando agora forem ao vosso HA devem ter 5 novos sensores que são atualizados de 15 em 15 segundos.

Como disse anteriormente, shellscript não é o meu forte e tenho noção que provavelmente isto ficaria melhor feito em python, não executando de 15 em 15 segs mas sim sempre que houvesse uma alteração nos valores.
Foi a solução que arranjei e já utilizo há bastante tempo sem problemas.

Espero que ajude.
Alguma dúvida, disponham.

1 Like

Obrigado pela partilha.
Obtive um resultado, mas não o esperado (-273.2ºC)
image

Parece que já está a funcionar.
Alterei a thermal_zone de 0 para 5
Alterei a unidade para ºC

image

Obrigado pela ajuda.

Boa :wink:

Ainda bem que consegui ajudar

O teu tutorial estava excelente.
Comecei a receber uns e-mails do cron, com:
Assunto:
Cron <root@proxmox> sleep 45 && /root/mqtt_status.sh

Conteúdo:

"load":0.39, "mem":49.2, "updates_available":85 , "last_boot":"2020-04-27T23:22:37+00:00", "temp":"57"}

Sabes qual a razão?
Dará para desativar o envio?

Obrigado

A razão não sei, mas coloca aqui o conteúdo completo do cron para tentar perceber

O conteúdo é este:

root@proxmox:~# crontab -e
  GNU nano 3.2              /tmp/crontab.KHjmLj/crontab

# For more information see the manual pages of crontab(5) and cron(8)
#
# m h  dom mon dow   command
#
0 * * * * /root/mqtt_config.sh #corre a todas as horas
* * * * * /root/mqtt_status.sh #corre de 15 em 15 segundos
* * * * * sleep 15 && /root/mqtt_status.sh
* * * * * sleep 30 && /root/mqtt_status.sh
* * * * * sleep 45 && /root/mqtt_status.sh

Por o que tens no crontab não deveria estar a enviar emails, mas isso também já está fora da minha zona de conforto :thinking:

Seria funcional no meu caso?
Rodo o HA no ubuntu server…
Não consigo pegar a informação da temperatura do meu mini computador asrock ion 330…
se puder ajudar fico agradecido

O Ubuntu server está instalado na máquina física ou em uma máquina virtual?

Na máquina física, não entendo muito de lunix. mas fiz a instalação direta dele, sem VM.
Tenho as informações de memória, processador, hd somente da temperatura que não consigo e não faço ideia por onde buscar…

Possivelmente porque o sistema não tem nada instalado que permita ler as temperaturas do sistema.

Já testaste com o código que coloquei no primeiro post?

sensor:
  - platform: command_line
    name: CPU Temp
    command: "cat /sys/class/thermal/thermal_zone5/temp"
    unit_of_measurement: "°C"
    value_template: '{{ value | multiply(0.001) | round(1) }}'

Podes fazer alguns testes com diferentes “thermal zones”. Onde tem thermal_zone5, podes substituir por: thermal_zone0 ou thermal_zone1 ou thermal_zone2 ou thermal_zone3 ou thermal_zone4

fiz o procedimento e não funcionou…


Copyright © 2017-2020. Todos os direitos reservados
CPHA.pt - info@cpha.pt


FAQ | Termos de Serviço/Regras | Política de Privacidade