Platform REST gestion attributs

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

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 (:wink:), 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 :+1:

Et pourquoi ne pas faire directement 5 capteurs REST (5 entités) plutôt que 5 capteurs + 1 REST (6 entités)

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 → Platform REST gestion attributs - #3 par Wanfr

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