Aide pour mon premier script python

Bonjour,

Tous est dans le titre…

Je suis pas informaticien ni programmateur, mais j’essaye…
Donc j’ai commencé mon premier script python :
J’ai crée un dossier python_script dans mon dossier config dans lequel j’ai enregistré mon script.

Sur mon pc le script ce déroule sans soucis et avec les print(…) je verifie que tout fonctionne.
Arrive la partie Home Assistant qui elle ne ce teste (je pense) que sur HA.

Je recharge les python script à partir du server_control, puis je le recharge avec le service Python Scripts: market
Avec ce script je récupère les données par une api avec mon token et name.
Mais quand je vais dans les outils de développement le sensor crée par mon script n’existe pas…

Et malgré de nombreuses recherches je ne sais pas pourquoi je ne crée ni le sensor, ni ces attributs:

....
ouvert, high, low, close, volume = recup_valeurs(token, name)

"""The syntax is hass.states.set(entitiy_id, state, {dict of attributes}) """
hass.states.set("sensor.xpar", "on",
    {
    "icon": "mdi:flash-circle" ,
    "friendly_name": "Air",
    "open": ouvert,
    "high": high,
    "low": low,
    "close": close,
    "volume": volume
    }
)

merci de votre aide
@+

Tu ne respectes pas le format JSON, seul les valeurs numérique se dispensent des guillemets.

Un code qui marchera :

#The syntax is hass.states.set(entitiy_id, state, {dict of attributes})
hass.states.set('sensor.python_var', 'on',
    {
    "icon": "mdi:flash-circle" ,
    "friendly_name": "Air",
    "isOpen": 0, #ajouter pour l'exemple
    "open": "ouvert",
    "high": "high",
    "low": "low",
    "isSlow": 0, #ajouter pour l'exemple
    "close": "close",
    "isClose": 1, #ajouter pour l'exemple
    "volume": "volume"
    }
)

une page qui me sert toujours : JSON pour les débutants (la-cascade.io)

Bonjour,

Merci de vos reponses, mais je pense que vous êtes peut être passé à coté…
C’est un script python et je sors des variables de ma fonction recup_valeurs :

ouvert, high, low, close, volume = recup_valeurs(token, name)

Comme c’est des variables si je les mets entre guillemets je perds leur valeur:

ouvert = 5.25
« ouvert » = ouvert

Donc je ne sais toujours pas pourquoi le sensor.xpar n’est pas créé

pourtant dans la doc homeassistant.core — Home Assistant 2022.2.9 documentation

set (entity_id: str, new_state: str, attributes: Mapping[str, Any] | None = None, force_update: bool = False, context: Context | None = None ) → None[source]

Set the state of an entity, add entity if it does not exist.

Pour moi, comme je l’explique, si le JSON n’est pas au bon format, la fonction de création d’entité ne fonctionnera pas.

Effectivement, je n’avais pas vu que tu utilisais une fonction.

Si l’un des paramètres n’est pas dans le format attendu, la fonction retourne une erreur, donc tu n’auras pas l’entité. Tu ne peux pas avoir une erreur sur le JSON et avoir l’entité et sont état de créé sans les attributs.

Tu as été voir ce que t’indiquait le log (home-assistant.log)?

Si tu veux plus d’aide, il faut partager tout ton code…
Le problème se situe apparemment dans les valeurs de retour

re,

voici le code moins la ligne url api

import json
import requests

def recup_valeurs(tok, nom):
    url = "http://api.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    response = requests.get(url)
    todos = json.loads(response.text)
    result = todos["data"][0]
    return result.get('open'),result.get('high'),result.get('low'),result.get('close'),result.get('volume'),result.get('symbol'),result.get('date')


ouvert, high, low, clos, volume, symbol, jour = recup_valeurs(token, name)

print(ouvert)
print(high)
print(low)
print(close)
print(volume)
print(symbol)
print(jour)

j’obtient :

34.57
34.605
33.905
34.15
1073657.0
xpar
1620338400.0

Process finished with exit code 0

Dans HA je remplace les print par :

"""The syntax is hass.states.set(entitiy_id, state, {dict of attributes}) """
hass.states.set("sensor.xpar" , "on" ,
  {
    "icon" : "mdi:flash-circle" ,
    "friendly_name" : "Air",
    "open" : ouvert,
    "high" : high,
    "low" : low
  }
)

j’ai aussi essayé

hass.states.set("sensor.xpar" , "on" , {"friendly_name" : "Air"})

Dans aucun des cas il crée sensor.xpar

Apparemment j’ai rien dans le log

Merci pour ta patience

C’est un soucis…

Et avec mon code en exemple ?

Car il faut au moins arriver à créer une entité sans variables pour ensuite s’essayer avec des variables…

La documentation indique que les importations ne sont pas supportées…tu n’as pas d’erreur dans le log ?

Voici un code qui fonctionne avec l’utilisation de variables pour la définition des attributs :

nombre = 12345
toast = "toast"
attr = {'nombre': nombre, 'toast': toast }
    
#The syntax is hass.states.set(entitiy_id, state, {dict of attributes})
hass.states.set('sensor.python_var', 'on', attr)

Bonjour,

En fait c’est bien les imports qui bloquent…
Alors comment je fait l’appel de mon api sans request ?

Et oui une réponse encore conclue par une question…

Avec l’intégration Python_script tu ne peux pas.

Il faut passer par autre chose.

Vu que tu récupère un json, je partirais sur :

@Clemalex

Merci beaucoup, je vais testé ça

Resquests est un package qu’il faut installer pour pouvoir l’utiliser. Avez-vous essayer de le télécharger sur github et de l’avoir mis à racine de votre script ?
Une autre solution est consiste à déporter votre code dans un autre environnement (genre docker) et de l’exécuter via par exemple mqtt. C’est un peu plus lourd à mettre en place mais par contre tellement plus facile à maintenir après.

Peux tu faire un tutoriel sur ta proposition dans #decouverte-de-home-assistant:autres ?