Python Script: como obter um Sensor

Olá!

Estou tentando implementar meu primeiro python script através de um web service de cotação de moedas. Consegui chegar ao script que retorna corretamente os dados, salvei no diretório python_scripts e realizei o teste através da ferramenta Serviços, mas ao acessar o log, retorna uma mensagem de erro, conforme abaixo:

SCRIPT QUE ACESSO O WS:

import requests
import json


def buscar_dados():
    requisicao = requests.get("https://api.hgbrasil.com/finance?format=json")
    cotacao = json.loads(requisicao.text)
    preco_dolar = float(cotacao['results']['currencies']['USD']['buy'])
    preco_euro = float(cotacao['results']['currencies']['EUR']['buy'])
    print("Cotação USD {:.2f}".format(preco_dolar))
    print("Cotação EUR {:.2f}".format(preco_euro))

if __name__ == '__main__':
    buscar_dados()

Logger: homeassistant.components.python_script
Source: components/python_script/init.py:154
Integration: Python Scripts (documentation, issues)
First occurred: 8:02:50 (1 occurrences)
Last logged: 8:02:50

Error loading script cotacao.py: Line 13: “name” is an invalid variable name because it starts with “_”

Opa,

Isso não vai funcionar, pois vc não está simplesmente rodando um script python (apesar do nome). O suporte a python scripts no HA é um pouco mais complicado que isso e simplesmente imprimir o valor também não é o suficiente. Como a classe “hass” fica disponivel pro script, vc vai precisar “setar” o valor que vc quiser chamando a função hass.states.set(…).

Pra funcionar do jeito que vc imaginou, é melhor vc usar a integração “sensor.command_line”. Dá uma olhada aqui: Command line Sensor - Home Assistant que tem até um exemplo com python.

Depois de responder me ocorreu que o que vc quer fazer tá pronto no HA. Quando o site disponibiliza a informação em formato json tudo fica mais fácil. Olha só:

 rest:
   - resource: https://api.hgbrasil.com/finance?format=json
     scan_interval: 60
     sensor:
        - name: "Cotacao USD"
          value_template: "{{ value_json.results.currencies.USD.buy }}"
        - name: "Cotacao EUR"
          value_template: "{{ value_json.results.currencies.EUR.buy }}"
1 Like

Vi sua resposta agora! Muito obrigado!

Dúvida: é possível, através de automação, eu conseguir atualiza o sensor para cada 6 horas?

tem! no exemplo acima é só ajustar o “scan_interval”. Tá em 60s.

1 Like

Eu encontrei, MUITO OBRIGADO pela ajuda!