Search in list from state

Hi,

I use a rest sensor to retrieve a list but I cannot search in this list. I can if I write this list manually.
Here is the output of my template.

Search in list from state
{% set mystatelist = states.sensor.anniversaires.state %}
{{ mystatelist }}
{{ mystatelist.0 }}

Search in list from variable
{% set myvariablelist = {'event1': 'Anniversaire', 'date': '2021-06-04'},{'event2': 'Anniversaire', 'date': '2021-06-05'},{'event3': 'Anniversaire', 'date': '2021-06-08'}%}
{{ myvariablelist }}
{{ myvariablelist.0 }}
Search in list from state
{'event1': 'Anniversaire', 'date': '2021-06-04'},{'event2': 'Anniversaire', 'date': '2021-06-05'},{'event3': 'Anniversaire', 'date': '2021-06-08'}
{

Search in list from variable
({'event1': 'Anniversaire', 'date': '2021-06-04'}, {'event2': 'Anniversaire', 'date': '2021-06-05'}, {'event3': 'Anniversaire', 'date': '2021-06-08'})
{'event1': 'Anniversaire', 'date': '2021-06-04'}

Am I doing something wrong ?

A list should look like this: ["a", "b", "c"]. None of your examples is a list: the manually-written one has turned into a Python tuple — a bit like a list but in parentheses ("a", "b", "c") and the indexing does work.

You should have written it like this:

{% set myvariablelist = [{'event1': 'Anniversaire', 'date': '2021-06-04'},{'event2': 'Anniversaire', 'date': '2021-06-05'},{'event3': 'Anniversaire', 'date': '2021-06-08'}] %}

What does states('sensor.anniversaires') return? How about states('sensor.anniversaires')[0]?

{{ states('sensor.anniversaires') }}

returns

[{'event1': 'Anniversaire', 'date': '2021-06-04'},{'event2': 'Anniversaire', 'date': '2021-06-05'},{'event3': 'Anniversaire', 'date': '2021-06-08'}]

but

{{ states('sensor.anniversaires')[0] }}

returns

[

Thanks for your help.

Of course: it’s a string (like all sensor states), trying to represent a JSON object but uses single quotes rather than double. Try this:

{{ (states('sensor.anniversaires').replace("'",'"')|from_json)[0] }}

This takes the state string, replaces all the single quotes with doubles, converts to JSON, then reads the first item.

1 Like

It works, thanks !

1 Like