Sensor MQTT - Récupérer des données JSON imbriquées

Mon problème

Cela fait des heures que je cherche sur tous les sites.
J’ai trouvé semble-t-il la réponse à ma question sur de nombreux sites dont HACF, mais ça ne fonctionne pas chez moi.
Je précise que j’ai la maîtrise de la source MQTT donc je peux y apporter des modifications si nécessaire.

Son mon broker, j’ai le topic suivant :
DIALOG900/Status/126348300552

et les données JSON suivantes pour ce topic :

{
  "name":"g921_bureau",
  "en_service":"1",
  "en_scan":"1",`
  "libre_passage":"1",`
  "battery":{"status":"bon", "voltage":"5,36958885192871"}`
}

Je voudrais créer dans HA un sensor qui récupère la tension de mon device.
Pour cela, j’ai ajouté un sensor MQTT :

- name: "d900_bureau_int_battery_voltage"
  unique_id: "d900_bureau_int_battery_voltage"
  state_topic: "DIALOG900/status/126348300552"
  value_template: "{{ value_json.voltage }}"
  json_attributes_topic: "DIALOG900/status/126348300552"
  json_attributes_template: "{{ value_json.battery | tojson }}"

Avec cette syntaxe, j’obtiens la valeur « Unknown » pour le sensor.
J’ai testé à peu près toutes les syntaxes possibles trouvées sur le net, mais toujours la même erreur…

Un peu d’aide serait la bienvenue si quelqu’un connait la bonne syntaxe ou détecte une erreur quelque part :wink:

Nico


System Information

version core-2022.8.7
installation_type Home Assistant OS
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.10.5
os_name Linux
os_version 5.15.60
arch x86_64
timezone Europe/Paris
config_dir /config
Home Assistant Community Store
GitHub API ok
GitHub Content ok
GitHub Web ok
GitHub API Calls Remaining 5000
Installed Version 1.26.2
Stage running
Available Repositories 1104
Downloaded Repositories 22
Home Assistant Supervisor
host_os Home Assistant OS 8.5
update_channel stable
supervisor_version supervisor-2022.08.3
agent_version 1.2.1
docker_version 20.10.14
disk_total 137.1 GB
disk_used 98.3 GB
healthy true
supported true
board ova
supervisor_api ok
version_api ok
installed_addons SSH & Web Terminal (12.0.2), Studio Code Server (5.3.0), Frigate NVR (3.1), Samba share (10.0.0), Mosquitto broker (6.1.2), Duck DNS (1.15.0), ESPHome (2022.3.1), Node-RED (13.3.2), Zigbee2MQTT (1.27.0-1), Terminal & SSH (9.6.0), InfluxDB (4.5.0), Grafana (7.6.0), File editor (5.3.3), TasmoAdmin (0.20.0)
Dashboards
dashboards 5
resources 18
views 23
mode storage
Recorder
oldest_recorder_run August 24, 2022 at 13:19
current_recorder_run August 26, 2022 at 12:52
estimated_db_size 377.08 MiB
database_engine mysql
database_version 10.5.13
___

Je pense que tu te compliques trop :wink: Voici ce que j’ai ici pour récupérer la valeur d’une sonde en Lora qui remonte via un MQTT:

 - platform: mqtt
    state_topic: "v3/sonde-externe@ttn/devices/a84041b5718276c2/up"
    name: “Ext. Temp DS”
    value_template: '{{ value_json.uplink_message.decoded_payload.TempC_DS }}'
    unit_of_measurement: "°C"

J’ai suivi tes indications et j’ai donc mis :

- name: "d900_bureau_int_battery_voltage"
  unique_id: "d900_bureau_int_battery_voltage"
  state_topic: "DIALOG900/status/126348300552"
  value_template: "{{ value_json.battery.voltage }}"

Même punition, sensor = unknown …

Du coup, j’ai aussi essayé :

value_template: "{{ value_json['battery.voltage'] }}"
value_template: "{{ value_json['battery'].['voltage'] }}"
value_template: "{{ value_json['battery']['voltage'] }}"

Idem :weary:

Pourquoi tu as ce genre de bidule dans le json ?

Verif à faire avec les outils de dev, plus rapide a débugger que les templates en yaml

Euh petite question plus basique ta connexion MQTT dans HA est opérationnelle ? tu utilises l’add-on mqtt ?

Dans mon broker, ils n’y sont pas.
Ca doit venir du copier/coller :face_with_raised_eyebrow:

Donc syntaxiquement tu as un truc qui fonctionne

Oui, dans HA, ma connexion MQTT est opérationnelle et elle fonctionne pour tout un tas d’autres sensors

Effectivement, quand je teste la structure json dans l’onglet modèle, ça fonctionne bien avec cette syntaxe

Donc vérifie le json complet à la sortie de ton template…

Désolé Pulpy, je ne suis pas très coutumier des templates et autres joyeusetés de ce genre.
Qu’entends tu par « vérifie le json à la sortie du template » ?

Au lieu de ça

essaye
value_template: "{{ value_json }}"
Et comme ça tu aura le json tel que reçu dans HA, tu le passes dans les outils pour voir si c’est différent

Réponse = Unknown :astonished:

Par contre, si je mets :

value_template: "{{ value_json['battery'] }}"

J’obtiens bien une réponse :

{'status': 'bon', 'voltage': '5,36958885192871'}

Essaye avec un . au lieu d’une , dans le format numérique

Une idée à laquelle je n’avais pas pensé, mais malheureusement, le résultat est identique …

J’ai trouvé la solution au problème !!!
Le nom du topic est sensible à la casse, donc il fallait mettre un S majuscule à …/Status/…
Une demi journée pour ça :crazy_face:

Merci à vous pour votre aide :+1:

1 « J'aime »