Formation PUB425 : Objets connectés avec Jeedom et Home Assistant, A-2025 Les modèles Home Assistant

38.8 Format JSON dans un modèle


L'étude des modèles Home Assistant ne serait pas complète si on ne parlait pas de maniuplation du format JSON.

Si vous lisez ceci alors que vous n'avez pas encore eu besoin du JSON, je vous conseille de passer à la fiche suivante et de revenir ici seulement quand le besoin se fera sentir.

Sinon, vous êtes au bon endroit pour comprendre les manipulations JSON!

Parfois, toutes les informations sur un objet connecté ou plus précisément sur une entité seront encodées au format JSON.

Ce sera le cas notamment pour des informations qui seraient reçues via un API ou via MQTT.

Encodage

Si vous devez encoder des données au format JSON, rappelez-vous que ce format utilise des guillemets et non des apostrophes alentour de la clé. Home Assistant acceptera les deux syntaxes mais les validateurs JSON, par exemple https://jsonlint.com, indiqueront qu'il y a une erreur.

YAML

payload: >-
  {
    "latitude"{{ state_attr('device_tracker.position_virtuelle_annie', 'latitude') }},
    "longitude"{{ state_attr('device_tracker.position_virtuelle_annie', 'longitude') }}
  }

La syntaxe précédente fonctionne bien. Cependant, pour vous assurer que tout soit correctement encodé, il est préférable d'utiliser le filtre to_json.

YAML

payload: |-
  {%
    set valeurs = {
      "latitude": state_attr('device_tracker.position_virtuelle_annie', 'latitude'),
      "longitude": state_attr('device_tracker.position_virtuelle_annie', 'longitude')
    }
  %}
  {{ valeurs | to_json }}

Voici un example dans l'interface Web d'une automatisation qui doit envoyer des informations au format JSON.

JSON dans une automatisation

C'est quoi toutes ces accolades?

Dans les exemples précédents, on voit des accolades qui jouent différents rôles. Apprenez à les différencier afin de mieux comprendre la syntaxe.

  • {% ... %} Cette syntaxe, utilisée dans les modèles, permet d'effectuer du traitement sans retourner de valeur.

  • {{ ... }} Les double-accolades sont elle aussi utilisées dans les modèles mais cette fois, elles servent à retourner une valeur.
  • { ... } Les simples accolades servent à délimiter la chaîne JSON.

Décodage

Home Assistant pourrait recevoir des informations comme ceci  de la part d'un objet connecté :

{"luminosite": 40, "temperature": 23, "mouvement": 0, "humidite": 50, "pile": 90}

Les objets qui fournissent une position GPS travailleront souvent avec cette structure de données :

{"latitude": 46.06027408131711, "longitude": -71.9437545693869}

Pour connaître la valeur d'une de ces informations,  il faudra d'abord désérialiser la chaîne JSON à l'aide du filtre from_json

L'information sera ensuite disponible soit comme une propriété (avec un point), soit comme un élément de tableau (avec des crochets carrés).

Les deux syntaxes sont équivalentes.

Modèle Home Assistant

{{ (states('domaine.identifiant_objet') | from_json).nom_information }}

ou

Modèle Home Assistant

{{ (states('domaine.identifiant_objet') | from_json)['nom_information'] }}

Notez que si vous testez ce modèle dans les outils de développement et que vous obtenez l'erreur « JSONDecodeError: unexpected character: line 1 column 1 (char 0) », c'est que les données que vous tentez de lire ne sont pas au format JSON.

▼Publicité

Veuillez noter que le contenu de cette fiche vous est partagé à titre gracieux, au meilleur de mes connaissances et sans aucune garantie.
Merci de partager !
Soumettre