Sensor de temperatura da CPU para o Home Assistant usando Proxmox!

Este tutorial foi feito porque executo a o meu Home Assistant em uma maquina virtual no Proxmox e as formas padrões de obter dados da maquina atraves do Home Assistant só obtem os dados da maquina virtual e não do Host, por isso fiz esse tutorial. Com esse metodo você vai ser capaz de obter os dados de temperatura, uso de cpu e uso de ram diretamente do servidor Proxmox.

Os comandos a seguir são executados no complemento Terminal & SSH do Home Assistant

Este comando é usado para gerar a chave SSH na maquina virtual do Home Assistant:

ssh-keygen

Este comando envia a chave ssh para o servidor Proxmox:

ssh-copy-id root@ip_do_proxmox

**após esse comando será solicitado a sua senha de root do proxmox, preencha como solicitado

Cria um diretorio com o nome .ssh na pasta config do Home Asistant:

mkdir -p /config/.ssh

Copia o arquivo id_rsa do diretorio /root do Proxmox para o diretorio que acabamos de criar na pasta config do Home Assistant.

cp /root/.ssh/id_rsa /config/.ssh/id_rsa

Comando para testar se está OK, importante usar o argumento -i para o proxmo não pedir a senha root

ssh -i /config/.ssh/id_rsa root@ip_do_proxmox

Sair da conexão

exit

O proximo passo é criar o sensor no Home Assistant para obter estes dados e mostrar no Lovelace

sensor:
#Temperatura CPU

  - platform: command_line
    name: 'Temp CPU Mini PC'
    command: "ssh -i /config/id_rsa -o StrictHostKeyChecking=no root@ip_do_proxmox -t 'cat /sys/class/thermal/thermal_zone0/temp'"
    unit_of_measurement: '°C'
    scan_interval: 5
    value_template: '{{ (value | multiply(0.001)) | round(0) }}'

#Uso CPU

 - platform: command_line
   name: 'Proxmox CPU'
   command: ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i /config/.ssh/id_rsa root@10.20.30.200 top -d 0.5 -b -n2 | grep "Cpu(s)"|tail -n 1 | awk '{printf ("%.0f\n",$2 + $4)}'
   unit_of_measurement: '%'

#Uso RAM

  - platform: command_line
    name: 'Proxmox RAM'
    command: ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i /config/.ssh/id_rsa user@ip free -m | grep Mem | awk '{printf ("%.0f\n",$3*100/$2)}'
    unit_of_measurement: '%'

Fonte: https://github.com/rafamerten/projetos/blob/main/temp_cpu_proxmox_home_assistant.txt

4 Likes

Parabéns pela iniciativa em compartilhar!

1 Like

Vlw pelo tutorial, mas aqui nunca funciona. :frowning: Já faz algum tempo q venho pesquisando e tentando fazer esse sensor funcionar, mas nunca dá certo…

Fiz tudo como indicado aí no tutorial, mas tive q lidar com vários erros/empecilhos, desde copiar/colar no ssh do HA (isso é o de menos kkkk), até na parte de gerar a key (q pede pra substituir, pede senha e outras coisas), e a última parte q não devia pedir senha root, mesmo usando o argumento -i.

Sinceramente eu desisto de fazer isso funcionar aqui kkkkk dor de cabeça dms!

Mas o tutorial deve ajudar outras pessoas, meu proxmox q deve estar virado no jiraya :joy:

Screenshot_2-t

Aqui uso uma abordagem um pouco diferente, incluí um script no agendamento cron do proxmox que realiza a atualização do sensor de temperatura usando a API do Home Assistant.

Instalar o xsensors:

Executar o comando apt-get install xsensors

Criar o script /usr/temp_ha_post com o código abaixo (usar o editor de preferência - nano, vi, etc):

Deve ser alterado o endereço IP do HA e o token de longa duração.


#! /bin/bash
url1=http://10.10.10.xxx:8123/api/states/sensor.proxmox_temperatura
token1=xxxxx

i=1
sensors | grep -e "°C" | while read line; do
                temp=$(echo $line | awk -F "+" '{ print $2 }' | awk -F "." '{ print $1 }');
                url1a=$url1'_'$i;
                curl -X POST -H "Authorization: Bearer $token1" -H 'Content-type: application/json' --data "{\"state\":\"$temp\",\"attributes\": {\"friendly_name\":\"Temperatura Proxmox\",\"icon\":\"mdi:cpu-64-bit\",\"state_class\":\"measurement\",\"unit_of_measurement\":\"°C\",\"device_class\":\"temperature\"}}" $url1a;
                i=$[$i+1];
        done

Conceder permissão de execução ao script:

chmod +x /usr/temp_ha_post

Testar o script e verificar se os sensores são criados no HA:

/usr/temp_ha_post

Criar uma entrada no cron para executar o script:

  • Executar o comando crontab -e

  • Adicionar na última linha (nessa configuração os sensores serão atualizados a cada minuto):
    */1 * * * * /usr/temp_ha_post

  • Reiniciar o cron:
    services cron restart

Resultado:

imagem

No meu até dar certo tive que refazer algumas vezes, oque você pode fazer é usar o Winscp e excluir aquele arquivo id_rsa da pasta root para recomeçar. Os comandos que você usou no Terminal estão corretos. Verifica tambem qual é o sensor correto no seu caso. No meu caso é o thermal_zone0.
Nesta parte aqui do codigo “cat /sys/class/thermal/thermal_zone0/temp”.

1 Like

Update! Refiz tudo hoje e consegui fazer o sensor de temperatura funcionar! Finalmente :sweat_smile:

Vlw aí @mrt :facepunch:

1 Like

Não funciona, não gera os sensores.

1 Like

Sou uma ameba em linux.

Aqui da erro nessa parte :confused:

image

Muito bacana. Aqui eu fiz um pouco diferente: fiz um script que a partir do linux conecta no MQTT e vai postando de 5 em 5 segundos.

#! /bin/sh
temperature=$( sensors | grep -oP ‘Core 0.*?+\K[0-9.]+’ )
mosquitto_pub -h ip_do_homeassistant -t fromserver/cpu_temp -m “$temperature” -u usuario_mqtt -P senha_mqtt
echo ‘enviado’ $temperature

A opção -t é do tópico que você vai usar lá no MQTT, no meu caso, é fromserver/cpu_temp.

Para executar o script bash eu rodo com um watch de 5 segundos.

Acho que esse consigo fazer.

Estou com um container rodando uns scripts python, vou colocar para rodar junto, deve funfar né

Pessoal,
Alguma solução pra quem utiliza o Hassio no mini pc dedicado! Não consigo pelo System monitor e pelo command line com o codigo abaixo ele não atualiza! Trouxe um resultado estático do dia da criação do sensor.

  • platform: command_line
    name: CPU Temperature
    command: “cat /sys/class/thermal/thermal_zone0/temp”
    unit_of_measurement: “°C”
    value_template: “{{ value | multiply(0.001) | round(1) }}”
    scan_interval: 30

Vc tem que verificar se o caminho está correto. Pode ser que o seu seja zone2 ou zone3.
Então verifique o caminho e abra o arquivo temp.

1 Like

Uso esse mesmo sensor, mas sem o scan_interval. Funciona

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

image

1 Like

Resolvido!!! era a zona (0) alterei pra (1)…
Obrigado

1 Like

Rola de usar um shelllscript direto na máquina do proxmox e enviar avisos direto para o telegram. A não ser que se queira integrar ao HA por algum outro motivo.

Primeiramente muito obrigado. Aqui funcionou maravilhosamente. A unica coisa que tive que consertar no codigo da Temperatura CPU foi: [ … /config/id_rsa -o … ], quando na verdade deveria ser: [… /config/.SSH/id_rsa -o …].
Mais uma vez muito obrigado.

Também fiz o meu script:

Encontrei esse método publicado em dezembro/2023. Achei mais simples e mais “transparente” que o anterior.

Pra quem ainda tá procurando, já tem integração oficial com isso: System Monitor.

System monitor já existe há muito tempo, só que era configurado por YAML

Rodando no proxmox o sensor não é criado:
If no hardware sensor data is available (e.g., because the integration runs in a virtualized environment), the sensor entity will not be created