Bonjour à tous
J explore la lecture en JSON pour charger des valeurs d initialisation à partir d un fichier texte.
- platform: command_line
name: Test JsON command_line
command: "cat packages/test_jso_init.json"
scan_interval: 60 # 60 === 60 secondes
value_template: "OK" # valeur affichée dans STATEs
json_attributes: # items a inclure dans le sensor
- zone
- capteur
- radiateur
Ca marche
cad que j arrive à lire:
le nombre de radiateurs que j ai défini
{{states.sensor.test_json_command_line.attributes.radiateur|count}}
et pour 1 radiateur donné, ces caractéristiques (ici pilote):
rad1.pilote: {{ states.sensor.test_json_command_line.attributes.radiateur.rad1.pilote }}
MAIS je n’arrive pas à gérer une itération dans l item JSON que je cherche.
Dans le WUI TEMPLATE, si je fais:
{% set my_test_json = {"zone":"bureau","capteur":"bureau_th","radiateur":{"rad1":{"nom":"bureau1","pilote":"1","puiss":"1000","priorite":"10"},"rad2":{"nom":"bureau2","pilote":"0","puiss":"1500","priorite":"10"}}} %}
JSON en entier: {{my_test_json}}
-------------- exploration json :
zone: {{ my_test_json.zone }}
radiateur: {{ my_test_json.radiateur }}
radiateur count: {{ my_test_json.radiateur|count }}
rad1: {{ my_test_json.radiateur.rad1 }}
rad1.pilote: {{ my_test_json.radiateur.rad1.pilote }}
-------------- iterations sur radiateur
{% set rad_nb= my_test_json.radiateur|count -%}
{% for x in range(0,rad_nb) -%}
{# avec des items du type rad1, rad2... on reconstruit le nom litteral -#}
nom rad {{x}} === {{ my_test_json["radiateur"]['rad'~(x+1)]['nom']}}
pilote rad {{x}} === {{ my_test_json["radiateur"]['rad'~(x+1)]['pilote']}}
puissance rad {{x}} === {{ my_test_json["radiateur"]['rad'~(x+1)]['puiss']}}
priorite rad {{x}} === {{ my_test_json["radiateur"]['rad'~(x+1)]['priorite']}}
{# reconstruction du nom #}
{% endfor %}
j ai les bonnes valeurs (y compris dans la boucle en incluant un indice dans le nom recherché):
JSON en entier: {'zone': 'bureau', 'capteur': 'bureau_th', 'radiateur': {'rad1': {'nom': 'bureau1', 'pilote': '1', 'puiss': '1000', 'priorite': '10'}, 'rad2': {'nom': 'bureau2', 'pilote': '0', 'puiss': '1500', 'priorite': '10'}}}
-------------- exploration json :
zone: bureau
radiateur: {'rad1': {'nom': 'bureau1', 'pilote': '1', 'puiss': '1000', 'priorite': '10'}, 'rad2': {'nom': 'bureau2', 'pilote': '0', 'puiss': '1500', 'priorite': '10'}}
radiateur count: 2
rad1: {'nom': 'bureau1', 'pilote': '1', 'puiss': '1000', 'priorite': '10'}
rad1.pilote: 1
-------------- iterations sur radiateur
nom rad 0 === bureau1
pilote rad 0 === 1
puissance rad 0 === 1000
priorite rad 0 === 10
nom rad 1 === bureau2
pilote rad 1 === 0
puissance rad 1 === 1500
priorite rad 1 === 10
ca marche parfaitement en test, en direct avec le WUI TEMPLATE,
MAIS impossible de transposer la syntaxe pour le sensor , alors que:
par exemple
{{states.sensor.test_json_command_line.attributes.radiateur.rad1}}
donne bien
{'nom': 'bureau1', 'pilote': '1', 'puiss': '1000', 'priorite': '10'}
D ou ma question : quelle est la bonne syntaxe pour faire en yaml la meme chose qui fonctionne sur le WUI TEMPLATE ?
Merci
PS dans le titre ancienne et nouvelle syntaxe, j ai lu que la synataxe du style:
{{states.sensor.test_json_command_line.attributes.zone}}
devait etre abandonnée au profit de:
{{state_attr('sensor.test_json_command_line','zone')}}
mais je ne trouve pas d exemple pour avoir le niveau inférieur avec ce type de syntaxe:
{{state_attr('sensor.test_json_command_line','radiateur.rad1')}}
renvoie un erreur
d ou la deuxieme question comment traduire l’ancienne syntaxe par la nouvelle ?
EDIT 2022-11-20
sur le forum HA US j ai trouvé comment passer d’une syntaxe à l autre.
Je reproduis ici, si ça peut éviter à d’autres plusieurs heures de recherche:
{{ state_attr('sensor.test_json_command_line', 'radiateur').rad1 }}
{{ state_attr('sensor.test_json_command_line', 'radiateur').rad1.pilote }}
est donc équivalent à:
{{states.sensor.test_json_command_line.attributes.radiateur.rad1}}
{{states.sensor.test_json_command_line.attributes.radiateur.rad1.pilote}}
EDIT 2
la solution est la:
avec:
{% set rads = state_attr('sensor.test_json_command_line','radiateur') %}
{% for rad in rads.values() %}
{{ rad }}
{% endfor %}
on énumère les valeurs de « radiateur »
on peut avoir les sous valeurs, avec:
{% set rads = state_attr('sensor.test_json_command_line','radiateur') %}
{% for rad in rads.values() %}
{{ rad.pilote }}
{% endfor %}
Voilà si ça peut aider quelqu’un.
PS (Admin)
comment marquer RESOLU ?