Wanfr
Mai 21, 2021, 12:41
#1
Bonjour,
en suivant le tuto https://forum.hacf.fr/t/utilisation-de-switch-rest-pour-piloter-un-ipx800/2288/17
j’ai mis en route ma récupération des données fourni par l’api
- platform: rest
resource: https://www.xxxx.json?api_key=xxxxxxx
name: API
method: GET
value_template: '{{ value_json.dataset.data.0.0 }}'
j’ai 5 valeurs à récupérer, donc je peux faire 5 fois ce code en changeant simplement la valeur
value_template: '{{ value_json.dataset.data.0.0 }}'
value_template: '{{ value_json.dataset.data.0.1 }}'
value_template: '{{ value_json.dataset.data.0.2 }}'
value_template: '{{ value_json.dataset.data.0.3 }}'
value_template: '{{ value_json.dataset.data.0.4 }}'
Mais plus simple, j’ai voulu passé par json_attributes pour tous récupérer en attribut du sensor.
Rien ne fonctionne :
- platform: rest
resource: https://www.xxxx.json?api_key=xxxxxxx
name: API
method: GET
value_template: '{{ value_json.dataset.data.0.0 }}'
json_attributes:
- 0
- 1
- 2
- 3
- 4
J’ai essayé 4, "4" et "quatre"
rien ne fonctionne
Si je met en attribut « dataset », j’ai en attribut tout le fichier json, mais je ne veux que la partie data…
Merci à tous
et si tu ajoutes le chemin pour les attributs comme ceci (peut être l’adapter):
- platform: rest
resource: https://www.xxxx.json?api_key=xxxxxxx
name: API
method: GET
json_attributes_path: "$.dataset.data.0" #Ajout du chemin pour les attributs ()
value_template: '{{ value_json.dataset.data.0.0 }}'
json_attributes:
- 0 #représente <0>
- 1 #représente <1>
- 2 #représente <2>
- 3 #représente <3>
- 4 #représente <4>
→ Exemple dans la documentation
Wanfr
Mai 21, 2021, 6:05
#3
Salut @Clemalex
ça aussi je l’ai essayé car oui j’ai lu la documentation
Mais dans la fameuse donc il y a " json_attributes_path
from the XML"…
Donc faute de mieux pour l’instant je fait ça :
- platform: rest
resource: https://www.xxxx.json?api_key=xxxxxxx
name: API
method: GET
value_template: '{{ value_json.dataset.name }}'
json_attributes:
- dataset
Puis je fait des sensors (5) :
- platform: template
sensors:
api_1:
value_template: '{{ states.sensor.api.attributes["dataset"]["data"][0][1]|float |round(3)}}'
tu l’as lu de travers ( ), car il est indiqué que si le format est un xml, il sera converti en json
Donc, il faut faire comme je te l’indique mais y aller par palier/niveau…
Un exemple que je viens juste de réaliser pour te donner un exemple :
sensor:
- platform: rest
name: JSON HACF
resource: https://forum.hacf.fr/c/entraide-home-assistant/55.json
value_template: "{{'Top tag : ' + value_json.topic_list.top_tags[0]}}"
json_attributes_path: "$.topic_list.topics[0]"
json_attributes:
- title
- last_posted_at
Si tu n’y arrives pas, partage le squelette de ton json
Et pourquoi ne pas faire directement 5 capteurs REST (5 entités) plutôt que 5 capteurs + 1 REST (6 entités)
Wanfr
Mai 21, 2021, 8:21
#6
re,
En effet, je pense que cela vient de mon json…
copie message nodered :
voila ton api sous nodered:
mon json est un array dans un array
Bien, on c’est pourquoi cela ne fonctionne pas, reste plus qu’a trouver la solution
Un tableau dans un tableau, le REST ne saura pas le faire dans les attributs…car ces derniers ne prennent pas en charge les modèles.
Donc tu as déjà le code qu’il te faut → https://forum.hacf.fr/t/platform-rest-gestion-attributs/4796/3?u=clemalex
Wanfr
Mai 21, 2021, 9:45
#8
Re,
J’ai accès à cet api gratuitement et donc je doit faire une pause entre chaque requête environ 5s.
alors comment faire:
- platform: rest
resource: https://www.xxxx.json?api_key=xxxxxxx
name: API 1
method: GET
value_template: '{{ value_json.dataset.name }}'
json_attributes:
- dataset
delay 5s
- platform: rest
resource: https://www.xxxx.json?api_key=xxxxxxx
name: API 2
method: GET
value_template: '{{ value_json.dataset.name }}'
json_attributes:
- dataset
Car bien-sur quand par automatisme j’appelle le service « rest.reload » je pers la moitié de mes requetes car elles sont trop rapprochée dans le temps…
Ok, reste comme tu es dans ce cas.
Bonjour @Wanfr ,
As-tu réussi à faire quelque chose de fonctionnel ?
Je recherche aussi à faire la même chose.
Merci.
Aurel