Ajuda com sensor de temperatura do CPU

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 Curtiu

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

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

1 Curtiu

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.

4 Curtiram

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…

criei um sensor com todas essas variáveis e não funcionou também…
acho melhor eu não tentar mais pq não quer aparecer por nada… rsrsrsrsrsrs


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


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