MQTT Topic format tableau JSON pour récupération pour en faire une entité

Hello
Je vous plante le décor
J’ai un NODE-RED celui qui gère mes SMS (qui fonctionne très bien)
Dans une de mes fonctions je conserve les 10 dernier SMS arrivés en utilisant la fonction contextStorage persistant pour pouvoir conserver mes 10 dernier SMS reçu même après reboot (ça aussi ca fonctionne bien)
Donc a l’arrivé d’un nouveau SMS j’incrémente mon tableau puis je le publie dans un TOPIC MQTT zigbee2mqtt/SMS/last_10 (la non plus pas de problème)
Dans topic je retrouve bien ma publication

[
  {
    "index": 40042,
    "content": "Encore un script",
    "date": "2025-08-18T12:30:48.000Z",
    "phone": 3360000000
  },
  {
    "index": 40042,
    "content": "État changé bien",
    "date": "2025-08-18T12:19:13.000Z",
    "phone": 3360000000
  },
  {
    "index": 40042,
    "content": "Nouveau script",
    "date": "2025-08-18T12:18:22.000Z",
    "phone": 3360000000
  },
  {
    "index": 40042,
    "content": "Test3",
    "date": "2025-08-18T12:06:56.000Z",
    "phone": 3360000000
  },
  {
    "index": 40043,
    "content": "Ça ne fonctionne pas",
    "date": "2025-08-18T12:06:56.000Z",
    "phone": 3360000000
  },
  {
    "index": 40042,
    "content": "Vive les vacances",
    "date": "2025-08-18T12:00:11.000Z",
    "phone": 3360000000
  },
  {
    "index": 40042,
    "content": "Alerte feu",
    "date": "2025-08-18T11:51:21.000Z",
    "phone": 3360000000
  },
  {
    "index": 40042,
    "content": "Encore pas fini",
    "date": "2025-08-18T11:48:56.000Z",
    "phone": 3360000000
  },
  {
    "index": 40042,
    "content": "Restant node",
    "date": "2025-08-15T09:37:37.000Z",
    "phone": 3360000000
  },
  {
    "index": 40042,
    "content": "Faire simple",
    "date": "2025-08-15T09:34:08.000Z",
    "phone": 3360000000
  }
]

Maintenant la ou j’ai besoin d’aide, c’est pour récupérer le contenu de mon TOPIC
et d’en faire un tableau pour l’afficher dans une carte de mon dashboard.

Dans MQTT de HA si je vais écouter le TOPIC je vois bien les mise a jour

dans mon MQTT.yaml
j’ai ajouté cette partie

  - name: "SMS Last 10"
    state_topic: "zigbee2mqtt/SMS/last_10"
    value_template: "{{ value_json[0].content }}" # juste pour avoir un "state"
    json_attributes_topic: "zigbee2mqtt/SMS/last_10"
    json_attributes_template: "{{ value_json }}"

et que dans développeur si je regarde l’entité SMS Last 10
J’ai bien le dernier SMS qui remonte dans état mais dans attributs ou je devrais avoir les autre arguments, je n’ai que friendly_name: SMS Last 10

La ou je ne suis pas sur du tout, c’est sur le mode de récupération TOPIC → Entité
Puis après comment exploiter ce tableau dans une carte.

Mais la première chose avant d’exploiter en carte, c’est d’être sur de bien récupérer mon tableau exploitable.

Avez-vous une idée (ou plusieurs) pour m’aider a exploiter ces données.
Merci

Salut

Je ne vois pas d’erreur… ça devrait fonctionner, sauf si le contenu est trop grand. Il y a une limite de taille. Regarde dans les logs, si ç’est un problème de taille, il y a un warning.

J’avance

Une petite correction dans le mqtt.yaml me donne une information plus interessante

  - name: "SMS_Last_10.2"
    state_topic: "zigbee2mqtt/SMS/last_10"
    value_template: "{{ value_json[0].content }}" # Using charge_percent as the state
    json_attributes_topic: "zigbee2mqtt/SMS/last_10"
    json_attributes_template: "{{ value_json[0] | tojson }}" # attributes:

Mais normalement dans état je devrais retrouver le nombre occurrence et non pas le champ « Content » qui est le message

Maintenant comment afficher le tableau complet des 10 enregistrement pour contrôler ?

Voila, j’ai les informations je penses pour la suite
Correction de mon mqtt.yaml pour avoir le nombre de message dans le tableau

  - name: "SMS_Last_10.2"
    state_topic: "zigbee2mqtt/SMS/last_10"
    value_template: "{{ value_json | length }}"
    json_attributes_topic: "zigbee2mqtt/SMS/last_10"
    json_attributes_template: "{{ value_json[0] | tojson }}" # attributes:

J’avance petit a petit

Maintenant il faut que je trouve comment lire en boucle cet entité pour vérifier que j’ai bien mes 10 messages.

Non , tu n’as pas les 10 messages. Si tu les avait, ils apparaitraient dans Attributs.

Le contenu est probablement trop grand.

Tu devrait créer une entité par SMS.

Oui si j’avais tous mes enregistrements, je les aurais tous dans attributs, l’erreur doit être ici

value_json[0]

ou je semble lui dire de ne lire que l’enregistrement 0

Suite,
C’est exactement ça, ce code lis bien tous les enregistrements

  - name: "SMS_Last_10.2"
    state_topic: "zigbee2mqtt/SMS/last_10"
    value_template: "{{ value_json | length }}"
    json_attributes_topic: "zigbee2mqtt/SMS/last_10"
    json_attributes_template: >
      {{ {'messages': value_json} | tojson }}

Je m’auto réponds pour ceux qui veulent se lancer dans cet exercice.

Partie de la configuration yaml et que cela soit dynamique a l’arrivé de nouveau message

  - name: "SMS_Last_10.2"
    state_topic: "zigbee2mqtt/SMS/last_10"
    value_template: >
      {% if value_json | count > 0 %}
        {{ value_json[-1].date }}
      {% else %}
        unknown
      {% endif %}
    json_attributes_topic: "zigbee2mqtt/SMS/last_10"
    json_attributes_template: >
      {{ {'messages': value_json} | tojson }}

et une carte pour tester

type: markdown
title: 📱 Derniers SMS
content: >
  {% set messages = state_attr('sensor.sms_last_10_2','messages') %} {% for sms
  in messages | sort(attribute='date', reverse=true) %} <div
  style="background:#f0f0f5; padding:10px; margin-bottom:8px;
  border-radius:10px;">
    🆔 <b>Index</b> : {{ sms.index }}<br>
    🗓️ <b>Date</b> : {{ sms.date | as_datetime | as_timestamp | timestamp_custom("%d/%m %H:%M", true) }}<br>
    📞 <b>Téléphone</b> : {{ sms.phone }}<br>
    💬 <b>Message</b> : {{ sms.content }}
  </div> {% endfor %}

Ce qui donne